Аналитика

Сколько гонять А/Б-тест: считаем размер выборки и длительность на пальцах

Аналитика · · 8 мин чтения

Обычно про А/Б-тест спрашивают уже после финиша: тест прошёл, аналитик посчитал p-value = 0,17, праздник отменяется. Данные есть, вопрос один — можно ли им верить.

Полезнее спросить до запуска: «К нам приходит столько-то человек в день. Сколько гонять тест, чтобы он вообще мог что-то показать?» Без этого легко месяц крутить эксперимент, который значимого результата не даст в принципе. Это как взвешивать письмо на напольных весах: письмо, может, и потяжелело на пару граммов, но весы, которые прыгают на полкило туда-сюда, этого никогда не покажут. И дело не в письме, а в том, что инструмент слишком грубый для такой разницы.

Почему длительность нельзя выбрать на глаз

Вспомним монетку. Подбросили 10 раз, выпало 7 орлов — бывает. Подбросили 1000 раз, выпало 700 орлов — монета точно кривая. Доля одна и та же, 70%, а выводы противоположные. Отличается только число бросков.

В А/Б-тесте то же самое. Чем больше людей прошло через эксперимент, тем меньше шума и тем более мелкую разницу можно отличить от случайности. Так что вопрос «сколько гонять тест» на самом деле звучит так: сколько нужно людей, чтобы заметить эффект нужного размера. Дни потом получаются простым делением на дневной трафик.

Четыре числа, которые нужны до запуска

Два числа — договорённости, два — про ваш бизнес.

  1. Текущая конверсия (или другая метрика). Например, сейчас покупают 5% посетителей. Берём из аналитики.
  2. Минимальный эффект, который вам интересен (MDE, от английского minimum detectable effect — минимальный обнаруживаемый эффект). Это самое маленькое изменение метрики, которое тест должен уверенно заметить. Всё, что меньше MDE, тест может и пропустить, и это нормально: такие эффекты вам заранее неинтересны. Самый важный и самый неудобный вопрос: какой рост мы вообще хотим поймать? Если новая кнопка поднимет конверсию с 5% до 5,01%, вам это нужно? Скорее всего, нет, разработка обойдётся дороже. А вот с 5% до 5,5%, то есть на 10%, уже интересно.
  3. Уровень значимости — тот самый порог 0,05. Оставляем как есть.
  4. Мощность теста — обычно берут 80%. Это вероятность того, что тест заметит эффект, если он действительно есть.

Порог 0,05 защищает от ложной радости, когда эффекта нет, а мы решили, что есть. Мощность защищает от обратной ошибки, когда эффект есть, а тест его прохлопал. Мощность 80% значит, что если кнопка правда даёт +10%, тест покажет это в 8 запусках из 10, а в двух промолчит из-за невезения. Хотите надёжнее — нужно больше людей.

Формула на салфетке

Сначала сама формула, потом разберём, откуда она взялась. Для конверсий при значимости 0,05 и мощности 80% в каждой группе нужно примерно

n ≈ 16 × p × (1 − p) / Δ²

человек, где p — текущая конверсия, а Δ — разница, которую хотим поймать, в абсолютных долях (5% → 5,5% значит Δ = 0,005).

Выглядит как заклинание, но собирается из четырёх простых шагов.

Шаг 1. Насколько шумит одна группа. Каждый посетитель либо купил, либо нет. Если конверсия 5%, то у группы из 1 000 человек в среднем будет 50 покупок, но на деле легко выйдет 43 или 57, как с орлами у монетки. Типичный размах этого дрожания статистики называют стандартной ошибкой, и для конверсии она считается так:

шум одной группы = √( p × (1 − p) / n )

Для 1 000 человек и конверсии 5% получается √(0,0475 / 1 000) ≈ 0,007. То есть конверсия в такой группе обычно гуляет в пределах 5% ± 0,7 процентного пункта сама по себе, без всякой кнопки. Множитель p × (1 − p) отвечает за то, насколько вообще «случайно» поведение одного человека: при конверсии 50% угадать, купит он или нет, сложнее всего, а при 1% почти никто не покупает и шума меньше. Делитель n говорит, что чем больше людей, тем меньше дрожание.

Шаг 2. Две группы шумят сильнее одной. В тесте мы сравниваем не одну группу с идеальным числом, а две группы друг с другом, и случайно прыгают обе. Шумы складываются, поэтому под корнем появляется двойка:

шум разницы = √( 2 × p × (1 − p) / n )

Шаг 3. Порог 0,05 — это 1,96 шума. Случайная разница между одинаковыми группами в 95% случаев не выходит за ±1,96 шума. Отсюда и порог: если наблюдаемая разница больше 1,96 шума, она попадает в те редкие 5%, которые случайностью объяснить трудно, и p-value становится меньше 0,05. Подробнее про то, как считать «сколько шумов» в разнице, есть в статье про Z-оценку, ссылка в конце.

Шаг 4. Мощность 80% — это ещё 0,84 шума. Допустим, кнопка правда даёт ровно 1,96 шума прироста. Наблюдаемая разница будет дрожать вокруг этого значения: в половине тестов окажется чуть больше порога, в половине чуть меньше. Значит, тест заметит эффект только в 50% случаев. Чтобы заметить его в 80% случаев, настоящий эффект должен стоять от порога ещё на 0,84 шума дальше: тогда даже при неудачном раскладе разница чаще всего останется выше 1,96. Итого эффект должен быть не меньше 1,96 + 0,84 = 2,8 шума.

Собираем всё вместе:

Δ = 2,8 × √( 2 × p × (1 − p) / n )

Возводим обе части в квадрат и выражаем n:

n = 2,8² × 2 × p × (1 − p) / Δ² = 15,68 × p × (1 − p) / Δ²

15,68 округляем до 16 — вот и вся магия. Шестнадцать — это «2,8 шума в квадрате, умноженные на две группы». Если поменять условия, поменяется и множитель: для мощности 90% вместо 0,84 берут 1,28, и шестнадцать превращается примерно в 21.

Считаем пример: конверсия 5%, хотим поймать рост до 5,5%.

  • p × (1 − p) = 0,05 × 0,95 = 0,0475
  • Δ = 0,055 − 0,05 = 0,005, Δ² = 0,000025
  • n ≈ 16 × 0,0475 / 0,000025 ≈ 30 400 человек в каждой группе

Групп две, так что всего нужно около 61 000 посетителей. При трафике 2 000 человек в день это примерно 31 день.

Эффект стоит в квадрате

Δ в формуле возведена в квадрат. Хотите поймать эффект в два раза меньше — людей нужно в четыре раза больше. Тот же сайт, конверсия 5%, 2 000 посетителей в день:

Какой рост хотим пойматьКонверсия станетЛюдей всегоСколько гонять
+20%6%~16 000~2 недели
+10%5,5%~61 000~5 недель
+5%5,25%~240 000~4 месяца
+2%5,1%~1 500 000~2 года

Поэтому крупная компания может позволить себе тестировать цвет кнопки, а небольшой интернет-магазин нет: у первой трафик в сто раз больше. Маленькому сайту стоит тестировать смелые изменения, от которых можно ждать +20% и больше, а мелкие улучшения внедрять по здравому смыслу.

Если срок уже назначен

Часто срок спускают сверху: «Тест должен закончиться к концу спринта». Тогда формулу удобно развернуть и посчитать, какой эффект можно заметить за это время:

Δ ≈ 4 × √( p × (1 − p) / n )

Четвёрка здесь — это корень из той же шестнадцати.

За две недели при 2 000 посетителей в день в каждую группу попадёт по 14 000 человек:

  • √(0,0475 / 14 000) ≈ 0,00184
  • Δ ≈ 4 × 0,00184 ≈ 0,0074, то есть 0,74 процентного пункта

Выходит, за две недели заметим рост конверсии с 5% примерно до 5,7%, это около +15%. Если от изменения ждут +3%, лучше сразу признать, что за две недели тест ничего не покажет. Большое p-value в конце будет говорить о маленькой выборке, а не о плохой идее.

Средний чек

Для среднего чека, выручки на посетителя и других денежных метрик формула похожая, только вместо p × (1 − p) подставляется дисперсия, то есть квадрат стандартного отклонения метрики:

n ≈ 16 × σ² / Δ²

У денежных метрик разброс обычно огромный: один клиент купил носки, другой холодильник. Поэтому тесты на средний чек почти всегда требуют заметно больше людей, чем тесты на конверсию. Стандартное отклонение аналитик посчитает по историческим данным, в Excel или BI-системе это одна формула.

Три правила, чтобы не испортить расчёт

Считайте до запуска и гоняйте до конца. Самая частая ошибка — каждый день смотреть на p-value и остановить тест, как только он опустился ниже 0,05. Если подглядывать каждый день, случайность рано или поздно нарисует значимость. Это как подбрасывать монетку, пока не выпадет пять орлов подряд, и после этого объявить её кривой.

Округляйте до целых недель. В понедельник люди покупают не так, как в субботу. В тесте длиной 10 дней окажется два понедельника и один четверг, и это перекос. Посчитали 31 день — гоняйте 35, ровно пять недель.

Минимальный эффект выбирайте из денег, а не из надежды. Прикиньте, сколько стоит изменение и какой рост его окупит. Это и есть ваш MDE. Если для окупаемости хватит роста на 2%, а трафика хватает только на то, чтобы поймать 20%, тест не поможет, решение придётся принимать по-другому.

Коротко: главное в одном абзаце

Длительность А/Б-теста считается заранее из четырёх чисел: текущей конверсии, минимального интересного эффекта, порога значимости 0,05 и мощности 80%. Для конверсии в одну группу нужно примерно 16 × p × (1 − p) / Δ² человек. Умножаем на два, делим на дневной трафик, округляем до целых недель. Эффект стоит в квадрате, поэтому вдвое более мелкое улучшение ловить вчетверо дольше. А если расчёт показал «два года», тест запускать не нужно: лучше придумать изменение посмелее.

Ссылки, подобранные вручную

Комментарии

Пока никто не высказался. Будьте первым.