Chapter 5 · Part 3
The new-user problem
Everything so far needs history. Collaborative filtering needs your co-likes; taste vectors need enough ratings to place your point. So what happens the moment you install an app and the system knows literally nothing about you? This is the cold-start problem, and it bites in three ways: new users, new items, and brand-new apps with no data at all.
Scroll to watch the strategy shift as the very first signals trickle in.
Zero interactions: collaborative methods have nothing to work with.
Bridging the gap with content
The escape hatch is to use information you have before any interactions: the content itself.
- Content-based filtering describes each item by its own features — tags, genre, the creator, text or audio analyzed by a model (often into embeddings). A new item can be recommended the instant it's uploaded, because you can match its features to what a user already likes — no co-likes required.
- Popularity / trending is the universal fallback for a new user: with no personal signal, "what's popular right now" is a surprisingly strong default.
- Onboarding shortcuts the cold start by asking — "pick a few topics you like" — manufacturing a little explicit signal up front.
Cold start never fully ends
Even a mature app faces it constantly: every new video, song and product starts cold, and needs content features (or a deliberate burst of exposure) to gather its first ratings. It's not a one-time hurdle but a steady-state fact of life — which is why almost every real system is a hybrid of collaborative and content-based methods.
def score(user, item, n_interactions, k=10):
alpha = n_interactions / (n_interactions + k) # 0 when new -> 1 with history
pop = popularity(item) # always available
pers = personalized(user, item) # needs history (CF / vectors)
return (1 - alpha) * pop + alpha * persWhere we're headed
We can now recommend to anyone, new or seasoned. But there's a sting in the tail. Every recommendation changes what you do next, which changes the next recommendation. Follow that loop far enough and you get filter bubbles. The finale: the loop you're in.