Проверка гипотез и p-value | Вероятность и статистика #5
Вставка
- Опубліковано 8 лип 2024
- Покупайте мой курс по А/Б-тестам stepik.org/a/194930 Скидка 20% по промо коду UA-cam
Подписывайся на Телеграм t.me/mikhaylovgleb
0:00 Начало стрима
5:46 Менеджер Виноградного дня и удовлетворенность клиентов (пример)
19:50 Фрейморк проверки гипотез
26:09 P-value на гистограмме
34:15 Новый лендинг Виноградного дня (пример)
48:57 Загадка двухстороннего теста
1:03:58 Уровень значимости (alpha)
1:12:17 Alpha - это вероятно допустить ошибку первого рода (проверка на симуляции)
1:24:16 P-value распределено нормально (уличная магия)
1:32:44 Мощность
1:52:06 Конец стрима и еще немного магии
Ноутбук: colab.research.google.com/dri...
Спасибо, Глеб, отличные уроки!
1. На 1:35:58 ты выборкам А и В ставишь конверсию 0.1 и 0.12, а при расчете pval оставляешь старую конверсию 0.118. Её нужно было пересчитать?
2. Почему мы полагаем что выборки А и В - это биномиальные распределения? У нас ведь есть только 700 и 300 наблюдений по каждой и мы не можем из этого предположить, что среднее это n*p, а дисперсия это n*p*q как у биномиального распределения.
Привет!
1) Да, там косяк. Конверсия для нулевой гипотезы вообще нужно каждый раз пересчитывать! Я обновил в ноутбуке, можешь посмотреть как это должно выглядеть. colab.research.google.com/drive/1IoV10W-tDvWnA-VpvhzW4ewMOrc4ppWC?usp=sharing Спасибо огромное, что заметил и написал!
2) Когда у нас может быть либо 0 либо 1, то это не может быть ни чем кроме биномиального распределения. Если точнее, то это распределение Бернулли, но Бернулли это частный случай биномиального. И нам не важны его параметры: если только нолики и единички, то все, мы имеем дело с Бернулли.
@@GlebMikhaylov
1) Думаю, тут все же не пересчет конверсии нужен а объединение выборок A и В в одну с дальнейшим семплированием из них двух других выборок А и В без возвращения.
Типа так:
def resample_diff(a, b):
ab = np.hstack((a, b))
np.random.shuffle(ab)
return abs(ab[:len(a)].mean() - ab[len(a):].mean())
И уже их надо использовать в расчете выпивал:
pval = np.mean([resample_diff(a, b) >= diff for _ in range(1000)])
Если перейти к задачам с непрерывными случайными величинами, то объединение выборок с последующим семплированием из них новых выборок (без возвращения) кажется более логичным. Поскольку мы не должны создавать новые случайные величины.
@@mlpython1089 Да, все верно, лучше всего объединять выборки и бутстрепить с них, но всегда обязательно с повторением! Вот почему: stats.stackexchange.com/a/171452/111782
В случае с 1 и 0 не важно генерим мы из распределения с заданной вероятностью или из объединенных выборок, т.к. там только нолики и единички. И как раз повторение превращает нашу объединенную выборку в генератор (распределение)
А вот в случае непрерывной величины, мы уже не знаем распределение, и нам остается только бутстрапить из объединенных выборок, но обязательно с повторением, иначе не будет эффекта генератора.
@@GlebMikhaylov Понял. Теряется принцип независимости выборок если не делать возвращение.
2 часа благотворительной работы, Глеб the best. На ODS тебе надо памятник поставить )!. Никак не получается на онлайн попасть, смотрю офлайн ), спасибо тебе 🔥💪
Глеб, просто респект! Не могу смотреть обычно онлайн, но потом обычно раза по 2 пересматриваю)
Очень полезное занятие. Спасибо, Глеб 🤗
Спасибо, Глеб, очень классный формат!
Впервые увидел твой видос, по рекомендации, очень понравилось, буду смотреть 👍
Посмотрел твои старые видики про практическое тыкание регрессий и градиент буста - топ контент, волк тигр леопард
Глеб, спасибо большое!
Ты реально крут! Информативно, понятно и интересно.
Спасибо за подробный разбор, благодаря ему пришло понимание как находить и использовать p-value
огонь! лучшее объяснение p-value для айтишника, без всякой статистической лабуды :)
Спасибо Глеб!
Спасибо. Легче становится понимать некоторые аспекты ML - особенно нравится про ошибки и связки с recall и precision - и уже статистика кажется не такой страшной. Попробовал уже доверительные интервалы считать на предсказания моделей в регрессии :)) Теперь хочется все обсчитывать :))
Мощно как всегда, спасибо, от души!
Глеб, спасибо большое, очень мощно
Супер подкаст, Спасибо большое.
Абсолютное золото! Несколько дней смотрел по несколько часов видосов о статтистике и аб-тестах. Было понятно ну так себе. И только тут я всё понял, я просветлился, аааааааааа
Глеб, почему так мало подписчиков???!!! Ты достоин большего)
Офигенный, как говориться, хьюмор)
По поводу уличной магии... Ну, смотрите, если я правильно понял, у нас две выборки из одного и того же распределения (неважно какого), и мы считаем их средние значения a и b, а затем считаем p-value как функцию вида:
p-value = p(epsilon) = P[|a-b|
Среднестатистические юзеры виноградного дня (с). Сохранил в памяти)
Как же ты хорош
У Глеба дар рассказывать интересно то, от чего прост засыпаешь)
Спасибо за видео и за ноутбук, мне даже захотелось попробовать этот чудо напиток дня😂
С коронавирусом хороший пример. Ошибка первого рода - тест показывает 1, когда человек здоров - достаточно мала. Тогда как ошибка второго рода - больному ставят отрицательный результат - достаточно высока (чуть ли не под 30%). Из-за этого во многом народ считал эти тесты бесполезными.
Очень круто Глебаджо! скажи пожалуйста, можно ли считать в таком формате размер выборки, если ее метрика распределена слишком смещено влево?
Глеб, держи леопарда! Очень полезные уроки
На моменте с объяснением равномерного распределения p-value ушел сам че т рисовать и моделировать, замучал chat gpt, но так и не понял. Затем ты рассказал про равновероятные точки и тут дошло!
У нас ведь распределение с холмиком получается за счет того, что на каждом равном интервале у нас разное количество точек, где кучность концентрируется около среднего.
Но если вероятность выпадения каждой точки одинаковая, то, если многократно собирать выборки из этой совокупности, у нас получится, что каждая точка выпала примерно по разу. Аналогично с двумя выборками и, соответственно, разницей между ними. Таким образом на гистограмму p-value ляжет каждая точка совокупкости, а кучности не будет, потому что шаг в p-value - это не значение точки, а вероятность.
Короч - если бы мы на этот же график нанесли ещё и значения, для которых считался p-value, то был бы холм в районе единицы, потому что большинство точек сконцентрировано у нуля (мы же разницу считаем, а средняя разница у выборок из одной совокупности будет равна нулю). Но тут другое, тут просто вероятность выпадения каждой точки, которая отделена от значений этих точек - то есть просто статистика выпадания каждого n эксперимента, как в примере с подсчетом порядковых номеров каждой точки.
1:45
- В общем, жил был один мужик, было ему лет тридцать. Сел он один раз смотреть программу «Время». Включил телевизор, подвинул кресло, чтоб удобней было. Там сначала появились часы - ну, как обычно. Он, значит, свои проверил - правильно ли идут. Все как обычно было. Короче, пробило ровно девять часов. И появляется на экране слово «Время», только не белое, как всегда раньше было, а почему-то черное. Ну, он немножко удивился, но потом решил, что это просто новое оформление сделали, и стал смотреть дальше. А дальше все опять было как обычно. Сначала какой-то трактор показали, потом израильскую армию. Потом сказали, что какой-то академик умер, потом немного показали про спорт, а потом про погоду - прогноз на завтра. Ну все, «Время» кончилось, и мужик решил встать с кресла.
- Потом напомните, я про зеленое кресло расскажу, - влез Вася.
- Значит, хочет он с кресла встать и чувствует, что не может. Сил совсем нет. Тогда он на свою руку поглядел и видит, что на ней вся кожа дряблая. Он тогда испугался, изо всех сил напрягся, встал с кресла и пошел к зеркалу в ванную, а идти трудно… Но все-таки кое-как дошел. Смотрит на себя в зеркало и видит - все волосы у него седые, лицо в морщинах и зубов нет. Пока он «Время» смотрел, вся жизнь прошла.
Пелевин))
@GlebMikhaylov По поводу почему двусторонний чаще всего используется в А, Б тесте: например я решил сделать односторонний тест с альтернативой типа конверсия будет больше, и получил высокое p value, могу подумать что нулевую отвергнуть не получилось (мол лендинги одинаковые), но при этом конверсия нового лендинга может быть в сто раз ХУЖЕ старого. и если глазами на нее не посмотреть то по p-value ты никакой аномалии не заметишь оно будет высоким в этом тесте. в случае же двустороннего теста ты увидишь низкое p-value как для случая когда конверсия ниже и когда она выше, то есть ты поймешь что выборки точно не одинаковы, а в какую сторону это как тебе чел написал - глазами посмотреть
Глеб, по поводу загадки двустороннего теста. Разве нельзя до модуля проверить разницу между каждыми наблюдениями? Если будет отрицательное значение средней разницы, то она негативная, например.
@GlebMikhaylov
Глеб привет! Подскажи пожалуйста на 28:00 площадь левее 0,75 (вероятность - 12,5%)
А вероятность получить удовлетворенность 0,8 и ниже это всего лишь около 50%?
🐆
После просмотра трансляции понимаешь, что N лет работал на ощупь - вроде делал всё правильно, но хз почему делал именно так. А теперь как будто линзы контактные надел и прозрел. Нет, как будто сделал лазерную коррекцию зрения. Гранд мерси!
а так что в итоге, лэндинг лучше или нет? мы вроде проверили только, что вероятность того, что разницы нет меньше 1%. А вероятность того, что лэндинг хуже или лучше как проверить
Про уличную магию я чего то совсем не понял что Глеб хотел пояснить. Типа построил гистограмму ряда от 1 до 1000, (ну или от 0.001 до 1) и удивляешься, что количество чисел в диапазоне 1-200 такое же как в диапазоне 201-400 и в 401-600 итд?! эмм что тут магического. А про равномерное распределение p-value интересно, спасибо!
Тоже самое подумал
Глеб, очень крутые стримы. Почему мы посчитали общую конверсию с учетом обеих групп 0.118, а не взяли конверсию первой группы 0.10? Ведь мы говорим, что вторая группа не отличается от первой. Этот момент мне сложно принять.
Мы как бы представляем, что мы получили наши данные без деления на группы, мы их перемешиваем.
Взять только первую группу мы не можем, т.к. тогда мы просто проигнорируем вторую. Ведь вдруг наше деление на группы совершенно не имеет смысла и это лишь названия и по факту первая и вторая группы не отличаются.
Объединяя их, мы представляем что данные пришли не из разных групп, а из по сути из одной большой
Все начиналось с удовлетворения от виноградного дня, а закончилось MDEma
Не могу загуглить что означает z статистика - первое значение, которое возвращает тест пропорций. На гитхабе из кода вывести формулу пытался, но очень запутано для меня. Все ресурсы, всегда опускают описание этой статистики. Пожалуйста, подскажи, что она означает?
Привет,, не могу понять определение бутстрап - "имитировать многократное получение выборки из генеральной совокупности, используя данные из имеющейся у нас выборки.", в вашем видео мы скорее создаем выборки на основе уже имеющихся условий (которые нам дал менеджера виноградного дня) новые выборки, а не используем уже имеющуюся. Слегка запутался.
Я вообще часто использую взаимозаменяемо бутстреп и Монте-карло. Я называю так процессы, где мы генерим выборки, не важно из распределения или другой выборки.
В пример с менеджером Виноградного дня мы действительно генерим выборки из распределения с параметрами нулевой гипотезы. И ни как не используем выборку с данными. Бутстрепить выборку с данными мы тут можем например для определения доверительного интервала.
Но чаще всего бутстрепом называют процесс генерации выборок из другой выборки. Например, если у нас есть две группы, то мы можем объединить эти группы в одну и тем самым получить условия нулевой гипотезы, что разницы нет. И за тем из этой объединенной выборки генерить выборки и смотреть в скольки случаях они будут отличаться.
Получается что df['pct'].hist() - это распределение p-value? И оно всегда будет равномерным, вне зависимости от типа первоначального распределения?
Не поверишь, вот сам час назад об этом думал)).
Если мы отойдем от проверки гипотез и определим p-value, как вероятность получить такое же или меньшее значение (или по модулю, чтобы было с обеих сторон), то да, p-value всегда будет равномерным.
Единственное, если переменная будет дискретной и ее значения могут повторяться, то тогда будет сложно отсортировать значения, и следовательно посчитать p-value. В дискретном случае равномерность p-value можно получить только если мы рандомно отсортируем одинаковые значения.
И тут у тебя должен возникнуть вопрос: но почему тогда мы иногда получаем не равномерно распределенное p-value? Тут уже в игру вступают гипотезы. Неравномерное распределение мы можем получить в двух случаях: 1) нулевая гипотеза не верна 2) тест не подходит под наши данные.
В первом случае мы считаем p-value на основе распределения среднего согласно нулевой гипотезе на сэмплах, которые приходят из другого распределения.
Во втором случае, мы так же считаем p-value на основе распределения среднего согласно нулевой гипотезе, которое по ЦПТ должно быть нормальным, но наше реальное выборочное среднее распределено ненормально.
Вот тут еще много обсуждений почему p-value при нулевой гипотезе распределен равномерно. stats.stackexchange.com/questions/10613/why-are-p-values-uniformly-distributed-under-the-null-hypothesis
@@GlebMikhaylov На соседней вкладке уже открыта эта ссылка)))
@@GlebMikhaylov Глеб, pct - это range(1,1001)/1000 - равномерно банально (и потому идеальная прямая). Делай столбец такой хоть к распределению Парето - будет равномерность. Не улавливается связь к нормальному распределению
Глеб, привет
Ты в конце, при подсчете мощности, в цикле, когда считал pval с помощью монте-карло, забыл выборкам поменять размер на 680
Для контрольных поменял, а для тех, с помощью которых считаешь pval похоже забыл
Поменял на 680, мощность получилась 0.803
Точняк! Спасибо! Затупил чето
@@GlebMikhaylov и среднее у тебя при генерации выборок для подсчёта pval тоже не поменяно и 0.118 стоит, а при первом эксперименте, где 10% и 12% конверсия надо 0.106 (тут я не проводил эксперимент, но такое ощущение, что можность будет сильно выше, чем получилось), при втором 0.115 (ну здесь, наверное, сильно не изменится)
У нас же есть изначальное значение конверсии, и мы видим что оно больше либо меньше, вот мы и проверяем статзначимость, а если устанавливаем ее - значит изначальное значение разницы в конверсии имеет правильное направление, разве нет?
да, я тоже это так понимаю
а где видос с разборками по виноградному дню и калькулятору а-б тестов?)
поделитесь ссылкой плиз
попалось в реки само:
ua-cam.com/video/PqDtQgjPiTk/v-deo.html
Глеб, когда новые видео??)) так как ты можешь изложить инфу никто не может !!!
Что то я не понял трудности в интуиции в двухстороннем. Мы поставили нулевую, что они одинаковые, поэтому альтернатива скажет, что они разные. Разница может быть в обе стороны. Третий ответ не ерунда.
Возможно, твой вопрос в том, почему учитывая оба варианта различия (второй лендинг и лучше и хуже), и получая p-value из этих соображений, мы, тем не менее делаем вывод, что второй лендинг именно лучше, а не хуже?
Так тут тоже, вроде, все интуитивно понятно. У нас же по факту получилась конверсия больше: 0.16 против 0.1. Наблюдать такую разницу в кейсе, когда вторая страница на самом деле хуже - еще менее вероятно, чем исходную нулевую гипотезу. Все очевидно ж, нет?
Ну дело в том, что это обычно не проговаривается явно.
Все же один момент мне не понятен. p-value - это же по сути вероятность события, которое противоречит нулевой гипотезе. Так почему же если эта вероятность меньше, то мы должны отвергать её, если она своей незначительностью подтверждает эту гипотезу?
Наборот. Мы считаем вероятность события на фоне нулевой гипотезы. Если вероятность получить это событие в условиях нулевой гипотезы мала, то событие сильно противоречит нулевой гипотезе. Это очень редкое и маловероятное событие для нулевой гипотезы поэтому мы можем решить ее отвергнуть
@@GlebMikhaylov аа, все, теперь понял принял обработал. Спасибо❤
А кто-нибудь может пояснить, почему получается разный pvalue в задаче про соцопрос при разных методах?
pvalue = scipy.stats.binom.cdf(75, 100, 0.8)
from statsmodels.stats.proportion import proportions_ztest as pz
_, pvalue = pz(75, 100, 0.8, alternative='smaller')