Критерий хи-квадрат (χ2, критерий согласия Пирсона) – это метрика, которая измеряет, насколько Модель (Model) сопоставима с фактическими наблюдаемыми данными. Вычисляется с помощью формулы:
$$χ_c^2 = \sum_{} \frac{(O_i - E_i)^2}{E_i}, где$$
$$c\space{–}\space{степень}\space{свободы,}$$
$$χ^2\space{–}\space{Критерий}\space{хи-квадрат,}$$
$$O_i\space{–}\space{реальное}\space{i-e}\space{наблюдение,}$$
$$E_i\space{–}\space{ожидаемое}\space{i-e}\space{наблюдение}$$
Данные, используемые при вычислении этой Статистики (Statistics), должны быть случайными, необработанными, взаимоисключающими, взятыми из независимых переменных и взятыми из достаточно большой Выборки (Sample). Например, результаты подбрасывания монеты соответствуют этим критериям.
При проверке гипотез часто используется критерий Хи-квадрат. Статистика сравнивает размер любых расхождений между ожидаемыми и фактическими результатами, учитывая размер выборки и количество переменных. Для этих тестов используются Степени свободы (Degrees of Freedom), чтобы определить, можно ли отклонить определенную Нулевую гипотезу (Null Hypothesis) на основе общего количества переменных и выборок в эксперименте. Как и в случае с любой другой статистикой, чем больше размер выборки, тем надежнее результаты.
Существует два основных вида тестов хи-квадрат: тест на независимость, который задает вопрос о взаимоотношениях, например: «Есть ли связь между полом студента и выбором курса?»; и тест согласия, который спрашивает что-то вроде «Насколько хорошо монета в моей руке соответствует теоретически "честной" монете?»
При изучении взаимосвязи между полом учащегося и выбранным курсом можно использовать критерий χ2 на независимость. Для проведения этого теста исследователь собирал данные по двум выбранным переменным (пол и выбранные курсы), а затем сравнивал частоту, с которой учащиеся мужского и женского пола выбирали среди предлагаемых классов, используя формулу, приведенную выше, и специальную статистическую таблицу.
Если нет взаимосвязи между полом и выбором курса (то есть, если они независимы), то следует ожидать, что фактическая частота, с которой студенты мужского и женского пола выбирают каждый предлагаемый курс, будет примерно равной. Число учащихся женского пола на любом выбранном курсе должно быть примерно равным доле студентов мужского в выборке. Тест на независимость может охарактеризовать разницу между фактическим наблюдением и теоретическим ожиданием.
Критерий Хи-квадрат предоставляет способ проверить, насколько хорошо выборка соответствует характеристикам Генеральной совокупности (Population). Мы не будем использовать выборку, если она не соответствует ожидаемым свойствам интересующей нас совокупности.
Пример. Рассмотрим воображаемую монету с вероятностью выпадения орла или решки ровно 50/50 и реальную монету, которую вы подбрасываете 100 раз. Если эта реальная монета имеет "справедливую" форму, то она также будет иметь равную вероятность приземления с обеих сторон, и ожидаемый результат подбрасывания монеты: орел выпадет 50 раз, и решка столько же. В этом случае критерий может сказать нам, насколько хорошо фактические результаты 100 подбрасываний монеты сравниваются с теоретической моделью, согласно которой честная монета даст результат 50/50. Фактический бросок может составить 50/50, 60/40 или даже 90/10. Чем дальше фактические результаты от 50/50, тем меньше соответствие этого набора бросков теоретическому ожиданию 50/50 и тем более вероятно, что эта монета на самом деле несправедлива.
Критерий можно вычислить с помощью функции SciPy. Для начала импортируем необходимые библиотеки:
import numpy as np
import scipy
from scipy.stats import chisquare
Инициируем множества X
и y
, которые являются Предикторами (Predictor Variable) и Целевой переменной (Target Variable) соответственно:
X = np.array([[1, 0, 0, 0, 1],
[1, 1, 0, 1, 1],
[1, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 1, 1, 1],
[0, 1, 1, 0, 0],
[1, 0, 1, 1, 1],
[1, 1, 1, 1, 0]])
y = np.array([1, 0, 0, 0, 1, 1, 1, 1, 0, 1])
Переформатируем целевую переменную с помощью метода vstack()
^ то есть превратим массивы 1-y
и y
в вертикальные массивы. Выполним Векторное перемножение (Dot Product) X
и Y
и посмотрим на результат:
Y = np.vstack([1 - y, y])
observed = np.dot(Y, X)
observed
Это наблюдаемые частоты признаков для каждого класса, то есть Таблица сопряжённости (Contingency Table):
array([[3, 1, 1, 2, 2],
[4, 2, 3, 2, 4]])
Теперь вычислим ожидаемые значения:
feature_count = X.sum(axis = 0)
class_prob = Y.mean(axis = 1)
expected = np.dot(feature_count.reshape(-1, 1), class_prob.reshape(1, -1)).T
expected
Ожидаемые частоты выглядят так:
array([[2.8, 1.2, 1.6, 1.6, 2.4],
[4.2, 1.8, 2.4, 2.4, 3.6]])
Наконец проведем тест Хи-квадрат, и для этого создадим два объекта score
– результаты теста, и pval
– P-значение (P-Value):
score, pval = chisquare(observed, expected)
score
Реальные записи довольно плохо соответствуют ожидаемым, и это легко заметить по среднему низкому значению теста. Интересно, что создатели предполагают отображение 8 знаков после запятой, потому третий элемент ряда, "закончившийся" после третьего знака, так забавно выглядит:
array([0.02380952, 0.05555556, 0.375 , 0.16666667, 0.11111111])
Ноутбук, не требующий дополнительной настройки на момент написания статьи, можно скачать здесь.
Автор оригинальной статьи: Adam Hayes
Фото: @onefabian
© Лена Капаца. Все права защищены.