Проверка гипотезы

Что это такое и как это сделать на Python

Почему это актуально?

Гипотеза - это утверждение или предпосылка, которую мы хотим проверить. Проверка гипотез - это способ подкрепить ваши выводы данными более «научным» способом. Это полезно не только для ученых, но и действительно важно во многих областях, от маркетинга до веб-дизайна до фармацевтических испытаний и многих других. Поскольку он очень полезен и основан на базовых статистических концепциях, изучение того, когда применять наиболее типичные тесты, улучшит ваши навыки в области анализа данных, даже если вы не являетесь специалистом по данным, но все же каким-то образом работаете с данными. В этой статье мы стремимся объяснить полезность наиболее распространенных тестов гипотез и объяснить, когда их использовать. Он завершается иллюстрацией кода Python того, как выполняются тесты в проекте по науке о данных.

Что это?

Итак, что такое статистическая гипотеза? Это гипотеза, которую можно проверить с помощью данных. Например, если вы считаете, что кнопка «Добавить в корзину» в вашей электронной коммерции должна быть красной, а не синей, поскольку это заставит людей покупать больше, вы можете сформулировать следующую гипотезу: «Красный кнопка принесет больше продаж, чем синяя кнопка ».

Теперь, как вы можете это проверить? Самый «очевидный» подход - создать две версии веб-сайта, запустить обе в течение некоторого времени, случайным образом назначив пользователей одной из них, а затем посмотреть, какая из них сгенерирована больше продаж. Если «синяя» версия приносит 1 миллион долларов в месяц, а «красная» - 10 миллионов долларов, вы получили свой ответ, верно? Что, если «красная» версия принесет 2 миллиона долларов? Что, если он принесет 1 миллион долларов 1 цент? Когда разница достаточно велика, чтобы быть значимой? Проблема с этим подходом заключается в том, что он не принимает во внимание естественную изменчивость, которую мы имеем при работе с случайностью. С другой стороны, при проверке гипотез учитывается не только случайность, но и то, насколько уверены мы в своих выводах.

Таким образом, проверка гипотез - это процедура, с помощью которой мы можем оценить правдоподобность нашего вывода, используя не только наши выборочные данные, но и зная, насколько риск мы готовы принять, и типы ошибок, с которыми мы, вероятно, столкнемся в процессе.

Как это работает?

Нулевая гипотеза против альтернативной гипотезы

Нулевая гипотеза - это общепринятое утверждение, предположение, значение или параметр по умолчанию. Альтернативная гипотеза - это исследовательская или исследовательская гипотеза, включающая в себя проверяемое утверждение, которое, как мы надеемся, может заменить нулевую гипотезу, если она окажется верной. Приведенные ниже различные тесты помогают выяснить, в какой степени информация из выборочных данных может быть экстраполирована на популяцию, из которой она была получена.

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

Типовые тесты (и когда их использовать)

Тест Стьюдента

Это полезный тип теста, используемый для сравнения одной числовой функции (по росту или весу) между двумя группами в наборе данных. Он определяет, есть ли значительная разница между средними значениями двух групп, путем получения p-значения, которое говорит вам, насколько вероятно, что разница, наблюдаемая в выборке между этими двумя группами выборки, могла бы произойти, если бы не было разницы на уровне популяции. (ваша нулевая гипотеза). Если значение p меньше определенного порога (обычно 0,05), то существует статистически значимая разница между двумя исследуемыми группами.

Важная проблема с t-критерием заключается в том, что он предполагает нормальное распределение и равные дисперсии в обеих группах. Хорошо, но как я могу узнать, нормальные ли мои дистрибутивы? Ну, например, с тестом Шапиро-Уилка.

Шапиро-Вилк

Названный в честь Сэмюэля Сэнфорда Шапиро и Мартина Уилка, тест Шапиро-Уилка обычно используется для проверки нормальности в частотной статистике. Вы используете его, когда хотите определить, происходит ли случайная выборка из нормального распределения или нет. Чем меньше значение W, возвращаемое тестом, тем больше вы можете быть уверены в том, что образец не имеет нормального распределения. Этот результат может привести к отклонению нулевой гипотезы, с которой вы изначально начали. Вы также можете думать об этом с точки зрения p-значения: когда оно меньше или равно определенному порогу (обычно 0,05), вы можете отклонить нулевую гипотезу.

Верно, а что, если мои дистрибутивы не нормальные? Я просто не могу их сравнить? Что ж, можете, но на этот раз с помощью теста Манна-Уитни.

Тест Манна-Уитни

В статистике это также называется U-критерием Манна-Уитни. Этот тест становится полезным, когда вы хотите посмотреть на разницу между двумя независимыми группами, особенно когда зависимая переменная является либо порядковой, либо непрерывной, но не имеет нормального распределения.

Оба типа тестов, которые мы видели для сравнения групп, проводились с использованием 2 групп, но что, если у нас более двух групп?

ANOVA

Тесты ANOVA становятся удобными, когда мы хотим сравнить несколько категорий в наборе данных. ANOVA (иногда называемый дисперсионным анализом) особенно полезен при проверке различий в числовой переменной в более чем 2 категориях одновременно. ANOVA также основывается на трех основных предположениях: выборки независимы, происходят из нормально распределенной генеральной совокупности и имеют одинаковую дисперсию .

Но что, если обе ваши переменные категоричны, и вы хотите проверить, ведут ли они себя так, как если бы они были независимыми? Затем попробуйте использовать критерий хи-квадрат Пирсона для своих данных.

Критерии хи-квадрат Пирсона

Это полезно при работе с категориальными переменными, чтобы увидеть, насколько вероятно было бы наблюдать за распределением ваших данных, если бы эти переменные были независимыми. Например, предположим, вы хотите знать, повышает или менее вероятность того, что вы станете курильщиком, будучи мужчиной или женщиной. Если бы эти две переменные были независимыми, можно было бы ожидать одинакового процента мужчин и женщин как среди курильщиков, так и среди некурящих. Критерий хи-квадрат Пирсона покажет вам, насколько вы можете быть уверены в том, что существует такая разница или нет.

Практический пример с использованием Python

Мы будем работать с набором данных, содержащим информацию о продажах в Черную пятницу, и проводить тесты, которые мы только что видели (весь код доступен здесь). Исходный набор данных доступен здесь и имеет по одной строке для каждого заказа, но мы изменили его, чтобы он содержал по одной строке для каждого клиента, чтобы сделать часть нашего анализа более интуитивно понятной.

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

Прежде всего, давайте зарядим все функции, которые нам нужны для тестов, из библиотеки scipy (по одной для каждого теста):

[IN]:
from scipy.stats import ttest_ind, shapiro, mannwhitneyu, f_oneway, chi2_contingency

Затем мы определим наш порог p-value (0,05) и создадим функцию, чтобы определить, следует ли отвергать нулевую гипотезу или нет:

[IN]:
def test_result(p, ref_pvalue=0.05):
    if p<ref_pvalue:
        result=”Reject null hypothesis”
    else:
        result=”Don’t reject null hypothesis”
    return result

Почему мы всегда выбираем 0,05 в качестве порога для p-значения? Это в основном условность и может зависеть от области, в которой вы работаете (маркетинг, биостатистика и т. Д.). Чем меньше порог, тем увереннее вы можете быть, если решите отклонить нулевую гипотезу, но тем реже вы будете отклонить это.

Теперь предположим, что мы хотим ответить на очень простой вопрос: тратят ли мужчины и женщины одинаковую сумму? Сначала это выглядит как задание для t-теста, так что давайте попробуем:

[IN]:
men = df[df['Gender']=='M']
women = df[df['Gender']=='F']
ttest_results = ttest_ind(men['Purchase'], women['Purchase'])
print('T-test result: {}'.format(test_result(ttest_results[1])))
[OUT]:
T-test result: Reject null hypothesis

Нулевая гипотеза здесь заключается в том, что средняя стоимость покупки для мужчин и женщин одинакова, поэтому ее отклонение означает, что между этими значениями могут быть различия. Однако, похоже, мы забыли проверить очень важное предположение перед запуском нашего теста: нормально ли распределены эти образцы? Чтобы проверить это, мы посмотрим на распределение наших данных, а затем запустим тесты Шапиро-Уилка:

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

[IN]:
shapiro_results_men = shapiro(men['Purchase'])
print('Shapiro-wilk test results for men: {}'.format(
    test_result(shapiro_results_men[1]))
    )
shapiro_results_women = shapiro(women['Purchase'])
print('Shapiro-wilk test results for women: {}'.format(
    test_result(shapiro_results_women[1]))
    )
[OUT]:
Shapiro-wilk test results for men: Reject null hypothesis
Shapiro-wilk test results for women: Reject null hypothesis

Здесь отказ от нулевой гипотезы означает отказ от гипотезы о нормальном распределении наблюдений. Итак, действительно, наш предыдущий результат t-теста был недействителен. Вместо этого мы должны попробовать тест Манна-Уитни:

[IN]:
mannwhitney_results = mannwhitneyu(men['Purchase'],women['Purchase'])
print('Mann-Whitney test results: {}'.format(test_result(mannwhitney_results[1])))
[OUT]:
Mann-Whitney test results: Reject null hypothesis

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

Теперь давайте попробуем ответить на другой вопрос: есть ли разница в стоимости покупок в разных категориях городов? На этот раз есть 3 разные категории, поэтому ни t-критерий, ни Манна-Уитни не подходят. Вместо этого мы можем использовать ANOVA, который, опять же, требует нормальных распределений. Чтобы приблизить наши данные к нормальному распределению, есть хитрый трюк: использование логарифмического преобразования. Затем мы воспользуемся этим трюком перед запуском теста ANOVA.

[IN]:
a = df[df['City_Category']=='A']
b = df[df['City_Category']=='B']
c = df[df['City_Category']=='C']
a['Purchase'] = a['Purchase'].apply(lambda x: np.log(x))
b['Purchase'] = b['Purchase'].apply(lambda x: np.log(x))
c['Purchase'] = c['Purchase'].apply(lambda x: np.log(x))
anova_results = f_oneway(a['Purchase'], b['Purchase'], c['Purchase'])
print('ANOVA test results: {}'.format(test_result(anova_results[1])))
[OUT]:
ANOVA test results: Reject null hypothesis

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

Теперь, к последнему вопросу, на этот раз с двумя категориальными переменными: связаны ли семейное положение и род занятий? На этот раз речь идет не о сравнении средних значений, а о сравнении частот. Итак, сначала мы создаем таблицу непредвиденных обстоятельств для расчета частот всех комбинаций рода занятий и семейного положения, а затем запускаем наш тест:

[IN]:
contingency_table = pd.crosstab(df['Marital_Status'],df['Occupation'])
chisquare_results = chi2_contingency(contingency_table)
print('Chi-squared contingency test results: {}'.format(test_result(chisquare_results[1])))

[OUT]:
Chi-squared contingency test results: Don't reject null hypothesis

На этот раз мы не отвергли нулевую гипотезу, что означает, что нет оснований полагать, что существует некоторая зависимость между семейным положением и родом занятий: они ведут себя более или менее так, как если бы они были независимыми.

Обратите внимание, что мы не проверили все предположения, необходимые для наших тестов в коде. Цель состояла в том, чтобы показать, как выполнять их на Python и как интерпретировать их результаты. Было бы непрактично найти набор данных с переменными, которые удовлетворяют критериям для всех тестов сразу. В действительности, однако, вам следует всегда проверять, что эти предположения верны, перед запуском тестов.

Идти дальше

В статистике существует множество проверок гипотез, и этот список далеко не исчерпывает их всех. Однако эти тесты являются наиболее часто используемыми и должны охватывать большинство базовых сценариев использования. Если вы хотите узнать больше о проверке гипотез или прикладной статистике, отличная книга по этой теме - Практическая статистика для специалистов по данным. Еще один хороший ресурс для более глубокого изучения статистики - LearnMore365 (хотя их курсы обычно платные). Эта статья о Лаэрде немного подробнее описывает тест Манна-Уитни.

Большинство тестов делают какие-то предположения о данных, поэтому внимательно прочтите, что это за предположения и как их проверить (обычно вы можете найти это в документации по функциям Python).

Если вам нравится читать о прикладной статистике, вам может понравиться эта статья:



Эту статью написали Артур Мелло и Кингсли Эссегби.

Не стесняйтесь обращаться к Артуру или Кингсли в LinkedIn, если вы хотите продолжить обсуждение, это будет приятно (честно).