Я почитал недавно статью на хабре про АБ тесты от одной компании

С удивлением обнаружил что там ниспровергается Cuped (точнее определенная формула)



И приводится этот код для проверки

Код из статьи воспроизведен без изменений (число итераций увеличено в 10 раз) в ячейке номер 2



Ячейка 2 выдает следующее

Не попал в 85.07000000000001% случаев; доверительный интервал: [84.36%, 85.76%]

Выглядит и вправду плохо, при ожидаемом уровне в 5% мы наблюдаем уровень ложно положительных результатов многократно выше





Я обратил внимание на то, что на одном и том же датасете считается сontrol before как ковариата и как вычитаемое среднее, к сожалению здесь ошибка и так делать нельзя. Это классический пример переобучения. Примерно как валидироваться на трейне и потом попасть впросак на новом датасете



Правится это следующим образом, вычитаемое среднее считается глобально по всему датасету (например если в а/б тест отправилось 5% юзеров, то среднее будем считаться по всем 100% и можем учесть чуть больший период времени)



В идеальном мире это выглядело бы вот так

Я бы просто знал параметры распределения и использовал их для вычитания среднего, хотя тогда и А/Б не нужен (строчка 8)

Ячейка 3



Допустим я не знаю параметры распределения, но у меня много данных, тогда будет вот так (строчка 4 и 9)

Ячейка 4



Вот как будет это выглядеть в реальной жизни при самом плохом случае, когда мы сравниваем группу А и Б и допустим что никаких других данных у нас нет

Ячейка 5



Вот как будет это выглядеть в реальной жизни при наличии каких то данных, кроме самих групп А и Б или А1 и А2

Ячейка 6



Вы можете позапускать код самостоятельно и убедится что во всех четырех случаях цифры будут около 5% , но пожалуй пристальнее всего стоит смотреть на то как будет в реальной жизни



Также, для сравнения дал пример где накинул очень маленький шум в качестве эффекта, cuped поймал его в половине случаев, без cuped - только в пяти из ста

Ячейка 7 и 8 соответственно



P.S. Кажется я знаю откуда может идти идея ниспровержения. По моему я был один из первых людей, сделавших доклад о Cuped на русском

В моем репозитории Cuped как раз был реализован с этой ошибкой, о чем я знал последние года два, но не придавал значения

Чуть подробнее мы разобрали это в ОДС в Июле 2021 года в этом треде



#ArticleReview