Хи-квадрат тест — что это и когда применять

Коротко

Хи-квадрат (chi-squared, X2) — статистический критерий для проверки связи между категориальными переменными. Конверсия отличается на мобильных и десктопе? Распределение ответов в опросе соответствует ожидаемому? Хи-квадрат отвечает именно на такие вопросы. На собеседованиях аналитиков его спрашивают реже, чем p-value или A/B-тесты, но знать его нужно — особенно если работаете с категориальными данными.

Два типа хи-квадрат теста

Тест на независимость (Test of Independence)

Проверяет, есть ли связь между двумя категориальными переменными. Например: зависит ли конверсия (да/нет) от типа устройства (мобильное/десктоп)? Данные организуются в таблицу сопряжённости (contingency table).

Конверсия Нет конверсии Всего
Мобильное 120 880 1000
Десктоп 180 820 1000
Всего 300 1700 2000

Нулевая гипотеза (H0): конверсия и тип устройства независимы — распределение конверсий одинаково для обоих устройств. Альтернативная гипотеза (H1): связь между переменными существует.

Тест согласия (Goodness of Fit)

Проверяет, соответствует ли наблюдаемое распределение ожидаемому. Например: распределены ли ответы в опросе равномерно по четырём вариантам? Ожидаете 25% на каждый вариант, а в реальности — 30%, 22%, 28%, 20%. Случайное отклонение или нет?

В продуктовой аналитике тест на независимость используется значительно чаще, поэтому дальше сосредоточимся на нём.

Как работает хи-квадрат: ожидаемые vs наблюдаемые частоты

Идея проста: сравниваем то, что мы наблюдаем в данных (observed), с тем, что ожидали бы при отсутствии связи (expected).

Ожидаемая частота для каждой ячейки таблицы:

E = (сумма строки * сумма столбца) / общая сумма

Для ячейки «мобильное + конверсия»: E = (1000 * 300) / 2000 = 150. Если бы устройство не влияло на конверсию, мы ожидали бы 150 конверсий с мобильных, а не 120.

Статистика хи-квадрат:

X2 = SUM((O - E)^2 / E)

Суммируем по всем ячейкам таблицы. Чем больше наблюдаемые значения отклоняются от ожидаемых, тем больше X2. Большое X2 означает, что данные плохо совместимы с гипотезой о независимости.

Рассчитаем для нашего примера:

Ячейка O E (O-E)^2/E
Моб + конв 120 150 6.00
Моб + нет 880 850 1.06
Деск + конв 180 150 6.00
Деск + нет 820 850 1.06

X2 = 6.00 + 1.06 + 6.00 + 1.06 = 14.12. Число степеней свободы df = (строки - 1) * (столбцы - 1) = 1. При df = 1 критическое значение для alpha = 0.05 — 3.84. Наше X2 = 14.12 значительно больше, p-value < 0.001. Вывод: конверсия статистически значимо зависит от типа устройства.

Python: хи-квадрат тест

import numpy as np
from scipy.stats import chi2_contingency

# Таблица сопряжённости: строки — устройство, столбцы — конверсия
#                     конверсия  нет конверсии
observed = np.array([[120,       880],    # мобильное
                     [180,       820]])   # десктоп

chi2, p_value, dof, expected = chi2_contingency(observed)

print(f"X2 = {chi2:.2f}")
print(f"p-value = {p_value:.4f}")
print(f"Степени свободы: {dof}")
print(f"Ожидаемые частоты:\n{expected}")
# X2 = 14.12
# p-value = 0.0002
# Степени свободы: 1
# Ожидаемые частоты:
# [[150. 850.]
#  [150. 850.]]

chi2_contingency по умолчанию применяет поправку Йейтса (Yates' correction) для таблиц 2x2. Чтобы отключить: chi2_contingency(observed, correction=False).

Когда применять хи-квадрат

Подходит:

  • Обе переменные категориальные (пол, устройство, тарифный план, вариант A/B-теста)
  • Сравнение распределений конверсий, кликов, ответов по группам
  • A/B-тест с бинарной метрикой: конверсия в покупку, клик по кнопке, подписка
  • Проверка SRM (Sample Ratio Mismatch) — перекос распределения пользователей по группам

Не подходит:

  • Сравнение средних (средний чек, время на сайте) — используйте t-тест
  • Непрерывные переменные — без категоризации хи-квадрат не работает
  • Парные наблюдения (до/после для одного пользователя) — нужен тест Макнемара

Условия применимости

  1. Ожидаемые частоты >= 5 в каждой ячейке. Если в какой-то ячейке E < 5, тест ненадёжен. Решение: объедините категории или используйте точный тест Фишера.
  2. Наблюдения независимы. Каждый пользователь попадает только в одну ячейку таблицы.
  3. Достаточный размер выборки. Хи-квадрат — асимптотический тест: работает хорошо на больших выборках, ненадёжен на малых.

Хи-квадрат и A/B-тесты

В A/B-тестировании хи-квадрат применяется для сравнения бинарных метрик: конверсия, клик, подписка. Таблица сопряжённости — 2x2: строки — группа (A/B), столбцы — исход (конверсия/нет).

На практике для A/B-тестов с бинарной метрикой чаще используют z-тест для долей, который математически эквивалентен хи-квадрат тесту при таблице 2x2 (X2 = z^2). Результат одинаковый, но z-тест позволяет строить односторонние тесты и доверительные интервалы для разности долей.

Ещё одно применение: проверка SRM. Если в тесте 50/50 распределение, а в группе A — 51 200 пользователей, а в B — 48 800, хи-квадрат покажет, случайный ли это перекос. При p < 0.05 — с рандомизацией что-то не так, и результатам теста доверять нельзя.

Вопросы с собеседований

1. Что такое хи-квадрат тест и когда его применять?

Хи-квадрат — критерий для проверки связи между категориальными переменными. Применяется когда обе переменные категориальные: например, тип устройства и факт конверсии. Сравнивает наблюдаемые частоты с ожидаемыми при независимости переменных. Большое значение X2 говорит о наличии связи.

2. Чем хи-квадрат отличается от t-теста?

Хи-квадрат — для категориальных переменных (сравнение частот). T-тест — для непрерывных (сравнение средних). Конверсия (да/нет) по группам — хи-квадрат. Средний чек по группам — t-тест.

3. Что делать, если ожидаемая частота в ячейке меньше 5?

Хи-квадрат тест становится ненадёжным. Варианты: объединить редкие категории, использовать точный тест Фишера (для таблиц 2x2) или увеличить выборку.

4. Как хи-квадрат связан с A/B-тестированием?

В A/B-тестах с бинарной метрикой хи-квадрат проверяет, отличается ли конверсия между группами. Для таблицы 2x2 хи-квадрат эквивалентен z-тесту для долей: X2 = z^2. Также хи-квадрат используется для проверки SRM — перекоса в распределении пользователей по группам.

5. В чём разница между тестом на независимость и тестом согласия?

Тест на независимость проверяет связь между двумя категориальными переменными (таблица сопряжённости). Тест согласия проверяет, соответствует ли наблюдаемое распределение одной переменной теоретическому. Оба используют одну и ту же статистику X2, но задачи разные.


Потренируйтесь решать задачи по статистике и A/B-тестам в тренажёре Карьерник1500+ вопросов для подготовки к собеседованию аналитика.

FAQ

Что такое хи-квадрат тест простыми словами?

Хи-квадрат тест проверяет, есть ли связь между категориальными переменными. Он сравнивает наблюдаемые частоты с теми, которые ожидались бы при отсутствии связи. Если расхождение большое, связь статистически значима.

Когда нельзя использовать хи-квадрат тест?

Нельзя использовать при ожидаемых частотах меньше 5 в какой-либо ячейке, для сравнения средних значений (нужен t-тест) и для парных наблюдений (нужен тест Макнемара). Также не подходит для непрерывных переменных без категоризации.

Чем хи-квадрат тест отличается от z-теста для долей?

Для таблицы 2x2 — ничем: X2 = z^2, p-value одинаковое. Но z-тест позволяет строить односторонние тесты и доверительные интервалы для разности долей. Хи-квадрат обобщается на таблицы любого размера (3x4, 5x2 и т.д.).

Как проверить условие применимости хи-квадрат теста?

Посчитайте ожидаемые частоты для каждой ячейки: E = (сумма строки * сумма столбца) / общая сумма. Все E должны быть >= 5. В Python chi2_contingency возвращает массив ожидаемых частот — проверьте expected.min() >= 5.