Тест Манна - Уитни я запускал неправильно! В colab установлена старая версия statmodels и надо обязательно указывать alternative='two-sided'. Иначе получается не то, что нужно. Но в целом принцип тестирования теста сработал: мы отказались от этой вариации Манна - Уитни.
@@mlpython1089 В локальном jupyter ты можешь обновиться до новой версии и тогда, и тогда у тебя будет по дефулту two sided. В colab тоже можно обновиться, но это нужно делать для каждого ноутбука, что не удобно. Но в целом, я считаю, что всегда лучше все указывать явно и не оставлять ничего на дефулт. Как видишь, я усвоил этот урок hard way что называется)
Попробовал с two-sided и у меня получилось 0.05. import pandas as pd import numpy as np from tqdm.notebook import tqdm from scipy import stats result_mv = [] for _ in tqdm(range(10000)): a = np.random.binomial(1,0.15,size=1000) b = np.random.binomial(1,0.15,size=1000) _,pval = stats.mannwhitneyu(a,b,alternative='two-sided') result_mv.append(pval) Почему тогда нужно отказываться от Манна - Уитни?
И спасибо огромное за такие офигенские лекции! Даже начало в голове что-то укладываться, причем на практике уже имела дело с тестами, но не понимала до конца, как что и почему. Как мощны леопардовы лапищи!
Видео топ конечно, интуитивно теперь всё понятно, спасибо) Есть вопрос: Что по Хи-Квадрату, ты имел ввиду что он равен Z тесту по результату и мощности? Не получилось у меня его применить в твоем коде
Нет. Они полностью эквивалентны математически. Для двух пропорций они дают абсолютно одинаковые результаты. Вот пример colab.research.google.com/drive/1L20YHu079C8zaUxOT4eZmMaOt-dyWFjq?usp=sharing
Ребят, я жёстко туплю и не догоняю, если мы делаем АА тест, и у нас заведомо разницы нет, мы получаем p value 0.05, а одна из трактовок p value - вероятность получить такие значения или более выраженные, если нулевая гипотеза верна, то почему так? Если у нас заведомо разницы нет, то как мы получаем всего 5% вероятность получить такие значения, это же капец как мало
Глеб, подскажи, а что делать в такой ситуации: предположим мы на время поведения A/Б теста предполагали конверсию 20% у контрольной группы, а эффект = 5%. Но по факту контрольная группа повела себя по-другому и мы получили конверсию контрольной группы = 15%, а тестовой 20%. Эффект 5% есть, но конверсии не сходятся с тем, что мы заложили до.
Вопрос про значение p-value: (где z-test считаешь) когда выпал 2.15 с чем-то, ты сказал, что это мизерный эффект. То есть это ок, и с данными в этом случае все может быть нормально, если p-value > 1?
Дай пожалуйста тайм код, чтобы я лучше понял о чем идет речь. И сразу: p-value не может быть больше единицы: это вероятность, а вероятность может быть от 0 до 1.
Поясните, кто может. Почему доля экспериментов, в которых p-value меньше 5%, равна мощности, т.е. доле обнаруживаемых успешных экспериментов? Ведь, если p-value меньше 5%, то это свидетельствует о низкой достоверности полученного результата (насколько я понимаю). Но чем больше доля экспериментов с таким p-value, тем выше мощность. Какое-то противоречие...
Тут важно понимать, что когда мы тут считаем мощность, то генерим выборки из разных распределения, т.е. у нас заведомо есть эффект, заведомо есть разница, заведомо неверна нулевая гипотеза. Что такое p-value? Это вероятность получить такие же или более экстремальные результаты при верной нулевой гипотезе. Если p-value маленькая, то мы отвергаем нулевую гипотезу. Здесь у нас нулевая гипотеза заведомо не верна, поэтому p-value должны по хорошему все быть очень маленькими. Поэтому, чем больше маленьких p-value получилось на наших заведомо успешных экспериментах, тем выше мощность теста: он хорошо умеет обнаруживать наличие разницы, умеет обнаруживать эффект.
Про баланс классов, когда recall для 0 у нас 0,95, а для 1ого 0,8 разве это не значит в 95% случаев когда эксперимент не успешен мы говорим, что он не успешен, а в 80% случаев когда он успешен, мы говорим, что он успешен? Это же бьется с теорией? Мне непонятно почему это работает с recall, но не работает с precision. Как это объяснить?
@@GlebMikhaylov в видео же цифры такие, что не работает. Когда рекол всегда в заданных пределах, то пресижн варьируется от баланса классов, вот и я спрашиваю, почему так происходит?)
@@bliz_fa_krik140 потому что знаменатель у рекола только реальный единички, и баланс классов на это не влияет: нолики вообще не участвуют. А знаменатель у пресижн это и нолики и единички, и баланс классов на это очень влияет
Привет. Пересматриваю в записи, т.к. в онлайне не успеваю за ходом мысли. Не могу понять почему одна и та же строка - " (t < 0.05).mean() " - для разных выборок показывает мощность, а для одинаковых - ошибку первого рода...
Привет! Потому что когда выборки одинаковые это значит, что верна нулевая гипотеза, и если p-value получается < 0.05 то мы ловим ложное срабатывание, т.е. неверно отвергаем нулевую гипотезу, это так же называется ошибкой первого рода. А когда выборки у нас разные это значит, что нулевая гипотеза не верна, и если p-value получается < 0.05 то происходит верное срабатывание, т.е. мы отвергаем неверную нулевую гипотезу, мы детектим эффект. Это называется мощность или еще hit rate или recall -- какой процент ситуация где присутствует реальный эффект мы верно детектим.
Это просто божественно) на столько просто и понятно что даже бабки да лавках поймут и пойдут в Гугл пилить а/б тесты) просто респектище)
Тест Манна - Уитни я запускал неправильно! В colab установлена старая версия statmodels и надо обязательно указывать alternative='two-sided'. Иначе получается не то, что нужно. Но в целом принцип тестирования теста сработал: мы отказались от этой вариации Манна - Уитни.
в Jupiter Notebook такая же проблема - нужно указывать "two-sided"
@@mlpython1089 В локальном jupyter ты можешь обновиться до новой версии и тогда, и тогда у тебя будет по дефулту two sided. В colab тоже можно обновиться, но это нужно делать для каждого ноутбука, что не удобно. Но в целом, я считаю, что всегда лучше все указывать явно и не оставлять ничего на дефулт. Как видишь, я усвоил этот урок hard way что называется)
Попробовал с two-sided и у меня получилось 0.05.
import pandas as pd
import numpy as np
from tqdm.notebook import tqdm
from scipy import stats
result_mv = []
for _ in tqdm(range(10000)):
a = np.random.binomial(1,0.15,size=1000)
b = np.random.binomial(1,0.15,size=1000)
_,pval = stats.mannwhitneyu(a,b,alternative='two-sided')
result_mv.append(pval)
Почему тогда нужно отказываться от Манна - Уитни?
@@armat_it та же ерунда: (t < 0.05).mean() с mannwhitneyu дает 0.0472
Глеб, спасибо. Ты очень много делаешь для страны!
Интересно только для какой?)))
Лучшего и доступного для меня объяснения мощности (проблема классификации) прямо-таки на пальцах я не встречал, отличное видео, спасибо!
Посмотреть все видосы Глеба это скорее эпик, который надо разбить на задачи😂
Отличные видео, смотрю все почти, ибо начал этот непростой путь ДС, очень бодро и познавательно, спасибо, от души!
Спасибо. Глеб красава)
И спасибо огромное за такие офигенские лекции! Даже начало в голове что-то укладываться, причем на практике уже имела дело с тестами, но не понимала до конца, как что и почему. Как мощны леопардовы лапищи!
1:31:00....О! Вот это я уже понимаю!)))))
Видео топ конечно, интуитивно теперь всё понятно, спасибо)
Есть вопрос: Что по Хи-Квадрату, ты имел ввиду что он равен Z тесту по результату и мощности? Не получилось у меня его применить в твоем коде
Нет. Они полностью эквивалентны математически. Для двух пропорций они дают абсолютно одинаковые результаты. Вот пример colab.research.google.com/drive/1L20YHu079C8zaUxOT4eZmMaOt-dyWFjq?usp=sharing
Подписался! Спасибо!
Луч света в темном царстве статистики
Не понимаю, почему мы можем использовать t-test для биномиального распределения кликов?
Ребят, я жёстко туплю и не догоняю, если мы делаем АА тест, и у нас заведомо разницы нет, мы получаем p value 0.05, а одна из трактовок p value - вероятность получить такие значения или более выраженные, если нулевая гипотеза верна, то почему так? Если у нас заведомо разницы нет, то как мы получаем всего 5% вероятность получить такие значения, это же капец как мало
"Это обезьяна ЧИ-Чи-ЧИ, все помнят чем закончилась эта история" Ржу))) Спасибо, Глеб, что у тебя классное ЧЮ, кроме прочих талантов!
На фразе «ныряй за жемчужинами» вспомнилось произведение Чака Паланика) «Кишки») сложный мем)
Фуу, Господи, почему я это читала и поняла мем -_- ))
Глеб, подскажи, а что делать в такой ситуации: предположим мы на время поведения A/Б теста предполагали конверсию 20% у контрольной группы, а эффект = 5%.
Но по факту контрольная группа повела себя по-другому и мы получили конверсию контрольной группы = 15%, а тестовой 20%. Эффект 5% есть, но конверсии не сходятся с тем, что мы заложили до.
Я думаю, что если разница значимая, то можно считать тест успешным, и отметить, что общая конверсия по процессу понизилась.
Вопрос про значение p-value: (где z-test считаешь) когда выпал 2.15 с чем-то, ты сказал, что это мизерный эффект. То есть это ок, и с данными в этом случае все может быть нормально, если p-value > 1?
Дай пожалуйста тайм код, чтобы я лучше понял о чем идет речь. И сразу: p-value не может быть больше единицы: это вероятность, а вероятность может быть от 0 до 1.
30:44 Посмотри на конец числа. Там e-05. Число в научном формате 2.71 * 10^(-5)
Поясните, кто может.
Почему доля экспериментов, в которых p-value меньше 5%, равна мощности, т.е. доле обнаруживаемых успешных экспериментов?
Ведь, если p-value меньше 5%, то это свидетельствует о низкой достоверности полученного результата (насколько я понимаю).
Но чем больше доля экспериментов с таким p-value, тем выше мощность.
Какое-то противоречие...
Тут важно понимать, что когда мы тут считаем мощность, то генерим выборки из разных распределения, т.е. у нас заведомо есть эффект, заведомо есть разница, заведомо неверна нулевая гипотеза.
Что такое p-value? Это вероятность получить такие же или более экстремальные результаты при верной нулевой гипотезе. Если p-value маленькая, то мы отвергаем нулевую гипотезу.
Здесь у нас нулевая гипотеза заведомо не верна, поэтому p-value должны по хорошему все быть очень маленькими.
Поэтому, чем больше маленьких p-value получилось на наших заведомо успешных экспериментах, тем выше мощность теста: он хорошо умеет обнаруживать наличие разницы, умеет обнаруживать эффект.
@@GlebMikhaylov Спасибо!
Про баланс классов, когда recall для 0 у нас 0,95, а для 1ого 0,8 разве это не значит в 95% случаев когда эксперимент не успешен мы говорим, что он не успешен, а в 80% случаев когда он успешен, мы говорим, что он успешен? Это же бьется с теорией? Мне непонятно почему это работает с recall, но не работает с precision. Как это объяснить?
Про рекол все верно написал. А почему для пресижн не работает?
@@GlebMikhaylov в видео же цифры такие, что не работает. Когда рекол всегда в заданных пределах, то пресижн варьируется от баланса классов, вот и я спрашиваю, почему так происходит?)
@@bliz_fa_krik140 потому что знаменатель у рекола только реальный единички, и баланс классов на это не влияет: нолики вообще не участвуют.
А знаменатель у пресижн это и нолики и единички, и баланс классов на это очень влияет
Привет. Пересматриваю в записи, т.к. в онлайне не успеваю за ходом мысли.
Не могу понять почему одна и та же строка - " (t < 0.05).mean() " - для разных выборок показывает мощность, а для одинаковых - ошибку первого рода...
Привет! Потому что когда выборки одинаковые это значит, что верна нулевая гипотеза, и если p-value получается < 0.05 то мы ловим ложное срабатывание, т.е. неверно отвергаем нулевую гипотезу, это так же называется ошибкой первого рода.
А когда выборки у нас разные это значит, что нулевая гипотеза не верна, и если p-value получается < 0.05 то происходит верное срабатывание, т.е. мы отвергаем неверную нулевую гипотезу, мы детектим эффект. Это называется мощность или еще hit rate или recall -- какой процент ситуация где присутствует реальный эффект мы верно детектим.