NelworksNelworks
Season 2

S2-EP02: Recommender System Feedback Loops and Popularity Bias

Understanding recommender system feedback loops and popularity bias. Learn about filter bubbles, recommendation algorithms, and how systems amplify existing preferences.

Tweet coming soon
Look at the engagement metrics, Kurumi!
I see. Your users are very... focused.
My Collaborative Filtering algorithm is crushing it! The Click-Through Rate (CTR) is at an all-time high!
Everyone loves 'Blockbuster Explosion 4.'
You have 10,000 movies in your library. Why is the algorithm only recommending *one*?
Because the dot product said so! High score means High relevance!
You didn't build a recommendation engine. You built a **Propaganda Machine**.
You are suffering from **The Matthew Effect**.
Matthew?
'For to everyone who has will more be given.' The Rich Get Richer.
You used Matrix Factorization (like SVD or ALS). You decompose the matrix into Latent Factors.
This column is dense. It has a lot of signal. The model learns its vector perfectly.
This column is empty. The model has no idea what this movie is.
So when it calculates the score, the 'Confidence' for the popular movie crushes the unknown movie.
But that's what people want! They clicked it!
They clicked it because it was **The Only Thing You Showed Them**.
This is the **Feedback Loop**.
You are verifying your own bias. It's a self-fulfilling prophecy.
And it gets worse. You are killing your **Inventory**.
If you never recommend the niche items, they never get clicks.
If they never get clicks, they never get data.
If they never get data, the model predicts 'Zero Interest' forever.
You are creating an **Algorithmic Monoculture**.
I'll fix it! I'll just randomly shuffle the recommendations!
No! No! If you show random junk, users will churn. You need **Smart Exploration**.
You need to treat this like a **Multi-Armed Bandit**.
A bandit? Like a robbery?
You have many movies (Arms). Some pay out often (Popular). Some are unknown (Niche).
A greedy algorithm (what you have) only pulls the lever that paid out last time.
It works. But maybe the 'Niche' lever spits out diamonds. You'll never know if you don't pull it.
You need to sacrifice some immediate CTR (Exploit) to gather information (Explore).
How do I code 'Curiosity'?
The 'Hat' is the uncertainty. UCB adds the hat to the score.
It says: 'This movie might be bad, or it might be amazing. The uncertainty gives it a bonus.'
So we give the underdog a chance because we *don't know*?
Yes. We are optimistic in the face of uncertainty.
Switching from pure `SVD` to a contextual bandit approach.
Adding an **Exploration Term** to the ranking function.
Noooo! My CTR is dropping! It went down 2%!
Wait. Look at the **Catalog Coverage**.
User 42 just clicked the Cooking Show.
Your model just learned something *new* about User 42. They aren't just an Action fan. They like food.
You traded short-term clicks for **Long-Term Signal**.
Now your matrix isn't just a copy of the billboard charts. It actually reflects the user.
The CTR is climbing back up... slower this time.
But this time, it's real engagement. Not just muscle memory.
A good recommender system doesn't just give you what you want. It gives you what you didn't know you wanted.
Okay. 1. De-bias the training data (Inverse Propensity Weighting).
2. Add Bandit exploration.
3. Monitor 'Diversity' metrics, not just CTR.
And for the love of god, stop training on your own output without a correction factor.
That's how you get AI that sounds like an echo chamber.
Hey, this is actually good.
Discovery. It's a beautiful thing.
I'm going to watch 'Sharknado.'
What? After all that talk about high culture?
I'm an outlier. Don't try to model me.