Спроектировать рекомендательную ленту видео с товарами
В e-commerce приложении запускается TikTok-like лента видео на главной. К каждому видео привязаны товары, видео около 1500 и живут 1-2 месяца. Истории по новой поверхности нет. Как спроектировать систему рекомендаций?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Начать с цели и ограничений, запустить offline MVP с простым ранжированием и exploration, залогировать события, затем обучать ranker и проверять через A/B.
Подробный разбор
Хороший дизайн начинается не с модели, а с product objective: GMV/profit, discovery non-food ассортимента, guardrails по заказам и UX. Для 1500 видео можно на первом этапе скорить всех кандидатов offline и хранить top-N на пользователя или сегмент. MVP строится на popularity/GMV/маркетинговом приоритете, свежести и availability, но часть трафика нужно оставить под exploration.
После запуска нужно собрать impression logs, позицию, user context, video/product features и downstream-события: open, watchtime, переход к товарам, add-to-cart, purchase, attributed GMV. Следующая итерация - pointwise/pairwise ranker, diversity, frequency caps, freshness и fallback для новых пользователей.
Типичные ошибки
- Начинать со сложной нейросети без бизнес-метрики.
- Не логировать показы и позицию, а потом строить смещенный датасет.
- Оптимизировать только CTR или watchtime без связи с покупками и маржой.
Как сказать на собеседовании
- Сначала проговори assumptions: candidate count, lifetime видео, objective, latency.
- Раздели MVP, сбор данных и следующую ML-итерацию.
MVP без истории взаимодействий
Какой baseline запустить для новой видео-ленты, если по ней еще нет кликов и покупок?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Использовать popularity/GMV/content-based baseline с фильтрами доступности и свежести, обязательно добавить controlled exploration.
Подробный разбор
Для первого запуска можно ранжировать видео по агрегированному потенциалу привязанных товаров: GMV, маржа, популярность, availability, маркетинговый приоритет, свежесть и категория. Если продуктовая цель - discovery нового non-food ассортимента, полезно задать квоты или boosts на нужные категории.
Exploration нельзя оставлять случайностью без логики: часть позиций можно отдавать epsilon-greedy, rotation по категориям или свежему контенту. Это снижает popularity bias и дает данные для обучения следующего ranker.
Типичные ошибки
- Показывать всем один и тот же top.
- Не учитывать availability товаров.
- Не разделять editorial rules и ML-score.
Как сказать на собеседовании
- Назови baseline за минуту.
- Сразу объясни, как этот baseline даст датасет для следующего шага.
Какие события логировать для обучения ranker
После запуска MVP какие события и признаки нужно собирать, чтобы обучить модель ранжирования user-video?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Логировать impression, позицию, контекст, click/open, watchtime, swipe, переход к товарам, add-to-cart, purchase и attributed GMV.
Подробный разбор
Единица датасета - показ конкретного video candidate пользователю в конкретном request context. Нужны user_id, video_id, позиция, timestamp, источник ранжирования, признаки пользователя, видео, товаров и контекста на момент показа. Labels строятся в окнах: click, dwell/watchtime, product-list open, add-to-cart, purchase, GMV/profit.
Важно хранить именно serving-time features, иначе легко получить leakage. Негативами должны быть показанные, но не выбранные видео, а не все непоказанные кандидаты.
Типичные ошибки
- Считать непоказанные видео негативами.
- Забыть position bias.
- Не определить attribution window.
Как сказать на собеседовании
- Разделяй proxy labels и business labels.
- Упомяни exposure/position bias хотя бы кратко.
Pointwise, pairwise и listwise ранжирование
Сравни pointwise, pairwise и listwise подходы для ранжирования видео в рекомендательной ленте.
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Pointwise предсказывает score для user-item, pairwise учит относительный порядок пар, listwise оптимизирует качество целого списка.
Подробный разбор
Pointwise проще всего запустить: модель предсказывает вероятность click/purchase или expected GMV для пары user-video. Pairwise ближе к ранжированию, потому что учит, какой объект должен быть выше другого, но требует генерации пар и hard negatives. Listwise лучше соответствует top-K метрикам, но сложнее в реализации и стабильности.
Практически часто начинают с pointwise GBDT/NN, сравнивают offline по NDCG/MAP/Recall@K и только потом усложняют loss, если есть качество и масштаб для этого.
Типичные ошибки
- Говорить, что pairwise всегда лучше.
- Не учитывать стоимость пар.
- Смешивать loss и метрику.
Как сказать на собеседовании
- Дай tradeoff: простота, стоимость, качество.
- Привяжи выбор к масштабу и доступным labels.
Offline batch vs online inference в RecSys
Модель ранжирования готова. Как вывести ее в прод: offline batch или online inference?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Для 1500 видео рационален offline scoring с хранением top-N; online inference нужен при высокой свежести фичей или сложной персонализации в момент запроса.
Подробный разбор
Offline путь: регулярный job считает рекомендации, кладет user_id -> list(video_id, score) в Redis/Postgres/feature store, а API быстро отдает список с fallback. Online путь: сервис получает user/context, собирает свежие фичи, скорит модель и отвечает в latency budget.
В обоих вариантах нужны Docker/CI, orchestration, мониторинг freshness, coverage, latency, errors, data/model drift и fallback на baseline при пустом ответе или деградации сервиса.
Типичные ошибки
- Не назвать SLO.
- Не описать fallback.
- Не мониторить freshness и coverage.
Как сказать на собеседовании
- Начни с требований latency/RPS/freshness.
- Объясни, почему для малого candidate set batch может быть лучше.
A/B-тест и бизнес-метрики видео-ленты
Как проверить, что новая рекомендательная лента работает, и как понять, сколько держать A/B-тест?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Primary metric: incremental GMV/profit или attributed purchases; proxy: CTR, переходы к товарам, add-to-cart, watchtime; длительность считать через MDE, variance, traffic и power.
Подробный разбор
Нужно задать unit randomization, attribution window и guardrails: latency, retention, order conversion, cannibalization основного заказа. Если GMV долго созревает, прокси-метрики помогают диагностировать, но финальное решение нужно связывать с business metric.
Длительность теста не выбирается как фиксированная неделя. Она зависит от baseline metric, ожидаемого MDE, alpha, power, дисперсии, трафика и сезонности. Минимально полезно покрыть полный недельный цикл.
Типичные ошибки
- Смотреть только watchtime.
- Останавливать тест при первом p-value < 0.05.
- Не учитывать cannibalization.
Как сказать на собеседовании
- Назови primary, proxy и guardrails.
- Про длительность отвечай через power/MDE, а не фиксированное число дней.