Короткий ответ
При проверке множества метрик без поправки вероятность получить хотя бы одну ложноположительную значимость существенно выше заявленного alpha для одной метрики — это проблема множественных сравнений. Для контроля общей ошибки применяют поправки, например Bonferroni или Holm, или заранее ограничивают число ключевых метрик.
Как это работает подробнее
при независимых метриках и alpha=0.05 вероятность хотя бы одного ложного срабатывания среди m метрик растёт примерно как 1-(1-alpha)^m; при m=10 это уже около 40%, а не 5%.
Пример кода
example.py
from statsmodels.stats.multitest import multipletests
pvalues = [0.01, 0.20, 0.04, 0.50, 0.03, 0.60, 0.08, 0.45, 0.02, 0.30]
reject, p_adj, _, _ = multipletests(pvalues, alpha=0.05, method='holm')
print(reject, p_adj)Что использовать на практике
- поправка Bonferroni делит alpha на число сравнений (alpha/m для каждой метрики) — простая, но консервативная; поправка Holm менее консервативна и последовательно применяет пороги к отсортированным p-value. Альтернатива — заранее выделить 1-2 основные метрики, а остальные считать вторичными/guardrail без строгого вывода о значимости.
- Ожидаемый результат: после поправки Holm часть из изначально 'значимых' p-value (0.01, 0.02, 0.03, 0.04) могут перестать проходить порог. Проверка: сравнить число значимых результатов до и после поправки — если расходится сильно, это подтверждает риск множественных сравнений.
Подводные камни
- просмотр десятков метрик после теста и объявление победы по той единственной, что оказалась значимой, без упоминания, сколько метрик проверялось и без поправки — классический 'p-hacking' через множественное тестирование.