Несколько метрик в A/B-тесте: как не выбрать случайную победу

Новый экран поднял конверсию, удержание и выручку — так звучит отчёт, если в трёх строках scorecard нашлись p-value 0,004, 0,030 и 0,040. Каждое меньше 0,05. Но три независимые попытки найти эффект чаще дают хотя бы одно случайное «попадание», чем одна попытка. Даже при зависимости метрик вопрос множества проверок не исчезает.

Сначала определите семейство гипотез, по которому будете делать общий вывод. Например, все три метрики объявлены главными критериями успеха экрана. Если после результата выбрать только ту, у которой p-value самое маленькое, семейство фактически всё равно состояло из всех просмотренных кандидатов. Ограничения безопасности и исследовательские срезы можно описывать отдельно, не превращая их задним числом в главную победу.

Как работает шаговая поправка Холма

Отсортируем p-value от малого к большому. Первое сравним с 0,05/3, второе — с 0,05/2, третье — с 0,05. Как только одна гипотеза не прошла свою границу, дальнейшие тоже не объявляются значимыми в этом семействе. Такой порядок контролирует вероятность хотя бы одного ложного отклонения в семействе при условиях корректных исходных p-value.

pvalues = {'conversion': 0.004, 'retention': 0.030, 'revenue': 0.040}
alpha = 0.05
ordered = sorted(pvalues.items(), key=lambda item: item[1])
can_continue = True
for rank, (metric, p) in enumerate(ordered):
    threshold = alpha / (len(ordered) - rank)
    reject = can_continue and p <= threshold
    can_continue = reject
    print(metric, 'p=', p, 'limit=', round(threshold, 4), 'reject=', reject)

Конверсия с p=0,004 проходит порог примерно 0,0167. Удержание с p=0,030 не проходит порог 0,025, и процедура останавливает отклонение. Выручка с p=0,040 меньше обычного 0,05, но после остановки также не объявляется доказанным эффектом в данном семействе. Код печатает эти решения по каждой строке.

Поправка не меняет наблюдаемые величины эффекта. Покажите конверсию, удержание и выручку в исходных единицах вместе с интервалами и числом пользователей. Статистическое решение отвечает на вопрос о неопределённости, а бизнес-решение дополнительно учитывает масштаб роста и возможный вред. Малое p-value у крошечного эффекта не делает изменение выгодным автоматически.

Поправка Холма применяется к уже корректно посчитанным p-value. Если вы посчитали каждую оплату как независимого пользователя или остановили тест при удобном промежуточном результате, она не исправит исходную ошибку дизайна. Установите единицу рандомизации, окно метрики и момент финального анализа до запуска.

Семейство не обязано включать каждую диагностическую метрику на дашборде. Если конверсия — заранее назначенная основная гипотеза, а выручка и удержание используются как ограничения безопасности, это другая структура решения. Нельзя лишь после просмотра результатов объявить значимую метрику «единственной главной», а остальные забыть. Зафиксируйте роли метрик в плане эксперимента.

На практике p-value часто связаны: конверсия в покупку влияет и на выручку. Поправка Холма полезна тем, что контроль семейной ошибки не требует предположения о независимости этих p-value, если отдельные тесты корректны. При большой корреляции она может быть консервативной, но это не повод применять три обычных порога без учёта того, что делается общий вывод.

Посмотрите на величины в исходных единицах. Если конверсия выросла на 0,1 процентного пункта, а выручка одновременно снизилась на крупную сумму с широким интервалом, формальная «победа» по конверсии не закрывает продуктовый вопрос. Множественная поправка отвечает на риск случайного сигнала, но не заменяет договорённости о том, какой эффект достаточно велик и какие ограничения нельзя нарушать.

В курсе «A/B тесты и анализ данных на Python» вы выбираете метрики успеха, рассчитываете длительность и разбираете ошибки множественных проверок вместе с интерпретацией эффекта. Практика использует Python и SQL. Откройте программу курса, чтобы читать многометриковый отчёт как часть эксперимента, а не как список удачных p-value.

Для отдельного расчёта интервала по денежной метрике полезен разбор бутстрапа среднего чека на уровне пользователей.

Продолжить на практике

  • A/B тесты и анализ данных на Python ↗

    Практический курс по A/B-тестированию и продуктовым метрикам: формулируем гипотезы, считаем размер выборки, запускаем эксперименты и анализируем результаты. От первой идеи до внедрения изменений в продукт — без «воды» и лишней теории.