Биномиальный тест
Обращение к читателю
Приветствую вас, уважаемые читатели!
Рад представить вашему вниманию мою первую статью. Я поставил перед собой две цели при написании этого материала:
Систематизировать информацию для таких же новичков, как я. Я постарался изложить все максимально подробно и структурировано, чтобы можно было разобраться в теме без обращения к дополнительным источникам.
Самому лучше разобраться в материале. Как известно, объяснить что-то кому-то — отличный способ разложить информацию по полочкам и в голове.
В статье я постарался рассказать, что собой представляет биномиальный тест, когда и для чего он применяется, а также как интерпретировать результаты. Это именно та информация, которую я хотел бы видеть, приступая к изучению темы.
Надеюсь, эта информация будет полезна и поможет разобраться! Буду рад обсудить материал в комментариях.
Несколько слов о гипотезах
Проверка гипотезы — это процесс, который позволяет нам оценить, насколько согласуются наши наблюдения с определенной гипотезой. Обычно мы используем проверку гипотез для того, чтобы опровергнуть гипотезу, то есть доказать, что она неверна.
Вывод о том, что гипотеза верна, мы делать не можем. Это связано с тем, что всегда существует вероятность того, что наблюдаемые данные могут быть получены случайным образом, даже если гипотеза неверна.
В проверке гипотезы участвуют две гипотезы: нулевая гипотеза (H0) и альтернативная гипотеза (H1):
Нулевая гипотеза — это гипотеза, которую мы принимаем в качестве исходной, пока наблюдения не заставят нас ее отвергнуть.
Альтернативная гипотеза отражает, какие отклонения от нулевой гипотезы нас интересуют.
Альтернативные гипотезы бывают трех видов:
Правосторонняя:
Отражает интерес к тому, чтобы определить, есть ли статистически значимое увеличение по сравнению с нулевой гипотезой.Левосторонняя:
Поднимает вопрос о статистически значимом уменьшении по сравнению с нулевой гипотезой.Двусторонняя:
Указывает на наше желание выявить любые статистически значимые отклонения от нулевой гипотезы, будь то увеличение или уменьшение.
По итогам проверки гипотезы мы можем принять только одно из двух решений:
Отклонить нулевую гипотезу. Это означает, что данные противоречат гипотезе, и мы можем исключить ее.
Не отклонить нулевую гипотезу. Это означает, что данные не дают достаточных оснований для ее опровержения.
Если мы отвергаем нулевую гипотезу, мы не можем утверждать, что альтернативная гипотеза абсолютно верна. Мы просто склоняемся в пользу альтернативной гипотезы, не подтверждая ее полностью.
Основной пример
Начнем со следующего примера: «Amazon Top 50 Bestselling Books 2009 — 2019».
Этот датасет содержит информацию о 550 книгах, которые входили в топ-50 самых продаваемых книг на Amazon с 2009 по 2019 год. Для каждой книги указаны ее название, автор, рейтинг пользователей, количество отзывов, цена, год издания и жанр (Fiction/Non Fiction).
Сформулируем нулевую и альтернативную гипотезы
Давайте выдвинем нулевую и альтернативную гипотезы. Нулевая гипотеза утверждает, что вероятность обнаружения художественной и нехудожественной книги в нашей выборке одинакова (или, переформулировано, вероятность обнаружения художественной книги равна 0,5):
Альтернативные гипотезы могут варьироваться в зависимости от нашего интереса. Если мы хотим проверить, становятся ли художественные книги более популярными, чем нехудожественные, то правосторонняя альтернативная гипотеза может быть сформулирована так:
Если мы интересуемся просто наличием различия в популярности между художественными и нехудожественными книгами, то двусторонняя альтернативная гипотеза может быть двусторонней:
Поговорим об ошибках
H0 верна | H0 неверна | |
H0 отклоняется | Ошибка 1-го рода (α) | Верно (1−β) |
H0 не отклоняется | Верно (1−α ) | Ошибка 2-го рода (β) |
Ошибка I рода — отвержение верной нулевой гипотезы. Уровень значимости α — вероятность ошибки первого рода.
Ошибка II рода — не отвержение неверной нулевой гипотезы. β-ошибка, β — вероятность ошибки второго рода.
Правильное решение — не отвержение верной нулевой гипотезы. 1−α — уровень доверия, вероятность этого правильного решения
Правильное решение — отвержение неверной нулевой гипотезы. 1−β — мощность критерия, вероятность этого правильного решения
Допустим наша нулевая гипотеза в том что пациент болен заразной болезнью
Ошибку первого рода называют ложноположительным срабатыванием. Например, анализ крови показал, что пациент здоров, хотя на самом деле он болен, и врач отпускает его домой. Это значит, что мы отвергли верную гипотезу о болезни пациента.
Ошибку второго рода называют ложноотрицательным срабатыванием. Например, пациент здоров, но анализ крови показал что он болен, и врач оставляет его для дальнейших анализов. Это значит, что мы не отвергли неверную гипотезу о болезни пациента.
Из этого примера видно, что ошибка I рода может быть опасной и мы стараемся ее уменьшать. Ошибка II рода тоже нежелательна, но не так критична. Но в каждом конкретном случае нужно исследовать последствия совершения каждого из видов ошибок.
На практике чаще всего выбирают уровень значимости α равным 0,05. Это означает, что мы готовы принять 5% вероятность ошибки первого рода, т.е. отвергнуть верную нулевую гипотезу с вероятностью не более 5%. Такой уровень значимости считается разумным компромиссом между ошибками I и II рода для большинства задач.
Определим статистику теста и ее распределение
Статистикой теста будет число выбранных художественных книг:
В нашем датасете 550 книг. Каждая книга является случайной величиной, которая может принимать значения Fiction или Non Fiction с вероятностями p и 1−p соответственно, где p — истинная вероятность генеральной совокупности. Таким образом, перед нами Бернуллиевская случайная величина с параметром p.
Введем новою случайную величину:
Случайная величина Y означает количество успешных исходов в n независимых и одинаковых экспериментах Бернулли, где вероятность успеха в каждом эксперименте равна p. Такая случайная величина подчиняется биномиальному распределению с параметрами n и p.
Функция вероятности (вероятность того, что в n экспериментах Бернулли будет k успешных исходов) имеет следующий вид:
Отыщем критическую область и критическое значение статистики
Чтобы принять решение между этими конкурирующими гипотезами, нам нужно правильно определить критическую область и критические значения.
Критическая область — это множество значений статистики, при которых нулевая гипотеза отвергается в пользу альтернативной.
Критическое значение — это граница критической области, которая определяет порог, по которому принимается решение о гипотезе.
Критическая область строится исходя из выбранного уровня значимости α — допустимой для нас вероятности ошибочно отвергнуть верную нулевую гипотезу. Чем меньше α, тем осторожнее мы должны быть в принятии альтернативной гипотезы, и, следовательно, тем шире критическая область.
Критическая область для правосторонней альтернативы:
Нам нужно найти минимальное r, при котором выполняется неравенство для заданного уровня значимости α = 0.05:
Методом подбора находим такое число, им оказывается r = 295 (ссылка на расчет). Окончательно получаем критическую область:
То есть любые значения статистики больше 295 заставляют нас отвергнуть нулевую гипотезу на уровне значимости α = 0.05.
Критическая область для левосторонней альтернативы:
Нам нужно найти максимальное l, при котором выполняется неравенство для заданного уровня значимости α = 0.05:
Методом подбора находим такое число, им оказывается l = 255 (ссылка на расчет). Окончательно получаем критическую область:
То есть любые значения статистики меньше 255 заставляют нас отвергнуть нулевую гипотезу на уровне значимости α = 0.05.
Критическая область для двусторонней альтернативы:
Нам нужно найти два числа — минимальное r и максимальное l, для которых выполняются сои неравенства, критическая область получается объединением правой и левой критических областей (ссылка на расчет [1] [2]). Окончательно получаем критическую область:
То есть любые значения статистики меньше 241 и больше 309 заставляют нас отвергнуть нулевую гипотезу на уровне значимости α = 0.05.
Из этих рассуждений видно, в каких случаях мы отвергаем нулевую гипотезу, для всех видов альтернатив, теперь мы можем сразу отвечать
Вычислим наблюдаемое значение статистики на выборке.
Мы наконец то можем перейти к сбору и обработке наших данных.
import pandas as pd
df = pd.read_csv("bestsellers with categories.csv")
bins = df['Genre'].value_counts().tolist()
import pandas as pd
— импортируем библиотеку pandas
, которая позволяет удобно работать с табличными данными.
Формируем датафрейм df
на основе bestsellers with categories.csv
Далее используем метод value_counts()
, чтобы подсчитать отдельно количество художественных и нехудожественных книг в нашем датафрейме.
Преобразуем результат в список bins
для удобства.
На выходе получаем bin = [310, 240]
Теперь мы знаем, что в выборке 310 художественных книг и 240 нехудожественных.
Наблюдаемое значение статистики:
Сравним наблюдаемое значение статистики с критическим значением
Теперь, когда у нас есть наблюдаемое значение статистики, мы можем сравнить его с критическим значением и сделать вывод о справедливости нулевой гипотезы.
Для правосторонней альтернативы:
245\Rightarrow H_{0} \; не\: отвергается» src=«https://habrastorage.org/getpro/habr/upload_files/ea2/7ad/c45/ea27adc4544e317c4e1aa872452c1063.svg» />
Для двусторонней альтернативы:
Можно сказать иначе: p-value — это вероятность получить такое же или более экстремальное значение статистики при условии, что нулевая гипотеза верна (вероятность того, что статистика T, измеряющая степень отклонения полученной реализации от наиболее типичной, за счет случайности примет значение tнабл или даже больше).
Случай правосторонней альтернативной альтернативы
p-value будет считаться следующим образом:
Посчитаем p-value для нашего примера:
Полученное значение p-value говорит нам о том что мы можем отвергнуть гипотезу даже на уровне значимости 0.01 — значение статистики которые мы получили настолько не типичны для нулевой гипотезы, что объяснить случайностью мы этого не можем.
код для построения графика для случая правостороннней альтернативы
import numpy as np
import matplotlib.pyplot as plt
# Определение параметров биномиального распределения
n = 550 # количество испытаний
p = 0.5 # вероятность успеха
# Массив возможных исходов от 0 до n
x = np.arange(0, n+1)
# Вычисление функции масс для биномиального распределения для каждого исхода
pmf = np.zeros(n+1)
for i in range(n+1):
pmf[i] = np.math.comb(n, i) * p**i * (1-p)**(n-i)
# Создание фигуры
fig = plt.figure()
# Построение биномиального распределения в виде точечной диаграммы
plt.scatter(x, pmf, s=2, c='blue')
# Выберор подмножества значений x и pmf
x_subset = x[(x >= 310) & (x <= 550)]
pmf_subset = pmf[(x >= 310) & (x <= 550)]
# Построение подмножества точек другим цветом
plt.scatter(x_subset, pmf_subset, c='red', s=1)
# Построение вертикальных линий
plt.vlines(x_subset, 0, pmf_subset, color='red', linewidth=0.1)
# Установление деления оси x
plt.xticks([0, 100, 200, 310, 400, 500, n*p], ['0', '100', '200', '310\n(k)', '400', '500', '{}\n(Среднее)'.format(n*p)])
# Измение размера фигуры
fig.set_figwidth(20)
fig.set_figheight(15)
# Добавление сетки к графику
plt.grid(linestyle=':')
plt.show()
Случай левосторонней альтернативной альтернативы
p-value будет считаться следующим образом:
Посчитаем p-value для нашего примера:
Полученное значение p-value говорит нам о том что мы не можем отвергнуть нулевую гипотезу и склониться в сторону альтернативы. Это очень большая вероятность, поэтому мы не можем отвергнуть нулевую гипотезу ни на каком разумном уровне значимости.
код для построения графика для случая левосторонней альтернативы
import numpy as np
import matplotlib.pyplot as plt
# Определение параметров биномиального распределения
n = 550 # количество испытаний
p = 0.5 # вероятность успеха
# Массив возможных исходов от 0 до n
x = np.arange(0, n+1)
# Вычисление функции масс для биномиального распределения для каждого исхода
pmf = np.zeros(n+1)
for i in range(n+1):
pmf[i] = np.math.comb(n, i) * p**i * (1-p)**(n-i)
# Создание фигуры
fig = plt.figure()
# Построение биномиального распределения в виде точечной диаграммы
plt.scatter(x, pmf, s=2, c='blue')
# Выберор подмножества значений x и pmf
x_subset = x[(x >= 0) & (x <= 310)]
pmf_subset = pmf[(x >= 0) & (x <= 310)]
# Построение подмножества точек другим цветом
plt.scatter(x_subset, pmf_subset, c='red', s=1)
# Построение вертикальных линий
plt.vlines(x_subset, 0, pmf_subset, color='red', linewidth=0.1)
# Установление деления оси x
plt.xticks([0, 100, 200, 310, 400, 500, n*p], ['0', '100', '200', '310\n(k)', '400', '500', '{}\n(Среднее)'.format(n*p)])
# Измение размера фигуры
fig.set_figwidth(20)
fig.set_figheight(15)
# Добавление сетки к графику
plt.grid(linestyle=':')
plt.show()
Случай двусторонней альтернативной альтернативы
Вычисление для двухстороннего теста немного сложнее, поскольку биномиальное распределение в общем случае не является симметричным (если p ≠ 0.5). Это означает, что мы не можем просто удвоить p-value для одностороннего теста. Вместо этого мы рассматриваем события, которые являются такими же или более экстремальными, чем то, которое мы видели, поэтому мы должны учитывать вероятность того, что мы увидим событие, у которого такая же или меньшая вероятность, чем у X = k, такое событие может находить как с левой так и с правой стороны.
Тогда получим значение p-value для двухстороннего теста (так как этом случае p=0.5, то можно было и удвоить значение p-value для одностороннего теста):
Полученное значение p-value говорит нам о том что мы можем отвергнуть гипотезу на уровне значимости 0.03, значение статистики которые мы получили достаточно не типичное для нулевой гипотезы, что объяснить случайностью мы этого не можем.
код для построения графика для случая двусторонней альтернативы
import numpy as np
import matplotlib.pyplot as plt
# Определение параметров биномиального распределения
n = 550 # количество испытаний
p = 0.5 # вероятность успеха
# Массив возможных исходов от 0 до n
x = np.arange(0, n+1)
# Вычисление функции масс для биномиального распределения для каждого исхода
pmf = np.zeros(n+1)
for i in range(n+1):
pmf[i] = np.math.comb(n, i) * p**i * (1-p)**(n-i)
# Создание фигуры
fig = plt.figure()
# Построение биномиального распределения в виде точечной диаграммы
plt.scatter(x, pmf, s=2, c='blue')
# Выберор подмножества значений x и pmf
x_subset = x[(x >= 0) & (x <= 240) | (x >= 310) & (x <= 550)]
pmf_subset = pmf[(x >= 0) & (x <= 240) | (x >= 310) & (x <= 550)]
# Построение подмножества точек другим цветом
plt.scatter(x_subset, pmf_subset, c='red', s=1)
# Построение вертикальных линий
plt.vlines(x_subset, 0, pmf_subset, color='red', linewidth=0.1)
# Установление деления оси x
plt.xticks([0, 100, 200, 310, 400, 500, n*p], ['0', '100', '200', '310\n(k)', '400', '500', '{}\n(Среднее)'.format(n*p)])
# Измение размера фигуры
fig.set_figwidth(20)
fig.set_figheight(15)
# Добавление сетки к графику
plt.grid(linestyle=':')
plt.show()
Дополнительные сведения
Для больших выборок, биномиальное распределение хорошо аппроксимируется удобным непрерывным распределением — нормальным, которое гораздо быстрее вычисляется.
ЦПТ
Пусть X1, …, Xn последовательность независимых одинаково распределённых случайных величин, имеющих конечное математическое ожидание μ и дисперсию σ^2, тогда имеет место следующая сходимость по распределению:
или иначе
или иначе (и нам нужен именно этот вариант)
или иначе (для тех, кто любит формулы)
В силу ЦПТ работает следующее приближение
Биномиальное распределение есть сумма n-го числа Бернуллиевских, математическое ожидание Бернуллиевской случайной величины равно μ = p, дисперсия σ^2 = p (1-p)
Cлучайные величины независимы ? — Давайте будем считать, что это так
Cлучайные величины распределены одинаково ? — Да, они имеют бернулевское распределение с параметром p
Собрав все вместе, мы получим:
Для стандартного нормального распределения работает Z тест:
Где k — это количество успехов, наблюдаемых в выборке размера n, p — это вероятность успеха в соответствии с нулевой гипотезой.
Посчитаем z статистику для нашего примера, затем посчитанное значение нужно будет сравнить с критическими областями, построенными на основе стандартного нормального распределения:
Случай правосторонней альтернативной альтернативы критическая область выглядит следующим образом:
В этом случае не можем отвергнуть нулевую гипотезу.
Случай двусторонней альтернативной альтернативы критическая область выглядит следующим образом: