К обычному разбору
Тренировка по собеседованиюТехническое собеседованиеMrBit2026-03-23

MrBit: ML System Design

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

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

Как поставить задачу раннего VIP-прогноза

В casino-продукте sales-команде нужно как можно раньше понять, станет ли новый игрок VIP по депозитам и обороту. Как сформулировать ML-задачу, target, горизонт прогноза и бизнес-действие?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Сначала фиксируем бизнес-действие: кого sales будет обрабатывать и когда. Target можно определить как достижение VIP-threshold по депозитам/обороту за окно, например 30/60/90 дней, а модель запускать на ранних срезах жизни игрока.

Подробный разбор

Хороший ответ начинается не с модели, а с решения, которое будет принято по score. Например: sales-команда получает список новых игроков с высокой вероятностью стать VIP и решает, кому дать персональное внимание, бонус или коммуникацию. Поэтому нужны ограничения: как рано нужен прогноз, сколько клиентов sales может обработать, какая цена false positive и false negative.

Target можно задать как бинарную классификацию: игрок достигнет публичных VIP-threshold по депозитам и обороту за следующие 30/60/90 дней. Важно зафиксировать момент наблюдения: прогноз на 1-й, 3-й, 7-й день после регистрации или после первого депозита. Для каждого момента строим срез признаков только из прошлого.

Метрики лучше связывать с action: precision@K для команды продаж, recall по будущим VIP, lift относительно baseline, calibration score, business uplift от обработки top сегмента. ROC-AUC сам по себе слабый ответ, потому что sales работает с ограниченной очередью клиентов.

Типичные ошибки

  • Не разделить окно наблюдения и окно target.
  • Оптимизировать только ROC-AUC без связи с capacity sales-команды.
  • Использовать признаки из будущего: итоговый оборот, поздние депозиты, постфактум VIP-статус.

Как сказать на собеседовании

  • Сразу нарисуй timeline: регистрация -> первые N дней признаков -> прогноз -> VIP outcome через 90 дней.
  • Скажи, что модель должна помогать конкретному бизнес-действию, а не просто предсказывать ради предсказания.
2Кейс10 мин

На какой день VIP-прогноз становится достаточно надежным

Для нового игрока нужно понять, когда уже можно доверять прогнозу VIP-статуса. Как оценить, на каком дне жизни клиента модель дает достаточно полезный сигнал?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Нужно обучить/оценить модели на разных observation windows: 1 день, 3 дня, 7 дней, 14 дней. Для каждого окна смотреть precision@K, lift, calibration и business value, а потом выбрать самый ранний момент, где сигнал окупает действие.

Подробный разбор

Практичный подход - сделать несколько временных срезов датасета. Для каждого игрока формируем признаки, доступные только к моменту T: через 1 день после регистрации, через 3 дня, через 7 дней, через 14 дней. Target один и тот же: станет ли игрок VIP в будущем окне.

Дальше сравниваем качество по T. Если на 1-й день precision@top-100 слишком низкий, sales потратит ресурс зря. Если ждать 30 дней, можно упустить момент раннего воздействия. Поэтому выбираем не максимальное качество, а лучший trade-off между ранностью и полезностью.

Важно проверять calibration: если модель дает score 0.8, примерно 80% таких игроков должны стать VIP. Для action-листа часто важнее lift в top-K и expected value: сколько будущих VIP мы ловим на один контакт sales-команды.

Типичные ошибки

  • Оценить модель только на одном горизонте.
  • Выбрать самый поздний горизонт, потому что там выше AUC.
  • Не проверить калибровку score и полезность top-K.

Как сказать на собеседовании

  • Проговори кривую качества от дня наблюдения.
  • Отдельно назови capacity sales-команды и precision@K.
3Кейс10 мин

Какие ранние признаки отличают потенциального VIP

Игрок только пришел в casino-продукт. Какие признаки можно собрать в первые дни, чтобы отличить потенциального VIP от обычного игрока?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Ранние признаки: первый депозит, средний депозит, скорость повторного депозита, оборот, размер ставок, число сессий, регулярность, разнообразие игр, тренд активности, device/geo/channel и реакция на бонусы.

Подробный разбор

Фичи лучше группировать по смыслу. Деньги: первый депозит, сумма депозитов за первые N часов/дней, средний депозит, время до второго депозита, отношение депозита к ставкам, withdrawal поведение. Активность: число сессий, длительность, частота возвращения, recency/frequency, рост или спад активности.

Игровые паттерны: количество игр, типы игр, доля high-volatility игр, средний размер ставки, оборот, распределение ставок, возвращение к конкретным играм. Маркетинг и контекст: канал привлечения, бонусы, страна/регион, устройство, язык, платежный метод, KYC-сигналы, если их можно использовать законно и этично.

Важно не превращать список в leakage. Если VIP определяется оборотом за 90 дней, нельзя брать признаки, которые уже содержат будущий 90-day turnover. Все фичи должны быть доступны на момент scoring.

Типичные ошибки

  • Назвать только демографию и забыть про поведение в продукте.
  • Использовать будущие агрегаты, которые недоступны на момент прогноза.
  • Не учитывать, что VIP может быть редким классом и признаки должны работать для top-K.

Как сказать на собеседовании

  • Разбей признаки на деньги, активность, игровые паттерны и acquisition context.
  • Каждый раз уточняй: доступна ли фича в момент раннего скоринга.
4Кейс13 мин

Как собрать feature pipeline, batch scoring и мониторинг

Данные casino-продукта лежат в хранилище и приходят через очередь сообщений. Нужно регулярно обновлять признаки и скорить пользователей. Как спроектировать production pipeline?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Нужен event ingestion из очереди, слой агрегатов/feature store, регулярный batch scoring, таблица score/history для sales и мониторинг freshness, ошибок пайплайна, drift и бизнес-метрик.

Подробный разбор

Архитектуру удобно разложить на слои. Первый слой - события: регистрация, депозит, ставка, сессия, бонус, withdrawal. Они попадают в очередь и далее в raw/event storage. Второй слой - feature aggregation: регулярные jobs считают признаки за окна 1h/24h/7d, обновляют feature table и контролируют freshness.

Третий слой - scoring. Для такой задачи часто достаточно batch inference раз в час или раз в ночь, если бизнес-действие не real-time. Scoring job берет актуальные признаки, применяет модель, пишет score, сегмент, версию модели и timestamp в таблицу для CRM/sales. Если нужен near-real-time, можно добавить online scoring для новых важных событий, например крупного первого депозита.

Мониторинг: статус jobs, latency/freshness фичей, процент пропусков, schema changes, распределение score, drift ключевых признаков, размер top-K очереди, precision по отложенным label, business uplift от контактов. Также нужны backfill, версионирование feature definitions и rollback модели.

Типичные ошибки

  • Описать только модель и не сказать, где живут фичи и score.
  • Не мониторить freshness и падения jobs.
  • Не хранить версию модели и timestamp скоринга.

Как сказать на собеседовании

  • Говори слоями: events -> features -> scoring -> action -> monitoring.
  • Отдельно упомяни, что batch может быть достаточно хорош, если sales действует не мгновенно.