Не стоит проводить А/А/В-тест !
Если ты заказчик теста, а не разработчик А/В-платформы
В интернете есть множество статей, где авторы рекомендуют A/A/B-тесты (то есть эксперименты с двумя контрольным группами). Преимущество такого дизайна очевидно —валидирующий А/А-тест проводится одновременно с основным A/B-тестом и не требует предэкспериментального периода. Подкупает и то, что это показывают большие взрослые компании: например статья Leroy Merlin о пользе данного подхода. На хабре рассказывают мифические вещи, что такой дизайн позволяет уменьшить влияние эффектов новизны и привыкания, непопадания в покупательский цикл , недостаточного количество трафика/операций и сезонных факторов, а также неполной кроссбраузерности и некорректной ротации.
К сожалению, кроме последних двух пунктов (и то при должном анализе), ничего из перечисленного А/А/В-дизайн делать не умеет. А вот минусы у него есть, и для большинства опытных data-ninja они также очевидны. Во-первых, при делении всей не-таргетной группы на 2 мы теряем в размере выборки и, соотвественно, в мощности по сравнению с одним большим контролем.
Во-вторых, есть гораздо более глубокая проблема неправильной интерпретации результатов таких экспериментов. Все мы в университете учили теорему умножения вероятностей, гласящей о том, что совместная вероятность независимых событий равна произведению вероятностей этих событий. Так вот: если мы сравниваем между собой несколько групп и репортим о значимости эффекта в зависимости от других исходов (например А/В считаем значимым только если А/А не значим), то при расчете вероятности ошибки мы должны учесть вероятность итогов других сравнений. Это мы и обсудим ниже. Кстати, именно по этой причине лучше всегда использовать t-тест для неравных дисперсий (Welch’s t-test), а не проверять равенство дисперсий стат-тестом.
Как конкретно интерпретируются результаты А/А — вопрос к экспериментатору. Я смог придумать 3 возможных варианта. Далее следуют два блока — вначале перевод статьи 2016 года(❗)️ из блога инженеров Твиттера, где разобраны 2 из возможных вариантов, и следом за ним разобранный мной третий вариант. Мои блоки будут выделены курсивом (таким же, в котором находится данное предложение), а также в самом переводе жирным курсивом.
Проблема с вероятностями
А/В-тесты —это методология, основанная на фреймворках статистики и вероятности; таким образом, выводы, к которым мы пришли из экспериментов, не всегда могут быть правильными (они правильны лишь с какой-то долей вероятности, пусть и высокой). Ложноположительный результат или ошибка типа I — это отклонение нулевой гипотезы, когда она действительно верна, или, грубо говоря, утверждение о изменения поведения, когда на самом деле нет никаких изменений между выборками. Ложноотрицательный результат или ошибка типа II — это принятие нулевой гипотезы, когда она на самом деле неверна — другими словами, утверждение о том, что мы не видим изменений между группами, когда разница существует.
Хорошо спланированный статистический эксперимент направлен на минимизацию обоих типов ошибок. Полностью избежать их невозможно. Естественно, эта неопределенность возникает, когда вы принимаете решение «катить/не катить фичу», и не уверены, реальны ли наблюдаемые изменения.
В этой статье рассматривается идея использования двух контрольных выборок для защиты от этих ошибок. Мы продемонстрируем, что это вызывает серьезные проблемы, и что создание единой большой контрольной группы является лучшим и беспристрастным способом достижения той же цели на том же количестве данных.
Тесты с двойным контролем
A/A — это тесты, в которых таргетной группе не примененны изменения, то есть мы получаем 2 контроля. Они очень полезны для валидации экспериментальных фреймворков. Мы используем их регулярно для общей проверки наших инструментов: корректность реализации статистических методов, отсутствие очевидных проблем в поиске аномалий и удалении спама. A/A-тесты также можно использовать для определения кол-ва трафика, необходимого для поиска ожидаемого изменения метрик.
Некоторые экспериментаторы в Твиттере предложили запускать А/A/B вместо A/B тестов, чтобы уменьшить false positive rate вследствие негомогенных групп. A/A/B — это тест, в котором в дополнение к предоставленному контролю (A1), экспериментатор добавляет еще одну контрольную группу (A2) к своему эксперименту.
Есть 2 подхода к использованию двух контрольных групп. Первый подход использует A2 для валидации — если изменение показывает значительные отличия как от контроля A1, так и от контроля A2, оно «реально»; в противном случае он отклоняется как ложное срабатывание. Другой подход заключается в использовании A2 в качестве замены для контрольной группы, когда считается, что A1 плохо отражает генеральную совокупность.
Наш анализ показывает, что оба этих подхода уступают объединению трафика от двух контролей и рассмотрению этого как единой большой контрольной группы управления — другими словами, если у вас есть лишний трафик, просто увеличьте ваш контроль вдвое.
Статистика, стоящая за двумя контролями
Давайте рассмотрим возможные результаты A/A/B-теста, в котором на самом деле нулевая гипотеза верна, а таргет (B) не имеет никакого эффекта.
Ниже представлены все возможные комбинации стат-значимых результатов между тремя группами. При уровне значимости 0,05 существует 95% вероятность не увидеть различий между A1 и A2 (левая диаграмма). Среди оставшихся 5%, половина времени A1 будет значимо меньше A2, а половину времени будем наблюдать обратное (средняя и правая диаграммы).
Число в каждой ячейке — это процент случаев, когда происходит конкретная комбинация A1vsA2vsB, учитывая соотношение A1-A2-B. Эти значения получены аналитически; вы можете найти вывод в приложении.
Теперь мы рассмотрим оба подхода к использованию двух контролей и покажем, почему они неоптимальны по сравнению с объединением обеих контрольных групп в один большой контроль.
Анализ подхода №1: отклонение при разногласии
Напомним, что в первом подходе мы принимаем нулевую гипотезу, если она не отклоняется при сравнении с каждым из контролей. Мы также отбрасываем все результаты, в которых контроли расходятся.
Контроли по дизайну разойдутся в 5% случаев, результаты теста немедленно выбрасываются.
Согласно левой таблице на Картинке 1, вероятность того, что оба контроля значительно отличаются от таргета при нулевой гипотезе (два ложноположительных результата подряд), составляет всего 0,49% + 0,49% = 0,98% от 95%, или 0,93% от исходной гипотезы. Таким образом, количество ложных отклонений нулевой гипотезы (FPR) значительно существенно снижается, с 5% до менее 1%.
За это приходится платить. Использование двух контролей, каждый из которых может заставить принять нулевую гипотезу, является гораздо более строгим требованием и показывает ложноотрицательные результаты в случаях, когда группа B действительно отклоняется от контроля. Мы снижаем мощность, вводя это ограничение, что приводит к резкому увеличению количества ложноотрицательных результатов (ошибка II рода).
Конкретная частота ложноотрицательных результатов (FNR) зависит от размера эффекта на метрику. В качестве иллюстрации рассмотрим нормальные распределения со средним 0 и стандартным отклонением 1 для обоих контролей и со средним значением 0,04 и стандартным отклонением 1 для таргета. В таблице ниже представлен FNR, который может быть получен аналитически с использованием указанной выше методологии. Мы сравниваем его с использованием одного маленького контроля и с использованием объединенного контроля. P-value установлено на 0,0093 в обоих случаях, что равно FPR подхода 1.
Во всех случаях за такой низкий FPR приходится платить очень высоким FNR (потерей мощности). Хотя подход 1 превосходит использование одного элемента управления, он дает гораздо больше ложных отрицательных результатов, чем объединение трафика от обоих контролей в один большой (pooled control).
Анализ подхода №2: выбор «лучшего» контроля
Второй подход в использовании двух контролей — это попытка определить, какой из двух является лучшим представителем всей популяции клиентов. Так как мы будем определять «лучший» контроль после анализа результатов эксперимента, этот подход страдает сильным искушением к “подглядыванию” и необъективному выбору. Это значительная проблема и основная причина полностью отказаться от использования двух контролей.
Однако давайте представим, что вместо того, чтобы «интуитивно» выбирать между А1 и А2, мы проводим анализ, чтобы определить, какой из двух контролей лучше отражает исходные данные. Далее предположим (такого не будет в реальных задачах), что наш аналитик имеет доступ к истинным распределениям и всегда может правильно определить лучший контроль.
Мы симулировали 50 000 пар бакетов (A1, A2), каждая по 10 000 элементов из стандартного нормального распределения. В этом моделировании 2492 (4,98%) пар имели статистически значимые различия в средних значениях (это и есть той самый p-value=5%, т.е. результат совпал с теоретическим).
Поскольку мы знаем точное распределение, из которого мы симулировали данные, нам легко смоделировать идеальный оракул «наилучшего контроля». Для каждой пары контролей мы просто выбираем ту, чье среднее значение ближе к 0. Мы сравниваем его со средним значением объединенного контроля, который, конечно же, является средним от средних двух контролей — мы будем называть его просто «средним».
Случаи, когда два контроля не показывают статистически значимых различий, не представляют интереса, поскольку они не заставляют экспериментатора выбирать «лучший» контроль. Рассмотрим только случаи, когда мы наблюдаем расхождение между A1 и A2. На графике ниже мы видим, что «лучшее из 2» правильно центрировано на нуле. Однако, хотя объединенный график соответствует ожидаемой одномодальной форме, стратегия «лучшее из двух» приводит к “двугорбому верблюду”. Дисперсия средних значений pooled подхода составляет 4,81e-5, в то время как дисперсия «лучшего из 2х» гораздо выше и составляет 1,45e-4.
Форма, полученная «лучшим из 2х», неудивительна, если мы посмотрим, что должно произойти, чтобы два элемента управления имели статистически значимое различие. Статистическая значимость измеряется на основе разницы между средними значениями двух контролей. Учитывая нормальное распределение выборочных средних (см. Центральную Предельную Теорему), для любого числа d вероятность увидеть разницу d двух выборок, находящихся на обеих сторонах от истинного среднего, выше, чем вероятность того, что оба средних значения находятся на одной и той же стороне от истинного среднего. Другими словами, если вы видите большую разницу между двумя контролями, скорее всего, это потому, что один (намного) больше истинного среднего, а другой (намного) меньше истинного среднего. Их усреднение даст вам что-то более близкое к истинному среднему значению, чем выбор любой из этих двух крайностей.
Эта симуляция ясно показывает что, когда два контрольных сегмента расходятся, их объединение обеспечивает лучшую оценку среднего значения распределения и с более низкой дисперсией, и, следовательно, имеет гораздо большую мощность, чем даже идеальный оракул, который правильно определяет «лучший» контроль 100% времени. Pooled контроль будет работать даже лучше в реальных задачах, поскольку невозможно правильно определять «лучший» из двух элементов контролей в 100% случаев .
Заключение
Удвоение размера одной контрольной группы предпочтительнее, чем реализация двух отдельных t-тестов с использованием двух контролей. Использование двух контрольных групп подвергает экспериментатора высокому риску систематической ошибки подтверждения. Если экспериментатор сопротивляется предвзятости и использует второй контроль только в качестве инструмента проверки, эксперимент страдает от более высокого уровня ложноотрицательных результатов, чем если бы контроли были объединены. Объединение также будет приводить к более точной оценке истинного среднего, чем использование только одного из контролей, и не требовать определения методологии выбора «лучшего» контроля. Следует отговаривать экспериментаторов от использования «второго контроля» как попытки (неудачной) защитить себя от ошибок.
Третий подход — любой из двух контролей
Этот вариант не разбирался в статье от Twitter, но я встречался с ним на практике. Его суть такова: если есть значимое отличие таргетной группы от любой контрольной, то тест считается значимым вне зависимости от исхода сравнений тагрета и второго контроля, а также двух контролей между собой.
Данный подход плох тем, что он представляется из себя классическое множественное сравнение, которое без использования поправок приводит к повышенному FPR. В действительности, пусть FPR одного сравнения (при равенстве нулевой гипотезы) = p-value = 5%, TPR в таком случае равен 95%. Тот же показатель для двух сравнений (используя упомянутое вначале правило умножения вероятностей): TPR = 0.95 * 0.95 = 0.9025. Соотвественно FPR = 1 — TPR, что примерное равно 10%.
Во-первых, такой подход валиден только в случае, если будет применена поправка Бонферрони. Во-вторых, он сильно проигрывает по мощности, т.к. помимо снижения выборки в 2 раза, что указывалось в самом начале статьи, при расчете мощности нужно брать Z-статистику с учетом поправки (этот момент я рассказывал в прошлой своей статье).
Когда все-таки стоит использовать А/А/В-тест
Так зачем же нужен этот подход, если он так плох? Для ответа на этот вопрос для начала нужно понять, а зачем вообще проводятся А/А-тесты. Обычно их используют для того, чтобы найти проблемы в используемом инструментарии — метрики с плохим распределеннием, неправильный подбор стат-критерия, некорректно выбранные сущности тестирования/анализа и алгоритмы рандомизации. Так вот — большинство этих проблем можно проверить с помощью симуляции А/А тестов (если есть возможность повторить механизм рандомизации).
Однако есть проблемы, которые не покажет моделирование — это ошибки в А/В-платформе и логировании. Их выявление требует боевого запуска А/А на платформе, но это можно делать на периоде перед тестом.
Единственные ситуации, когда не избежать А/А/В-тестов:
* нет пред-тестового периода, и тест нужно запускать прямо сейчас
* нужно проверить работу самого кода ветвления
* нет доступа к логированию и raw-данным
Последние 2 пункта часто возникают при использовании сторонних инструментов, и которые именно поэтому рекомендуют подобные дизайны. Как ты теперь знаешь — пользоваться ими можно, но нужно делать соотвествующие поправки на p-value, мощность и длительность теста.
Удачного дизайна тестов, и до скорых встреч!
P.S.: Если тебе понравилась стать, в качестве благодарности можешь купить мне кофе на https://www.donationalerts.com/r/stats_data_ninja или https://buymeacoffee.com/koch.