Собесов

Skytec Games — предсказание оттока на шагах туториала

ML / Data ScienceБинарная классификация и оценкаСложнаяMiddle

Условие

В мобильной игре после установки и запуска идёт туториал, состоящий из последовательных шагов. Данные — строки (user_id, datetime, step_number).

Гипотеза геймдизайнеров: если с высокой вероятностью предсказать шаг, на котором игрок уйдёт, и запустить альтернативное продолжение туториала с этого шага, мы избежим оттока и увеличим прохождение туториала.

Вопросы:

  1. Как бы вы решили задачу предсказания отвала игрока?
  2. Как оценить качество модели? Какой метод считаете оптимальным и почему?
  3. Опишите дизайн A/B-эксперимента для проверки гипотезы геймдизайнеров.

Решение

Подход

Это последовательная классификация: на каждом шаге туториала прогнозируем P(churn | history). Задача похожа на sequential models / survival analysis.

Ключевые моменты:

  1. Целевая переменная: «дошёл ли до следующего шага в течение Δt минут?». Нужен таймфрейм отсечки (5/15 минут).
  2. Features — последовательность шагов и время между ними.
  3. Очень несбалансированный класс: на первых шагах туториала уходят ~50% (стандартный D0 drop-off в мобайле), позже всё реже.

Реализация — задача предсказания

Признаки

Группа Примеры
Шаговые step_number; время между шагами; число попыток на step_n; cumulative time
Пользовательские source (organic/paid); platform; OS-version; geo
Поведенческие число действий за last_minute; pause_count; UI-jitter (если логируется)
Сегментные UTM, кампания UA, тип installation (re-install)

Архитектура моделей

BaselineLogReg / LightGBM на агрегированных признаках текущего шага. Простая, быстрая, объяснимая.

SequentialLSTM / Transformer на последовательности (step_t, time_since_last_step_t). Лучше учитывает динамику, но дольше обучается, сложнее интерпретируется.

Survival analysis — Cox proportional hazards с time-varying covariates. Натурально для «когда уйдёт?».

Реализация — оценка качества

Метрики и почему:

Метрика Зачем
ROC-AUC общая сепарабельность классов; устойчива к несбалансированности
PR-AUC для редкого позитивного класса (на поздних шагах позитив = «не ушёл», class imbalance)
Recall на пороге precision = 0.5 бизнес-сторона: сколько уходящих ловим, не теряя качество
Calibration вероятности должны быть «честные» (если модель говорит 0.7, то в 70% случаев действительно уходят); важно для решений
Lift @ top 10% экономика: на 10% «риск-уходящих» применяем альтернативный туториал — насколько они правда чаще уходят

Оптимально: ROC-AUC (общий обзор) + PR-AUC (редкие классы) + lift @ top-10% для выбора порога. Calibration — для решений (Platt scaling / isotonic).

Валидация

  • Time-based split: обучаемся на установках до даты X, валидируемся на установках после. Не random — это утечка.
  • Cross-validation внутри train: time-series CV (rolling forecast).
  • Out-of-sample test set: последний месяц установок не трогаем.

Реализация — A/B-тест гипотезы геймдизайнеров

Гипотеза: альтернативный туториал на «риск-шагах» снижает churn.

Дизайн:

  1. Юнит: новый игрок, sticky randomization.
  2. Группы:
    • A (контроль): всем стандартный туториал.
    • B (тест): модель на каждом шаге считает P(churn). Если P(churn) > τ — игрок видит альтернативный туториал; иначе — стандартный.
    • Альтернативно — третья группа C: «всем альтернативный туториал», чтобы отделить эффект «модели угадала» от «альтернативный туториал просто лучше».
  3. Decision-метрика: % игроков, прошедших туториал полностью.
  4. Вторичные: D1, D7 retention; конверсия в первую покупку (туториал часто связан с активацией).
  5. Гарды: совокупное время в туториале (если альтернатива в 5 раз длиннее — UX-катастрофа); rage-quit (короткие сессии).
  6. Размер выборки: считаем по основной метрике (% прохождения), используя историческую дисперсию.
  7. Длительность: минимум 2 недели + время на «созревание» туториала (если игрок может вернуться через сутки).

Анализ результатов

  • ITT (intention-to-treat) анализ: всем в группе B считаем эффект, даже если модель пометила их как low-risk и они получили стандартный.
  • CACE (complier average causal effect): эффект только на тех, кто реально получил альтернативу.
  • Сегментный анализ: модель могла работать только на одном сегменте (платформа/гео).
  • Calibration check: верно ли P(churn) предсказывала риск.

Анализ / интерпретация

Если B побеждает A:

  • Модель + альтернатива работают.
  • Сравниваем с C — если C тоже побеждает A на всех, выгоднее всем дать альтернативу (модель не нужна).
  • Если только на high-risk — modelled targeting корректен.

Если B не отличается от A:

  • Возможно, модель плохо предсказывает (проверить calibration).
  • Или альтернативный туториал не эффективнее.
  • Или ушли «по другой причине» (UI bug, не туториал).

Подводные камни

  1. Утечка через step_number: само значение шага — feature, и одновременно модель оптимизируется по нему. Без time-based split рискуем «подсмотреть будущее».
  2. Class imbalance: на поздних шагах позитива (ушёл) мало → модель с трудом учится. Используйте class_weight или focal loss.
  3. Survivorship bias в обучающей выборке: учим на тех, кто хоть что-то сделал. Установки без events игроков отсутствуют.
  4. Предсказание на «уже ушедших»: если игрок не возвращается — это «правый цензор». Survival analysis правильно учитывает.
  5. A/B на модели: если модель сама часть treatment (т.е. на её основе показываем альтернативу), смешиваем «эффект модели» и «эффект альтернативы». Группа C — обязательна.
  6. Sample Ratio Mismatch, особенно если treatment-логика триггерится клиентом. Может оказаться, что половина устройств не загрузила модель.
  7. Длительность. Туториал — короткий, но «полное прохождение» и retention D7 — нужно ждать.

Альтернативы

  • Causal inference на исторических данных (если уже выкатывали разные туториалы) — uplift modeling.
  • Multi-armed bandit на 3–5 туториальных вариантах — оптимизирует пользу, но не даёт чёткой статвыводности.

Эталонный ответ

Модель: gradient boosting / LSTM на признаках (step, time-between-steps, install-source, platform). Метрики — ROC-AUC + PR-AUC + lift @ top-10% + calibration. Time-based split. A/B: 3 группы (контроль, модель + альтернатива на high-risk, альтернатива всем) с decision-метрикой «% прошедших туториал», ITT + CACE анализ, размер выборки рассчитан по исторической дисперсии. Главное в ответе — отделить «работает модель» от «работает альтернативный туториал».

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти