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
- AI Analytics Dashboard
- AI Anomaly Detection System
- AI Art Generation System
- AI Banking Chatbot
- AI Bot and Scalper Detection System
- AI Click Fraud Detection System
- AI Content Moderation at Scale
- AI Copilot System
- AI Data Quality and Monitoring System
- AI Delivery ETA Prediction System
- AI Driver-Rider Matching System
- AI Dynamic Pricing Engine
Start free on Cariara · Coding problems · System design studio