MDE и размер выборки A/B-теста: почему важна базовая конверсия
Команда хочет проверить новый экран оплаты и спрашивает: «Сколько дней держать A/B-тест?» Ответ нельзя получить из одного числа посетителей в день. Сначала нужна базовая конверсия, минимальное изменение, ради которого продукт готов менять экран, и допустимый риск не заметить такой эффект. После этого требуемое число пользователей переводится в длительность с учётом трафика.
Допустим, сейчас платят 10% пользователей, а полезным считают рост до 12%. Минимально обнаруживаемый эффект, MDE, здесь равен двум процентным пунктам, или 20% относительно базы. Эти два выражения нельзя менять местами: «рост на 2%» от 10% означал бы 10,2%, для чего потребуется намного больше наблюдений.
Расчёт для двух независимых групп
Для учебного плана берём двусторонний уровень значимости 5%, мощность 80% и равное распределение пользователей. Нормальное приближение для двух долей использует базовую и целевую конверсии, критические значения нормального распределения и разницу p1−p0 в знаменателе. Ниже расчёт на стандартной библиотеке Python.
from math import ceil, sqrt
from statistics import NormalDist
p0, p1 = 0.10, 0.12
alpha, power = 0.05, 0.80
z_alpha = NormalDist().inv_cdf(1 - alpha / 2)
z_beta = NormalDist().inv_cdf(power)
p_mid = (p0 + p1) / 2
n = ((z_alpha * sqrt(2*p_mid*(1-p_mid)) +
z_beta * sqrt(p0*(1-p0) + p1*(1-p1))) / (p1-p0))**2
print('MDE absolute:', round(p1-p0, 3))
print('per arm:', ceil(n))
print('both arms:', 2*ceil(n))
Код выводит 3841 пользователя на каждую ветку, 7682 суммарно. Это плановый ориентир при указанных допущениях, а не результат эксперимента. Из формулы видно, что при уменьшении MDE вдвое требуемая выборка растёт примерно в четыре раза: разница стоит в знаменателе под квадратом.
Пользователь должен попадать в одну ветку один раз. Если события оплаты разбиты на десятки строк и их посчитать как независимые наблюдения, оценка трафика окажется ложной. При рандомизации по компаниям или магазинам единицей выборки будет кластер; обычная формула для независимых пользователей там уже не описывает реальную зависимость.
Из размера выборки в календарь
Если эксперимент получает 1000 новых подходящих пользователей в день, половина попадёт в каждую ветку. Делите требуемое число на вариант на ожидаемый поток 500 в день и округляйте вверх. Затем проверьте недельный цикл: тест на покупках часто должен включить одинаковые дни недели в обеих группах. Преждевременно закрывать его в день первого малого p-value нельзя — правило остановки нужно определить до запуска.
Не каждый посетитель обязательно увидит новый экран. Если тест рандомизирует всех посетителей, а до оплаты доходит лишь часть, уточните, для кого определена метрика и какова доля реально экспонированных. План по всей аудитории и план по пользователям экрана дадут разные сроки. Нужен один согласованный анализ, а не выбор аудитории после взгляда на результат.
Базовую конверсию лучше оценивать на той же аудитории и с тем же окном, которые будут в эксперименте. Конверсия всех посетителей за прошлый год может отличаться от нынешней конверсии людей, открывших экран оплаты. Если исходные 10% завышены или занижены, расчёт мощности изменится. Историческую оценку стоит проверить на последних сопоставимых неделях.
MDE — порог планирования, а не правило «всё меньше двух пунктов бесполезно». Если итоговый доверительный интервал допускает и полезный рост, и вред, результат остаётся неопределённым, даже когда наблюдаемая разница близка к 2 пунктам. Решение принимают по величине эффекта, неопределённости и цене внедрения, а не только по тому, пересёк ли p-value условный порог.
Если эксперимент будет одновременно проверять несколько главных метрик, дизайн анализа нужно задать заранее. Наивная проверка каждой на уровне 5% повышает вероятность ложной находки среди них. Размер выборки, рассчитанный только для одной конверсии, может быть недостаточен для другой метрики с большим разбросом. Определите основную метрику и ограничения безопасности до запуска.
В курсе «A/B тесты и анализ данных на Python» вы пройдёте путь от продуктовой гипотезы и выбора метрики к размеру выборки, статистическим тестам и интерпретации интервала эффекта. В задачах используются Python и SQL. Откройте программу курса, чтобы спланировать тест и затем корректно разобрать его итог.
После запуска отдельно проверьте распределение участников по группам: расчёт выборки предполагает, что назначение вариантов работает как задумано.
Продолжить на практике
- A/B тесты и анализ данных на Python ↗
Практический курс по A/B-тестированию и продуктовым метрикам: формулируем гипотезы, считаем размер выборки, запускаем эксперименты и анализируем результаты. От первой идеи до внедрения изменений в продукт — без «воды» и лишней теории.
