От каких переменных зависит размер выборки
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
От каких переменных зависит размер выборки в A/B тесте
Формула расчёта размера выборки
n = (Z_α/2 + Z_β)² × (σ² × (1 + 1)) / (δ)²
Или для простых случаев:
n = ((Z_α/2 + Z_β)² × p × (1-p)) / (δ)²
Где:
- n — размер выборки на одну группу (нужно удвоить для двух групп)
- Z_α/2 — z-значение для уровня значимости α
- Z_β — z-значение для мощности теста (1 - β)
- σ — стандартное отклонение метрики
- δ — минимально значимая разница (effect size), которую мы хотим выявить
- p — базовый уровень конверсии (для бинарных метрик)
Четыре ключевые переменные
1. Уровень значимости (α) — обычно 5% или 1%
Что это? Вероятность совершить ошибку первого рода (false positive) — сказать "результат значим", когда на самом деле разницы нет.
Примеры:
- α = 0.05 (95% уверенность) — стандарт для B2C
- α = 0.01 (99% уверенность) — для финансов, здоровья, критичных систем
Как влияет на размер выборки:
- Уменьшение α → увеличение Z_α/2 → больше нужно участников
- Для α=0.05: Z_α/2 = 1.96
- Для α=0.01: Z_α/2 = 2.58
- Соотношение: 2.58/1.96 = 1.32x больше участников
2. Статистическая мощность (1 - β) — обычно 80% или 90%
Что это? Вероятность выявить реальную разницу (true positive), если она существует.
Примеры:
- Power = 80% (β = 0.20) — стандарт
- Power = 90% (β = 0.10) — для важных решений
- Power = 99% (β = 0.01) — очень консервативно
Как влияет на размер выборки:
- Увеличение power → увеличение Z_β → больше нужно участников
- Для power=80%: Z_β = 0.84
- Для power=90%: Z_β = 1.28
- Увеличение power на 10% требует на 50-80% больше участников
3. Базовый размер эффекта (δ, Effect Size) — критическая переменная
Что это? Минимальное изменение метрики, которое нам интересно выявить.
Примеры:
- Конверсия с 10% на 11% (относительное улучшение 10%) → δ = 0.01
- Конверсия с 10% на 12% (относительное улучшение 20%) → δ = 0.02
- Retention с 50% на 55% (5 пункт-процентов) → δ = 0.05
Как влияет на размер выборки:
- Уменьшение δ → экспоненциально больше нужно участников
- Это самая важная переменная!
- Если δ уменьшится в 2 раза → n увеличится в 4 раза
- Если δ уменьшится в 3 раза → n увеличится в 9 раз
Практический пример:
- Хотим выявить улучшение конверсии с 5% на 5.5% (0.5 пп) → n ≈ 200,000 на группу
- Хотим выявить улучшение конверсии с 5% на 6% (1 пп) → n ≈ 50,000 на группу
- Хотим выявить улучшение конверсии с 5% на 7.5% (2.5 пп) → n ≈ 8,000 на группу
4. Базовая вариативность метрики (σ²)
Что это? Разброс значений метрики в базовой группе. Чем больше стандартное отклонение, тем больше шума в данных.
Примеры:
- Revenue per user: σ очень высокое (у кого-то $1, у кого-то $100) → нужен больший n
- Bounce rate: σ умеренное (25% ± 15%) → средний n
- Количество просмотров: σ может быть низким → маленький n
Как влияет на размер выборки:
- Увеличение σ → пропорционально больше нужно участников
- Если σ вырастет в 2 раза → n увеличится в 4 раза
Как снизить σ без увеличения n:
- Использовать CUPED (Controlled-Experiment Using Prediction As Covariable)
- Стратификация по когортам (разные n для разных групп)
- Фильтрация выбросов (но аккуратно!)
Взаимодействие переменных: практический пример
Тестируем change в checkout конверсии (базово 3%):
Сценарий 1: быстрое решение
- α = 0.05, Power = 80%, δ = 0.5% (с 3% на 3.5%, +17% relative)
- n ≈ 28,000 на группу (56,000 всего)
- Время: 2 недели при 4,000 пользователей/день
Сценарий 2: консервативное решение
- α = 0.01, Power = 90%, δ = 0.25% (с 3% на 3.25%, +8% relative)
- n ≈ 127,000 на группу (254,000 всего)
- Время: 2 месяца при 4,000 пользователей/день
Сценарий 3: оптимистичное решение
- α = 0.05, Power = 80%, δ = 1% (с 3% на 4%, +33% relative)
- n ≈ 6,300 на группу (12,600 всего)
- Время: 3 дня при 4,000 пользователей/день
Формула в Python для расчёта
from scipy.stats import norm
def calculate_sample_size(alpha=0.05, power=0.80, effect_size=0.05):
"""
Расчёт размера выборки для A/B теста
alpha: уровень значимости (0.05 = 5%)
power: статистическая мощность (0.80 = 80%)
effect_size: минимально значимое улучшение (0.05 = 5%)
"""
z_alpha = norm.ppf(1 - alpha/2) # двусторонний тест
z_beta = norm.ppf(power)
n = 2 * ((z_alpha + z_beta) / effect_size) ** 2
return int(n)
# Примеры
print(f"n при δ=0.05: {calculate_sample_size(effect_size=0.05)}") # ~3,146
print(f"n при δ=0.02: {calculate_sample_size(effect_size=0.02)}") # ~19,665
print(f"n при δ=0.01: {calculate_sample_size(effect_size=0.01)}") # ~78,660
Рекомендации для Product Analyst
- Начинай с базовых параметров: α=0.05, power=80%
- Определи минимально интересующее тебя улучшение (δ) — это стоит обсудить с бизнесом
- Рассчитай n и оцени, реалистично ли его достичь в разумные сроки
- Если n слишком большой, либо увеличь δ, либо умей объяснить, почему нужно ждать
- Документируй все параметры — это поможет при review результатов