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
- The recommender generates its own training data — logs are conditioned on the old policy, not neutral. You can only click what was shown; what was shown was yesterday's model's choice. Naive training on these logs reproduces the old policy rather than learning true preference.
- Popularity is self-reinforcing: exposure → clicks → higher score → more exposure. Two equally-good items diverge purely because one started with more exposure; the gap widens each cycle and the long tail starves. This is a systemic bias, not noise.
- IPW corrects exposure bias by reweighting each example by 1/P(shown). A rarely-shown item's clicks count more; a heavily-shown item's count less — recovering a relevance estimate instead of an exposure estimate. Requires logged propensities and has high variance when P(shown) is tiny.
- Randomization/exploration is the necessary partner to IPW. A small uniform/ε-greedy traffic slice injects unbiased exposure the model can't get from a pure-exploit policy — countering both popularity bias and echo-chamber narrowing at their source.
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
- A recommender manufactures its own training data: you can only click what you were shown, and what you were shown was yesterday's model's choice — so logs aren't a neutral sample of preference, they're preference *conditioned on the old policy*. Train naively 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* shown more, not better) → the model reads clicks as quality → shows it even more. Two equally-good items where one starts with 2× exposure diverge every cycle — an illustrative 2× → 3× → 5× exposure lead, not a derived formula — 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 clicked, one shown 90% counts ~1.1× — un-doing the exposure imbalance so the model estimates *relevance*, not *what got shown*. Requires logged propensities.
- IPW is high-variance when P(shown) is tiny (1/P blows up), so it's paired with randomization / ε-greedy exploration — a small traffic slice serving items uniformly injects unbiased exposure the model can learn from, keeping propensities bounded away from zero.
- Left uncorrected, the loop produces filter bubbles and echo chambers: a user shown one viewpoint clicks it → the model infers preference → shows more → the world narrows, and the *narrowing itself* is misread as stronger preference. Short-term engagement rises while coverage collapses. Same fix as popularity: propensity de-biasing plus deliberate exploration/diversity injection.
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?
- A) Label noise — Y's click labels are simply noisier; collecting more data on Y should let the scores equalize on their own.
- B) Exposure/popularity bias — X's extra clicks partly come from extra exposure; IPW plus randomized exposure recovers true equality.
- C) A calibration error specific to the click head; re-calibrating that head alone should make X and Y's scores converge.
- D) Overfitting to X's particular input features; adding dropout to the relevant layers should make the popularity bias disappear entirely.
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?
- A) Only the raw clicks are needed; IPW infers propensities directly from click frequency, and its main issue is slow training.
- B) It needs the item embeddings only; IPW's failure mode is that it actually increases popularity bias further over time.
- C) It must have logged P(item shown) per impression; IPW's main failure mode is high variance when propensities are tiny.
- D) It needs editorial relevance labels collected separately; IPW's main weakness is that it can't be computed online.
Q3. Select the two correct statements about users converging to a narrow topic while per-user engagement rises but catalog coverage collapses.
- A) This is an echo-chamber feedback loop: the model reads the narrowing itself as stronger preference and narrows further.
- B) The right fix is propensity de-biasing (IPW) combined with deliberate exploration or diversity injection into serving.
- C) This is a genuine win — rising per-user engagement simply means the model learned individual preferences more accurately.
- D) This is an ANN index staleness problem specifically, and rebuilding the retrieval index alone should make coverage recover.
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 →