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

От чего зависит нужное количество пользователей для теста

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

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

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

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

От чего зависит нужное количество пользователей для теста

Определение размера выборки для A/B-теста — это ключевой вопрос в product analytics. Правильный расчёт необходим для того, чтобы тест был статистически значимым и экономически целесообразным.

1. Статистическая мощность теста (Statistical Power)

Что это: Вероятность обнаружить реальный эффект, если он существует.

Стандартные значения:

  • Мощность 80% - минимально приемлемая для большинства тестов
  • Мощность 90% - высокий стандарт для критичных решений
  • Мощность 95% - для очень важных метрик

Формула: При увеличении мощности требуется больше пользователей.

2. Уровень статистической значимости (Significance Level)

Стандартное значение: α = 0.05 (5% вероятность ошибки первого рода)

Что это значит:

  • В 5% случаев мы неправильно отклоним нулевую гипотезу (false positive)
  • При α = 0.01 (1%) требуется больше пользователей
  • При α = 0.10 (10%) требуется меньше, но риск выше

Влияние: Снижение α требует больше пользователей

3. Размер ожидаемого эффекта (Effect Size)

Примеры:

  • Конверсия выросла с 10% до 12% = 20% относительное улучшение (небольшой эффект)
  • Конверсия выросла с 10% до 15% = 50% относительное улучшение (средний эффект)
  • Конверсия выросла с 10% до 20% = 100% относительное улучшение (большой эффект)

Формула для расчёта:

from statsmodels.stats.power import proportions_ztest

# Параметры
baseline_conversion = 0.10  # 10% базовая конверсия
expected_conversion = 0.12  # 12% ожидаемая конверсия
effect_size = (expected_conversion - baseline_conversion) / baseline_conversion
print(f"Relative effect size: {effect_size:.1%}")  # 20%

# Расчёт требуемого размера выборки
required_sample_size = proportions_ztest(
    count1=None,
    nobs1=None,
    alternative='two-sided',
    effect_size=effect_size,
    alpha=0.05,
    power=0.80
)
print(f"Users per group: {required_sample_size}")

Влияние: Меньший эффект требует больше пользователей

4. Базовый уровень метрики (Baseline)

Сценарии:

  • Низкая базовая метрика (1-5% конверсия) - требует больше пользователей (выше вариативность)
  • Высокая базовая метрика (40-50% конверсия) - требует меньше пользователей
  • Очень низкая метрика (<1%, например, редкие события) - требует экспоненциально больше

Пример:

import math

def calculate_sample_size(baseline, effect, alpha=0.05, power=0.80):
    # Z-值
    z_alpha = 1.96  # для α=0.05, two-sided
    z_beta = 0.84   # для power=0.80
    
    # Вариативность пропорции
    variance = baseline * (1 - baseline)
    
    # Размер выборки на группу
    n = 2 * variance * (z_alpha + z_beta)**2 / (baseline * effect)**2
    return math.ceil(n)

# Сравнение разных baseline
for baseline in [0.01, 0.10, 0.25, 0.50]:
    n = calculate_sample_size(baseline, effect=0.2)
    print(f"Baseline {baseline:.1%}: {n:,} users per group")
# Baseline 1%: 98,905 users per group
# Baseline 10%: 9,892 users per group
# Baseline 25%: 3,942 users per group
# Baseline 50%: 3,922 users per group

5. Вариативность метрики (Variance / Standard Deviation)

Высокая вариативность (например, сумма покупки, время в приложении) требует больше пользователей.

Низкая вариативность (например, бинарное событие: клик/не-клик) требует меньше.

Способы снижения требуемого размера:

  • Использовать CUPED (Controlled Experiment Using Pre-Experiment Data)
  • Стратификация пользователей
  • ANCOVA (анализ ковариации)

6. Минимальный уровень практической значимости (Minimum Detectable Effect)

Вопрос: Какое минимальное изменение нам интересно обнаружить?

Пример для e-commerce:

  • Интересует ли нас улучшение на 1%? → много пользователей
  • Интересует ли нас улучшение на 10%? → меньше пользователей

7. Бюджет пользователей и время теста

Ограничения компании:

  • Сколько пользователей в день получает фича?
  • Сколько дней можно тестировать?

Пример:

  • 10,000 новых пользователей в день
  • Требуется 100,000 пользователей в группу
  • Можем разделить 50%: 5,000 в control, 5,000 в treatment
  • Время теста: 10 дней * 2 группы = 20 дней

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

МетрикаBaselineEffectAlphaPowerUsers/group
Конверсия5%20% ↑0.0580%~3,850
Конверсия5%10% ↑0.0580%~15,400
Конверсия0.5%20% ↑0.0580%~38,900
Удержание40%5% ↑0.0590%~2,900
Дневной ARPU50 (σ=200)10% ↑0.0580%~12,600

Практический чеклист для определения n

1. Определи метрику:

  • Первичная метрика? (используй для расчёта n)
  • Вторичные метрики? (следи, но не используй для остановки теста)

2. Укажи параметры:

  • Baseline (сегодняшний уровень)
  • Minimum Detectable Effect (что нам важно обнаружить?)
  • α (обычно 0.05)
  • Power (обычно 0.80)

3. Рассчитай требуемый размер:

  • Используй калькулятор (Evan Miller, Optimizely, собственный скрипт)
  • Умножь на 2 (две группы)

4. Проверь реалистичность:

  • Хватает ли трафика за разумное время?
  • Есть ли бизнес-лимиты на длительность теста?
  • Можно ли дождаться результата?

5. Согласуй с командой:

  • Product: стоит ли ждать результата?
  • Dev: есть ли технические ограничения?
  • Business: какой риск приемлем?

Типичные ошибки

  • Слишком мало пользователей: ложные отрицания, недостаточная мощность
  • Слишком много пользователей: пустая трата ресурсов, замораживание фичи на долгий срок
  • Выбор effect size "с потолка": должен быть обоснован бизнес-значимостью
  • Игнорирование сезонности: тест на неправильной когорте может дать смещённые результаты

Итог

Размер выборки зависит от:

  1. Требуемая статистическая мощность (80-90%)
  2. Уровень значимости α (0.05)
  3. Ожидаемый эффект (самый критичный параметр)
  4. Базовый уровень метрики
  5. Вариативность данных
  6. Минимальная практически значимая разница
  7. Доступный трафик и время

Рекомендуемый подход:

  • Используй специализированные калькуляторы (не ручные вычисления)
  • Начни с 80% power, α=0.05
  • Обсуди effect size с product-командой
  • Проверь реалистичность через трафик
  • Переиспользуй исторические данные для точности расчётов