AI Cold Start Recommendation System

Recommendations for Brand-New Users

Design the part of a streaming service's recommender that serves people who just signed up and have no history yet, using sign-up context, a short onboarding step, careful exploration and the events of the first session.

Overview

A regular recommender learns from history: people who played what you played also liked this. A user who signed up a minute ago has no history, so that method has nothing to compare. This is the cold start problem. It matters because the first few sessions decide whether a new user stays, and a service pays to acquire every one of them.

The fix is not one model but a ladder of weaker signals, used in order as they appear: the context of the sign-up (country, language, device, the ad or page they came from), a short onboarding step where they pick a few titles, and then the plays and skips of the first session. Netflix's help center describes exactly this first step: new accounts and profiles are asked to choose a few titles they like to jump-start recommendations, the step is optional, and people who skip it start from a diverse and popular set of titles.

Questions to ask first

  • What kind of catalog? — A streaming service: 10 million tracks or titles, grouped into about 500 taste clusters
  • How many new users? — 1 million sign-ups a day, peak 3 times the average
  • What do we know at sign-up? — Country, language, device, sign-up channel, time of day; no age or gender
  • Is there an onboarding step? — Yes, optional: pick at least 3 items from a grid
  • How fast must picks react? — The next request after a play or skip reflects it
  • When is a user no longer new? — There is no switch; the regular model's share grows with history
  • How is success measured? — First-session plays and 7-day and 30-day return, in A/B tests

What you will be able to do

  • Explain why collaborative filtering fails for new users and list the signals that exist instead.
  • Design an onboarding step that learns a lot from a few taps, and a fallback for people who skip it.
  • Build a cohort prior with smoothing, and explore with Thompson sampling instead of always showing the most popular items.
  • Update a user's taste inside the first session and blend it into the regular model without a visible jump.
  • Measure the whole thing with experiments on new-user cohorts.

Key concepts

  • Cold start
  • Onboarding picks
  • Cohort prior
  • Bayesian smoothing
  • Explore and exploit
  • Thompson sampling
  • Contextual bandit
  • Session vector
  • Blending by history size
  • Diverse fallback

Functional requirements

  • Return a ranked list of items for a user with zero history, within the first request after sign-up
  • Offer an optional onboarding grid that covers many tastes, and record the picks
  • Build a starting profile from sign-up context: country, language, device, channel
  • Explore: reserve some slots to learn which kinds of items this user likes
  • Update the ranking after each play, skip or save in the same session
  • Blend smoothly into the regular recommender as history grows
  • Fall back to a diverse popular list when any signal or service is missing
  • Log each shown list with the strategy and the probabilities used, for training and experiments

Non-functional requirements

  • p99 latency of 200 ms for a recommendation request (a target we chose)
  • A play or skip visible to the next request in the same session
  • Always an answer: every failure degrades to the diverse popular list, never an empty screen
  • Each user stays in the same experiment group on every visit
  • No sensitive attributes (age, gender) used unless the user gave them for this purpose

Interview questions

  • Why does collaborative filtering fail for new users, and what do you use instead?
  • How do you design the onboarding step?
  • Why use a bandit instead of showing the most popular items for the cohort?
  • How do you update recommendations during the first session without retraining?
  • When does a user stop being cold, and how do you hand over?
  • How do you handle new items, not new users?
  • How do you evaluate a cold-start change?
  • What if the bandit stats or session store are unavailable?

Sign up free to read the full topic

More System Design topics

Start free on Cariara · Coding problems · System design studio