Power analysis простыми словами

Проверь себя · 1/3разбор после ответа
Вы хотите добавить новый запрос в дашборд и боитесь, что он сильно нагрузит базу, потому что таблица events очень большая. Что дает запуск EXPLAIN для этого запроса?

Короткое объяснение

Statistical power (статистическая мощность) — вероятность обнаружить реальный эффект, если он существует.

Power = 1 − β, где β — вероятность ошибки II рода (ложноотрицательного заключения).

Стандарт — 80%. Значит есть 20% шанс упустить реальный эффект.

Главные параметры

Power analysis связывает 4 параметра:

  1. α (alpha) — вероятность ложноположительного результата. Стандарт 5%.
  2. β (beta) — вероятность ложноотрицательного. Стандарт 20% (power 80%).
  3. MDE — minimum detectable effect (минимальный обнаруживаемый эффект).
  4. N — размер выборки.

Задав 3, получаешь 4-й.

Применение

Перед A/B-тестом: определить N

Известно: α=5%, power=80%, MDE=2%. Считаем, сколько пользователей нужно.

Уже запущен тест: посмотреть, можно ли обнаружить эффект

Известно: α=5%, N=10 000, наблюдаемый эффект. Считаем мощность для этого эффекта.

После теста: проверить, не пропустили ли эффект

Результат не значим. Post-hoc power показывает: можно ли было обнаружить MDE с таким N?

Формула для пропорций

n = (z_α/2 + z_β)² × (p₁(1-p₁) + p₂(1-p₂)) / (p₁ - p₂)²

Где:

  • z_α/2 = 1.96 для 5% alpha (двустороннего)
  • z_β = 0.84 для 80% power
  • p₁ — базовая конверсия
  • p₂ — ожидаемая (p₁ + MDE)

Пример расчёта

A/B на кнопке. Базовая конверсия 5%. Хотим обнаружить +1 п.п. (MDE = 1 п.п.). α=5%, power=80%.

n ≈ (1.96 + 0.84)² × (0.05×0.95 + 0.06×0.94) / (0.01)²
  ≈ 7.84 × (0.0475 + 0.0564) / 0.0001
  ≈ 7.84 × 0.1039 / 0.0001
  ≈ 8 150 на группу

Нужно ~8 150 пользователей в контроле и ~8 150 в тесте. Всего 16 300.

В Python

from statsmodels.stats.power import NormalIndPower

power_analysis = NormalIndPower()

n = power_analysis.solve_power(
    effect_size=0.05,   # Cohen's h for proportions
    alpha=0.05,
    power=0.80,
    ratio=1.0
)
print(f"N per group: {n:.0f}")

Компромиссы параметров

Больше N

  • Больше power (можно обнаружить меньший эффект)
  • Больше стоимость и время
  • Уже доверительный интервал

Больше α

  • Больше ложноположительных
  • Меньше N нужно (при том же power)
  • Обычно α фиксирован на 5%

Больше MDE

  • Меньше N нужно
  • Но пропустим реально существующий, но меньший эффект

Больше β (меньше power)

  • Меньше N
  • Больше ложноотрицательных
Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Частые случаи

«Запустил тест, p=0.10, что это значит?»

Не значимо. Может быть:

  • Реально нет эффекта
  • Эффект есть, но N мало (низкая мощность)

Post-hoc power analysis покажет, можно ли было его обнаружить.

«Бизнес хочет обнаружить +0.5% к конверсии»

Power analysis с MDE=0.5% → обычно N огромный (десятки-сотни тысяч). Обсудите компромисс.

«Тест идёт неделю, p=0.04, можно выключать?»

Если планировали 2 недели — нет (проблема подглядывания). Мощность рассчитана на полный период.

Эффект новизны

Эффект в начале теста может угаснуть. Power analysis это не учитывает — нужен достаточный период (обычно 2+ недели).

A priori vs post-hoc

A priori (до теста)

Планирование: сколько N нужно для обнаружения эффекта.

Стандартная практика.

Post-hoc (после теста)

Анализ: какая была мощность для наблюдаемого эффекта?

Спорно: если результат не значим, post-hoc power обычно низкая — это тавтология.

Правильнее — precision analysis (ширина доверительного интервала).

На собесе

«Что такое power?» Вероятность обнаружить реальный эффект.

«Почему 80%?» Конвенция. Баланс между ложноотрицательными и стоимостью.

«Как посчитать размер выборки?» Power analysis: α, power, MDE → N.

«MDE 1% или 5% — что лучше?» 1% → нужно больше N. 5% — меньше, но пропустим меньший эффект.

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

1. Не делать расчёт заранее

Запустить тест без расчёта N и потом гадать, почему «не вышло значимо».

2. Слепо брать MDE с потолка

MDE должен быть обоснован бизнесом: минимум, который окупает разработку. Не «давайте 1%, красиво звучит».

3. Игнорировать дисперсию метрики

Для revenue-per-user с тяжёлыми хвостами формула с пропорциями не подойдёт. Нужны t-test или bootstrap-оценка N.

4. Использовать post-hoc power как оправдание

«У нас была power 30%, поэтому не нашли» — это не аргумент. Надо было считать до запуска.

Связанные темы

FAQ

Что такое β?

Вероятность пропустить реальный эффект. Power = 1 − β.

Можно ли увеличить power без N?

Уменьшить дисперсию через CUPED. Или увеличить MDE (но тогда пропустим меньший эффект).

80% power обязательно?

Стандарт. Для критичных решений — 90% и выше.

Post-hoc power полезен?

Чаще запутывает, чем помогает. Precision analysis обычно лучше.