Семейство тестов хи-квадрат: что у них под капотом и какие выбрать для сравнения воронок
C примерами на Python.
Всем привет, меня зовут Вячеслав Зотов, я аналитик в студии Whalekit. В этом тексте я расскажу про статистические тесты и сравнение воронок, а также мы попробуем разобраться, что объединяет χ²-тесты, какова область их применения и подробно исследуем применимость χ²-тестов к анализу воронок. И все это с примерами на Python.
Тест χ² — очень полезный аналитический инструмент, который тем не менее часто вызывает у аналитиков недопонимание и путаницу. Прежде всего это происходит из-за того, что существует целое семейство тестов χ², имеющих разные области применения. Дополнительную путаницу создает то, что тесты χ² часто рекомендуют применять для анализа продуктовых и маркетинговых воронок, а это обычно приводит к ошибочному использованию тестов.
1. χ²-распределение
Начнем с импорта библиотек:
Распределение χ² возникает при возведении в квадрат нормально распределенной случайной величины:
2. χ²-тесты
Существует три χ²-теста.
- Тест на гомогенность (test of homogeneity, он же goodness of fit) — непараметрический, одновыборочный тест, который проверяет соответствие наблюдаемого распределения категориальной случайной величины некоторому эталонному распределению. В Python реализован функцией scipy.stats.chisquare.
- Тест на независимость (он же test of independence/association) — непараметрический, одновыборочный тест, который проверяет наличие связи между двумя категориальными переменными. В Python реализован функцией scipy.stats.chi2_contingency.
- Тест для дисперсии — параметрический (параметр — дисперсия), одновыборочный тест, который проверяет равенство дисперсии непрерывной случайной величины заданному порогу. В Python для него нет готовой функции.
Первые два теста используют критерий согласия Пирсона (КСП), который имеет распределение χ². Третий тест никак не относится к первым двум за исключением того, что статистика, которую он использует, также имеет распределение χ² (об этом ниже).
Критерий согласия Пирсона рассчитывается по формуле:
Здесь:
- O — наблюдаемое значение;
- E — ожидаемое значение.
Таким образом, КСП — это разница между наблюдаемым и ожидаемым значением, возведенная в квадрат (нам важно не направление отличий, а только факт их наличия) и нормированная с помощью деления на ожидаемое значение (чтобы слишком быстро не росла).
Если мы сравниваем набор наблюдаемых значений с набором эталонов, то формула КСП приобретает вид:
В том случае, когда O и E имеют нормальное распределение, КСП имеет распределение χ².
Получается, что мы можем провести статистический тест с гипотезами:
- H0: между наблюдаемым распределение и эталонным распределением нет различий;
- H1: между наблюдаемым распределение и эталонным распределением есть различия.
Если различий нет, то КСП будет стремиться к нулю. В противном случае она окажется за пределами интервала наиболее вероятных значений:
Тесты с КСП, таким образом, непараметрические (поскольку не оценивают никакие из параметров распределений) и односторонние (так как статистика всегда положительная за счет возведения в квадрат — вот некоторые рассуждения на этот счет). Поскольку тест непараметрический, мы можем напрямую сравнивать полученную статистику с эталонным распределением (без применения несмещенных оценок как в z- и t-тестах).
Остался маленький нюанс — O и E должны иметь нормальное распределение. При работе с категориальными переменными это достигается за счет нормальной аппроксимации биномиального распределения (вот обсуждение по теме).
2.1 χ²-тест на гомогенность (homogeneity, goodness of fit)
Предположим, что у нас есть таблица реально наблюдаемых вероятностей появления наблюдений в группах (Observed) и ожидаемых вероятностей появления (Expected):
Тогда гипотезы для теста goodness of fit можно представить таким образом:
- H0: O₁ = O₂ = O₃ = ... = Oₙ (то есть наблюдение может относиться с равной вероятностью к каждой из групп);
- H1: Хотя бы одна из вероятностей Oᵢ не равна остальным.
или таким:
Пример расчета статистики (источник):
Для полученную статистики можно рассчитать p-value для распределения χ² при числе степеней свободы d = (n-1) = 4:
9.612521889579284e-11
Сравнив его с уровнем значимости α = 0.05, можно сделать вывод о том, что нулевая гипотеза отвергается и конфеты распределены по вкусам неравномерно.
Напишем функцию для проведения теста:
Сравним ее результат со встроенным методом, используя предыдущий пример:
(4, 52.75, 9.612521889579284e-11)
Power_divergenceResult(statistic=52.75, pvalue=9.612518035368181e-11)
Результаты полностью совпадают.
Интереса ради исследуем вопрос о том, как размер выборки влияет на то, будет ли распределение КСП соответствовать распределению χ². Зададим функцию проведения эксперимента:
Исследуем влияние размера выборки на соответствие статистики распределению χ²:
Наблюдения и выводы:
- при увеличении размера выборки результат становится менее шумным;
- сами распределения весьма похожи на χ²;
- QQ-plot показывает, что распределение статистики становится близко к χ² даже для малых k, когда размер выборки превышает 100 наблюдений;
- тест Колмогорова-Смирнова также показывает, что с ростом размера выборок статистика уверенно приближается к χ².
Мы показали эмпирически, что КСП действительно имеет распределение χ².
2.2 χ²-тест на независимость
Тест χ²-тест на независимость (test of independence/association) отличается от предыдущего теста постановкой гипотез:
- H0: категориальные переменные A и B независимы;
- H1: категориальные переменные A и B связаны между собой.
Допустим, у нас есть таблица сопряженности (из примера). Таблица сопряженности описывает наблюдаемые (observed) результаты:
Согласно теореме умножения вероятностей, в том случае, когда две случайные величины A и B независимы, вероятность получить совместное событие равна P(AB) = P(A) ⋅ P(B). Таким образом, наши ожидаемые (expected) величины можно рассчитать по формуле умножения вероятностей и свести в таблицу:
Используя эту таблицу, мы можем рассчитать статистику по формуле:
Готовую статистику можно подставить в CDF для распределения χ² и получить p-value.
Напишем функцию для расчетов:
(4, 11.942092624356777, 0.01778711460986071)
Сравним результат со встроенной функцией:
(11.942092624356777, 0.0177871146098607, 4)
Результаты полностью идентичны.
2.3 χ²-тест для дисперсии
Третий вид χ²-теста не имеет никакой связи с предыдущими за исключением того, что его статистика, которая рассчитывается по формуле
также имеет распределение:
Вот доказательство. Здесь S — это наблюдаемое выборочное СКО, а σ — ожидаемое СКО.
Пример расчета статистики тут.
В Python нет встроенной функции, но можно ее написать: пример.
Тест χ² для дисперсии не используется для сравнения выборок. Для этого служит F-тест (очень чувствителен к требованию нормальности данных), а для ненормальных данных — тесты Левена или Бартлетта (оба есть в Python).
Нас, как практиков, конечно же, прежде всего интересует вопрос — можно ли использовать этот тест для ненормально распределенных данных (потому что на практике мы практически никогда не работаем с нормальными распределениями).
Для этого сравним распределение статистики для нормально распределенных и экспоненциально распределенных данных. Кроме того, оценим влияние размера выборки на результат:
Наблюдения:
- распределение статистики для нормально распределенных данных повторяет ожидаемое распределение:
- распределение статистики для экспоненциально распределенных данных отличается от эталонного распределения. Более того, различие, похоже, растет с ростом размера выборки.
Вывод: промысловой ценности не имеет.
3. Связь между z-тестом и χ²-тестом (и тестом Фишера)
Довольно часто встречаются попытки использовать χ²-тест вместо z-теста для пропорций. Также можно встретить утверждения о том, что z-тест эквивалентен χ²-тесту для ситуации с двумя классами. Имеется в виду эквивалентность результатов между:
- двухвыборочным z-тестом для пропорций;
- тестом χ² на независимость данных (test of independence) в ситуации, когда таблица сопряженности имеет размерность 2 x 2.
Пример: допустим, у нас есть результаты бинарного эксперимента:
Эти результаты можно представить в виде таблицы сопряженности, если добавить к ним ожидаемые значения:
Результат χ²-теста на независимость:
(14.555161038503186, 0.00013611529553341273)
Результат двухвыборочного z-теста для пропорций:
(3.815122676730484, 0.00013611529553341327)
p-value полностью совпадают. Более того, z-статистика равна квадратному корню из χ²-статистики:
(3.815122676730484, 3.8151226767304856)
Нужно отметить, что тест на гомогенность не эквивалентен z-тесту:
(28.9, 7.62129129638297e-08)
Тест Фишера часто рекомендуют применять вместо χ²-теста для таблиц сопряженности размером 2 х 2 в тех случаях, когда частоты очень малы (ячейки таблицы сопряженности имеют значения <= 5). Если тест Фишера до какой-то степени эквивалентен χ²-тесту, то он должен быть эквивалентен и z-тесту для пропорций. Действительно, p-value довольно похожи:
(1.4096385542168675, 0.00016169735747221216)
4. Размер выборки для χ²-теста
Утверждается, что размер выборки должен быть такой, чтобы:
- каждая из ячеек таблицы сопряженности была больше 5 (если нет, то это легко исправляется умножением таблицы на нужный множитель);
- общий размер сэмпла был не более 500, так как увеличение размера сэмпла вызывает рост статистики и вероятности ложноположительных результатов.
Проверим это на практическом примере.
Возьмем таблицу сопряженности, при которой тест подтверждает нулевую гипотезу (это слегка модифицированная таблица ожидаемых значений из одного из предыдущих примеров) и будем последовательно увеличивать размер выборки:
Видно, что с ростом размера выборки статистика растет линейно, при этом p-value стремится к 0 и рано или поздно тест покажет статистически значимые отличия при исходных пропорциях.
Таким образом, размер выборки желательно брать достаточно малый (видимо, 500 — хорошая практическая граница).
5. Применение χ²-тестов для анализа множественных пропорций
Довольно часто встречаются утверждения, что χ²-тест можно применять для сравнения множественных пропорций. Например, при сравнении нескольких воронок (скажем, в процессе A/B-тестирования) предлагается вместо серии последовательных z-тестов для пропорций применять тест χ². В этом разделе мы посмотрим, какие из χ²-тестов применимы для задачи анализа воронок.
Сразу можно сказать, что для анализа воронок неприменим тест χ² для дисперсии.
Чтобы разобраться с оставшимися двумя видами тестов χ², представим, что нам нужно проанализировать результаты А/B теста, в котором тестировались два вида воронок — воронка контрольной группы (A) и воронка тестовой группы (B).
Теоретически, χ²-тест на гомогенность можно применить, если рассматривать воронку контрольной группы как набор ожидаемых значений (expected), а воронку тестовой группы — как набор наблюдаемых значений (observed). Тогда тест покажет наличие статистически значимого отличия между observed и expected.
Аналогично χ²-тест на независимость можно применять для анализа любого числа воронок, если рассматривать все эти воронки как таблицу сопряженности. В этом случае тест покажет, зависит ли переменная «шаги воронки» от переменной «группа теста» или нет.
Но, кажется, здесь возникает нюанс. Дело в том, что логика обоих видов χ²-теста предполагает, что на их вход подаются таблицы сопряженности. Таблицу сопряженности, прежде всего, характеризует то, что в ней каждый объект наблюдений может попадать в одну единственную категорию. Это условия, очевидно, не выполняется для таблиц воронок, так как каждый объект наблюдений (в случае с воронками — это пользователь) может выполнить несколько шагов воронки и оказаться сразу в нескольких категориях.
Чтобы превратить таблицу воронок в таблицу сопряженности, нужно провести простую трансформацию — посчитать, сколько пользователей ушло из воронки на каждом из шагов. Таким образом, для каждого пользователя в таблице остается одно единственное наблюдение. Например, таблица сопряженности для таблицы из двух воронок из примера выше будет иметь вид:
В этом примере мы полагаем, что пользователь не может перепрыгивать через шаги воронок, поэтому число отвалившихся пользователей для каждого шага равно разности уникальных пользователей на двух соседних шагах.
Есть ли какое-либо отличие в результатах, получаемых при подстановке в χ²-тесты таблиц воронок и таблиц сопряженности? Действительно, довольно легко подобрать пример, для которого тест, проведенный на данных таблицы сопряженности, даст правильный результат, а тест проведенный на таблице воронок — неправильный. К примеру, возьмем воронки из примера выше.
У них есть явные отличия, но χ²-тест для гомогенности, выполненный на таблице воронок показывает отсутствие отличий, а тот же тест, выполненный по таблице сопряженности, показывает, что отличия есть:
Казалось бы, все просто — трансформируем таблицы воронок в таблицы сопряженности, подаем их в χ²-тесты и получаем правильный результат. Но где гарантия, что получившийся выше результат не случаен, и в особенности, что результаты тестов никак не зависят от формы воронок. Давайте это проверим.
5.1 Зависимость результатов χ²-тестов от формы воронок
Сначала протестируем, как от формы воронок зависит вероятность ошибки первого рода (вероятность обнаружить отличия там, где их нет). Для этого проведем серию экспериментов:
- создадим набор воронок, состоящих из трех шагов. Каждая воронка будет описываться парой чисел — вероятностью конвертироваться из первого во второй шаг и вероятностью конверсии из второго шага в третий. То есть воронка 100 -> 50 -> 25 будет описываться парой чисел [0.5, 0.5];
- для каждой из созданных воронок построим N пар выборок;
- для каждой из пар выборок проведем 5 тестов:
- χ²-тест на гомогенность по таблице воронок;
- χ²-тест на гомогенность по таблице сопряженности;
- χ²-тест на независимость по таблице воронок;
- χ²-тест на независимость по таблице сопряженности;
- z-тест, сравнивающий доли пользователей, достигших последнего шага воронок.
Начнем с функции построения воронок:
С помощью этой функции сконструируем воронки разной формы:
Построим некоторые из полученных воронок и посмотрим, на какие классы мы можем их разделить:
Видно, что воронки, в сущности, делятся на три класса:
- воронки с немедленным падением — те, у которых на первом шаге наблюдается падение на более, чем 50% от нулевого. В этом случае конверсия во второй шаг не важна. На графике к этой категории относятся воронки №211 и №214;
- воронки с умеренным угасанием — те, у которых падение на первом шаге составляет не более 50% от нулевого, а на втором шаге — не более, чем 50% от первого. Например, этим критериям соответствует воронка №377;
- воронки с быстрым угасанием на втором шаге. На картинке выше это воронки №491 и №532.
Если мы построим график, у которого по оси X отложена вероятность конверсии из шага 0 в шаг 1, а по оси Y — вероятность конверсии из шага 1 в шаг 2, то воронки расположатся на нем вот так:
Если мы проведем для каждой воронки серию тестов, то мы сможем построить график вероятности, на котором будет показан шанс допустить ошибку первого рода. Он будет выглядеть примерно так:
Здесь зеленым цветом обозначены области с умеренной вероятностью допустить ошибку, а оттенки красного показывают области с высокими вероятностями ошибок.
Подготовим набор воронок, которые будут использоваться при тестировании:
Зададим функции для проведения экспериментов:
- run_experiment получает на вход данные воронок, получает из них выборки нужного размера, формирует таблицы воронок и сопряженности, а также проводит по ним статистические тесты;
- run_error_experiments перебирает наборы воронок для тестирования и для каждого набора вызывает функцию run_experiment. Помимо этого, run_error_experiments отображает графики результатов.
Зададим начальные условия экспериментов и наборы тестовых функций:
Зададим графические элементы для отображения карт ошибок:
5.1.1 Ошибки первого рода при сравнении двух воронок
Начнем с тестирования двух воронок и сравним, сколько ошибок первого рода (воронки одинаковые, но тест находит различие) возникает при применении разных тестов:
Выводы и наблюдения:
- лучше всего себя показал χ²-тест на независимость на таблице воронок — он продемонстрировал низкий процент ошибок первого рода для любых форм воронок вне зависимости от размера выборки;
- χ²-тест на гомогенность по таблице воронок показывает стабильно хорошие результаты для воронок с умеренным падением и стабильно плохие для воронок с быстрым падением;
- χ²-тест на гомогенность по таблице сопряженности стабильно находит отличия там, где их нет, для любых форм воронок и размеров выборок. Доля ошибок доходит до 30%;
- χ²-тест на независимость по таблице сопряженности и z-тест по последнему шагу воронок показывают приемлемые результаты только на больших выборках.
Удивительно, но, похоже, что тесты на сырых воронках дают более правильные результаты, если оценивать по ошибкам первого рода.
В процессе тестирования мы с вами получали ситуации, вызывающие ошибки. Например, таблицы сопряженности с нулевыми ячейками. Давайте посмотрим, как распределены ошибки, чтобы понять, насколько мы можем доверять полученным результатам.
Из графика выше видно, что в основном мы можем доверять результатам, полученным для размера выборок больше 100 элементов. Для меньших выборок нужно быть аккуратными с анализом результатов для воронок с быстрым падением — тут доля ошибок может доходить до 90%.
5.1.2 Ошибки второго рода при сравнении двух воронок
Проанализируем ошибки второго рода (ситуации, когда различия есть, но они не обнаруживаются тестом). Для начала взглянем на ситуацию, когда воронки отличаются на 10%:
Выводы и наблюдения:
- хуже всего себя показал χ²-тест на независимость по таблице воронок — даже на выборках больших размеров этот тест не находит отличия там, где они есть;
- χ²-тест на гомогенность по таблице воронок и z-тест показывают сопоставимые результаты. В основном они хорошо работают на больших выборках и только в ситуациях умеренного падения;
- лучше всего себя показывают тесты на гомогенность и независимость, выполненные на таблицах сопряженности. С ростом размеров выборок они все лучше и лучше находят различия для воронок с резким падением на втором шаге и для воронок с умеренным падением.
Похоже, что тесты по таблицам сопряженности и z-тест обладают большей мощностью, чем тесты по таблицам воронок.
Теперь проанализируем ситуацию, когда воронки отличаются на 20%:
Картина в целом аналогична предыдущему примеру:
- хуже всего тесты работают для воронок с быстрым падением;
- самые плохие результаты показывает χ²-тест на независимость на таблице воронок;
- лучше всего себя проявили тесты на гомогенность и независимость, выполненные по таблицам сопряженности;
- z-тест, похоже, лучше всего работает для воронок с умеренным падением.
Наконец, рассмотрим ситуацию, когда воронки отличаются на 30%:
Видно, что с ростом размера выборок практически все χ²-тесты показывают сопоставимые результаты, а z-тест довольно плохо работает в ситуация быстро падающих воронок.
Общие выводы для ситуации с двумя воронками:
- χ²-тесты по таблицам сопряженности демонстрируют самую высокую мощность — они способны обнаружить разницу в воронках даже при небольших отличиях, если выборка достаточно велика;
- в то же время они демонстрируют самые высокие ошибки первого рода — чаще засекают разницу там, где ее на самом деле нет;
- χ²-тесты по таблицам воронок показывают обратные результаты. Они консервативны, реже допускают ошибки первого рода, но чаще — второго;
- z-тест не показывает существенно более хороших результатов по сравнению с χ²-тестами. Кроме того, z-тест хорошо работает преимущественно в регионе воронок с умеренным падением;
- при работе с любым χ²-тестом нужно быть внимательным при анализе воронок с быстрым падением — это регион высоких ошибок второго рода для любого χ²-теста;
- из всех χ²-тестов наиболее предпочтительным является χ²-тест на независимость — он демонстрирует оптимальное соотношение между вероятностью ошибок первого рода и мощностью;
- при росте размера выборки нет особенной разницы, проводите ли вы χ²-тест по таблице сопряженности или по таблице воронок.
5.2 Ситуация множественных воронок
В этом разделе мы посмотрим, как увеличение числа сравниваемых воронок повлияет на результаты тестирования. Для сравнения множества воронок будем использовать χ²-тесты на независимость. Сначала мы сравним ошибки первого рода для трех и четырех воронок, у которых нет отличий. Это, конечно, не даст исчерпывающего ответа на вопрос, как поведут себя тесты с ростом числа воронок, но поможет определить примерное направление развития результатов:
Проведем тесты для четырех воронок:
Оценим доли технических ошибок:
Выводы и наблюдения:
- как и в случае с двумя воронкам, тесты, проведенные по таблицам воронок, показывают меньшую вероятность ошибок первого рода;
- точность тестов, проведенных по таблицам сопряженности, увеличивается с ростом размера выборок. Интересно, что при размере выборки 100, вероятность ошибок первого рода резко возрастает для практически любых форм воронок, затем снова падает с увеличением размеров выборок. Природа этого эффекта не совсем ясна;
- нет существенной разницы между результатами, полученными для трех и четырех воронок;
- доля технических ошибок велика для воронок с граничными формами. Например, для воронок с резким падением. Но, начиная с выборок, имеющих размер от 100 наблюдений и более, результаты становятся достаточно консистентными.
Перейдем к анализу ошибок второго рода. Смоделируем ситуацию трех воронок, из которых одна имеет отличие в 10% от остальных двух:
Далее смоделируем ситуацию, когда одна из трех воронок имеет 10% отличие от эталона, а вторая — 30% отличие:
Выводы и наблюдения:
- в обоих экспериментах тесты по таблицам сопряженности показывают более высокую мощность;
- вероятность ошибки второго рода для тестов по таблице воронок падает с увеличением размеров выборок и ростом отличий воронок, но даже в самом лучшем случае тесты по таблице воронок показывают неплохие результаты только для воронок с умеренным падением.
Итак, проведя серию экспериментов, мы можем сделать следующие практические выводы:
- для анализа воронок z-тест менее предпочтителен, чем тест χ²;
- для анализа воронок из всех тестов χ² больше всего подходит тест на независимость;
- в ситуации сравнения двух воронок и большого размера выборок χ²-тест на независимость дает примерно одинаковые результаты при проведении теста на таблице воронок и на таблице сопряженности;
- в случае сравнения нескольких воронок выигрывает χ²-тест на независимость, проводимый по таблице сопряженности. Таким образом, можно рекомендовать всегда пользоваться тестом χ²-тест на независимость по таблице сопряженности для анализа воронок.
Выводы
- Для практических целей бизнес-аналитики применимы только тесты χ²-тест на независимость и гомогенность.
- В ситуации анализа двух пропорций z-тест полностью эквивалентен χ²-тесту на независимость с таблицей сопряженности 2 x 2.
- Для проведения χ²-тестов имеет смысл брать выборки размером порядка 500 наблюдений.
- При решении задач сравнения воронок с помощью χ²-теста предпочтительнее использовать χ²-тест на независимость, проводимый по таблице сопряженности, поскольку он обеспечивает оптимальные результаты с точки зрения ошибок первого и второго рода при сравнении двух и более воронок.
Вы можете скачать ноутбук для этой статьи тут (имейте в виду, что пересчет ошибок может занять значительное время).