A/B Testicles – Telegram
A/B Testicles
546 subscribers
13 photos
1 video
2 files
12 links
Подписывайтесь, только если вы в контрольной группе
Download Telegram
Build vs Buy

In-house A/B platform дримтим:
◆ DA / DS для работы над методологией
◆ Бэкэндер для разработки и поддержки сплитовалки
◆ Фронтэндер для разработки и поддержки админки
◆ Дизайнер для дизайна админки
◆ DE для настройки пайплайнов расчетов, если DA / DS не вывозят

На самом деле это роскошный минимум без продакта, проджекта и еще пары аналитиков. Но даже с таким сетапом:

5 * 300k * 12 = 18 000 000 рублей или 230 000 $ в год


vs

100-300k в год за готовое решение (правда это цены за 2022 – сейчас наверное немного дороже будет)


Понятно, что если делать свою платформу, то дизайнер и разработчики в какой-то момент могут быть нужны не на фултайм, и 230k превратятся в 130-150.

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

Если вы бигтех и у вас уже есть удачно спроектированная с самого начала платформа, то, в целом, норм её развивать. Но, если только встал вопрос о выстраивании процесса A/B-тестирования в компании, то выбор между Build и Buy – конечно же 👋
Please open Telegram to view this post
VIEW IN TELEGRAM
👾9
👾20
AB_Testicles_CUPED.pdf
9.3 MB
Шпаргалка по CUPED

Собрал все формулы из статей в одну PDF, чтобы вы пользовались и делились с друзьями, прославляя канал
👾37
🎃🎃Это место похоже на Халлоуин🎃🎃

Канал нарядился для празднования 🧛Дня всех святых👻. Вот вам по случаю страшилка на ночь.

Представьте, что вы рассчитываете необходимый размер выборки для A/B-теста. Допустим для простоты, все фичи оказывают один и тот же по величине эффект на метрику. По старой оккультной традиции вы используете эффект из прошедших успешных экспериментов в качестве MDE. Так как истинный эффект вам недоступен, вы подставляете вместо него наблюдаемый. А ещё так уж вышло, что вы не читали мой пост про ошибку типа M, как и не читали статью от AirBnB про 💀Проклятие победителя💀. И, как следствие, не знаете, что в среднем наблюдаемые стат. значимые эффекты завышают истинный эффект.

В итоге вас засасывает в вечный круговорот:
🕷Вы используете в среднем завышенный эффект в качестве MDE
🧟‍♂️Рассчитанный размер выборки оказывается меньше, чем нужно
🔪Реальная мощность теста становится меньше желаемых 80%
🥀Полученный наблюдаемый эффект в новом эксперименте, окажись он стат. значимым, в среднем будет завышать истинный эффект еще сильнее, чем раньше
⚰️Вы возвращаетесь к шагу с пауком и используете только что полученный эффект для нового расчета MDE
👹Ваша мощность постепенно снижается и из 80 превращается в 5! Бу!

На самом деле на практике всё чуть менее страшно. Я проверил на симуляциях такой сетап:
- Выборки из экспоненциального распределения с параметром scale = 1000
- Истинный эффект всегда +10 и всегда аддитивный
- Проводим серию из 300 экспериментов
- В первом эксперименте при расчете размера выборок подставляем +10 в качестве MDE, чтобы исходная мощность была равна в точности 80%
- В последующих экспериментах рассчитываем размер выборки одним из 4 способов:

♦️last_statsig - берем в качестве MDE последний наблюдаемый стат. значимый эффект (самый первый эффект +10 тоже считаем стат. значимым)

♠️avg_last5_statsig - берем в качестве MDE среднее по последним 5 наблюдаемым стат. значимым эффектам (пока стат. значимых эффектов меньше 5, берем сколько есть)

♦️avg_statsig - берем в качестве MDE среднее по всем наблюдаемым стат. значимым эффектам

♠️avg - берем в качестве MDE среднее всем эффектам (в том числе не стат. значимым)

- На каждом шаге фиксируем значение, используемое в качестве целевого MDE, полученный размер выборки и реальную мощность (для истинного эффекта, равного +10)
- Проводим 200 таких серий из 300 экспериментов, усредняем значения для каждого из 300 шагов
- Как водится в индустрии для всего этого используем двусторонний критерий, но считаем эффект стат. значимым, только если он в добавок ко всему положительный (красные тесты никто не катит). Размер выборки и реальную мощность считаем как для одностороннего теста, потому что по-другому сложно.

Результаты на графиках. Видно, что все подходы, которые считают MDE по стат. значимым наблюдаемым эффектам, достаточно быстро начинают завышать истинный эффект, что ведет к снижению размера выборки и мощности. Интересно, что мощность при этом не падает к 5%, а стабилизируется на уровне 50-60%. Если же использовать среднее значение по всем наблюдаемым эффектам, то мощность так и будет колебаться в районе 80%. Нравится.
20
AB_Testicles_CUPED_Halloween.pdf
33.5 MB
CUPED Cheatsheet Halloween Edition

На журфаке МГУ запретили отмечать Хэллоуин. Как хорошо, что все еще остаются такие островки свободы, как канал A/B Testicles, где Хэллоуин можно отмечать еще как

Сделал страшную версию шпаргалки для любителей пощекотать нервы во время реализации методологии A/B-тестирования
19
Проклятие победителя на Матемаркетинге

Конфа уже близко, и одним из выступлений на ней будет доклад Сергея Матросова с канала Не АБы какие тесты про альтернативу холдауту, предложенную Airbnb в статье 2018 года. В первой её части приводится доказательство упомянутонного мной в хэллоуинском посте проклятия победителя. Его суть заключается в том, что математическое ожидание разности стат. значимых наблюдаемых эффектов и истинного эффекта – неотрицательная величина. То есть в среднем стат. значимые эффекты завышают истинный эффект.

Формальный вывод доказательства посмотрите в самой статье, а я предлагаю разобраться, почему так происходит, с помощью графиков. Рассмотрим 2 случая:

1) Реальная мощность теста > 50%. Тогда распределение разностей средних, X_i, можно разбить на 4 части (как на картинке). Зеленая, синяя и красная области соответствуют стат. значимым результатам, белая – не стат. значимым.

Давайте посчитаем E[X_i – a], но не для всех X_i, а только для стат. значимых (очевидно, что для всех X_i эта величина равна 0). Сделаем это, проинтегрировав (X_i – a)*p_i для всех 4 областей, но слагаемое, соответствующее белой области, домножим на 0. То есть возьмем E[ I(non-white) * (X_i – a) ], где I(non-white) – индикаторная функция.

Несложно увидеть, что для каждого значения X_i из зеленой области найдется такое значение из синей, что p_i_blue*(X_i_blue – a) = –p_i_green * (X_i_green – a). То есть интегралы по этим двум областям просто отменят друг друга. И останется только интеграл по красной области. А так как все X_i из красной области больше a, то и итоговый результат будет > 0.

2) Реальная мощность теста <= 50%. Тут еще проще – зеленая область вовсе пропадет и останутся только X_i, большие чем a. Очевидно, что E[X_i – a] для таких X_i также будет > 0.

Добавлю еще, что условие на стат. значимость X_i можно реализовать двумя способами:

◆ как сделали мы – с помощью индикаторной функции. Наши p_i расчитаны на основе исходного распределения из 4 областей

◆ по-другому. Можно сразу считать интеграл по усеченному распределению (без белой области) с отнормированными вероятностями. Тогда результат будет отличаться в 1/ (1-beta) раз. Но знак все равно не поменяет.


Какой из подходов правильнее, чем они еще отличаются кроме нормирования вероятностей, что делать с обнаруженным байасом и причем тут вообще альтернатива холдауту? Вот статья + выступление Сережи на ММ'25 20 ноября в 17:45.
👾12
Как честно подвести итоги A/B-теста

Я не писал в канал больше месяца, потому что дома появился плэйстейшн, и теперь моя сфера интересов – видеоигры, а не A/B-тесты.

Но скоро Новый год, а значит многие команды будут подводить итоги своей работы. И мне очень некомфортно от мысли, что они могут делать это неправильно, совершенно не осозновая этого. Очень надеюсь, что вызвал у вас FOMO, и, что вы прочитаете мою новую статью
22
ChatGPT подвел мои итоги года и сделал новогоднее видео

(он меня ненавидит)
19