10 мифов об A/B-тестировании
Иногда эти заблуждения кажутся безобидными, но на деле могут привести к серьёзным ошибкам. Как не попасть в самые популярные ловушки: 10 советов Дили Хакимовой и Натальи Тогановой из экспериментальной платформы Laba в Яндекс Go.
P. S. Примеры ищите на GitHub.
1. При A/B-тестировании можно использовать необработанные данные о событиях
❌ Данные о событиях часто не являются независимыми. Если анализировать их напрямую, повышается вероятность ошибок первого рода. Например, при корректной проверке нулевой гипотезы p-значения должны быть равномерно распределены, но в случае необработанных событий этого не происходит. В результате выводы теста становятся ненадёжными.
✅ Чтобы устранить зависимости в данных, перед анализом агрегируйте данные на уровне пользователя. Например, используйте агрегатный набор из суммы соответствующих метрик для каждого пользователя.
2. Агрегация на уровне пользователя подходит для всех метрик
❌ Эта агрегация не всегда подходит для метрик-отношений — например, для метрики уровня принятия (принятые поездки / общее количество поездок). Проблема в том, что такие метрики сложно корректно перенести на уровень отдельного пользователя. Если агрегировать числитель и знаменатель по каждому пользователю, а затем вычислить отношение, получится другой показатель.
✅ Случайным образом разбейте пользователей на бакеты, рассчитайте соотношение в каждом из них и проанализируйте агрегированные результаты.
➕ Чем короче векторы для анализа, тем проще вычисления.
➖ Для бакетов нужны экспериментальные группы одинакового размера — важно сохранять одинаковое количество бакетов.
✅ Линеаризуйте. Создайте квазиметрику — линейную комбинацию числителя и знаменателя.
➕ Метрика ведёт себя так же, как и исходник.
➖ Труднее интерпретировать: значения метрики отличаются от исходника.
✅ В Яндекс Go мы работаем с более продвинутым методом: два вектора на пользователя для числителя и знаменателя + дельта-метод для оценки дисперсии. Тогда нулевая гипотеза — равенство не средних значений, а общих соотношений.
➕ Сохраняется интерпретируемость.
➖ Усложняются вычисления.
3. Для применения t-критерия требуется нормальное распределение данных
❌ Важно, чтобы распределение выборочного среднего было приблизительно нормальным. Благодаря центральной предельной теореме это достигается естественным образом: при достаточно большом размере выборки, независимо от распределения исходных данных.
✅ Ориентируйтесь на размер выборки. Если она недостаточная, используйте методы, которые учитывают особенности исходного распределения данных.
4. Чтобы решить проблему, достаточно просто удалить выбросы данных
❌ В тестовой и контрольной группах выбросы могут определяться по-разному: если их просто удалить, согласованность распределений нарушится и сместит результаты.
✅ Не удаляйте выбросы: они могут содержать ценную информацию. Уменьшите их влияние: попробуйте внести статистические корректировки. Введите единый порог удаления выбросов для тестовой и контрольной выборок, замените экстремальные значения фиксированным пределом или используйте методы типа CUPED, которые учитывают изменчивость без изменения набора данных.
5. U-критерий Манна — Уитни проверяет различия средних значений
❌ На самом деле критерий сравнивает сами распределения, а не их средние значения. Он чувствителен к различиям в форме распределений, из-за чего может показывать статистически значимые различия даже тогда, когда средние значения групп совпадают.
✅ Используйте U-критерий Манна — Уитни, когда вам нужно понять различия в общем распределении. Для сравнения средних используйте t-критерий.
6. Небольшие выборки можно «починить» с помощью бутстрепа
❌ Маленькая выборка может недостаточно хорошо представлять генеральную совокупность. Внутренняя изменчивость остаётся высокой, и ни один статистический метод, включая бутстреп, не может полностью компенсировать этот эффект.
✅ Лучшее решение — пересмотреть проект эксперимента и собрать больше данных. Альтернативой могут быть байесовские методы, но они тоже не подходят для маленьких выборок.
7. Статистически незначимые метрики не важны
❌ Без них не получится представить более широкую картину. Есть риск получить слишком широкие доверительные интервалы или найти тренды в незначительных данных.
✅ Оценивайте все ключевые бизнес-метрики, независимо от их статистической значимости. Используйте доверительные интервалы для анализа изменчивости и более взвешенной оценки потенциальных рисков и возможностей.
8. Чем больше метрик, тем лучше
❌ Больше метрик ≠ более достоверные результаты. Лишние данные перегружают анализ и увеличивают число ложноположительных результатов.
✅ Фокусируйтесь только на метриках, напрямую связанных с целями эксперимента. Если необходимо больше параметров, используйте методы контроля групповой вероятности ошибки, чтобы уменьшить риск ложных выводов.
9. Статистическая мощность не так уж важна
❌ Низкая мощность увеличивает риск ошибок второго рода: если всегда ограничиваться стандартным ориентиром в 80%, можно пропустить эффект. Особенно это критично в зрелых продуктах, где ожидаемые изменения часто малы (например, на уровне 0,5–1%).
✅ Планируйте мощность заранее, чтобы не запускать тесты, которые с высокой вероятностью не приведут к достоверным выводам.
10. Можно остановить эксперимент, когда результаты станут выглядеть достаточно значимыми
❌ Если не установить правило остановки заранее, вы рискуете столкнуться с p-хакингом и обнаружить несуществующую закономерность.
✅ Заранее определяйте продолжительность эксперимента и не останавливайте его преждевременно без веских причин (например, соображения безопасности или критические бизнес-риски). Если остановка всё же необходима, используйте методы последовательного анализа, такие как альфа-распределение, чтобы контролировать вероятность ошибок.
Сталкивались с каким-нибудь из этих мифов или с чем-то ещë более экзотическим? Делитесь в комментариях к посту!