Аналитика: телеметрия, A/B и когорты
Механизм: от события к решению
Телеметрия — сырьё
Всё начинается с логирования событий: session_start, level_complete(id, time), purchase(sku, $), churn. Поток (часто миллионы событий/мин) течёт через стрим (Kafka-подобный) в хранилище и дашборды. Это сырьё: без инструментирования ты слеп и принимаешь решения вкусовщиной. Правило: логируй щедро заранее — нельзя проанализировать событие, которое не записал.
Когорты — почему среднее лжёт
Метрики смотрят по когортам — группам по дате установки (и источнику UA). «D7 когорты от 1 марта» — правда; «средний DAU» — ложь, потому что свежий приток установок маскирует отток старых: общий DAU может расти, пока каждая когорта гниёт. Только когорта показывает истинную форму кривой удержания и истинный LTV. Разрез по источнику вдобавок ловит «плохой трафик» (дешёвые установки с нулевым retention).
Воронки — где течёт
Воронка — доля, проходящая каждый шаг последовательности. Онбординг-воронка, например:
| Шаг | Осталось | Конверсия шага |
|---|---|---|
| Установка | 1000 | — |
| Прошёл туториал | 600 | 60% |
| Дошёл до уровня 5 | 300 | 50% |
| Первая покупка | 30 | 10% |
Чинят худший шаг (наибольший отвал относительно ожидания) — здесь обрыв «установка→туториал» (−40%) часто дороже всего, потому что бьёт по D1. Воронка превращает «retention плохой» в «вот где именно теряем».
A/B — проверка причинности
Гипотезу не «обсуждают», а тестируют: случайно делят игроков на контроль и вариант, меняют одну вещь (цвет кнопки, тайминг оффера, кривую сложности), измеряют метрику, выкатывают победителя — но только при статзначимости, иначе выкатишь шум. Ключевая математика — нужный размер выборки растёт как обратный квадрат эффекта:
где — детектируемый эффект (MDE), — разброс. Хочешь поймать лифт вдвое меньше — нужно вчетверо больше пользователей. Главные ловушки: peeking (подглядывать в идущий тест и останавливать на «значимом» — раздувает ложноположительные с 5% до ~15–30%), множественные сравнения (тестируешь 20 метрик — одна «значима» случайно), novelty-эффект (новое временно бустит) и нужда в guardrail-метриках (не выиграй retention, обрушив выручку).
Цикл и культура kill-fast
Всё это крутится петлёй: инструментируй → наблюдай (когорты/воронки) → гипотеза → A/B → выкати или убей → повтори. Supercell довела это до культуры: маленькие автономные команды-«соты», игры soft-launch в паре стран, и если метрики (D1/D7, ранний LTV) не бьют по порогам — игру убивают быстро, без сантиментов. Большинство их игр умирает в soft-launch и не выходит глобально; выживают единицы (Clash Royale, Brawl Stars). Данные тут — не отчётность, а механизм отбора.
🕹 Что открыть — и что заметить
«Играешь» в приборную панель: данные видны и в публичных отчётах, и в том, как игра инструментирует тебя.
С первого запуска ты в воронке и, скорее всего, в A/B-бакете: тайминг первого оффера, длина туториала, первая награда — всё инструментировано и, возможно, тестируется прямо на тебе.
🎮 Заметь: поставь свежую F2P-игру и отследи свой онбординг-воронку — где тебя мягко подталкивают (первая «победа» в первые секунды для D1), когда вылезает первый оффер. Прикинь, что бы ты A/B-тестил, будь продюсером.
Открытые отчёты показывают реальные кривые retention и воронки по жанрам — то, на что команды равняют свои когорты (медиана D1 ~23%, D7 ~4%).
🎮 Посмотри: открой свежий mobile-benchmark отчёт и прочитай когортную кривую и распределение по топ/медиане/худшим 25%. Заметь, как сильно «среднее» отличается от «по когортам» — и почему команды смотрят второе.
Их игры выходят сначала в избранных странах; данные решают судьбу. Десятки проектов закрыты в soft-launch (Smash Land, Spooky Pop и др.), выжили единицы — это данные как фильтр, а не как отчёт.
🎮 Посмотри: почитай список убитых игр Supercell и пороги, по которым их закрывали. Заметь принцип: лучше убить быстро по ранним когортам, чем тянуть на вкусовщине. Это та же дисциплина, что вертикальный срез в инди-продакшене.
Хардкор · статистика: размер выборки, peeking и множественные сравненияможно пропустить
A/B-тест — это проверка гипотезы, и все классические ловушки статистики тут реальны и дорого стоят.
Размер выборки и мощность
Чтобы надёжно поймать эффект при дисперсии , нужно на ветку (с константой от выбранных α и мощности). Малые эффекты (а в зрелой игре лифты — доли процента) требуют огромных выборок: вдвое меньший эффект → вчетверо больше пользователей и времени. Поэтому маленькие игры не могут A/B-тестить всё — не хватает трафика на значимость.
Peeking — самая частая ошибка
Подсматривать в идущий тест и останавливать, как только увидел «p<0.05», — раздувает ложноположительные с 5% до ~15–30%: при многократных проверках почти любой шум однажды пересечёт порог. Лечится либо фиксированным заранее размером выборки, либо последовательными тестами (alpha-spending, всегда-валидные доверительные интервалы).
Множественные сравнения и guardrails
Тестируешь 20 метрик — в среднем одна «значима» случайно (нужна поправка Бонферрони / FDR). И обязательны guardrail-метрики: вариант может поднять целевую (например, конверсию оффера), обрушив побочную (retention, рефанды) — без защитных метрик ты «выиграешь» в минус. Локальность: A/B находит инкрементальные улучшения вокруг текущего дизайна, но не качественные скачки — для них нужен не тест, а новая гипотеза.
Хардкор · инфра: пайплайн телеметрии и реал-тайм против батчаможно пропустить
Под аналитикой — конвейер данных: событие на клиенте/сервере → стрим (Kafka/Kinesis) → хранилище (warehouse/lake) → дашборд/ML. Два режима:
- Реал-тайм (стрим-обработка): живые дашборды, алерты «выручка упала», анти-чит, динамические офферы. Дорого и сложно, нужен под оперативные решения.
- Батч (ночные джобы): когортные отчёты, LTV-модели, тяжёлая аналитика. Дешевле, не нужен мгновенный отклик.
Ключевые инженерные боли: схема событий (поменял формат — сломал исторические отчёты; нужен versioning), идемпотентность/дедуп (события приходят дважды), дешёвость записи против полноты (логировать всё дорого по трафику и хранению — баланс). Авторитетность серверная: критичные события (покупки) считать на сервере, клиентским числам не верить (анти-чит, см. авторитетный сервер).
ML / AI (твой домен): это дословно онлайн-эксперименты и оценка моделей. A/B = выкат модели за флагом и измерение лифта; peeking ⇄ переобучение на валидации (много раз «подсмотрел» в test-set — выбрал шум); множественные сравнения ⇄ выбор модели по многим метрикам (нужна поправка/holdout); Goodhart ⇄ reward hacking (оптимизируешь прокси-метрику — модель ломает дух задачи); guardrail-метрики ⇄ вторичные ограничения, которые нельзя обрушить. Когорты = правильный способ оценивать любой роллаут; kill-fast soft-launch = управление портфелем ресёрч-ставок по ранним сигналам. И сквозная тема курса: метрика — это прокси цели, а не цель; знать, где число вводит в заблуждение (data-driven против суждения), — часть профессионализма.
Продукт / рост: весь growth-стек — funnels, cohort retention, A/B-платформы (Optimizely-подобные), north-star метрика; та же дисциплина значимости и guardrails.
Наука / любой эксперимент: мощность, размер выборки , p-hacking, предрегистрация против подгонки — те же правила, что в A/B живой игры.
Принцип: измеряй причинно (рандомизация + когорты), уважай статистику (выборка, не подсматривай, защищай побочные метрики) — и помни, что оптимизируешь прокси, а не саму цель.
Почему когорты, а не «средний DAU» — ведь среднее проще?
Что не так с тем, чтобы остановить A/B, как только увидел значимость?
Может ли A/B-тестирование привести к качественному скачку в игре?
Goodhart: как «хорошая метрика» уводит во вред?
Почему большинство игр Supercell умирает в soft-launch — это провал?
- Kohavi, Tang, Xu, «Trustworthy Online Controlled Experiments» — библия A/B (peeking, guardrails, ловушки).
- GameAnalytics / deltaDNA — практика игровой телеметрии, когорт и воронок.
- Разборы Supercell cell-структуры и kill-fast (GDC-доклады, интервью Илкка Паананена).
- «A/B Testing Infrastructure at Scale» — модуль 6 + GDC-доклады по live-аналитике.
- Модуль 6, «A/B Testing Infrastructure» + «Real-Time Analytics Pipelines» + «Supercell's Cell Structure» (
06-mobile-f2p-live-service-2012-2018.md).