Урок по треку Статистика и A/B-тесты 7 мин

Мощность, MDE и размер выборки

Мощность, MDE, расчёт размера выборки и длительности теста.

«Сколько пользователей нужно на тест и сколько дней он будет идти?» Это первый вопрос, на который аналитик отвечает до запуска эксперимента. Без расчёта мощности тест либо не увидит реальный эффект, либо будет длиться дольше, чем нужно.

Мощность

Мощность (power) это вероятность обнаружить эффект, если он действительно есть: 1 - β, где β вероятность ошибки II рода. Стандарт индустрии: мощность 80% при α = 0.05.

Мощность растёт, когда:

  • больше размер выборки;
  • больше истинный эффект;
  • меньше дисперсия метрики;
  • больше α (но тогда больше ложных срабатываний).

MDE

MDE (minimum detectable effect) это минимальный эффект, который тест с заданными α, мощностью и размером выборки обнаружит с вероятностью не ниже заданной мощности. MDE выбирают из бизнеса: «какой рост конверсии окупит фичу» или «какой эффект мы вообще ожидаем».

MDE бывает абсолютным (конверсия 5.0% → 5.5%, +0.5 п.п.) и относительным (+10%). Всегда уточняйте, о каком идёт речь.

Формула размера выборки

Для сравнения двух средних (или долей), двусторонний тест, равные группы:

n на группу = (z_{1-α/2} + z_{1-β})² · 2σ² / δ²
  • δ абсолютный MDE;
  • σ² дисперсия метрики; для доли p(1 - p);
  • при α = 0.05 и мощности 80%: z_{1-α/2} = 1.96, z_{1-β} = 0.84, сумма в квадрате примерно 7.85.

Отсюда быстрая оценка: n ≈ 16σ²/δ² на группу (так называемое правило Лера).

from statistics import NormalDist
from math import ceil

def n_per_group(p, mde_abs, alpha=0.05, power=0.8):
    z = NormalDist()
    k = z.inv_cdf(1 - alpha / 2) + z.inv_cdf(power)
    return ceil(2 * p * (1 - p) * k**2 / mde_abs**2)

n_per_group(0.05, 0.005)  # около 29 800 на группу

Что важно в формуле

  • n обратно пропорционален квадрату MDE: чтобы увидеть эффект вдвое меньше, нужно вчетверо больше пользователей.
  • n пропорционален дисперсии. Поэтому снижение дисперсии (CUPED, винзоризация, стратификация) прямо сокращает тест.
  • Для долей дисперсия p(1 - p) максимальна при p = 0.5; редкие конверсии требуют огромных выборок в абсолютном MDE, если мерить относительным эффектом.

Длительность теста

дни = ceil(n_на_группу · число_групп / трафик_в_день_в_тест)

Плюс правила:

  • минимум полная неделя, а лучше две: у поведения есть недельная сезонность;
  • если получилось полгода, тест в таком виде делать бессмысленно: увеличивайте MDE, ищите более чувствительную метрику, снижайте дисперсию или берите больше трафика.

Неравные группы

При делении 90/10 нужно больше пользователей в сумме, чем при 50/50, для той же мощности. Делить неравно имеет смысл, когда новая версия рискованна, но за это платят длительностью.

Пост-фактум мощность

«Тест не прокрасился, давайте посчитаем мощность по наблюдаемому эффекту». Так делать бессмысленно: наблюдаемая мощность однозначно определяется p-value и ничего нового не говорит. Мощность считают до теста, по заранее выбранному MDE. После теста полезнее смотреть доверительный интервал эффекта: он показывает, какие эффекты данные исключают.

Частые ошибки

  • Не считать размер выборки и останавливать тест «когда стало значимо».
  • Путать абсолютный и относительный MDE.
  • Брать дисперсию с потолка, а не по историческим данным.
  • Не учитывать, что единица рандомизации (пользователь) отличается от единицы метрики (сессия, заказ).

Что спросят на собесе

  • Что такое мощность и почему 80%?
  • Что такое MDE и как его выбрать?
  • От чего зависит размер выборки и как он меняется, если MDE уменьшить вдвое?
  • Как оценить длительность теста?
  • Почему нельзя считать мощность по факту на результатах теста?

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.