От чего зависит нужное количество пользователей для теста
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
От чего зависит нужное количество пользователей для теста
Определение размера выборки для 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 дней
Таблица: Рекомендуемые размеры для типичных сценариев
| Метрика | Baseline | Effect | Alpha | Power | Users/group |
|---|---|---|---|---|---|
| Конверсия | 5% | 20% ↑ | 0.05 | 80% | ~3,850 |
| Конверсия | 5% | 10% ↑ | 0.05 | 80% | ~15,400 |
| Конверсия | 0.5% | 20% ↑ | 0.05 | 80% | ~38,900 |
| Удержание | 40% | 5% ↑ | 0.05 | 90% | ~2,900 |
| Дневной ARPU | 50 (σ=200) | 10% ↑ | 0.05 | 80% | ~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 "с потолка": должен быть обоснован бизнес-значимостью
- Игнорирование сезонности: тест на неправильной когорте может дать смещённые результаты
Итог
Размер выборки зависит от:
- Требуемая статистическая мощность (80-90%)
- Уровень значимости α (0.05)
- Ожидаемый эффект (самый критичный параметр)
- Базовый уровень метрики
- Вариативность данных
- Минимальная практически значимая разница
- Доступный трафик и время
Рекомендуемый подход:
- Используй специализированные калькуляторы (не ручные вычисления)
- Начни с 80% power, α=0.05
- Обсуди effect size с product-командой
- Проверь реалистичность через трафик
- Переиспользуй исторические данные для точности расчётов