Как определить размер выборки для A/B теста?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Определение размера выборки для A/B теста
Определение адекватного размера выборки — критический этап планирования A/B теста. Недостаточный размер выборки приведёт к низкой статистической мощности и невозможности выявить реальные различия, а чрезмерно большая выборка потратит ресурсы впустую. Правильный расчёт основан на статистических принципах.
Основные параметры расчёта
1. Significance Level (α) — Уровень значимости
Обычно устанавливается на уровне 0.05 (5%). Это вероятность совершить ошибку первого рода (Type I Error) — отклонить верную гипотезу. В практике используют двусторонний тест, поэтому α/2 = 0.025.
2. Statistical Power (1 - β) — Статистическая мощность
Обычно 0.80 (80%), что означает вероятность 80% выявить реальный эффект. β = 0.20 — вероятность ошибки второго рода (Type II Error), когда не обнаруживаем реальное различие.
3. Baseline Conversion Rate (p₁) — Базовая конверсия
Текущая конверсия контрольной группы. Если текущая конверсия кнопки «Купить» = 5%, то p₁ = 0.05.
4. Minimum Detectable Effect (MDE) или Relative Lift
Минимальный эффект, который мы хотим выявить. Если базовая конверсия 5% и мы хотим обнаружить улучшение на 20% (relative lift), то p₂ = 0.05 × 1.20 = 0.06.
5. Expected Conversion Rate (p₂) — Ожидаемая конверсия
Предполагаемая конверсия для вариантов А/В.
Формула расчёта размера выборки
Для тестирования пропорций (конверсия, CTR и т.д.) используется формула:
n = 2 × (Zα + Zβ)² × (p₁(1-p₁) + p₂(1-p₂)) / (p₂ - p₁)²
Где:
- Zα = 1.96 для α = 0.05 (двусторонний тест)
- Zβ = 0.84 для β = 0.20 (статистическая мощность 80%)
- n = размер выборки на группу
- Общий размер выборки = 2 × n (для контрольной и тестовой группы)
Практический пример расчёта
Предположим:
- Текущая конверсия: 5% (p₁ = 0.05)
- Желаемый лифт: 25% (новая конверсия p₂ = 0.05 × 1.25 = 0.0625)
- Уровень значимости: α = 0.05
- Мощность: 80% (β = 0.20)
n = 2 × (1.96 + 0.84)² × (0.05×0.95 + 0.0625×0.9375) / (0.0625 - 0.05)²
n = 2 × (2.80)² × (0.0475 + 0.0586) / (0.0125)²
n = 2 × 7.84 × 0.1061 / 0.00015625
n ≈ 2 × 7.84 × 0.1061 / 0.00015625
n ≈ 8,463
Общий размер выборки: ≈ 17,000 пользователей (8,500 на контрольную группу, 8,500 на тестовую).
Python-расчёт размера выборки
from scipy.stats import norm
import math
def calculate_sample_size(p1, p2, alpha=0.05, beta=0.20, two_tailed=True):
"""
Расчёт размера выборки для A/B теста
Args:
p1: baseline conversion rate
p2: expected conversion rate
alpha: significance level (default 0.05)
beta: type II error rate (default 0.20)
two_tailed: использовать двусторонний тест
Returns:
sample_size_per_group: размер выборки на одну группу
total_sample_size: общий размер выборки
"""
# Z-values для стандартных уровней
if two_tailed:
z_alpha = norm.ppf(1 - alpha / 2)
else:
z_alpha = norm.ppf(1 - alpha)
z_beta = norm.ppf(1 - beta)
# Расчёт дисперсии
variance = p1 * (1 - p1) + p2 * (1 - p2)
# Размер выборки на группу
n = 2 * (z_alpha + z_beta) ** 2 * variance / (p2 - p1) ** 2
return math.ceil(n), math.ceil(2 * n)
# Пример
p1 = 0.05 # текущая конверсия 5%
p2 = 0.0625 # ожидаемая 6.25% (лифт 25%)
n_per_group, total_n = calculate_sample_size(p1, p2)
print(f"Размер выборки на группу: {n_per_group:,}")
print(f"Общий размер выборки: {total_n:,}")
SQL для подсчёта текущего размера
SELECT
COUNT(DISTINCT user_id) as total_users,
COUNT(CASE WHEN converted = true THEN 1 END) as conversions,
ROUND(100.0 * COUNT(CASE WHEN converted = true THEN 1 END) / COUNT(*), 2) as conversion_rate,
DATE_TRUNC('day', MIN(created_at)) as test_start_date,
DATE_TRUNC('day', MAX(created_at)) as test_end_date
FROM user_sessions
WHERE test_variant IN ('control', 'variant_a')
AND created_at >= CURRENT_DATE - INTERVAL '30 days';
Факторы, влияющие на размер выборки
Уменьшают размер выборки:
- Высокая текущая конверсия (нужен меньший лифт для обнаружения)
- Высокий желаемый лифт (больший эффект легче обнаружить)
- Более высокий уровень значимости (α = 0.10 вместо 0.05)
Увеличивают размер выборки:
- Низкая текущая конверсия (большая дисперсия)
- Малый желаемый лифт
- Требуемая высокая статистическая мощность (90% вместо 80%)
Онлайн-инструменты
Для быстрого расчёта используйте:
- Optimizely Sample Size Calculator
- Evan Miller's A/B Test Calculator
- VWO Sample Size Calculator
Ключевые рекомендации
- Всегда планируйте размер выборки ДО запуска теста
- Используйте консервативные параметры (α = 0.05, β = 0.20)
- Учитывайте сезонность и праздники при планировании длительности
- Не останавливайте тест раньше плана (Peeking Problem)
- Документируйте все параметры расчёта для воспроизводимости
Правильный расчёт размера выборки обеспечивает статистическую уверенность в результатах A/B теста.