К обычному разбору
Тренировка по собеседованиюТехническое собеседованиеСамокат2025-07-29

Самокат RecSys ML System Design: TikTok-like лента видео с товарами

Идите сверху вниз: сначала попробуйте сами, затем откройте разбор. Если шаг с кодом, пишите решение прямо здесь и запускайте проверки на странице.

Шагов
6
Вопросов
6
Задач
0
1Кейс35 мин

Спроектировать рекомендательную ленту видео с товарами

В 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-итерацию.
2Кейс12 мин

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 даст датасет для следующего шага.
3Вопрос12 мин

Какие события логировать для обучения 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 хотя бы кратко.
4Вопрос15 мин

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.
5Кейс15 мин

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 может быть лучше.
6Вопрос15 мин

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, а не фиксированное число дней.