Python и статистический вывод: часть 3
Для статистиков и исследователей данных проверка статистической гипотезы представляет собой формальную процедуру. Стандартный подход к проверке статистической гипотезы подразумевает определение области исследования, принятие решения в отношении того, какие переменные необходимы для измерения предмета изучения, и затем выдвижение двух конкурирующих гипотез. Во избежание рассмотрения только тех данных, которые подтверждают наши субъективные оценки, исследователи четко констатируют свою гипотезу заранее. Затем, основываясь на данных, они применяют выборочные статистики с целью подтвердить либо отклонить эту гипотезу.
Проверка статистической гипотезы подразумевает использование тестовой статистики, т.е. выборочной величины, как функции от результатов наблюдений. Тестовая статистика (test statistic) — это вычисленная из выборочных данных величина, которая используется для оценивания прочности данных, подтверждающих нулевую статистическую гипотезу и служит для выявления меры расхождения между эмпирическими и гипотетическими значениями. Конкретные методы проверки называются тестами, например, z-тест, t-тест (соответственно z-тест Фишера, t-тест Студента) и т.д. в зависимости от применяемых в них тестовых статистик.
Примечание. В отечественной статистической науке используется «туманный» термин «статистика критерия». Туманный потому здесь мы снова наблюдаем мягкую подмену: вместо теста возникает критерий. Если уж на то пошло, то критерий — это принцип или правило. Например, выполняя z-тест, t-тест и т.д., мы соответственно используем z-статистику, t-статистику и т.д. в правиле отклонения гипотезы. Это хорошо резюмируется следующей ниже таблицей:
Тестирование гипотезы
Тестовая статистика
Правило отклонения гипотезы
Если тестовая статистика ≥ z или ≤ -z, то отклонить нулевую гипотезу H0.
Если тестовая статистика ≥ t или ≤ -t, то отклонить нулевую гипотезу H0.
Анализ дисперсии (ANOVA)
Если тестовая статистика ≥ F, то отклонить нулевую гипотезу H0.
Если тестовая статистика ≥ χ, то отклонить нулевую гипотезу H0.
Для того, чтобы помочь сохранить поток посетителей веб-сайта, дизайнеры приступают к работе над вариантом веб-сайта с использованием всех новейших методов по поддержанию внимания аудитории. Мы хотели бы удостовериться, что наши усилия не напрасны, и поэтому стараемся увеличить время пребывания посетителей на обновленном веб-сайте.
Отсюда главный вопрос нашего исследования состоит в том, «приводит ли обновленный вид веб-сайта к увеличению времени пребывания на нем посетителей»? Мы принимаем решение проверить его относительно среднего значения времени пребывания. Теперь, мы должны изложить две наши гипотезы. По традиции считается, что изучаемые данные не содержат того, что исследователь ищет. Таким образом, консервативное мнение заключается в том, что данные не покажут ничего необычного. Все это называется нулевой гипотезой и обычно обозначается как H0.
При тестировании статистической гипотезы исходят из того, что нулевая гипотеза является истинной до тех пор, пока вес представленных данных, подтверждающих обратное, не сделает ее неправдоподобной. Этот подход к поиску доказательств «в обратную сторону» частично вытекает из простого психологического факта, что, когда люди пускаются на поиски чего-либо, они, как правило, это находят.
Затем исследователь формулирует альтернативную гипотезу, обозначаемую как H1. Она может попросту заключаться в том, что популяционное среднее отличается от базового уровня. Или же, что популяционное среднее больше или меньше базового уровня, либо больше или меньше на некоторую указанную величину. Мы хотели бы проверить, не увеличивает ли обновленный дизайн веб-сайта время пребывания, и поэтому нашей нулевой и альтернативной гипотезами будут следующие:
H0: Время пребывания для обновленного веб-сайта не отличается от времени пребывания для существующего веб-сайта
H1: Время пребывания для обновленного веб-сайта больше по сравнению с временем пребывания для существующего веб-сайта
Наше консервативное допущение состоит в том, что обновленный веб-сайт никак не влияет на время пребывания посетителей на веб-сайте. Нулевая гипотеза не обязательно должна быть «нулевой» (т.е. эффект отсутствует), но в данном случае, у нас нет никакого разумного оправдания, чтобы считать иначе. Если выборочные данные не поддержат нулевую гипотезу (т.е. если данные расходятся с ее допущением на слишком большую величину, чтобы носить случайный характер), то мы отклоним нулевую гипотезу и предложим альтернативную в качестве наилучшего альтернативного объяснения.
Указав нулевую и альтернативную гипотезы, мы должны установить уровень значимости, на котором мы ищем эффект.
Статистическая значимость
Проверка статистической значимости изначально разрабатывалась независимо от проверки статистических гипотез, однако сегодня оба подхода очень часто используются во взаимодействии друг с другом. Задача проверки статистической значимости состоит в том, чтобы установить порог, за пределами которого мы решаем, что наблюдаемые данные больше не поддерживают нулевую гипотезу.
Следовательно, существует два риска:
Мы можем принять расхождение как значимое, когда на самом деле оно возникло случайным образом
Мы можем приписать расхождение случайности, когда на самом деле оно показывает истинное расхождение с популяцией
Эти две возможности обозначаются соответственно, как ошибки 1-го и 2-го рода:
Ошибка 1-го рода (ложноположительный исход)
Ошибка 2-го рода (ложноотрицательный исход)
Чем больше мы уменьшаем риск совершения ошибок 1-го рода, тем больше мы увеличиваем риск совершения ошибок 2-го рода. Другими словами, с чем большей уверенностью мы хотим не заявлять о наличии расхождения, когда его нет, тем большее расхождение между выборками нам потребуется, чтобы заявить о статистической значимости. Эта ситуация увеличивает вероятность того, что мы проигнорируем подлинное расхождение, когда мы с ним столкнемся.
В статистической науке обычно используются два порога значимости. Это уровни в 5% и 1%. Расхождение в 5% обычно называют значимым, а расхождение в 1% — крайне значимым. В формулах этот порог часто обозначается греческой буквой α (альфа) и называется уровнем значимости. Поскольку, отсутствие эффекта по результатам эксперимента может рассматриваться как неуспех (эксперимента либо обновленного веб-сайта, как в нашем случае), то может возникнуть желание корректировать уровень значимости до тех пор, пока эффект не будет найден. По этой причине классический подход к проверке статистической значимости требует, чтобы мы устанавливали уровень значимости до того, как обратимся к нашим данным. Часто выбирается уровень в 5%, и поэтому мы на нем и остановимся.
Проверка обновленного дизайна веб-сайта
Веб-команда в AcmeContent была поглощена работой, конструируя обновленный веб-сайт, который будет стимулировать посетителей оставаться на нем в течение более длительного времени. Она употребила все новейшие методы и, в результате мы вполне уверены, что веб-сайт покажет заметное улучшение показателя времени пребывания.
Вместо того, чтобы запустить его для всех пользователей сразу, в AcmeContent хотели бы сначала проверить веб-сайт на небольшой выборке посетителей. Мы познакомили веб-команду с понятием искаженности выборки, и в результате там решили в течение одного дня перенаправлять случайные 5% трафика на обновленный веб-сайт. Результат с дневным трафиком был нам предоставлен одним текстовым файлом. Каждая строка показывает время пребывания посетителей. При этом, если посетитель пользовался исходным дизайном, ему присваивалось значение «0», и если он пользовался обновленным (и надеемся, улучшенным) дизайном, то ему присваивалось значение «1».
Выполнение z-теста
Ранее при тестировании с интервалами уверенности мы располагали лишь одним популяционным средним, с которым и выполнялось сравнение.
При тестировании нулевой гипотезы с помощью z-теста мы имеем возможность сравнивать две выборки. Посетители, которые видели обновленный веб-сайт, отбирались случайно, и данные для обеих групп были собраны в тот же день, чтобы исключить другие факторы с временной зависимостью.
Поскольку в нашем распоряжении имеется две выборки, то и стандартных ошибок у нас тоже две. Z-тест выполняется относительно объединенной стандартной ошибки, т.е. квадратного корня суммы дисперсий (вариансов), деленных на размеры выборок. Она будет такой же, что и результат, который мы получим, если взять стандартную ошибку обеих выборок вместе:
Здесь σ 2 a — это дисперсия выборки a, σ 2 b — дисперсия выборки b и соответственно na и nb — размеры выборок a и b. На Python объединенная стандартная ошибка вычисляется следующим образом:
С целью выявления того, является ли видимое нами расхождение неожиданно большим, можно взять наблюдавшиеся расхождения между средними значениями на объединенной стандартной ошибке. Эту статистическую величину принято обозначать переменной z:
Используя функции pooled_standard_error , которая вычисляет объединенную стандартную ошибку, z-статистику можно получить следующим образом:
Соотношение z объясняет, насколько средние значения отличаются относительно величины, которую мы ожидаем при заданной стандартной ошибке. Следовательно, z-статистика сообщает нам о том, на какое количество стандартных ошибок расходятся средние значения. Поскольку стандартная ошибка имеет нормальное распределение вероятностей, мы можем связать это расхождение с вероятностью, отыскав z-статистику в нормальной ИФР:
В следующем ниже примере z-тест используется для сравнения результативность двух веб-сайтов. Это делается путем группировки строк по номеру веб-сайта, в результате чего возвращается коллекция, в которой конкретному веб-сайту соответствует набор строк. Мы вызываем groupby(‘site’)[‘dwell-time’] для конвертирования набора строк в набор значений времени пребывания. Затем вызываем функцию get_group с номером группы, соответствующей номеру веб-сайта:
Установление уровня значимости в размере 5% во многом аналогично установлению интервала уверенности шириной 95%. В сущности, мы надеемся убедиться, что наблюдавшееся расхождение попадает за пределы 95%-го интервала уверенности. Если это так, то мы можем утверждать, что нашли результат с 5%-ым уровнем значимости.
P -значение — это вероятность совершения ошибки 1-го рода в результате неправильного отклонения нулевой гипотезы, которая в действительности является истинной. Чем меньше p -значение, тем больше определенность в том, что нулевая гипотеза является ложной, и что мы нашли подлинный эффект.
Этот пример возвращает значение 0.0498, или 4.98%. Поскольку оно немногим меньше нашего 5% порога значимости, мы можем утверждать, что нашли нечто значимое.
Приведем еще раз нулевую и альтернативную гипотезы:
H0: Время пребывания на обновленном веб-сайте не отличается от времени пребывания на существующем веб-сайте
H1: Время пребывания на обновленном веб-сайте превышает время пребывания на существующем веб-сайте.
Наша альтернативная гипотеза состоит в том, что время пребывания на обновленном веб-сайте больше.
Мы готовы заявить о статистической значимости, и что время пребывания на обновленном веб-сайте больше по сравнению с существующим веб-сайтом, но тут есть одна трудность — чем меньше размер выборки, тем больше неопределенность в том, что выборочное стандартное отклонение совпадет с популяционным. Как показано в результатах предыдущего примера, наша выборка из обновленного веб-сайта содержит всего 16 посетителей. Столь малые выборки делают невалидным допущение о том, что стандартная ошибка нормально распределена.
К счастью, существует тест и связанное с ним распределение, которое моделирует увеличенную неопределенность стандартных ошибок для выборок меньших размеров.
t-распределение Студента
Популяризатором t-распределения был химик, работавший на пивоварню Гиннес в Ирландии, Уилльям Госсетт, который включил его в свой анализ темного пива Стаут.
В 1908 Уильям Госсет опубликовал статью об этой проверке в журнале Биометрика, но при этом по распоряжению своего работодателя, который рассматривал использованную Госсеттом статистику как коммерческую тайну, был вынужден использовать псевдоним. Госсет выбрал псевдоним « Студент ».
В то время как нормальное распределение полностью описывается двумя параметрами — средним значением и стандартным отклонением, t-распределение описывается лишь одним параметром, так называемыми степенями свободы. Чем больше степеней свободы, тем больше t-распределение похоже на нормальное распределение с нулевым средним и стандартным отклонением, равным 1. По мере уменьшения степеней свободы, это распределение становится более широким с более толстыми чем у нормального распределения, хвостами.
Нормальное распределение, t-распределение со степенью свободы df = 20 и степенью свободы df = 5
Приведенный выше рисунок показывает, как t-распределение изменяется относительно нормального распределения при наличии разных степеней свободы. Более толстые хвосты для выборок меньших размеров соответствуют увеличенной возможности наблюдать более крупные отклонения от среднего значения.
Степени свободы
Степени свободы, часто обозначаемые сокращенно df от англ. degrees of freedom, тесно связаны с размером выборки. Это полезная статистика и интуитивно понятное свойство числового ряда, которое можно легко продемонстрировать на примере.
Если бы вам сказали, что среднее, состоящее из двух значений, равно 10 и что одно из значений равно 8, то Вам бы не потребовалась никакая дополнительная информация для того, чтобы суметь заключить, что другое значение равно 12. Другими словами, для размера выборки, равного двум, и заданного среднего значения одно из значений ограничивается, если другое известно.
Если напротив вам говорят, что среднее, состоящее из трех значений, равно 10, и первое значение тоже равно 10, то Вы были бы не в состоянии вывести оставшиеся два значения. Поскольку число множеств из трех чисел, начинающихся с 10, и чье среднее равно 10, является бесконечным, то прежде чем вы сможете вывести значение третьего, второе тоже должно быть указано.
Для любого множества из трех чисел ограничение простое: вы можете свободно выбрать первые два числа, но заключительное число ограничено. Степени свободы могут таким образом быть обобщены следующим образом: количество степеней свободы любой отдельной выборки на единицу меньше размера выборки.
При сопоставлении двух выборок степени свободы на две единицы меньше суммы размеров этих выборок, что равно сумме их индивидуальных степеней свободы.
t-статистика
При использовании t-распределения мы обращаемся к t-статистике. Как и z-статистика, эта величина количественно выражает степень маловероятности отдельно взятого наблюдавшегося отклонения. Для двухвыборочного t-теста соответствующая t-статистика вычисляется следующим образом:
Здесь Sa̅b̅ — это объединенная стандартная ошибка. Объединенная стандартная ошибка вычисляется таким же образом, как и раньше:
Однако это уравнение допускает наличие информации о популяционных параметрах σa и σb, которые можно аппроксимировать только на основе крупных выборок. t-тест предназначен для малых выборок и не требует от нас принимать допущения о поплуляционной дисперсии (вариансе).
Как следствие, объединенная стандартная ошибка для t-теста записывается как квадратный корень суммы стандартных ошибок:
На практике оба приведенных выше уравнения для объединенной стандартной ошибки дают идентичные результаты при заданных одинаковых входных последовательностях. Разница в математической записи всего лишь служит для иллюстрации того, что в условиях t-теста мы на входе зависим только от выборочных статистик. Объединенная стандартная ошибка может быть вычислена следующим образом:
Хотя в математическом плане t-статистика и z-статистика представлены по-разному, на практике процедура вычисления обоих идентичная:
Различие между двумя выборочными показателями является не алгоритмическим, а концептуальным — z-статистика применима только тогда, когда выборки подчинены нормальному распределению.
t-тест
Разница в характере работы t-теста вытекает из распределения вероятностей, из которого вычисляется наше p-значение. Вычислив t-статистику, мы должны отыскать ее значение в t-распределении, параметризованном степенями свободы наших данных:
Значение степени свободы обеих выборок на две единицы меньше их размеров, и для наших выборок составляет 298.
t-распределение, степень свободы = 298
Напомним, что мы выполняем проверку статистической гипотезы. Поэтому выдвинем нашу нулевую и альтернативную гипотезы:
H0: Эта выборка взята из популяции с предоставленным средним значением
H1: Эта выборка взята из популяции со средним значением большего размера
Выполним следующий ниже пример:
Этот пример вернет p-значение, составляющее более 0.05. Поскольку оно больше α, равного 5%, который мы установили для проверки нулевой гипотезы, то мы не можем ее отклонить. Наша проверка с использованием t-теста значимого расхождения между средними значениями не обнаружила. Следовательно, наш едва значимый результат z-теста отчасти объясняется наличием слишком малой выборки.
Двухсторонние тесты
В нашей альтернативной гипотезе было принято неявное допущение, что обновленный веб-сайт будет работать лучше существующего. В процедуре проверки нулевой статистической гипотезы предпринимаются особые усилия для обеспечения того, чтобы при поиске статистической значимости мы не делали никаких скрытых допущений.
Проверки, при выполнении которых мы ищем только значимое количественное увеличение или уменьшение, называются односторонними и обычно не приветствуются, кроме случая, когда изменение в противоположном направлении было бы невозможным. Название термина «односторонний» обусловлено тем, что односторонняя проверка размещает всю α в одном хвосте распределения. Не делая проверок в другом направлении, проверка имеет больше мощности отклонить нулевую гипотезу в отдельно взятом направлении и, в сущности, понижает порог, по которому мы судим о результате как значимом.
Статистическая мощность — это вероятность правильного принятия альтернативной гипотезы. Она может рассматриваться как способность проверки обнаруживать эффект там, где имеется искомый эффект.
Хотя более высокая статистическая мощность выглядит желательной, она получается за счет наличия большей вероятности совершить ошибку 1-го рода. Правильнее было бы допустить возможность того, что обновленный веб-сайт может в действительности оказаться хуже существующего. Этот подход распределяет нашу α одинаково по обоим хвостам распределения и обеспечивает значимый результат, не искаженный под воздействием априорного допущения об улучшении работы обновленного веб-сайта.
Надписи: t-распределение, степень свободы = 298
В действительности в модуле stats библиотеки scipy уже предусмотрены функции для выполнения двухвыборочных t-проверок. Это функция stats.ttest_ind . В качестве первого аргумента мы предоставляем выборку данных и в качестве второго — выборку для сопоставления. Если именованный аргумент equal_var равен True , то выполняется стандартная независимая проверка двух выборок, которая предполагает равные популяционные дисперсии, в противном случае выполняется проверка Уэлша (обратите внимание на служебную функцию t_test_verbose , (которую можно найти среди примеров исходного кода в репо):
По результатам t-теста служебная функция t_test_verbose возвращает много информации и в том числе p-значение. P-значение примерно в 2 раза больше того, которое мы вычислили для односторонней проверки. На деле, единственная причина, почему оно не совсем в два раза больше, состоит в том, что в модуле stats имплементирован легкий вариант t-теста, именуемый t-тестом Уэлша, который немного более робастен, когда две выборки имеют разные стандартные отклонения. Поскольку мы знаем, что для экспоненциальных распределений среднее значение и дисперсия тесно связаны, то этот тест немного более строг в применении и даже возвращает более низкую значимость.
Одновыборочный t-тест
Независимые выборки в рамках t-тестов являются наиболее распространенным видом статистического анализа, который обеспечивает очень гибкий и обобщенный способ установления, что две выборки представляют одинаковую либо разную популяцию. Однако в случаях, когда популяционное среднее уже известно, существует еще более простая проверка, представленная функцией библиотеки sciзy stats.ttest_1samp .
Мы передаем выборку и популяционное среднее относительно которого выполняется проверка. Так, если мы просто хотим узнать, не отличается ли обновленный веб-сайт значимо от существующего популяционного среднего времени пребывания, равного 90 сек., то подобную проверку можно выполнить следующим образом:
Служебная функция t_test_verbose не только возвращает p-значение для выполненной проверки, но и интервал уверенности для популяционного среднего. Интервал имеет широкий диапазон между 78.5 и 165.5 сек., и, разумеется, перекрывается 90 сек. нашего теста. Как раз он и объясняет, почему мы не смогли отклонить нулевую гипотезу.
Многократные выборки
В целях развития интуитивного понимания относительно того, каким образом t-тест способен подтвердить и вычислить эти статистики из столь малых данных, мы можем применить подход, который связан с многократными выборками, от англ. resampling. Извлечение многократных выборок основывается на допущении о том, что каждая выборка является лишь одной из бесконечного числа возможных выборок из популяции. Мы можем лучше понять природу того, какими могли бы быть эти другие выборки, и, следовательно, добиться лучшего понимания опорной популяции, путем извлечения большого числа новых выборок из нашей существующей выборки.
На самом деле существует несколько методов взятия многократных выборок, и мы обсудим один из самых простых — бутстрапирование. При бустрапировании мы генерируем новую выборку, неоднократно извлекая из исходной выборки случайное значение с возвратом до тех пор, пока не сгенерируем выборку, имеющую тот же размер, что и оригинал. Поскольку выбранные значения возвращаются назад после каждого случайного отбора, то в новой выборке то же самое исходное значение может появляться многократно. Это как если бы мы неоднократно вынимали случайную карту из колоды игральных карт и каждый раз возвращали вынутую карту назад в колоду. В результате время от времени мы будем иметь карту, которую мы уже вынимали.
Бутстраповская выборка, или бутстрап, — синтетический набор данных, полученный в результате генерирования повторных выборок (с возвратом) из исследуемой выборки, используемой в качестве «суррогатной популяции», в целях аппроксимации выборочного распределения статистики (такой как, среднее, медиана и др.).
В библиотеке pandas при помощи функции sample можно легко извлекать бутстраповские выборки и генерировать большое число многократных выборок. Эта функция принимает ряд опциональных аргументов, в т.ч. n (число элементов, которые нужно вернуть из числового ряда), axis (ось, из которой извлекать выборку) и replace (выборка с возвратом или без), по умолчанию равный False . После этой функции можно задать метод агрегирования, вычисляющий сводную статистику в отношении бутстраповских выборок:
Приведенный выше пример наглядно показывает результаты на гистограмме:
Гистограмма демонстрирует то, как средние значения изменялись вместе с многократными выборками, взятыми из времени пребывания на обновленном веб-сайте. Хотя на входе имелась лишь одна выборка, состоящая из 16 посетителей, бутстрапированные выборки очень четко просимулировали стандартную ошибку изначальной выборки и позволили визуализировать интервал уверенности (между 78 и 165 сек.), вычисленный ранее в результате одновыборочного t-теста.
Благодаря бутстрапированию мы просимулировали взятие многократных выборок, при том, что у нас на входе имелась всего одна выборка. Этот метод обычно применяется для оценивания параметров, которые мы не способны или не знаем, как вычислить аналитически.
Проверка многочисленных вариантов дизайна
Было разочарованием обнаружить отсутствие статистической значимости на фоне увеличенного времени пребывания пользователей на обновленном веб-сайте. Хотя хорошо, что мы обнаружили это на малой выборке пользователей, прежде чем выкладывать его на всеобщее обозрение.
Не позволяя себя обескуражить, веб-команда AcmeContent берется за сверхурочную работу и создает комплект альтернативных вариантов дизайна веб-сайта. Беря лучшие элементы из других проектов, они разрабатывают 19 вариантов для проверки. Вместе с нашим изначальным веб-сайтом, который будет действовать в качестве контрольного, всего имеется 20 разных вариантов дизайна веб-сайта, куда посетители будут перенаправляться.
Вычисление выборочных средних
Веб-команда разворачивает 19 вариантов дизайна обновленного веб-сайта наряду с изначальным. Как отмечалось ранее, каждый вариант дизайна получает случайные 5% посетителей, и при этом наше испытание проводится в течение 24 часов.
На следующий день мы получаем файл, показывающий значения времени пребывания посетителей на каждом варианте веб-сайта. Все они были промаркированы числами, при этом число 0 соответствовало веб-сайту с исходным дизайном, а числа от 1 до 19 представляли другие варианты дизайна:
Проверка гипотез на python
С каждым днем количество данных становится больше и больше. И как говорится, чем больше ты знаешь, тем больше ты задаешь вопросов, и тем больше ты хочешь получить ответов. Получить ответы на основе данных можно с помощью статистики. А именно, если требуется что-то сравнить, поможет проверка статистических гипотез.
Что же такое статистическая гипотеза. Приведём определение из Википедии.
Статистическая гипотеза — предположение о виде распределения и свойствах случайной величины, которое можно подтвердить или опровергнуть применением статистических методов к данным выборки.
Случайная величина, например, среднее, берется из выборки, которая тоже должна быть взята случайно и в ней должно быть от 30 элементов. Если выборка берется не случайно, то и данные будут не достоверные. Значение в 30 элементов это научно доказанный факт, так как начиная от 30 выборочные среднее и дисперсия близки к реальному среднему и дисперсии генеральной совокупности.
В общем виде алгоритм проверки выглядит следующим образом:
1. Формулировка основной гипотезы Н₀ и альтернативной гипотезы Н₁;
2. Задание уровня значимости α;
Определение уровня значимости довольно большая тема, поэтому обозначим кратко основные моменты.
Есть стандартные уровни значимости 0,1; 0,05; 0,01; 0,001.
И условно их можно выбирать так. Если объем выборки небольшой до 100 единиц, то можно вполне отвергнуть нулевую гипотезу при уровне значимости 0,05 или даже 0,1. При объеме выборки, измеряемой сотнями – от 100 до 1000, следует понизить уровень значимости хотя бы до 0,01. А при больших выборках, измеряемых тысячами наблюдений, уверенно отвергать нулевую гипотезу можно только при значимости меньшей 0,001.
В целом же для каждой конкретной задачи нужно смотреть на данные и подбирать уровень значимости, который в лучшей мере подойдет для этих данных.
3. Выбор статистического критерия;
4. Определения правила принятия решения;
5. Принятие решения на основе данных.
Теперь проведем тест на Python используя библиотеку scipy.stats.
Гипотеза: средние показатели переменных различаются.
— Сформулируем нулевую гипотезу (Н₀). Среднее значение тарифов тариф_1 и тариф_2 одинаковое.
— Сформулируем альтернативную гипотезу (Н₁). Среднее значение тарифов тариф_1 и тариф_2 разное.
Для примера возьмем распределение для тарифа_1 в виде data_1, а для тарифа_2 в виде data_2
Будем использовать следующие данные для проверки гипотез.
В нашем примере будем использовать α = 0.05
Первым тестом для проверки будет тест Шапиро-Уилка.
Тест оценивает набор данных и дает количественную оценку вероятности того, что данные были получены из Гауссовского (нормального) распределения.
Для теста используется формула:
Здесь S2 — сумма квадратов отклонений значений выборки от среднего арифметического:
Значение B2 находят по формуле:
Тест показал, что нормальность не соблюдается.
Следующий тест, тест Левена.
Логическая статистика, используемая для оценки равенства дисперсий для переменной, рассчитанной для двух или более групп. Некоторые распространенные статистические процедуры предполагают, что дисперсии популяций, из которых взяты различные выборки, равны. Тест Левена оценивает это предположение. Он проверяет нулевую гипотезу о том, что дисперсии популяции равны. Если результирующее p-значение теста Левена меньше некоторого уровня значимости (обычно 0.05), полученные различия в выборочных дисперсиях вряд ли имели место на основе случайной выборки из популяции с равными дисперсиями. Таким образом, нулевая гипотеза равных дисперсий отвергается и делается вывод о наличии разницы между дисперсиями в популяции.
Для теста используется формула:
k — это число различных групп, к которым принадлежат отобранные случаи,
N_i — это количество случаев в i группе,
N — это общее количество случаев во всех группах,
Y_ij — это значение измеряемой переменной для j случая из i группы,
Первое среднее по группе j
Второе медиана по группе i
Проверим гипотезу с помощью scipy.stats.ttest_ind, так как с его помощью можно сравнить средние двух совокупностей.
Тест показывает, что гипотеза Н₀ не подтверждена, следовательно, отвергаем нулевую гипотезу. Поэтому принимаем альтернативную гипотезу Н₁, cреднее значение тарифа_1 и тарифа_2 разное.
В статистике есть и другие тесты для проверки гипотезы, главное понять какой конкретный тест подходит для Ваших данных. И не допускать ошибок первого и второго рода. Так как вероятность принять неправильную гипотезу, Н₀, или отвергнуть правильную всегда есть. Поэтому тестов много, как и данных, найдите правильный тест для своих гипотез.
Очень слабо написано. Тема не раскрыта даже поверхностно. Информация сильно разрознена. Есть грубые методические ошибки.
Определение уровня значимости довольно большая тема, поэтому обозначим кратко основные моменты.
Опишите хотя бы, какой математический смысл имеет уровень значимости.
Гипотеза: средние показатели тарифов различаются.
Стоп, откуда тарифы? до сих пор про них не было ни слова. Что за тарифы?
Тарифы на жкх, на сотовую связь, на энергоносители?
Первым тестом для проверки будет тест Шапиро-Уилка.
Почему мы выбрали именно этот критерий, а, например, не критерий Колмогорова, Пирсона?
Чем обусловлен выбор?
data = pd.concat([data_1, data_2]).reset_index(drop=True)
То есть склеили воедино выборку нормально распределенной СВ и равномерно распределенной СВ, ок, норм.
Отклонить гипотезу о нормальности
Ничего удивительного, проверяли винегрет из тарифов
Тест показал, что нормальность не соблюдается.
Следующий тест, тест Левена.
Тут надо бы написать, что мы используем критерий Левена именно по той причине,
что нормальность ни одной из выборок не соблюдается, иначе бы использовали критерий Бартлетта, например.
Хотя, постойте, нам же надо было проверять на нормальность каждую из двух выборок data_1 и data_2 по отдельности.
А мы смешали их в кучу.
Ну да ладно, тест Левена справится.
Отклонить гипотезу о равенстве дисперсий
ОК, справился, действительно дисперсии различны
Проверим гипотезу с помощью scipy.stats.ttest_ind, так как с его помощью можно сравнить средние двух совокупностей.
Подождите-ка, this test assumes that the populations have identical variances by default.
А мы только что с помощью теста Левена получили результат, что дисперсии различны.
То есть применять критерий Стьюдента мы не имеем возможности.
Ну применить конечно, можно, но смысла результат иметь не будет.
(scipy.stats.ttest_ind — это критерий Стьюдента, об этом тоже неплохо было бы упомянуть в статье)
И не допускать ошибок первого и второго рода. Так как вероятность принять неправильную гипотезу, Н₀, или отвергнуть правильную всегда есть.
А что это за ошибки, в чем состоят?
Возможно, они как-то связаны с таинственным уровнем значимости из начала статьи? )
Об этом как раз и нужно было тут написать.
How to Perform Welch’s t-test in Python
The most common way to compare the means between two independent groups is to use a two-sample t-test. However, this test assumes that the variances between the two groups is equal.
If you suspect that the variance between the two groups is not equal, then you can instead use Welch’s t-test , which is the non-parametric equivalent of the two-sample t-test.
To perform Welch’s t-test in Python, we can use the ttest_ind() function from the SciPy library, which uses the following syntax:
ttest_ind(a, b, equal_var=False)
- a: First array of data values
- b: Second array of data values
- equal_var: Specifies no assumption of equal variances between the two arrays
This tutorial explains how to use this function to perform Welch’s t-test in Python.
Example: Welch’s t-test in Python
Suppose we want to compare the exam scores of 12 students who used an exam prep booklet to prepare for some exam vs. 12 students who did not.
The following code shows how to perform Welch’s t-test in Python to determine if the mean exam scores are equal between the two groups:
The test statistic turns out to be 2.2361 and the corresponding p-value is 0.0417.
Since this p-value is less than .05, we can reject the null hypothesis of the test and conclude that there is a statistically significant difference in mean exam scores between the two groups.
Note that the two sample sizes in this example were equal, but Welch’s t-test still works even if the two sample sizes are not equal.
Часть 3: Анализ данных
Мы рассмотрим основные методы статистики и машинного обучения для анализа данных. Статистические данные позволяют нам удостовериться, что мы делаем разумные выводы из данных, и проверяем статистическую значимость, понимаем доверительные интервалы . Они обеспечивают формализованную основу для сравнения и оценки данных и позволяют нам оценивать, отражают ли воспринятые эффекты в нашем наборе данных различия во всем Население.
В этой части мы увидим:
- Т-тест для нормального распределения (Тест Уэлча)
- Как бороться с ненормальными данными (Тест Шапиро-Вилка), непараметрический тест (U-тест Манна-Уитни)
- Линейная регрессия
- Как реализоватьградиентный спускв Python
Статистический тест
Многие статистические тесты, которые вы можете использовать для анализа данных, предполагают распределение вероятностей, которому будут следовать ваши данные. Существует много различных распределений вероятностей, но одним из наиболее распространенных является нормальное распределение, которое также иногда называют распределением Гаусса или кривой Белла.
Есть два параметра, связанных с нормальным распределением. Среднее значение (μ) и стандартное отклонение (σ). Эти два параметра подключаются к функции плотности вероятности, которая описывает распределение Гаусса. Нормальное распределение симметрично относительно его среднего значения. Знание нормального распределения было бы полезно для понимания параметрических тестов, которые мы увидим далее.
Т-тест
Одним из наиболее распространенных параметрических тестов, который мы можем использовать для сравнения двух наборов данных, является t-тест. T-критерий позволяет проверить, есть ли существенная разница между двумя наборами данных. В этом вся разница между описательной и логической статистикой. С помощью описательной статистики, такой как среднее значение, вы можете описать только образец, который у нас есть, но мы не можем обобщить дальше этого (например, если я подбрасываю монету 10 раз, получаю 7 голов, а друг получает 5 голов, это не так). Я имею в виду, что у меня больше шансов получить голову, и мы не можем сказать, что у меня всегда будет больше голов). Инференциальная статистика, как и t-критерий, не только описывает образец, который мы имеем, но и говорит нам, что мы можем ожидать от образцов, которых у нас нет. Это позволяет нам обобщать за образец, который мы тестируем. T-критерий просто измеряет разницу между группами и сравнивает ее с разницей в группах. Чем меньше значение t, тем больше сходство групп и наоборот, чем больше значение t, тем больше разные группы. Когда мы хотим сравнить два разных образца теста, мы проводим два образца t-теста. Мы обсудим вариант этого называетсяT-тест Уэлчаэто не предполагает равный размер выборки или равную дисперсию. В t-тесте Уэлча мы вычисляем t-статистику, используя следующее уравнение.
Мы также хотим оценить количество степеней свободы (ν), используя следующее уравнение.
Когда у нас есть эти два значения, мы можем оценить значение p. Значение p — это вероятность получения статистики теста, по крайней мере, такой же экстремальной, как и та, которая была фактически наблюдаема. Если значение p = 0,05, это будет означать, что существует 5% вероятность того, что значение t будет больше или равно. Цель t-теста — принять или отклонитьнулевая гипотеза, Нулевая гипотеза — это утверждение, которое мы пытаемся опровергнуть, выполнив наш тест. При выполнении статистического теста мы обычно устанавливаем p-критическое значение. Если р-значение <р-критическое, то мы бы отвергли нулевую гипотезу.
Вычисление p-значения может быть утомительным, к счастью, есть простой способ сделать это в Python. Давайте применим это к примеру. Мы хотим определить, есть ли разница между показателями правой и левой руки в бейсболе. Нулевая гипотеза тогда «нет разницы между правшей и левой рукой».
Сначала нам нужно загрузить набор данных бейсбола в кадр данных pandas.
Затем мы разделяем данные, чтобы сравнить наши два подмножества (правое и левое)
Мы выполняем t-тест с помощью функции ttest_ind (). Определяя equal_var = False, мы указываем, считаем ли мы дисперсию наших двух выборок равной или нет. Этот аргумент equal_var = false делает этот конкретный вызов t-критерия равным t-критерию Уэлча. Эта функция вернет кортеж. Первое значение — это значение t для ваших данных. Второе значение — это соответствующее значение p для двустороннего теста. Значения, возвращаемые функцией, предполагают, что мы выполняем двусторонний t-тест, в котором мы только проверяем, отличаются ли средства двух наших выборок.
Мы выбираем р-критический = 0,05, это означает, что если значение р <0,05, мы отвергнем нулевую гипотезу и можем сказать, что между правшами и левшами нет значительной разницы
Ненормальные данные
При выполнении t-теста мы предполагаем, что наши данные нормальные. Но мы также можем столкнуться с распределением вероятностей, которые не являются нормальными. В этом случае мы должны использовать другие статистические тесты. Если мы не уверены, нам сначала нужно определить, являются ли наши данные нормальными.Shapiro-WilkТест измеряет вероятность того, что выборка взята из нормально распределенной популяции. Функция shapiro () возвращает два значения. Во-первых, это статистика теста Шапиро-Уилка. Второе значение — это наше p-значение, которое следует интерпретировать так же, как мы бы интерпретировали p-значение для t-критерия. То есть, учитывая нулевую гипотезу о том, что эти данные взяты из нормального распределения, какова вероятность того, что мы увидим значение статистики теста Шапиро-Уилка, которая была бы, по крайней мере, такой же экстремальной, как и та, которую мы видим?
Непараметрический тест
Допустим, мы только что определили, что наши данные были ненормальными, есть еще несколько непараметрических тестов, которые мы можем использовать для сравнения двух выборок. Непараметрический тест — это статистический тест, который не предполагает, что наши данные взяты из какого-либо конкретного базового распределения вероятностей. Одним из таких испытаний являетсяU-тест Манна-Уитникоторый также иногда называют тестом Манна-Уитни Уилкоксона. Это проверка нулевой гипотезы о том, что две популяции одинаковы. Функция mannwhitneyu () возвращает два значения: статистику теста Манна-Уитни и одностороннее значение p для этого теста.
Это только некоторые из методов, которые мы можем использовать при выполнении статистических тестов данных. Как вы можете себе представить, существует ряд дополнительных способов обработки данных из различных распределений вероятностей или данных, которые выглядят так, как будто они получены без распределения вероятностей. Ученые данных могут выполнять множество статистических процедур. Но очень важно понять основную структуру набора данных и, следовательно, какие статистические тесты подходят для данных, которые у нас есть.
Теперь, когда мы знаем, как анализировать существующие данные, мы можем увидеть, есть ли способ сделать прогнозы относительно данных.
Машинное обучение
Машинное обучение — это отрасль искусственного интеллекта, сосредоточенная на построении систем, которые учатся на больших объемах данных, чтобы делать прогнозы. Но в чем разница между статистикой и машинным обучением?
Короче, ответ не очень. Все больше и больше, 2 поля сходятся, и они используют одни и те же методы. Однако есть несколько существенных философских различий между этими двумя предметами. Как правило, статистика ориентирована на анализ существующих данных, на получение обоснованных выводов, в то время как машинное обучение сосредоточено на прогнозировании. Это означает следующее: в статистике мы очень заботимся о том, как собирались наши данные, и делаем выводы о существующих данных, используя вероятностные модели. Например, мы могли бы попытаться ответить на вопрос: статистически лучше, чем левши? В случае машинного обучения мы немного больше фокусируемся на точных предсказаниях и меньше стремимся использовать вероятностную модель, если есть более точный метод, который их вообще не использует. Пока наш метод машинного обучения последовательно делает точные прогнозы, например, сколько домашних пробежек ударит игрок, мы не слишком беспокоимся о том, какие предположения делает модель.
Существует много различных типов проблем машинного обучения, но есть два наиболее распространенных:контролируемое обучениеа такженеконтролируемое обучение, Машинное обучение обычно включает в себя создание некоторого типа модели, касающейся проблемы, которую мы пытаемся решить. Мы введем данные в эту модель, а затем попытаемся сделать прогнозы. В контролируемом обучении есть помеченные входные данные, на которых мы обучаем нашу модель. Обучение нашей модели Тесты Уэлча просто означают обучение модели тому, на что похож ответ. Примером обучения под наблюдением может быть оценка стоимости нового дома, учитывая, что у нас есть несколько примеров, где мы знаем о множестве функций, таких как квадратные метры, или количество комнат, или местоположение. И мы также знаем, за сколько продали этот дом. Мы могли бы обучить модель, а затем предсказать, сколько будет стоить будущий дом, учитывая, что мы знаем все те же параметры. Это пример регрессии.
При проведении обучения без учителя у нас нет таких примеров обучения. Вместо этого у нас есть куча немаркированных точек данных, и мы пытаемся понять структуру данных, часто путем объединения похожих точек данных вместе. Например, если бы мы подали в алгоритм обучения без присмотра кучу фотографий, он мог бы разделить фотографии на группы, скажем, фотографии людей, фотографии лошадей, фотографии зданий, без предварительного априорного определения, какими должны быть эти группы. Он может не знать, что группы — это люди, или лошади, или здания, но он может сказать, что эти отдельные группы существуют.
Линейная регрессия
Возвращаясь к нашему набору данных по бейсболу, мы хотели бы создать модель, которая прогнозирует количество домашних пробегов игрока, которого нет в нашем наборе данных. Один из способов решения этой проблемы — использование линейной регрессии, и одной из основных реализаций машинного обучения является выполнениелинейная регрессия с использованием градиентного спуска,
При выполнении линейной регрессии мы обычно имеем несколько точек данных (от 1 до m на рисунке ниже). Каждая точка данных имеет выходную переменную (Y), а затем несколько входных переменных (от X1 до Xn). Итак, в нашем примере с бейсболом, Y здесь — это число хоумранов за всю жизнь, а наши X1 — Xn — такие как их рост и вес.
Цель состоит в том, чтобы построить модель, которая прогнозирует значения выходной переменной для каждой точки данных путем умножения входных переменных на некоторый набор коэффициентов (от θ1 до θn). Мы называем каждый θ параметром или весом нашей модели. Он указывает, насколько важна определенная входная переменная X для предсказания выходной переменной Y. Эта модель построена таким образом, что мы умножаем каждый X на соответствующий θ и складываем их, чтобы получить Y. Как вы можете видеть из Уравнение, чем меньше θ, тем меньше произведение θ и X и обратно. θ рассчитывается так, чтобы оно было небольшим для входных данных X, которые не очень важны для предсказания Y, и большим для тех, кто вносит большой вклад. Наилучшим уравнением является то, которое минимизирует разницу во всех точках данных между нашим предсказанным Y и нашим наблюдаемым Y. Нам нужно найти θs, которые дают лучшие прогнозы, то есть минимизировать эту разницу благодаряградиентный спуск,
Для того, чтобы сделать градиентный спуск, нам сначала нужно определить следующую функцию стоимости J (θ).
Функция стоимости предназначена для оценки того, насколько хорошо работает наш текущий набор θs при моделировании наших данных. Поэтому мы хотим минимизировать значение функции стоимости. Функция стоимости — это просто половина суммы квадратов ошибок, как мы видели на предыдущем рисунке. Обратите внимание, что x верхний индекс i представляет всю нашу коллекцию x. Таким образом, предсказанный Y является эквивалентом суммы всех произведений x и θ, как мы видели две цифры выше.
Итак, как нам найти правильные значения θ, чтобы минимизировать нашу функцию стоимости J (θ)? Градиентный спуск — это алгоритм, который принимает некоторое начальное предположение для θ и итеративно изменяет θ; так что J (θ) продолжает уменьшаться и уменьшаться, пока не сойдется к некоторому минимальному значению
Реализация алгоритма градиентного спуска
Теперь давайте реализуем основные функции алгоритма градиентного спуска, чтобы найти границу в небольшом наборе данных. Сначала мы начнем с функции plot_line (), которая поможет нам построить и визуализировать данные. Обратите внимание, что функция градиент_десцент () принимает альфа в качестве параметров. Альфа называется скоростью обучения и в основном устанавливает шаги на каждой итерации. Большой шаг в обновлении весов может привести к превышению уравнения прав. С другой стороны, выполнение небольших шагов увеличивает количество итераций, необходимых для достижения сходимости. Обычно требуется точная настройка, чтобы найти правильный баланс.
Набор данных должен выглядеть так:
Я нарисовал инициализированную линию синим цветом. Эта строка обычно устанавливается случайным образом
Каждые 10 итераций (= эпох) я печатал стоимость. Помните, что стоимость всегда должна уменьшаться до достижения минимально возможной точки (сходимости).
Здесь мы можем видеть различные шаги, где линия была обновлена в сторону лучшей регрессии. Не стесняйтесь играть с этим кодом и настраивать параметры по-разному. Вы можете изменить эпохи, скорость обучения (альфа), изменить набор данных .