Skip to content

Jouzou-M/algorithmic-meritocracy

Repository files navigation

From Algorithmic Meritocracy to User Agency

Causal Decomposition and User-Controlled Recommendations

Python DoWhy Imperial License

Recommendation algorithms claim to surface the best content. This paper formally tests that claim — and proposes a remedy.

Author: Mohamad El Jouzou — MSc Artificial Intelligence, Imperial College London Course: ELEC70122 — Machine Learning for Safety-Critical Decision Making Paper: paper/main.pdf (ICML-format, 9 pages + appendix)


TL;DR

Across 1,000 simulated creators × 10,000 users × 100 timesteps:

Finding Number
Engagement variance uniquely attributable to content quality 7–18%
Variance absorbed into the inseparable algorithm-quality shared component 63–73%
Confounding bias growth over the feedback loop ($t{=}5 \to t{=}99$) 0.37 → 1.84 (≈5×)
Best platform intervention (visibility floor) +7.8% meritocracy
Worst "fairness" intervention (Gini constraint) −12.2% meritocracy
User-tunable algorithm weights vs. platform default +26.6% rank correlation
Adoption needed to capture 68% of those gains just 5% of users

The headline: the majority of what looks like merit is manufactured by the feedback loop, not earned. And — counterintuitively — the cleanest fix isn't a fairness constraint imposed by the platform. It's giving each user a slider.

Variance decomposition


The Problem

A recommendation algorithm allocates visibility. Visibility produces engagement. Engagement updates the algorithm's "history" feature. History allocates more visibility. The loop conflates two distinct causal pathways:

  • Quality pathway — users genuinely prefer better content
  • Visibility pathway — the algorithm amplifies what it previously promoted

Standard ML tools cannot tell these apart from observational engagement data, because they are confounded by the algorithm itself. This is a textbook safety-critical ML failure mode (objective misspecification + distribution shift + confounding, à la Lectures 1, 7, 9 of Imperial's ELEC70122).


What This Project Does

1. Builds an agent-based simulation with known ground-truth quality

Because we control the simulation, we know each creator's true quality — something no observational dataset can give us. This lets us measure the gap between "what the algorithm rewards" and "what the algorithm should reward" directly.

  • 1,000 creators with drawn quality + power-law initial followings
  • 10,000 users with category preferences and (in later experiments) heterogeneous multi-objective utilities
  • A simplified Instagram-Reels-style ranker with tunable weights on history, early engagement, and quality signal: score = α·history + β·early_engagement + γ·quality + noise
  • 100-timestep feedback loop with 20 random seeds per configuration, 95% CIs throughout

2. Causally decomposes engagement into earned vs. manufactured components

Three complementary methods from Pearl-style causal inference:

Method Tool What it answers
Covariate adjustment (partial R²) OLS at each timestep How much variance is uniquely explained by quality vs. visibility vs. history?
Inverse Propensity Weighting (IPW) DoWhy / EconML What is the average treatment effect of visibility on engagement, stripped of confounding?
Ground-truth comparison Direct from sim Spearman ρ between true quality and engagement — the meritocracy ratio

3. Tests platform interventions and finds counterintuitive trade-offs

Intervention Δ Meritocracy Δ Engagement
Visibility floor (min 50 impressions) +7.8% −3.7%
Exploration bonus (ε=0.15) +4.8% −1.7%
History dampening −10.6% +2.9%
Gini constraint −12.2% +5.5%

A Gini constraint sounds fair and makes things worse. Why? Because compressing the visibility distribution doesn't restore the quality signal — it just redistributes the manufactured engagement.

Interventions

4. Proposes user agency as the fix that platform design cannot deliver

The novel contribution: instead of the platform choosing the algorithm's weights (α, β, γ), let each user pick their own.

  • Heterogeneous user weights Pareto-dominate the platform default, improving Spearman ρ by +26.6% with negligible engagement loss
  • Even 5% adoption captures 68% of the achievable meritocracy gain — non-adopters benefit through positive externalities
  • Naïve adaptation produces a homogenisation paradox (all users converge to identical weights within 14–57 timesteps), but realistic multi-objective users (engagement + novelty + niche preference, with exposure-based boredom) maintain diverse preferences naturally at equilibrium

User agency turns out to be self-sustaining, but only when users actually have different goals — which, empirically, they do.

Pareto frontier


Repo Structure

.
├── paper/main.pdf              # The paper itself — start here
├── paper/main.tex              # LaTeX source (ICML 2026 style)
├── src/
│   ├── engine/                 # Simulation core (state, feedback loop, user adaptation)
│   ├── models/                 # Creator / Content / User entity models
│   ├── algorithm/              # Ranker (weighted_score) + base interface
│   ├── analysis/               # IPW, regression, ground-truth metrics, quality definitions
│   ├── experiments/            # E1 (static), E2 (archetypes), E3 (adoption), E4 (adaptive), interventions, sweeps
│   └── visualization/          # Paper figure generators
├── tests/                      # pytest unit tests
├── notebooks/                  # Exploratory analysis
├── run_all.py                  # Reproduce every experiment end-to-end
├── run_e2.py / run_e4.py       # Run specific experiments
└── pyproject.toml              # Deps: numpy, pandas, scikit-learn, dowhy, econml, matplotlib

Reproducing the Results

git clone https://github.com/Jouzou-M/critical-decision-paper.git
cd critical-decision-paper
pip install -e .

# Reproduce every experiment (E1–E4 + interventions + sweeps)
python run_all.py

# Or run them individually
python run_replication.py        # Mansoury et al. CIKM 2020 baseline
python run_causal_analysis.py    # Covariate adjustment + IPW
python run_experiments.py        # Platform interventions
python run_e2.py                 # User archetype heterogeneity
python run_e4.py                 # Realistic adaptive users

All experiments use 20 seeds (42–61) with 95% CIs reported throughout.


Connection to the ELEC70122 Syllabus

Lecture Used in this project
L1 — Objective misspecification Algorithm optimises engagement (proxy), not quality (true objective)
L3 — Distribution shift Feedback loop creates self-reinforcing covariate shift; calibration of "quality estimates" degrades over time
L6 — Off-Policy Evaluation "What would engagement look like under a different ranker?" is an OPE question
L7 — Causal Inference Core method. Confounding, ATE/CATE, IPW, covariate adjustment
L9 — Robustness Algorithm uses history as a shortcut for quality — classic shortcut learning

Citation

@misc{eljouzou2026meritocracy,
  title  = {From Algorithmic Meritocracy to User Agency: Causal Decomposition and User-Controlled Recommendations},
  author = {El Jouzou, Mohamad},
  year   = {2026},
  note   = {MSc coursework, ELEC70122 Machine Learning for Safety-Critical Decision Making, Imperial College London},
  url    = {https://github.com/Jouzou-M/critical-decision-paper}
}

Selected References

  • Chaney, Stewart & Engelhardt (RecSys 2018) — How Algorithmic Confounding in Recommendation Systems Increases Homogeneity and Decreases Utility
  • Mansoury et al. (CIKM 2020) — Feedback Loop and Bias Amplification in Recommender Systems
  • Strauss, Yang & Mazzucato (UCL IIPP 2025) — Rich-Get-Richer? Platform Attention and Earnings Inequality
  • Salganik, Dodds & Watts (Science 2006) — MusicLab
  • Horvitz & Thompson (1952), Rosenbaum & Rubin (1983) — IPW foundations

Full bibliography in paper/references.bib.

About

Causal decomposition of recommender-system feedback loops + user-controlled algorithm weights. Imperial MSc Project.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages