Build vs Buy
In-house A/B platform дримтим:
◆ DA / DS для работы над методологией
◆ Бэкэндер для разработки и поддержки сплитовалки
◆ Фронтэндер для разработки и поддержки админки
◆ Дизайнер для дизайна админки
◆ DE для настройки пайплайнов расчетов, если DA / DS не вывозят
На самом деле это роскошный минимум без продакта, проджекта и еще пары аналитиков. Но даже с таким сетапом:
vs
Понятно, что если делать свою платформу, то дизайнер и разработчики в какой-то момент могут быть нужны не на фултайм, и 230k превратятся в 130-150.
Но, энивэй, если выбираете вендора, то за короткий промежуток времени получаете вылизанный продукт со всеми необходимыми функциями и адекватно реализованной методологией, а не собранный из говна и палок сервис, над которым нужно годик-другой поработать, чтобы он мог хоть как-то сравниться с предложениями с рынка.
Если вы бигтех и у вас уже есть удачно спроектированная с самого начала платформа, то, в целом, норм её развивать. Но, если только встал вопрос о выстраивании процесса A/B-тестирования в компании, то выбор между Build и 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
Написал серию статей про C*PED
Вот первая, в которой рассказываю о том, как не перестараться при трансформации метрики.
Потом еще выложу вторую и третью
Вот первая, в которой рассказываю о том, как не перестараться при трансформации метрики.
Потом еще выложу вторую и третью
Telegraph
CUPED One
Двенадцать лет назад Алекс Денг, Я Сю, Рон Кохави и Тоби Уолкер сделали дроп, который помог всей индустрии A/B-тестирования немного ускориться. Что такое CUPED знает, наверное, почти любой человек, трогавший эксперименты. Чего, скорее всего, не знает почти…
👾21
CUPED + Дельта-метод
Вторая часть. Внутри:
- правильная формула для θ
- алгоритм применения CUPED к ratio-метрикам
- мой дизреспект Яндексу
Вторая часть. Внутри:
- правильная формула для θ
- алгоритм применения CUPED к ratio-метрикам
- мой дизреспект Яндексу
Telegraph
CUPED 2
Продолжаем про CUPED. В первой части разобрались, как не перестараться с трансформацией метрики. В этой – выведем верную формулу для θ, а также разберемся, как подружить CUPED с дельта-методом. Оптимальная тета Скорее всего, вы сталкивались вот с таким вариантом…
👾18
AB_Testicles_CUPED.pdf
9.3 MB
Шпаргалка по CUPED
Собрал все формулы из статей в одну PDF, чтобы вы пользовались и делились с друзьями, прославляя канал
Собрал все формулы из статей в одну 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%. Нравится.
Канал нарядился для празднования 🧛Дня всех святых👻. Вот вам по случаю страшилка на ночь.
Представьте, что вы рассчитываете необходимый размер выборки для 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%. Нравится.
AB_Testicles_CUPED_Halloween.pdf
33.5 MB
CUPED Cheatsheet Halloween Edition
На журфаке МГУ запретили отмечать Хэллоуин. Как хорошо, что все еще остаются такие островки свободы, как канал A/B Testicles, где Хэллоуин можно отмечать еще как
Сделал страшную версию шпаргалки для любителей пощекотать нервы во время реализации методологии A/B-тестирования
На журфаке МГУ запретили отмечать Хэллоуин. Как хорошо, что все еще остаются такие островки свободы, как канал A/B Testicles, где Хэллоуин можно отмечать еще как
Сделал страшную версию шпаргалки для любителей пощекотать нервы во время реализации методологии A/B-тестирования
Проклятие победителя на Матемаркетинге
Конфа уже близко, и одним из выступлений на ней будет доклад Сергея Матросова с канала Не АБы какие тесты про альтернативу холдауту, предложенную 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.
Какой из подходов правильнее, чем они еще отличаются кроме нормирования вероятностей, что делать с обнаруженным байасом и причем тут вообще альтернатива холдауту? Вот статья + выступление Сережи на ММ'25 20 ноября в 17:45.
Конфа уже близко, и одним из выступлений на ней будет доклад Сергея Матросова с канала Не АБы какие тесты про альтернативу холдауту, предложенную 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, и, что вы прочитаете мою новую статью
Я не писал в канал больше месяца, потому что дома появился плэйстейшн, и теперь моя сфера интересов – видеоигры, а не A/B-тесты.
Но скоро Новый год, а значит многие команды будут подводить итоги своей работы. И мне очень некомфортно от мысли, что они могут делать это неправильно, совершенно не осозновая этого. Очень надеюсь, что вызвал у вас FOMO, и, что вы прочитаете мою новую статью
Telegraph
Честные эффекты в A/B-тестах
Ситуация: ваша команда реализовала новую фичу в разделе с настройками приложения. Когда пользователь заходит в этот раздел, он попадает в эксперимент и сплитуется в одну из групп. Фича оказалась настолько хороша, что вы заметили прирост средней выручки на…
☃22
ChatGPT подвел мои итоги года и сделал новогоднее видео
(он меня ненавидит)
(он меня ненавидит)
☃19