Когда статистические тесты не вывозят
Мы привыкли, что растить мощность – это благо. Ведь высокая мощность теста позволяет нам фиксировать даже небольшие эффекты с достаточной вероятностью. Есть проблема. Представьте, что в попытках увеличить чувствительность теста у вас получилось набрать невероятно (~бесконечно) большую выборку без сопуствтующего роста дисперсии. При невероятно большой выборке ширина доверительного интервала будет близка к 0.
В таком сеттинге мы будем получать статистически значимые результаты почти всегда. Однако
статистически значимый ≠ большой. Статистически значимый – это такой, который мы смогли разглядеть (отличить от 0) при том уровне шума, который есть в данных.
Мы можем получить разность средних, равную 10^-5, и увидеть, что она стат. значима. Мы можем посмотреть на бесконечно маленький доверительный интервал вокруг неё и понять, что истинный эффект лежит где-то очень близко к наблюдаемой разности средних. Это всё ожидаемое поведение. При невероятно большой выборке разброс наблюдаемых эффектов вокруг истинного будет крошечным. Выборки будут хорошо апроксимировать ГС, а разность средних по выборкам будет хорошо аппроксимировать истинный эффект.
Но что нам делать c таким экспериментом? Результат стат. значимый, но, исходя из здравого смысла, мы понимаем, что он ничтожен. В случае A/B-тестирования на помощь приходит
порог практической значимости. Нам достаточно посмотреть на расположение ДИ относительно этого порога и принять решение о раскатке фичи. Я когда-то писал об этом
статью. Если кратко, то мы катим фичу, когда ДИ лежит правее порога. В случае с бесконечно маленьким ДИ процесс сильно упрощается, т.к. мы почти не можем оказаться в спорной ситуации, когда 0 не попадает в ДИ, а порог практической значимости попадает. Добавлю еще, что есть чуть более отрефлексированные подходы к внедрению в процесс принятия решения проверки на практическую значимость. Когда-нибудь об этом тоже напишу.
Ну вроде всё круто – проблему решили, и, более того, при учете порога практической значимости высокая мощность теста опять же сильно упрощает жизнь. Это так. Но, к сожалению, есть тесты, в которых такой порог ввести не получится.
Возьмите, например, тесты на нормальность распределения (критерии Колмогорова-Смирнова, Андерсона-Дарлинга и т.д.). В этих тестах мы не используем разность средних, а смотрим на менее интуитивные величины. Сказать, что является большим отклонением с точки зрения здравого смысла/бизнеса для sup(F_n(x) - F(x)) довольно сложно. И нам не нужно воображать ситуацию с невероятно большой выборкой, чтобы получить тест, который на каждое колебание отвергает H_0. Это случается
при просто больших выборках. Классические комментарии под
постами про эти критерии в линкедине это "Если размер выборки очень большой, то полезнее смотреть на QQ плот". По сути, это попытка найти хоть какую-то замену порогу практической значимости, чтобы внедрить здравый смысл в слепую статистическую процедуру.
Еще одна ситуация, когда мощность теста вызывает похожую проблему, – это проверка на SRM. При большом количестве пользователей в эксперименте хи-квадрат критерий становится слишком чувствительным. Из-за этого при любом, хоть сколько-нибудь малом, отклонении реального соотношения между группами от заданного мы начинаем ловить алерты. Что есть сильное отклонение с точки зрения здравого смысла – я хз. Обычно эту проблему в A/B-платформах решают путем уменьшения уровня значимости. Например, Growthbook вместо 0.05 использует 0.001 для определения стат. значимых отклонений при проверке на SRM.
Я когда думаю об этом всём, становлюсь статистическим диссидентом. Кажется, что любой критерий, для которого мы не можем построить удобно интерпретируемый и интуитивно понятный доверительный интервал, – просто бесполезный кусок говна