Приветствую тебя, дорогой друг! Эта публикация была создана для тебя, если ты хотел бы разобраться с этими непонятными словами из заголовка раз и навсегда. Как с идейной, так и с математической стороны. Признаюсь сразу, в свое время в универе частенько прогуливал семинары по высшей математике где-нибудь в приятном заведение со вкусной едой и хорошей музыкой или вообще дома, занимаясь чем-то "уникальным" и "сверхполезным". Но жизнь оказалась более ироничной, чем я думал. Сейчас я работаю продуктовым аналитиком в @IDFinance и познаю мат. статистику заново. И теперь уже с горящими глазами. Дается местами она не просто, а особенную трудность испытываю, когда хочу найти в интернете простые и понятные материалы по необходимой теме. Собственно, это меня и побудило написать данную статью, включающую в себя всю математику, почему она так работает и как это вообще запрограммировать. Заядлый рыбак Антон купил в магазине новую сверхтехнологичную наживку, так как друзья его убедили, что на данную снасть клюет более крупная рыба. Антон с нетерпением ожидал выходных, чтобы проверить его обновку в деле. И, естественно, в ближайшие даты он поехал на его любимый прудик, где клюет даже в самый нерыбный день. Всю дорогу наш рыбак вкушал как он будет вытаскивать трофейных сазанов и толстолобиков и с нетерпением ждал прибытия. По приезде Антон закинул две удочки. На первую он повесил старую, проверенную временем, наживку, а на вторую новую снасть. И теперь оставалось только ждать. Ждал Антон недолго, рыба клевала неприлично часто, только и успевай подсекать, взвешивать рыбу и отпускать обратно на волю. И вот, к концу выходных, сидя вечером около костра и поедая уху, Антон обратился к своему блокнотику, в который он записывал веса всех рыб. Там было отмечено около 300 взвешиваний по каждой из удочек. Но Антону до сих пор оставалось непонятно, какая же эффективнее. Он решил попросить помощи у своего друга математика. Предлагаю вам, вместе со мной, побыть на время этим самым другом математиком и помочь Антону ответить на его вопрос. На обе удочки Антон поймал по 300 экземпляров рыб. В случае старой наживки средний вес рыбы был  грамм, в случае новой наживки – грамм. Можно сказать, что мы получили нормальное распределение весов, с мат. ожиданием  и стандартным отклонением Мы можем говорить, что наше распределение является нормальным, так как распределения таких параметров как вес, рост, физическая сила, умственное развитие и т.д. являются нормальными. Давайте попробуем сгенерировать теперь данные, которые нам передал Антон и посмотрим что получилось: Посмотрим какое распределение получится: Как мы видим, у нас действительно данные сосредоточены вокруг средних, и, на глаз, процентов 70 значений лежит в пределахграммов. Судя по всему новая наживка работает качественнее, чем старая, так как мы видим, что второй график смещен в правую сторону, относительно левого. Да и без графиков понятно, что среднее 530 больше, чем 500. Можем ли мы сделать вывод о том, что новая наживка лучше? Нет, нет и еще раз нет! Никто не отменял случайность. Возможно, нам так повезло, а в следующий раз будет наоборот. Так как же проверить правда это или нет, спросите вы? Давайте разбираться по порядку. Нормальное распределение - это распределение, которое задается функцией Гаусса и является само по себе функцией плотности, оно симметрично и унимодально. А самое важное для нас, что отклонения значений от среднего мало того, что равновероятны, так еще и подчиняются известному вероятностному закону. Давайте посмотрим на это распределение и поймем наглядно что это все значит: Разберемся с терминами: Распределение симметрично относительно своего центра  Распределение унимодально. То есть имеет только одну моду (вершину). Собственно, вокруг этой вершины оно и симметрично. Распределение является функцией плотности. То есть вероятность попасть в интервал  равняется площади под кривой нормального распределения в интервале  Важно, что вероятность попасть в интервал равняется 100%, то есть площадь под кривой в данном интервале равняется единице. Распределение подчиняется вероятностному закону. Взглянув на распределение, мы можем сказать, что в промежуткенаходится приблизительно 34.1% + 34.1% = 68.2% наблюдений. Или, другими словами, вероятность случайным образом попасть в данный промежуток 68.2%. Или, с более формальной точки зрения, площадь под кривой нормального распределения в интервале равняется 0.682. Распределение задается функцией Гаусса:  Давайте посмотрим на эту страшную функцию. Не пугайтесь, она нам больше никогда не понадобится. Мы тут видим два неизвестных для нас параметра:  и Эти параметры отвечают за сдвиг и масштаб нашей функции. Давайте прибегнем опять к графикам и поиграемся в них с данными значениями. Все эти распределения являются нормальными. Различаются они лишь смещением центра относительно нуля и масштабом (некоторые из них шире, некоторые уже). Но, каждое из этих распределений, продолжает подчиняться вероятностному закону, о котором мы говорили выше. Так же, как мы расширили, сузили или сдвинули наше распределения от нормы и так и обратным образом мы можем привести любое нормальное распределение к стандартному виду благодаря z-оценке. Центральная предельная теорема гласит, что сумма большого количества независимых случайных величин имеет распределение близкое к нормальному. Давайте разбираться, у нас есть выборка размера  рыб, пойманных на первую удочку. Проведем эксперимент. Будем многократно выбирать 300 рыб случайным образом. Так, чтобы одна и та же рыба могла попасть в новую выборку несколько раз. После этого считаем средний вес рыбы (независимая случайная величина). Повторяем пункт 1 и 2 много-много-много раз и записываем каждый раз значения средних. Распределение средних должно стремиться к нормальному с увеличением количества повторений. Давайте построим как это выглядит на практике: При 100 повторений график вообще не удался, по нему и не скажешь, что он куда-то стремится, тем более к нормальному распределению. А вот при 10.000 и 100.000 повторений графики очевидно похожи на то самое нормальное распределение.  Важно отметить, что чем больше (размер исходной выборки), тем ближе наше среднее к реальному среднему генеральной совокупности. То есть, чем больше рыб мы поймали, тем их средний вес ближе к реальному среднему весу всех рыб в данном пруду. Аналогично можно сказать и про стандартное отклонение. Поэтому, пока мы не знаем вес всех жителей пруда, мы не можем быть уверены, что в нашем улове среднее и стандартное отклонение совпадают с теми же значениями по всем рыбам пруда. Следовательно, нужно внести некую поправку, меру уверенности в наших данных. Эта мера уверенности есть. И она выглядит следующим образом.  Среднеквадратичное отклонение равняется стандартному отклонению выборки, деленному на корень из числа элементов выборки. Z-оценка представляет собой преобразование данных в стандартную Z-шкалу со средним  и  по следующей формуле:  То есть, чтобы преобразовать наши данные в стандартную Z-шкалу, нам надо взять все веса рыб, отнять из них средний вес и поделить на cреднеквадратичное отклонение. Проделаем все это с данными по первой удочке: А так будут выглядеть график. Мы видим два абсолютно одинаковых графика с виду, но обратите внимание на ось абсцисс. Из-за того, что мы из вычли правое распределение сместилось на влево и среднее стало равняться нулю. А из-за того, что поделили на стандартное отклонение , наше распределение сузилось. И теперь по оси абсцисс не единицы веса, а единицы стандартного отклонения. Таким образом любое нормальное распределение можно стандартизировать и привести к единому виду с  и И как следствие из этого, мы можем сравнивать средние двух признаков, если они нормально распределены, потому что их можно привести к единому виду благодаря z-score. Данные после преобразования будут исчисляться уже не в рыбках, котиках и морковках, а в стандартных отклонениях от среднего. Вспомним про наш вероятностный закон, которому подчиняется любое нормальное распределение. Мы можем сказать, что, к примеру, между  у нас находится 68.2% наблюдений. То есть рыб. То есть из 300 рыб, у нас скорее всего 205 с весом грамм. А в диапазоне у нас 95.4% всех рыб. То есть 95.4% всех рыб находится в весовом диапазоне грамм.  Забудем пока про вторую удочку и представим, что Антон рыбачил только на одну. То есть мы можем для удобства сделать допущение, что параметры  и  являются описанием генеральной совокупности. Запомните это. Поэтому нам не требуется делить наше стандартное отклонение на   Теперь вопрос, с какой вероятностью Антон поймает рыбу, которая будет тяжелее, чем 530 грамм? Чтобы узнать ответ, опять воспользуемся формулой z-score. Подставим в формулу наши значения: Что мы сейчас получили? Мы посчитали, что значение 530 грамм отклоняется от среднего значения генеральной совокупности (500 грамм) на 0,2 стандартных отклонения. Да, как я уже и писал, мы теперь меряем все не в рыбках и граммах, а в стандартных отклонениях. Зная отклонение от среднего генеральной совокупности (z-score), мы можем посчитать вероятность поймать рыбу тяжелее 530 грамм. Для этого воспользуемся подходящим инструментом в python, в который уже вшита функция плотности. Он за нас рассчитает площадь под кривой, правее  (то, что закрашено синим на графике). Это и будет значением необходимой нам вероятности. Обе функции вернут одинаковый ответ: Это и есть p-value, вероятность случайным образом вытащить одну рыбу с весом более 530 грамм. Разница в них только в том, что в первом случае нормальное распределение стандартизировано, а во втором мы работаем с параметрами генеральной совокупности.  С одной рыбой разобрались. А какова вероятность поймать 4, 100 и даже 300 рыб со средним весом 530 грамм? Воспользуемся формулой z-score, но немного ее модернизируем. Как раз сейчас нам и понадобится та самая поправка из центральной предельной теоремы. Где,  - среднее значение в выборке,- среднее генеральной совокупности, - стандартное отклонение в генеральной совокупности, - кол-во элементов в выборке. Здесь мы вносим поправку в наше стандартное отклонение, так как работаем уже с несколькими элементами. Практический смысл данной формулы говорит о том, что мы ввели две гипотезы, которые будут конкурировать между собой: Нулевая гипотеза говорит о том, что выборка на самом деле принадлежит генеральной совокупности и средние значения выборки и генеральной совокупности равны  Альтернативная гипотеза говорит об обратном. Выборка не является частным случаем текущей генеральной совокупности и средние, на самом деле, отличаются  Чтобы подтвердить или опровергнуть  мы и считаем z-score и p-value. То есть мы считаем вероятность того, что  отличается от  на  стандартных отклонений. И если эта вероятность нас устраивает, то мы принимаем нулевую гипотезу, а если нет - отвергаем. Теперь давайте подставим в формулу значения: Теперь мы знаем, что среднее по выборке   отклоняется от среднего генеральной совокупности  на Давайте теперь посчитаем вероятность такого отклонения. Вероятность поймать 4 рыбы со средним весом 530 грамм мы можем рассчитать все тем же способом, как и для единичного случая. P-value у нас получится равным 0.3446.  Как вы уже поняли, чем больше мы хотим поймать рыб со средним весом 530 грамм, тем больше у нас z-score и тем меньше p-value. Давайте посмотрим как это выглядит на практике: То есть вероятность поймать 100 рыб со средним весом 530 грамм равняется 2.28%, а вероятность поймать 300 рыб равняется 0.03%, что ничтожно мало. И мы можем сделать вывод, что вторая удочка, с новой наживкой отработала лучше. Так как только в 0,03% случаев мы могли ошибиться. Но помните, что мы сделали допущение, что данные с первой удочки - это генеральная совокупность. А по факту это выборка из генеральной совокупности. Будет ли теперь наш вывод статистически правильным? Нет, мы не учли этот момент. Давайте теперь все учтем и наконец-таки сделаем финальный вывод с точными цифрами!  Теперь у нас не генеральная совокупность и выборка, а две выборки из нескольких сотен рыб. То есть, если бы Антон продолжил бы ловить рыбу еще несколько дней, то средние значения и стандартные отклонения могли бы измениться.  Важно, что z-критерий требует знания стандартных отклонений. Поэтому давайте зафиксируемся на том, что мы поймали достаточно много рыб, чтобы утверждать, что  и  являются такими же, как и в генеральной совокупности (во всем пруду). Иначе нам нужно будет воспользоваться t-критерием Стьюдента.     Старая наживка 300 500 150 Новая наживка 300 530 150 Как мы помним из ЦПТ, нам нужно ввести поправку. И у нас теперь две выборки и поправку необходимо будет учесть два раза.  Практический смысл данной формулы все тот же. Мы принимаем нулевую гипотезу о равенстве средних  при условие высокой вероятности (p-value) данного события, в ином случае отвергаем. Давайте теперь подставим наши значения и рассчитаем z-score. Как мы видим, вероятность того, что средние равны - 0.72%. Следовательно, мы можем с уверенностью в 99.3% отвергнуть нулевую гипотезу и сделать вывод, что новая наживка все же лучше, чем старая. Естественно, эти формулы можно использовать далеко не всегда. Иногда может потребоваться t-критерий Стьюдента, а иногда даже им не обойтись. Важно помнить, что для успешной реализации этого критерий необходимо соблюсти несколько условий: Распределение должно быть нормальным.  Известна дисперсия генеральной совокупности для всех выборок. Выборка имеет размерность более 30 элементов. Если 2 и 3 условия не удовлетворяют требованиям, то лучше использовать t-критерием Стьюдента. Давайте дополнительно чуть подробнее разберемся как определять p-value. Мы рассмотрели только один вариант, когда мы заранее знаем, что  точно больше, чем  А если наоборот? Или вообще нет информации о том, как средние расположены относительно друг друга? Именно для таких случаев существует несколько видов гипотез. Левосторонняя гипотеза. Двусторонняя гипотеза. Правосторонняя гипотеза. Отличия в них идеологические. Если мы заранее не знаем улучшится в тесте результат или ухудшится (не знаем знак z-score), то необходимо применять двустороннюю гипотезу и умножать полученный p-value на 2. А если мы тестируем улучшение или ухудшение, то тут достаточно односторонней гипотезы. Правда, уже после получения результатов теста, нельзя менять знак, который выбрали заранее. Надеюсь, вам было все понятно, а читать было интересно. Буду безумно признателен, если поддержите мою первую публикацию лайком или комментарием.  Product Analyst at @IDFinance