Мощность теста (Power) — что это и зачем нужна
Что такое мощность теста
Мощность теста (statistical power) — это вероятность обнаружить эффект, если он реально существует. Формально: power = 1 − β, где β — вероятность ошибки второго рода (false negative).
Если мощность теста равна 80%, это значит: при наличии реального эффекта тест обнаружит его в 80 случаях из 100. В оставшихся 20% тест покажет незначимый результат, и вы ошибочно решите, что эффекта нет.
Стандартная целевая мощность — 80% (β = 0.20). Для критически важных решений — 90% (β = 0.10). Ниже 80% — тест считается underpowered.
Четыре связанных параметра
Мощность теста определяется четырьмя параметрами. Зная любые три, можно вычислить четвёртый.
1. Размер выборки (n). Больше данных — точнее оценка — выше мощность. Это главный рычаг, который вы контролируете.
2. Размер эффекта (MDE). Minimum detectable effect — минимальная разница, которую вы хотите уловить. Чем крупнее эффект, тем проще его обнаружить, тем выше мощность.
3. Уровень значимости (alpha). Порог для p-value. Чем больше alpha (например, 0.10 вместо 0.05), тем легче отклонить H0, тем выше мощность. Но растёт и риск ошибки первого рода.
4. Мощность (power). Целевая вероятность обнаружить эффект. Обычно 0.80 или 0.90.
Эти четыре параметра связаны жёстко. Нельзя одновременно иметь маленькую выборку, ловить мелкие эффекты, держать строгий alpha и при этом рассчитывать на высокую мощность. Что-то придётся ослабить.
Что влияет на мощность
Больше выборка — выше мощность. Самый надёжный способ. Удвоение выборки не удваивает мощность, но существенно её поднимает. Это основной инструмент при планировании A/B тестов.
Больше эффект — выше мощность. Разницу в 10% конверсии поймать легко. Разницу в 0.1% — нужна огромная выборка. Поэтому перед тестом определите MDE: какая минимальная разница имеет для вас практический смысл?
Больше alpha — выше мощность. Ослабив порог значимости (с 0.05 до 0.10), вы повысите мощность — но увеличите риск ложного срабатывания. Обычно alpha не трогают — проще набрать больше данных.
Меньше дисперсия — выше мощность. Если метрика «шумная» (большой разброс значений), эффект сложнее обнаружить. Методы вроде CUPED снижают дисперсию и повышают мощность без увеличения выборки.
Power analysis: расчёт ДО эксперимента
Power analysis — обязательный этап перед запуском любого A/B теста. Его цель — определить необходимый размер выборки, чтобы тест имел достаточную мощность.
Логика: вы фиксируете alpha (0.05), целевую мощность (0.80) и MDE (минимальный эффект, который важен бизнесу). Power analysis возвращает размер выборки — сколько наблюдений нужно на каждую группу.
Без power analysis вы рискуете запустить тест, который заведомо не сможет обнаружить эффект. Это потраченное время, трафик и ресурсы разработки.
Пример: A/B тест конверсии
Вы хотите проверить, увеличивает ли новый дизайн страницы оплаты конверсию. Текущая конверсия — 5%. Минимально значимый прирост — 1 процентный пункт (MDE = 0.01, с 5% до 6%). Требования: alpha = 0.05, мощность = 80%.
Расчёт на Python:
from statsmodels.stats.power import NormalIndPower
power_analysis = NormalIndPower()
# Размер эффекта Коэна (effect size)
# Для пропорций: h = 2 * arcsin(sqrt(p)) — используем proportion_effectsize
from statsmodels.stats.proportion import proportion_effectsize
effect_size = proportion_effectsize(0.06, 0.05)
n = power_analysis.solve_power(
effect_size=effect_size,
alpha=0.05,
power=0.80,
alternative='two-sided'
)
print(f"Размер эффекта (Cohen's h): {effect_size:.4f}")
print(f"Нужно наблюдений на группу: {int(n) + 1}")
# Размер эффекта (Cohen's h): ~0.043
# Нужно наблюдений на группу: ~4244Итого: примерно 4 244 пользователя на каждую группу, ~8 500 суммарно. Если ваш дневной трафик — 500 пользователей, тест займёт около 17 дней.
Underpowered тесты: почему это опасно
Underpowered тест — тест с мощностью значительно ниже 80%. Типичная причина: маленькая выборка или попытка уловить слишком мелкий эффект.
Проблема 1: вы пропускаете реальные эффекты. Тест с мощностью 30% обнаружит эффект только в 3 случаях из 10. В остальных 7 вы решите, что фича не работает, и откатите работающее улучшение.
Проблема 2: завышенный размер эффекта. Если underpowered тест всё-таки даёт значимый результат, обнаруженный эффект почти наверняка завышен. Это называется winner's curse: чтобы пробить порог значимости при малой выборке, эффект должен был «повезти» и оказаться крупнее реального.
Проблема 3: трата ресурсов впустую. Вы потратили трафик, время разработки и аналитики — и не получили информации. Тест ничего не доказал и ничего не опроверг.
Типичные ошибки
Запуск теста без power analysis. Самая частая ошибка. Тест запускается «на глаз» — сколько наберётся трафика за неделю, столько и будет. В результате мощность может оказаться 20-30%, и тест бесполезен.
Post-hoc power analysis. Тест завершился, результат незначимый. Аналитик считает мощность задним числом и пишет: «мощность была 40%, поэтому незначимый результат ожидаем». Это бессмысленно. Post-hoc power — функция от наблюдаемого p-value: чем больше p-value, тем ниже post-hoc power. Никакой новой информации вы не получаете. Мощность нужно считать до теста.
Ориентация на нереалистичный MDE. Если реальный эффект — 0.5%, а вы рассчитали тест на MDE = 5%, мощность для реального эффекта будет мизерной. MDE должен отражать ожидаемый или минимально интересный размер эффекта, а не оптимистичные фантазии.
Вопросы с собеседований
1. Что такое мощность теста? Как она связана с ошибкой второго рода?
Мощность теста — вероятность обнаружить реальный эффект. Power = 1 − β, где β — вероятность ошибки второго рода (пропуск эффекта). Мощность 80% означает, что тест обнаружит эффект в 80% случаев, а в 20% ошибочно покажет незначимый результат.
2. Как увеличить мощность A/B теста?
Четыре способа: увеличить размер выборки, ориентироваться на больший MDE, увеличить alpha (ослабить порог значимости), снизить дисперсию метрики (CUPED, стратификация, предфильтрация). На практике основной рычаг — выборка.
3. Зачем нужен power analysis до запуска теста?
Чтобы определить необходимый размер выборки и длительность эксперимента. Без power analysis вы рискуете запустить underpowered тест, который не обнаружит реальный эффект. Это потраченное время и трафик без результата.
4. Тест показал p = 0.15. Коллега предлагает посчитать post-hoc power. Имеет ли это смысл?
Нет. Post-hoc power — прямая функция от p-value: при p = 0.15 мощность будет низкой, при p = 0.01 — высокой. Новой информации вы не получаете. Правильный подход: считать мощность до эксперимента. Если тест уже завершился — смотрите на доверительный интервал, он покажет диапазон возможных эффектов.
5. Мощность 80%, alpha 5%. Что это значит для серии из 100 тестов?
Из тестов, где эффект реально есть, вы обнаружите его в 80% случаев (пропустите 20%). Из тестов, где эффекта нет, в 5% ошибочно получите «значимый» результат. Если из 100 тестов в 30 есть реальный эффект — ожидаете обнаружить 24 из них и получить ~3.5 ложных срабатывания из оставшихся 70.
Потренируйтесь на задачах по статистике и A/B тестам — откройте тренажёр.
FAQ
Что такое мощность статистического теста простыми словами?
Мощность — это вероятность обнаружить эффект, если он реально существует. Power = 1 − β. Стандартный порог — 80%: тест обнаружит эффект в 8 случаях из 10. Остальные 20% — ошибка второго рода, когда реальный эффект остаётся незамеченным.
Почему стандартная мощность именно 80%?
Это конвенция, предложенная Джейкобом Коэном. 80% — компромисс между надёжностью и стоимостью. Увеличение мощности до 90% требует примерно на 30% больше выборки, до 95% — почти вдвое. Для большинства продуктовых тестов 80% — разумный баланс.
Чем опасен underpowered тест?
Underpowered тест с высокой вероятностью покажет незначимый результат, даже если эффект есть. Вы потратите трафик и время, но не получите ответа. А если underpowered тест всё-таки даст значимость — обнаруженный эффект, скорее всего, будет завышен (winner's curse). Всегда считайте размер выборки заранее.
Как рассчитать мощность теста в Python?
Используйте statsmodels.stats.power. Для сравнения пропорций — NormalIndPower, для средних — TTestIndPower. Задайте effect size, alpha и нужную мощность — метод solve_power() вернёт необходимый размер выборки. Подробный пример — в разделе выше.