Как определить необходимый размер выборки для эксперимента?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Как определить необходимый размер выборки для эксперимента?
Определение размера выборки (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,476 | 40,952 | 41 |
| 0.5% (10% рост) | 5,119 | 10,238 | 10 |
| 1% (20% рост) | 1,280 | 2,560 | 3 |
| 2% (40% рост) | 320 | 640 | 1 |
Важные замечания
Непрерывное мониторирование это ошибка
Неправильно: проверять результаты каждый день и останавливать тест когда p < 0.05. Это увеличивает реальный уровень значимости!
Правильно: определить размер выборки ДО начала теста и не смотреть на результаты до конца.
Множественные сравнения
Если тестируем несколько гипотез одновременно, нужна коррекция Bonferroni: alpha_corrected = 0.05 / n_hypotheses
Учет реальных условий
Добавляйте 20-50% буфер к расчетному размеру для компенсации дневных трендов, сезонности и других неожиданных факторов.
Инструменты
- Онлайн калькулятор: evanmiller.org
- statsmodels библиотека для Python
- G*Power для Windows
Резюме
- Определи метрику (конверсия, время, доход и т.д.)
- Установи baseline (текущее значение)
- Определи MDE (Minimum Detectable Effect)
- Выбери уровень значимости (обычно 0.05)
- Выбери мощность теста (обычно 0.80)
- Рассчитай размер выборки
- Добавь буфер (~30%)
- НЕ подглядывай в результаты до конца теста
Правильный расчет размера выборки экономит деньги и время, обеспечивая статистическую надежность результатов.