2 · The rating matrix & feedback types
Explicit ratings are gold but rare; implicit signals (clicks, plays) are abundant but ambiguous. How you model feedback changes everything downstream.
Feedback comes in two flavors: explicit (a deliberate rating — accurate but scarce) and implicit (a behavioral signal like a click or play — plentiful but noisy, with no true negatives). The type dictates the model and the metric.
Without this:
Treat implicit signals as if they were ratings (a non-click = a 1-star) and you'll punish items the user simply never saw — a classic, costly mistake.
The interaction matrix R can hold two very different kinds of signal, and confusing them is the #1 beginner mistake.
Explicit feedback is a deliberate judgment: a 1–5 star rating, a thumbs up/down, a review score. It's accurate (the user told you exactly how they feel) and signed (a low rating is genuine dislike). But it's scarce — most people rate almost nothing — and biased (people rate what they feel strongly about).
Implicit feedback is behavior you observe: a click, a play, a watch-time, a purchase, a dwell. It's abundant (every interaction is a signal) but ambiguous: a play might mean love or an accidental tap, and — crucially — a missing interaction is not a negative. The user might dislike that item… or might simply never have seen it. Implicit data has no true negatives, only positives and unknowns.
This asymmetry changes everything:
- Explicit → predict the rating value (a regression-flavored problem); evaluate with RMSE.
- Implicit → predict the ranking of items the user is likely to engage with (treat observed = positive, unobserved = weak/unknown negative); evaluate with ranking metrics (Chapter 5) and special losses like BPR (Chapter 6).
Below we build the same interactions as both an explicit matrix and an implicit (binarized) one, and measure the sparsity — the fraction of entries that are missing — which for real systems is routinely 99%+.
Python (in browser)
Explicit vs implicit feedback + the sparsity of the matrix. The 0s in implicit data are unknowns, not dislikes — the most common modeling trap.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
In implicit-feedback data (clicks, plays), what does a MISSING interaction (a 0) mean?
- Explicit feedback (ratings) is accurate, signed, but scarce → predict rating value, evaluate with RMSE.
- Implicit feedback (clicks/plays) is abundant but has NO true negatives → predict ranking, use ranking metrics/losses.
- Real interaction matrices are >99% sparse — the central difficulty recommenders must overcome.
Spotify/YouTube use implicit plays; MovieLens/Netflix-star datasets are explicit. The choice drives the entire model and metric stack.
If you remove it: Conflate the two and you optimize the wrong objective — e.g. RMSE on click data — and ship a recommender that ranks badly.