Считаем выборку до запуска
// Условие
Продакт хочет протестировать новую карточку товара и ждёт от тебя план: сколько трафика нужно. Ожидаемый эффект — +1 п.п. к конверсии в покупку. У тебя есть данные за прошлый месяц (без всякого теста) — по ним нужно оценить базовую конверсию.
result — dict с ключами baseline, n_per_group.// Данные
user_id, converted (0/1) — юзеры прошлого месяца, БЕЗ разбивки на группы (тест ещё не запущен)// Решение
Подсказка
Базовая конверсия — просто df['converted'].mean().
Формула выборки на группу: n = (1.96 + 0.84)**2 * (p1*(1-p1) + p2*(1-p2)) / mde**2, где p1 — базовая конверсия, p2 = p1 + mde, mde = 0.01.
Сначала попробуй сам → Показать решение
df = load_data()
baseline = df['converted'].mean() # 5.0%
# α=0.05 двусторонний → z=1.96; мощность 80% → z=0.84
mde = 0.01
p1, p2 = baseline, baseline + mde
n_per_group = (1.96 + 0.84) ** 2 * (p1 * (1 - p1) + p2 * (1 - p2)) / mde ** 2
result = {'baseline': baseline, 'n_per_group': n_per_group}
print(result)
Трафик страницы — по 800 юзеров в день на группу. Продакт: «запустим на неделю». Твой ответ?
8150 / 800 ≈ 10.2 дня — планируй 11–14 с учётом недельной сезонности (лучше целое число недель). «Продлим, пока не появится значимость» — это peeking, накрутка ложноположительных. Ослаблять α задним числом ради дедлайна — торговля надёжностью решения: если цена ошибки мала, α=0.1 можно выбрать до теста, но не потому, что «так сходится календарь».