Быстрая навигация
Данных мало — важно понять, несут ли они в себе реальный смысл. Буквально несколько строк на Python позволят быстро отличить: различия между группами случайны или за ними действительно стоит нечто важное?
Что такое проверка гипотез?
Проверка гипотез — это способ с помощью статистики понять: ваши результаты — просто совпадение или за ними стоит нечто существенное? Такой подход позволяет беспристрастно сравнивать выборки и выяснять, есть ли серьёзная разница между ними.
Обычно исследование начинается с так называемой нулевой гипотезы, которая утверждает, что никаких различий нет. Дальше главная задача — найти основания, чтобы её отвергнуть в пользу альтернативной, в которой различия уже есть. Это почти как в суде: пока нет доказательств обратного, все считают подсудимого невиновным. Так и тут: пока статистика не сказала “да”, мы считаем, что разные группы одинаковы.
Простой пример из жизни: тестируют новое лекарство. Одной группе дают плацебо, другой — препарат. Потом сравнивают результаты (например, измеряют давление) и уже на основе чисел решают — действительно ли лекарство работает.
Если раньше замучились бы формулами и таблицами из учебников, то сегодня всё решается одной командой в Python — и именно поэтому для анализа данных он стал таким популярным.
Проверяют гипотезы при определённом уровне значимости — альфа. Например, если принять вероятность ошибки в 5% (то есть доверять результату на 95%), берём альфа = 0,05. Если уровень доверия нужен повыше — 99%, ставят альфа = 0,01. Если полученное p-значение меньше альфа, значит, есть причина схватиться за голову и отвергнуть нулевую гипотезу. То есть при доверии 95% отвергаем, если p < 0,05; при 99% — если p < 0,01.
Есть два варианта промахнуться: ошибка первого рода — случай, когда отвергаем правильную гипотезу, и ошибка второго рода, если, наоборот, оставляем без внимания настоящие отличия. Например, если отклонить реально верную нулевую гипотезу — это ошибка первого рода, а если проглядеть настоящие различия — это уже вторая ошибка.
Такие промахи бывают дорогими: можно принять опасное лекарство за полезное. Лучший способ снизить риск — использовать как можно больше данных.
Очень важно заранее продумать и чётко сформулировать обе гипотезы и выбрать подходящий уровень значимости, а не “подгонять” их под свои ожидания!
Зачем нужны статистические тесты?
Спросить “а что у меня тут есть?” у “сырых” данных напрямую не выйдет — просто по таблице не понять, случай это или настоящая закономерность. Перед выпуском нового лекарства потребуется доказать его эффективность — без статистики такой шанс не дадут. Так же и в бизнесе: если хочется узнать, покупают ли клиенты один товар вместе с другим — без тестов не разобраться.
Статистические тесты — это не просто формулы, а инструмент для адекватного и аргументированного понимания данных.
t-тест Стьюдента
На вводных лекциях по статистике любят приводить в пример нормальное распределение — ту самую “колоколообразную” кривую. В реальности этот подход редко применим: чтобы использовать его напрямую, надо знать стандартное отклонение всей совокупности, а это почти никогда недоступно, да и объёмы данных обычно недостаточны.
В повседневных задачах, если распределение хотя бы напоминает нормальное, используют t-тест Стьюдента. Обычно с его помощью проверяют, равно ли среднее по группе какому-то значению, или отличаются ли средние у двух независимых выборок.
t-тест с Python проще всего провести с помощью библиотеки Pingouin.
Давайте попробуем это на практике: сгенерируем с помощью NumPy массив из 15 случайных чисел и быстро проверим гипотезу.
Все шаги можно повторить в Jupyter Notebook — код выложен на GitHub. Для начала создадим массив из 15 значений с нормальным распределением.
В t-тесте предполагается, что данные действительно распределены нормально. В нашем примере так и есть — мы специально сгенерировали их именно так. А вот для реальных данных нужно это проверить дополнительно — здесь пригодится тест Шапиро–Уилка (он тоже есть в Pingouin и отлично работает с небольшими наборами).
Теперь проверим, что среднее нашего массива — 0,45. Используем Pingouin:
Получили p-значение 0,99, то есть никакой причины отвергать нулевую гипотезу ни при альфа 0,05, ни при 0,01 нет.
Линейная регрессия
О линейной регрессии слышали почти все: берём точки — рисуем через них прямую. Но не все знают, что за этой прямой стоит конкретный статистический тест. Pingouin для модели регрессии сразу показывает t-статистику и p-значение. Проверяем гипотезу: а вдруг коэффициент наклона равен нулю, то есть линия совсем плоская? Если p-значение мало (а тут оно в научном формате), нулевую гипотезу отвергают.
Для наглядности воспользуемся библиотекой Seaborn — у неё есть интересный набор реальных данных о чаевых в ресторанах Нью-Йорка. Давайте его подгрузим:
Сначала посмотрим на структуру: используем head — получаем DataFrame из pandas, по сути ту же таблицу из SQL.
Теперь построим график: разброс точек — чаевые по оси Y, сумма счёта по X. Проведём по этим точкам линию регрессии.
Видим отличную “сцепку” данных с прямой.
Теперь формально это докажем — используем функцию linear_regression из Pingouin, для удобства округлим результаты:
t-статистика и p-значение не оставляют шансов нулевой гипотезе: чем дальше коэффициент от нуля, тем выше t. Здесь t=14,26, p-значение почти ноль — разница есть и она однозначно значима.
ANOVA
Если t-тест — это сравнение средних, а регрессия — поиск связей, то ANOVA (анализ дисперсии) отвечает на вопрос: влияет ли категория (например, вид животного) на некоторую характеристику? Давайте разберёмся: c помощью Pingouin проверим, одинаковая ли длина ласт у разных видов penguin-ов. Нулевая гипотеза — у всех видов длина ласт одинакова.
Здесь p=0 — нулевая гипотеза не проходит, вид penguin-а действительно влияет на длину ласты.
Непараметрические тесты
Во многих классических тестах предполагается определённое распределение данных (обычно нормальное — как у t-теста). Но на практике статистика редко бывает “идеальной”, особенно если речь о людях и их поведении. Для таких случаев есть непараметрические тесты — они не требуют выполнения строгих условий.
Например, тест Манна–Уитни — альтернатива t-тесту для случаев, когда о нормальном распределении остаётся только мечтать. Такой тест тоже есть в Pingouin — давайте сгенерируем пару случайных выборок и попробуем его в деле.
Теперь сравним средние значения этих двух выборок с помощью теста Манна–Уитни:
Когда нельзя использовать обычную ANOVA, есть её непараметрический аналог — тест Крускала–Уоллиса. Покажу всё на примере с penguin-ами:
Результат тот же: вид penguin-а влияет на длину ласт, и это реально значимо.
Вот так просто статистические тесты на Python за несколько минут докажут, насколько вашим данным можно доверить судьбу бизнеса или жизни. Проверить всё — проще простого!
Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!
Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь
Также подписывайтесь на нас в:
- Telegram: https://t.me/gergenshin
- Youtube: https://www.youtube.com/@gergenshin
- Яндекс Дзен: https://dzen.ru/gergen
- Официальный сайт: https://www-genshin.ru