Если смотреть каждый день в тест в ожидании MDE, возрастает верояность его ложно принять. Даже наличие стат значимого MDE при разовом просмотре теста не гарантирует что не будет ошибки, при многократном просмотре риск растет, разве нет?
Промоделировать это довольно просто или можно посмотреть здесь varianceexplained.org/r/bayesian-ab-testing
Теперь возникает вопрос: как провести T-test и MW-test для Ratio-метрик? Для T-test нужно уметь считать дисперсию выборки, а для MW выборка должна быть «поюзерной».
Что мешает считать дисперсию для метрика отношения, говорим что это биномиальное распределение/бернули, оценочная дисперсия p*(1-p)
Теперь переходим к новой экспериментальной единице — бакет. Наблюдения в бакете суммируем (числитель и знаменатель независимо):
Вы оценивали процент ошибок (например на синтетике или уже проведенном А/Б) первого/второго рода, при разных B, от B = N до B = const c разными значениеяси
Теперь возникает вопрос: как провести T-test и MW-test для Ratio-метрик? Для T-test нужно уметь считать дисперсию выборки, а для MW выборка должна быть «поюзерной».
Ответ: нужно разложить Ratio в ряд Тейлора до первого порядка в точке:
Данная формула преобразует две выборки (числитель и знаменатель) в одну, сохраняя среднее и дисперсию (асимптотически), что позволяет применять классические стат. тесты.
Похожую идею коллеги из Яндекса называют методом линеаризации Ratio (выступления раз и два).
Почему не стали использовать линеаризацию, она выглядит вычислительно проще и элегантнее
Смотрю код и пытаюсь понять
Зачем в классе mean_vectorizer функция fit
def fit(self, X):
return self
Разве не проще
Вместо
mean_vectorizer(w2v).fit(train_df['list_w']).transform(train_df['list_w'])
Сделать
mean_vectorizer(w2v).transform(train_df['list_w'])
Базовый рефрешер в ФБ на E6 — 240, Е7 — 480 и дальше, это при оценке ME при ЕЕ — x1.3 при SE x2
Все легко прочитать на blind можно
Промоделировать это довольно просто или можно посмотреть здесь
varianceexplained.org/r/bayesian-ab-testing
Что мешает считать дисперсию для метрика отношения, говорим что это биномиальное распределение/бернули, оценочная дисперсия p*(1-p)
Вы оценивали процент ошибок (например на синтетике или уже проведенном А/Б) первого/второго рода, при разных B, от B = N до B = const c разными значениеяси
Почему не стали использовать линеаризацию, она выглядит вычислительно проще и элегантнее
Не возникает ли здесь проблемы многократного тестирования гипотезы?
Смотрю код и пытаюсь понять
Зачем в классе mean_vectorizer функция fit
def fit(self, X):
return self
Разве не проще
Вместо
mean_vectorizer(w2v).fit(train_df['list_w']).transform(train_df['list_w'])
Сделать
mean_vectorizer(w2v).transform(train_df['list_w'])
Смотрю на глаз — код не прогонял