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

Как определить размер выборки для A/B теста?

2.0 Middle🔥 161 комментариев
#A/B-тестирование#Статистика и теория вероятностей

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

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

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

Определение размера выборки для 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₁)²

Где:

  • = 1.96 для α = 0.05 (двусторонний тест)
  • = 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 теста.

Как определить размер выборки для A/B теста? | PrepBro