Раздел 42 · Аналитика данных с нуля

Когда A/B нельзя: до и после, разность разностей

middle~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Бран · продюсер «Хроник Пограничья»

Что обучение на Android в 2.0 сломано, вы мне уже доказали. Но DAU на Android просел всего человек на двадцать, а программисты говорят, что летом все игры проседают. Сколько игроков в день мы теряем именно из-за поломки? И почему нельзя было проверить это A/B-тестом?

В уроке про воронки мы нашли, где ломается Android: после 14 мая обучение там заканчивает треть начавших, а не четыре пятых. Теперь Бран спрашивает про цену поломки. Тут не поможет ни один тест из прошлых уроков: релиз 2.0 вышел сразу всем, половины игроков без него нет. Сравнивать не с кем.

Так бывает часто. Фичу выкатили на всех, цену подняли везде разом, акцию запустили в одном городе, и только потом спросили «а сработало?». Честного A/B уже не будет. Зато бывает квазиэксперимент: кого-то изменение задело, кого-то нет, и не по нашей воле, а так сложилось. Сломанное обучение досталось только Android. iOS и ПК получили тот же релиз, но с рабочим обучением.

До и после: самый простой ответ

Первое, что приходит в голову: сравнить средний DAU на Android до 14 мая и после. Данные одни на весь урок: в dau_platforms.csv по строке на день и группу платформ с 19 марта по 24 июня, без тестовых аккаунтов студии и бот-фермы farm…x из урока про DAU. Восемь недель до релиза, шесть после.

import pandas as pd

dau = pd.read_csv("dau_platforms.csv")
dau["after"] = dau["day"] >= "2026-05-14"
dau.groupby(["platform_group", "after"])["dau"].mean().unstack()
after           False   True
platform_group
android         80.61  60.69
ios_pc          86.18  89.31

На Android было 80,6 игрока в день, стало 60,7. Минус 19,9. Это и есть цифра Брана.

У такого сравнения есть имя: «до и после». Оно молча предполагает, что без релиза DAU остался бы ровно таким, как до него. А это почти никогда не так, и причин три.

  • Тренд. Игра молодая, первые игроки пришли 5 января, и база до сих пор растёт: до релиза DAU обеих групп прибавлял примерно по игроку в неделю. Без поломки Android, скорее всего, тоже бы подрос, и «минус 20» занижает потерю.
  • Сезон. В «Гонце» Отто доля опозданий в марте 29,3%, а в июне 23,6%, и ни одна мера тут ни при чём: в марте шёл снег. Любое нововведение апреля «до и после» выдало бы за успех.
  • Другие изменения в тот же день. В том же 2.0 «Сундук героя» подорожал с 299 до 449 ₽ на всех платформах. Если игроки обиделись на цену, «до и после» свалит и это на обучение.

Нам нужна оценка того, что было бы с Android без поломки. Такую невидимую версию событий называют контрфактическим исходом. В A/B его показывает контрольная группа. Здесь её придётся найти.

Контрольная группа: разность разностей

iOS и ПК прожили те же недели: тот же тренд, тот же сезон, тот же подорожавший сундук. Не досталась им только поломка. Значит, их изменение показывает, что было бы с Android без неё. Вычитаем:

Android:     60,69 − 80,61 = −19,92   поломка + всё остальное
iOS и ПК:    89,31 − 86,18 =  +3,13   всё остальное
разность разностей:        −23,05   поломка

Вот и весь метод: разность разностей. Изменение в группе воздействия минус изменение в контрольной за те же даты. Всё общее для двух групп вычитается, остаётся то, что случилось только с Android. Обрати внимание: уровни групп разные, iOS с ПК и до релиза были на 5-6 игроков в день впереди. Это не мешает: метод сравнивает не уровни, а изменения.

Летнее объяснение программистов не подтверждается: у iOS и ПК после 14 мая DAU не упал, а вырос на 3. Поломка стоит Android 23 игрока в день в среднем за шесть недель, а не 20.

Табличку 2 на 2 можно собрать прямо в SQL на базе guild. Попробуй сдвинуть дату во всех трёх местах на 30 апреля, как будто релиз вышел на две недели раньше. Потеря выйдет меньше, −18,2 вместо −23,1: в «после» попадут две нормальные недели и разбавят эффект.

SQL-песочница

База · guild

Загружаю редактор…

База загрузится, когда ты выполнишь запрос или откроешь таблицы.

Выполни запрос, чтобы увидеть результат.

Выполни весь запрос кнопкой или Ctrl/Cmd+Enter. Ctrl+Space открывает подсказки. Можно писать несколько команд через точку с запятой, менять данные и открывать транзакции. У каждой песочницы своя база, изменения живут до ухода со страницы. «Сбросить базу» возвращает учебные данные, но не меняет SQL.

урок из курса

Урок из курса «Аналитика данных с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.