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

Как определить необходимый размер выборки для эксперимента?

2.0 Middle🔥 251 комментариев
#Статистика и A/B тестирование

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

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

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

Как определить необходимый размер выборки для эксперимента?

Определение размера выборки (sample size) это критический шаг в дизайне A/B тестов и других экспериментов. Недостаточный размер выборки приводит к низкой мощности теста и ошибкам типа II (пропускаем реальный эффект). Слишком большой размер это пустая трата ресурсов и времени.

Основные параметры для расчета

Размер выборки зависит от четырёх ключевых параметров:

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

Вероятность ошибки типа I (ложноположительный результат). Стандартное значение alpha = 0.05 (5%).

2. Статистическая мощность (power)

Вероятность обнаружить реальный эффект. Стандартное значение power = 0.8 (80%). Это означает, что если эффект действительно существует, тест обнаружит его в 80% случаев.

3. Величина эффекта (effect size)

Наименьший практически значимый эффект, который нам нужно обнаружить. Это зависит от бизнес-контекста.

4. Базовая конверсия (baseline conversion)

Текущее значение метрики, которую мы хотим улучшить.

Расчет размера выборки для бинарных метрик

Для конверсии в A/B тесте используем формулу из статистики. Пример расчета на Python:

import numpy as np
from scipy.stats import norm

def calculate_sample_size_binary(
    baseline_conversion,
    min_effect_size,
    alpha=0.05,
    power=0.80
):
    target_conversion = baseline_conversion + min_effect_size
    z_alpha = norm.ppf(1 - alpha / 2)
    z_beta = norm.ppf(power)
    
    p1 = baseline_conversion
    p2 = target_conversion
    
    n = (z_alpha * np.sqrt(2 * p1 * (1 - p1)) + 
         z_beta * np.sqrt(p1 * (1 - p1) + p2 * (1 - p2)))**2 / (p1 - p2)**2
    
    return int(np.ceil(n))

baseline = 0.05
min_effect = 0.01

n_per_group = calculate_sample_size_binary(baseline, min_effect)
print(f'Размер выборки на группу: {n_per_group:,}')
print(f'Общий размер: {n_per_group * 2:,}')

Расчет для непрерывных метрик

Для среднего значения (например, среднее время на сайте):

def calculate_sample_size_continuous(
    baseline_mean,
    baseline_std,
    min_effect_size,
    alpha=0.05,
    power=0.80
):
    z_alpha = norm.ppf(1 - alpha / 2)
    z_beta = norm.ppf(power)
    
    cohens_d = min_effect_size / baseline_std
    n = 2 * ((z_alpha + z_beta) / cohens_d)**2
    
    return int(np.ceil(n))

baseline_mean = 10
baseline_std = 5
min_effect = 1

n_per_group = calculate_sample_size_continuous(baseline_mean, baseline_std, min_effect)
print(f'Размер выборки на группу: {n_per_group:,}')

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

Для интернет-магазина с текущей конверсией 2%, хотим обнаружить улучшение на 0.5%:

baseline_conversion = 0.02
min_detectable_effect = 0.005

n_per_group = calculate_sample_size_binary(baseline_conversion, min_detectable_effect)

print(f'Baseline конверсия: {baseline_conversion * 100:.1f}%')
print(f'Минимальный эффект: {min_detectable_effect * 100:.1f}%')
print(f'Размер выборки на группу: {n_per_group:,}')
print(f'Общий размер: {n_per_group * 2:,}')
print(f'При 1000 посещений в день, время теста: {n_per_group * 2 / 1000:.1f} дней')

Таблица ориентировочных размеров выборки

Для 5% конверсии, alpha=0.05, power=0.8

Минимальный эффектРазмер на группуОбщий размерДней (1k/день)
0.25% (5% рост)20,47640,95241
0.5% (10% рост)5,11910,23810
1% (20% рост)1,2802,5603
2% (40% рост)3206401

Важные замечания

Непрерывное мониторирование это ошибка

Неправильно: проверять результаты каждый день и останавливать тест когда p < 0.05. Это увеличивает реальный уровень значимости!

Правильно: определить размер выборки ДО начала теста и не смотреть на результаты до конца.

Множественные сравнения

Если тестируем несколько гипотез одновременно, нужна коррекция Bonferroni: alpha_corrected = 0.05 / n_hypotheses

Учет реальных условий

Добавляйте 20-50% буфер к расчетному размеру для компенсации дневных трендов, сезонности и других неожиданных факторов.

Инструменты

  • Онлайн калькулятор: evanmiller.org
  • statsmodels библиотека для Python
  • G*Power для Windows

Резюме

  1. Определи метрику (конверсия, время, доход и т.д.)
  2. Установи baseline (текущее значение)
  3. Определи MDE (Minimum Detectable Effect)
  4. Выбери уровень значимости (обычно 0.05)
  5. Выбери мощность теста (обычно 0.80)
  6. Рассчитай размер выборки
  7. Добавь буфер (~30%)
  8. НЕ подглядывай в результаты до конца теста

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