ML Systems Lab Open interactive version →
Advanced 24 min read feedback looppopularity biasIPWexposure biasRecSys

Feedback Loops & Popularity Bias

Exposure bias, self-reinforcing popularity, IPW / randomisation, echo chambers

A recommender doesn't just observe behavior — it *creates* the data it later trains on. You can only click what you were shown, and what you were shown was chosen by yesterday's model. So the logs aren't a neutral sample of preference; they're a sample of preference *conditioned on the old policy's choices*. Train naively on them and the system teaches itself to keep doing what it already did.


Popularity self-reinforces into a rich-get-richer spiral. A popular item is shown more → gets more clicks (partly *because* it was shown more, not because it's better) → the model reads those clicks as quality → shows it even more. An illustrative sketch, not a derived computation: item X and item Y are equally good, but X starts with 2× the exposure. X collects ~2× the clicks, the model scores it higher, so it gets even more exposure next round — no formula here fixes the exact multiple, it just keeps compounding cycle over cycle (a 2× exposure head start can plausibly become 3×, then 5×, and climbing) even though true quality never differed. The long tail starves.


Exposure bias is the formal name; IPW is the standard correction. Inverse-Propensity Weighting reweights each logged example by 1/P(shown) — an item shown 10% of the time counts 10× when it *is* clicked, an item shown 90% of the time counts ~1.1×. This mathematically un-does the exposure imbalance so the model estimates *relevance* rather than *what got shown*. IPW needs the logging propensities (the probability each item was shown), which is why serious systems log them, and it has high variance when propensities are tiny — so it's paired with randomization: a small fraction of traffic serves items uniformly (or ε-greedy: serve randomly with probability ε, otherwise serve the current best) to inject unbiased exposure the model can learn from.


Left uncorrected, the loop produces filter bubbles and echo chambers. A user shown one viewpoint clicks it → the model infers preference → shows more of it → the user's world narrows, and the *narrowing itself* is misread as stronger preference. The fix is the same triad as popularity: propensity correction to de-bias training, plus deliberate exploration/diversity injection to keep feeding the model signal it would otherwise never collect.

Key points

Takeaway

A recommender manufactures its own training data — logs are conditioned on the old policy — so popularity self-reinforces (exposure → clicks → score → more exposure) and users drift into echo chambers; the correction is inverse-propensity weighting (reweight by 1/P(shown)) to de-bias training, paired with deliberate randomization/exploration to inject the unbiased signal IPW needs.

Recap

Check your understanding

Q1. Two items are truly equally relevant, but item X was historically shown twice as often as item Y. Trained on raw click logs, the model scores X well above Y. What is this, and what breaks the cycle?

Q2. A team wants to apply inverse-propensity weighting to de-bias its ranker. What must it have logged, and what's IPW's main failure mode?

Q3. Select the two correct statements about users converging to a narrow topic while per-user engagement rises but catalog coverage collapses.

Try it interactively

ML Systems Lab is a free interview-prep platform for ML engineers — work through the full interactive module, quizzes, and drills.

Open ML Systems Lab →