← Назад к вопросам

Что такое статистическая мощность теста (statistical power)?

2.4 Senior🔥 61 комментариев
#Статистические критерии и тесты

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Statistical Power: Мощность Статистического Теста

Статистическая мощность (Power) — это вероятность того, что тест правильно обнаружит эффект, когда он действительно существует. Другими словами, это способность теста избежать ошибки Type II (ложноотрицательный результат). Обычно целевой уровень мощности составляет 80-90%.

Типы Ошибок в Статистике

ОшибкаОпределениеОбозначение
Type I (Ложноположительный)Отклонить H0, хотя она вернаα (alpha)
Type II (Ложноотрицательный)Не отклонить H0, хотя она ложнаβ (beta)

Мощность = 1 - β

Пример

Тестируем новый дизайн кнопки в A/B тесте:

  • H0 (нулевая гипотеза): Дизайн не влияет на конверсию
  • H1 (альтернативная гипотеза): Дизайн увеличивает конверсию
РезультатH0 верна (эффекта нет)H0 ложна (эффект есть)
Отклонить H0Type I Error (α)✓ Correct (Power = 1-β)
Не отклонить H0✓ CorrectType II Error (β)

Высокая мощность означает, что если дизайн действительно работает, мы это обнаружим.

Что Влияет на Мощность?

1. Размер эффекта (Effect Size)

Чем больше реальный эффект, тем выше мощность. Для конверсии:

Effect Size = (p1 - p0) / sqrt(p0 * (1 - p0))

где p0 = базовая конверсия, p1 = новая конверсия

Пример:

  • Базовая конверсия: 5%
  • Новая конверсия: 6%
  • Эффект: 1 percentage point, но относительный рост 20%

2. Размер выборки (Sample Size)

Больше данных = выше мощность. Зависит экспоненциально.

3. Уровень значимости (α)

Обычно α = 0.05 (5%). Меньше α = выше требования к выборке.

4. Двусторонний vs Односторонний тест

Двусторонний тест (мы проверяем изменение в обе стороны) имеет меньше мощности, чем односторонний.

Расчёт Мощности

Python с использованием statsmodels:

from statsmodels.stats.power import proportions_ztest
import numpy as np

# Параметры
effect_size = 0.1  # Малый эффект (Cohen's h)
alpha = 0.05  # Уровень значимости
power = 0.8  # Желаемая мощность

# Размер выборки, нужный для достижения этой мощности
sample_size = proportions_ztest(
    effect_size=effect_size,
    nobs=None,
    alpha=alpha,
    power=power,
    alternative='two-sided'
)

print(f"Нужно {sample_size:.0f} пользователей на группу")

Python для расчёта мощности по существующей выборке:

from scipy.stats import norm

def calculate_power(n, baseline_p, new_p, alpha=0.05):
    """
    n: размер выборки на группу
    baseline_p: базовая конверсия
    new_p: ожидаемая новая конверсия
    alpha: уровень значимости
    """
    # Стандартная ошибка
    se_baseline = np.sqrt(baseline_p * (1 - baseline_p) / n)
    se_new = np.sqrt(new_p * (1 - new_p) / n)
    se_diff = np.sqrt(se_baseline**2 + se_new**2)
    
    # Z-статистика для критического значения
    z_critical = norm.ppf(1 - alpha / 2)
    
    # Разница в пропорциях
    effect = new_p - baseline_p
    
    # Z-статистика для истинного эффекта
    z_effect = effect / se_diff
    
    # Мощность
    power = norm.cdf(z_effect - z_critical) + (1 - norm.cdf(z_effect + z_critical))
    
    return power

# Пример
power = calculate_power(n=5000, baseline_p=0.05, new_p=0.06)
print(f"Мощность: {power:.1%}")

Правила Расчёта Размера Выборки

Для A/B тестов конверсии:

-- SQL для проверки мощности существующего теста
SELECT
    variant,
    COUNT(*) as sample_size,
    SUM(CASE WHEN converted = TRUE THEN 1 ELSE 0 END) as conversions,
    ROUND(100.0 * SUM(CASE WHEN converted = TRUE THEN 1 ELSE 0 END) / COUNT(*), 2) as conversion_rate
FROM ab_test
WHERE test_start_date >= CURRENT_DATE - INTERVAL 30 day
GROUP BY variant;

Практические рекомендации:

Размер эффектаТребуемый размер выборкиВремя теста
0.5% (малый)100k+ на группу2-4 недели
1% (средний)25k-50k на группу1-2 недели
2% (большой)5k-10k на группу3-5 дней
5% (очень большой)1k-2k на группу1-2 дня

Практический Пример

Сценарий: Тестируем изменение цены подписки

  • Текущая конверсия: 3%
  • Ожидаемый эффект: +0.5% (до 3.5%)
  • Желаемая мощность: 80%
  • Уровень значимости: 5%
from statsmodels.stats.proportion import proportions_ztest

# Требуемый размер выборки
n = proportions_ztest(
    effect_size=0.05,
    nobs=None,
    alpha=0.05,
    power=0.80,
    alternative='two-sided'
)

print(f"Нужно ~{n:.0f} пользователей на группу")
print(f"Всего: {2 * n:.0f} пользователей")
print(f"При 100k/день: {2*n/100000:.1f} дней")

Результат: ~15,400 на группу, 30,800 всего, 7-8 часов тестирования.

Ошибки и Риски

Низкая мощность:

  • Пропускаешь реальные эффекты
  • Инвестируешь в изменения, которые имеют смысл, но не обнаруживаешь это
  • Пример: дизайн работает (реально +2%), но выборка мала и мощность только 30%

Слишком высокая выборка:

  • Обнаруживаешь статистически значимые, но практически неважные эффекты
  • Пример: дизайн дал +0.01% конверсии, статистически значимо, но бесполезно

Решение: Используй практическое значение эффекта (Minimum Detectable Effect)

# Какой минимальный эффект для тебя имеет значение?
min_effect = 0.5  # 0.5% поднятие конверсии стоит затрат

# Рассчитай размер выборки для этого эффекта
# (не для любого, а для того, который имеет смысл)

Инструменты

Online калькуляторы:

Python библиотеки:

pip install statsmodels scipy numpy

Ключевые Выводы

  1. Мощность = вероятность найти эффект, если он существует
  2. Целевая мощность: 80-90%
  3. Мощность зависит от: размера эффекта, размера выборки, α
  4. Всегда рассчитывай размер выборки до теста
  5. Не приди к статистической значимости случайно — планируй заранее
  6. Низкая мощность = высокий риск Type II ошибок

Хороший Data Analyst планирует тесты, а не ждёт результатов: сначала мощность, потом данные.