A/B-тестирование: p.value < 0.05 или как быть когда сплит не 50/50?
Итак, недавно у меня возникла следующая ситуация. Планировался запуск A/B-теста. Так как тест высокорисковый, то появилась мысль минимизировать риск за счет того, что в группу B направить не 50% трафика, а лишь 5%.
Действую по протоколу проведения A/B-тестов нам следует до запуска теста выполнить два предварительных действия:
Моя базовая конверсия (с1) = 2%. Лифт, который я хочу обнаружить (lift) = 5%.
Итого, моя новая конверсия (с2) = c1 * (1 + lift) = 2.1%.
А вот со второй задачей справиться уже несколько сложнее.
Обычно для решения таких задач я использую статистический калькулятор:
Как мы видим, под числом 309,928 четко написано - per variation - что означает, что такой объем должен набраться для каждой группы.
Дело в том, что большинство онлайн-калькуляторов делают расчет минимально необходимой выборки при конфигурации сплита 50%/50%.
Но я-то хочу сделать принципиально другой сплит: 95%/5%.
Является ли настолько асимметричный A/B-тест особым случаем с точки зрения математики?
Итак, начнем с того, что разберем как нам самим оценивать размер минимально необходимой выборки. Для этого в R существует целых две функции:
А здесь размер минимально необходимой выборки уже = 315161 визитов.
Действую по протоколу проведения A/B-тестов нам следует до запуска теста выполнить два предварительных действия:
- оценить лифт целевого показателя
- оценить размер минимально необходимой выборки
Моя базовая конверсия (с1) = 2%. Лифт, который я хочу обнаружить (lift) = 5%.
Итого, моя новая конверсия (с2) = c1 * (1 + lift) = 2.1%.
А вот со второй задачей справиться уже несколько сложнее.
Обычно для решения таких задач я использую статистический калькулятор:
Sample Size Calculator; www.evanmiller.org |
Как мы видим, под числом 309,928 четко написано - per variation - что означает, что такой объем должен набраться для каждой группы.
Дело в том, что большинство онлайн-калькуляторов делают расчет минимально необходимой выборки при конфигурации сплита 50%/50%.
Но я-то хочу сделать принципиально другой сплит: 95%/5%.
Является ли настолько асимметричный A/B-тест особым случаем с точки зрения математики?
Итак, начнем с того, что разберем как нам самим оценивать размер минимально необходимой выборки. Для этого в R существует целых две функции:
- stats::power.prop.test()
- pwr::pwr.2p.test()
Давайте попробуем каждую из них:
stats::power.prop.test(). |
Здесь размер минимально необходимой выборки = 315206 визитов (см. чарт выше).
pwr::pwr.2p.test(). |
А здесь размер минимально необходимой выборки уже = 315161 визитов.
Как мы видим, все 3 результата разные.
Во-первых, Evan's калькулятор занижает размер минимальной выборки (в этом случае на ~1.7% трафика).
Во-вторых, даже R функции несколько расходятся в оценке (315206 vs 315161).
Немного по`google`ив мы находим этому объяснение:
оба теста делают некую аппроксимацию биноминального распределения, а потому на разных % конверсии каждый из вариантов чуть более или менее точен.
Для себя я принял решение использовать цифры из пакета pwr.
Идем дальше.
В A/B-тестах есть два важных параметра:
- significance level (Type I error probability), обычно sig.level = 0.05
- statistical power (1 - Type II error), обычно power = 0.8
На чарте сравнивающим две группы эти понятия транслируются в следующие закрашенные области (см. легенды под графиком):
Source: https://rpsychologist.com/d3/NHST/ |
И оба этих параметра нужно задать, чтобы определить размер минимально необходимой выборки.
Если у вас в какой-то момент проведения теста достигается p.value < 0.05, то это еще не означает, что тест надо закончить.
Только по достижению размера минимальной необходимой выборки мы можем быть уверены, что тест обладает следующими характеристиками:
- sig.level = 0.05 и
- power = 0.8
Насколько это важно я сейчас вам продемонстрирую.
Давайте сделаем симуляцию.
Итак, чуть ранее, мы определили, что для того, чтобы поймать lift = 5% при базовой конверсии в 2% нам нужно 315161 визитов.
Я создаю две группы с одинаковыми размерами (n1 = 315161, n2 = 315161).
У группы A фиксирую конверсию на уровне с1 = 6303 / 315161 = 2%.
У группы B небольшими шагами наращиваю дельту конверсии (lift_delta) и смотрю на p.value и power.
p.value vs power: equal size groups. |
Мы видим, при lift в 3.7% я уже получил p.value = 0.039, т.е. ниже, чем 0.05. НО power теста все еще низкий и = 54%.
Это означает, что всего с вероятностью в 54% мы найдем эффект, когда он действительно есть.
И лишь когда мы дойдем до lift в 5% на выборке в 315161 наш power выйдет на уровень 80%.
Теперь мы готовы к тому, чтобы вернуться и ответить на мой начальный вопрос:
меняются ли стат. характеристики A/B-теста, если группа A получает 95% трафика, а группа B всего 5% трафика?
Давайте снова сделаем симуляцию.
Беру объем трафика, который мы могли бы израсходовать на симметричный тест, но распределяю его в пропорции 95%/5% (n1 = 567289, n2 = 63032).
У группы A фиксирую конверсию на начальном уровне с1 = 2%.
У группы B небольшими шагами наращиваю дельту конверсии (lift_delta) и смотрю на p.value и power.
p.value vs power: non-equal size groups. |
Как видим, чтобы выйти на классические параметры стат. значимости мне нужно достичь lift уже в размере 8.5%, а не 5%, которые рассчитывались для симметричного типа теста. А это увеличивает требование к конверсии на целых 70%!
Получается, что:
- несимметричные сплиты требуют другой математики
- у них тяжелее требования к lift для достижения стат. значимости
Если же вы не видите возможности достичь такого lift, то вам на помощь может прийти функция pwr::pwr.2p2n.test().
Она позволяет узнать неизвестный параметр для несимметричных A/B-тестов.
Она позволяет узнать неизвестный параметр для несимметричных A/B-тестов.
Например, давайте узнаем, сколько нужно трафика в группе B, если:
- в группе A объем трафика = 567289
- мы хотим поймать lift = 5%
- соблюдая sig.level = 0.05 и power = 0.8
pwr::pwr.2p2n.test(). |
Оказывается, для несимметричного теста для достижения стат. характеристик трафика нужно намного больше (218188!), чем мы полагали ранее (63032). А значит и пропорция нужна другая: теперь это 72%/28%.
Спасибо за статью ��
ReplyDeleteИнтересно было бы ещё понять как изменятся цифры при такой логике:
1. Размер выборки минимальный определили 309к
2. Как повысится значимость и достоверность если в А группу мы дадим больше чем 309к, при этом В так и останется равной 309к
Может уже исследовали? ��
Если честно - то такой сценарий я не просчитывал.
Delete