A/B-тестыОсновыMediumБесплатно~10 мин

Значимо ≠ важно

// Условие

Огромный тест на главной странице маркетплейса — по 500 000 юзеров на группу. Данные уже агрегированы по группам. Новый блок рекомендаций дал «статистически значимый рост» — так написано в дашборде. Фича стоила два месяца работы команды, и её поддержка — ещё 0.5 инженера постоянно.

Что нужно
Посчитай конверсии, абсолютный прирост и p-value по агрегатам. Сохрани в result — dict с ключами diff, p_value.

// Данные

df: group, users, conversions — данные уже агрегированы, по строке на группу
▶ Решить в A/B-тренажёре

// Решение

Подсказка

Работать с агрегатами даже проще: conv = conversions / users. Достань строки через df.set_index('group').

z-тест тот же: пулированная доля — это суммарные конверсии, делённые на суммарных юзеров.

Прирост переведи в проценты от базы — сколько это денег при чеке из легенды?

Сначала попробуй сам → Показать решение
df = load_data()
from scipy import stats

t = df.set_index('group')
pa = t.loc['A', 'conversions'] / t.loc['A', 'users']
pb = t.loc['B', 'conversions'] / t.loc['B', 'users']
diff = pb - pa

p_pool = df['conversions'].sum() / df['users'].sum()
se = (p_pool * (1 - p_pool) * (1 / t.loc['A', 'users'] + 1 / t.loc['B', 'users'])) ** 0.5
z = diff / se
p_value = 2 * (1 - stats.norm.cdf(abs(z)))

result = {'diff': diff, 'p_value': p_value}
print(result)
При 500 000 юзеров на группу тест видит микроскопические эффекты: +0.15 п.п. даёт p ≈ 0.013. Мощность — как микроскоп: чем больше выборка, тем мельче различия она превращает в «значимые». Поэтому вопрос «а важен ли эффект?» отделён от вопроса «а есть ли он?».

Дашборд говорит «значимо». Что скажешь на демо фичи?

  • ✓ Эффект реален (p ≈ 0.013), но крошечный: +0.15 п.п. (+1.5% относительных). Прежде чем праздновать, посчитаем: окупает ли такой прирост 0.5 инженера на поддержку
  • p < 0.05 — фича успешна, поздравляю команду, раскатываем и празднуем
  • Эффект слишком мал, чтобы быть настоящим — при такой выборке любые различия «значимы», это артефакт
  • Надо перезапустить тест на меньшей выборке — там будет видно честнее

Обе крайности неверны. Эффект настоящий — большая выборка не «рисует» различия, а честно находит маленькие. Но статистическая значимость отвечает только на вопрос «есть ли эффект», а решение принимается по вопросу «окупается ли он»: +0.15 п.п. конверсии против стоимости разработки и вечной поддержки. Уменьшать выборку, чтобы «стало честнее», — это просто ослеплять микроскоп.

// Похожие задачи

// Разобраться в теме

→ p-value простыми словами