С нуля до 250к за 2 месяца: из востоковеда до ведущего аналитика данных🍌
В начале июня ко мне на менторство пришел К. (имя изменено) с запросом: востоковед по образованию, IT-бэкграунда нет, хочет в DA. И уже в начале августа он получил первый оффер, а еще через две недели вышел на позицию ведущего АД в одну из ведущих российских финтех-компаний на 250к. Два месяца от старта до оффера.
К. — тип ученика, который до меня уже что-то учил сам. И это как раз часто очень обманчивая точка: кажется, что база есть, и можно собеситься, а на деле знания сырые и разрозненные.
Вот это ощущение "не понятное" лечится не количеством курсов, а системой, и вот как мы шли:
➖ Обучение. Составили роадмап под конкретную цель: что учить обязательно, что учить поверхностно, а что не трогать вообще — потому что этого либо не спрашивают на собесах, либо не используют в работе. Созвоны раз в неделю: разбор материала, вопросы, корректировка темпа. Между созвонами я на связи по любым вопросам как в рамках роадмапа, так и в целом
➖ Резюме и легенда. Проработали опыт и позиционирование, переписали резюме до состояния, когда оно реально продает. Результат — количество скрининговых собеседований выросло кратно, и поиск работы перестал быть лотереей с откликами в пустоту.
➖ Мок-собеседования. После каждого блока проводили мок собесы, максимально приближенные к реальным: опыт, теория, задачи по SQL, разбор ошибок после.
➖ Собеседования и оффер. Дошел до 3х финалов — и это при том, что месяцем раньше он вообще не понимал, о чем его спрашивают на записях собесов. Итог — оффер на позицию ведущего аналитика данных на 250к, ровно через два месяца после старта менторства.
➖ Выход. Стандартные 2 недели от оффера до первого рабочего дня.
К. сделал результат не потому, что я хорош, а потому что делал то, о чем мы договаривались.
Системно уделял время, не уходил учить «то, что интереснее», не пропадал между созвонами и сам проявлял инициативу.
Два месяца с нуля быстро даже по моим меркам. Обычно менторство занимает 4–6 месяцев, и то, не обещаю, что у всех будет так же: слишком многое зависит от стартовой базы, количества свободного времени и рынка в конкретный момент. Но этот кейс показывает верхнюю планку того, что вообще реально при нормальном вложении сил.
Мог ли он дойти сам? Скорее да — но не за два месяца, а за год-полтора, буксуя на каждом этапе там, где сейчас получал ответ за пять минут. Ментор не заменяет твои усилия, он убирает потерянное время.
Отзыв самого К.:
Если ты сейчас в той же точке, где К. был в июне — вроде что-то учишь, но собесы все еще кажутся непонятными — то это ровно та задача, которую я решаю.
Велком на менторство, вводный созвон-знакомство бесплатный.
До 28.08 действуют текущие условия: 25 000 ₽ в месяц, 100% предоплата. Кто успеет зайти — останется на них до конца работы.
С 28.08 будет два тарифа: 25 000 ₽ предоплатой + 140% от оклада постоплатой или 40 000 ₽ предоплатой + 120%.
Подробнее расписал на сайте
Записаться и задать вопросы
❤️🔥 Подписывайтесь и поддержите канал бустом
@data_driven_bogdan
В начале июня ко мне на менторство пришел К. (имя изменено) с запросом: востоковед по образованию, IT-бэкграунда нет, хочет в DA. И уже в начале августа он получил первый оффер, а еще через две недели вышел на позицию ведущего АД в одну из ведущих российских финтех-компаний на 250к. Два месяца от старта до оффера.
К. — тип ученика, который до меня уже что-то учил сам. И это как раз часто очень обманчивая точка: кажется, что база есть, и можно собеситься, а на деле знания сырые и разрозненные.
просто я вроде учил, но не было системы, и я не понимал что зачем и на каком этапе применять
я смотрел собесы, и вроде что-то и понимал, но из-за того что системы нет, кажется что не понятное
Вот это ощущение "не понятное" лечится не количеством курсов, а системой, и вот как мы шли:
К. сделал результат не потому, что я хорош, а потому что делал то, о чем мы договаривались.
Системно уделял время, не уходил учить «то, что интереснее», не пропадал между созвонами и сам проявлял инициативу.
Два месяца с нуля быстро даже по моим меркам. Обычно менторство занимает 4–6 месяцев, и то, не обещаю, что у всех будет так же: слишком многое зависит от стартовой базы, количества свободного времени и рынка в конкретный момент. Но этот кейс показывает верхнюю планку того, что вообще реально при нормальном вложении сил.
Мог ли он дойти сам? Скорее да — но не за два месяца, а за год-полтора, буксуя на каждом этапе там, где сейчас получал ответ за пять минут. Ментор не заменяет твои усилия, он убирает потерянное время.
Отзыв самого К.:
В начале июня я обратился к Богдану с просьбой стать моим ментором.
Уже в середине августа, спустя почти 3 месяца, выхожу на новую работу ведущим аналитиком данных в одной из ведущих российских финтех-компаний на хорошую зарплату. Богдан составил роадмап, который закрыл мои пробелы в знаниях, и был на связи по любым вопросам в его рамках. Раз в неделю мы созванивались и разбирали пройденное, что помогало мне держать темп обучения.
После первого месяца добавились мок-собеседования, максимально приближенные к тому, что было на реальных интервью. Также Богдан помог с составлением легенды и резюме, после выхода практически сразу начал откликаться и ставить собеседования, что ускорило процесс поиска работы. Отдельно отмечу сроки: первый оффер я получил уже через два месяца после старта, а вышел на работу через две недели после него. При том, что на входе знаний у меня фактически не было — какая-то база по SQL была, но настолько сырая, что на реальных собесах она бы меня не вытащила.
Cовет тем, кто только думает про менторство: слушайте ментора и делайте.
Богдану краба🦀🤝 и огромная благодарность за проделанную работу.
Если ты сейчас в той же точке, где К. был в июне — вроде что-то учишь, но собесы все еще кажутся непонятными — то это ровно та задача, которую я решаю.
Велком на менторство, вводный созвон-знакомство бесплатный.
До 28.08 действуют текущие условия: 25 000 ₽ в месяц, 100% предоплата. Кто успеет зайти — останется на них до конца работы.
С 28.08 будет два тарифа: 25 000 ₽ предоплатой + 140% от оклада постоплатой или 40 000 ₽ предоплатой + 120%.
Подробнее расписал на сайте
Записаться и задать вопросы
@data_driven_bogdan
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🔥3 2 2
Задача на разметку данных
Расскажу про задачу, о которой мало говорят.
Если ты продуктовый аналитик — скорее всего сразу поймешь, о чем речь. А вот если работаешь в операционке, коммерции или маркетинге — высок шанс, что про нее вообще не слышал.
Я, когда мне первый раз столкнулся с задачей на разметку, честно не понял, что от меня хотят.
Планируется редизайн, изменение логики или новая фича в приле. Казалось бы, дело разрабов.
Но по ней потом надо будет считать метрики, а значит нужна разметка новых событий — чтобы они корректно стримились в витрину событий и мы вообще могли что-то посчитать.
Как устроено событие 🧩
Событие почти всегда составное. Оно собирается из блоков твоего прила — от общего к частному — и заканчивается действием (action), которое совершил юзер.
Схема примерно такая:
Например:
По имени события должно быть сразу видно, откуда оно прилетело и что означает (это конечно, не всегда выполнимо, но целимся в это)
С чего начинать 👇
➖ Принимаем to be дизайн c cjm'ом (путь клиента по фиче)
➖ Идем в доку. Если она есть. И если она актуальная (спойлер: чаще всего одно из двух не выполняется). Если процесс новый, можно ничего не искать
➖ Смотрим текущие события в as is формате — как размечено то, что уже есть в БД (если этот процесс сейчас стримится). По сути восстанавливаем картину по тому, как события реально проливаются в базу. Не идеально, но работает + можно вкурить нынешние косяки...
➖ На всем этом этапе супер важно синковаться: тестировщики и разрабы, которые шарят за домен или будут это реализовывать. Ну и бизнес, чьи хотелки мы вообще-то и реализуем.
Мой совет 💡
Лучше всего идти напрямую к разрабам. У них уже есть картина реализации и модель, по которой события отдаются с бека или фронта.
Они конкретно скажут где, как, что и почему — а не «ну вроде так должно быть».
Через вторые руки эта информация теряется, а потом ты сидишь и гадаешь, почему в витрине не то, что ты ожидал.
DoD (definition of done) по таким типам задач обычно выглядит так:
Дока на конфе с новыми событиями + после выкатки — тесты на корректную отработки в поставленной логике.
❤️🔥 Подписывайтесь и поддержите канал бустом
↗️ Менторю и помогаю выйти на оффер
❓ Сталкивались ли вы с разметкой?
@data_driven_bogdan
Расскажу про задачу, о которой мало говорят.
Если ты продуктовый аналитик — скорее всего сразу поймешь, о чем речь. А вот если работаешь в операционке, коммерции или маркетинге — высок шанс, что про нее вообще не слышал.
Я, когда мне первый раз столкнулся с задачей на разметку, честно не понял, что от меня хотят.
Планируется редизайн, изменение логики или новая фича в приле. Казалось бы, дело разрабов.
Но по ней потом надо будет считать метрики, а значит нужна разметка новых событий — чтобы они корректно стримились в витрину событий и мы вообще могли что-то посчитать.
Как устроено событие 🧩
Событие почти всегда составное. Оно собирается из блоков твоего прила — от общего к частному — и заканчивается действием (action), которое совершил юзер.
Схема примерно такая:
где_блок_часть блока_действиеНапример:
main_banner_promo_scroll или cart_delivery_address_click.По имени события должно быть сразу видно, откуда оно прилетело и что означает (это конечно, не всегда выполнимо, но целимся в это)
С чего начинать 👇
Мой совет 💡
Лучше всего идти напрямую к разрабам. У них уже есть картина реализации и модель, по которой события отдаются с бека или фронта.
Они конкретно скажут где, как, что и почему — а не «ну вроде так должно быть».
Через вторые руки эта информация теряется, а потом ты сидишь и гадаешь, почему в витрине не то, что ты ожидал.
DoD (definition of done) по таким типам задач обычно выглядит так:
Дока на конфе с новыми событиями + после выкатки — тесты на корректную отработки в поставленной логике.
❓ Сталкивались ли вы с разметкой?
@data_driven_bogdan
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥4 3💯1
Все таки за свободу надо Plata(ить)🥴
fyi типа уволили с Платы за рилс о сравнении с Тиньком
@data_driven_bogdan
fyi типа уволили с Платы за рилс о сравнении с Тиньком
@data_driven_bogdan
😁6🤬2🤨1
Forwarded from Лучшая жизнь И.Д.Кузнецова
Меня уволили из Plata за Reels в инстаграме.
📅 Как это было
5 августа — выложил Reels-сравнение Banco Plata и T-Bank. Первые просмотры, первые подписчики.
6 августа — Олег Т. репостит его к себе в сторис с комментом о том, что свобода — это важно. Новый виток раскрутки рилса.
7 августа — «встреча» с одним из топов и HR. Три претензии:
Сделал сайт с формой для сбора тг-ников тех, кто хочет в Plata. Идея простая: компании — горячие лиды, мне — бонус как за рефералку. Оказалось, так нельзя. Удалил в тот же день, вопрос закрыт.
Манера общения в интернете. Да, я могу полить говном тех, кто поливает меня в комментах. Это мой стиль, притворяться лавандовым рафом не буду. Тут не сошлись.
Сливаешь внутренние данные. Не сливал и не собирался. Но с порога переговорки летели только обвинения — на контакт никто идти не пытался.
8 августа — выкладываю ещё два видео: этапы отбора в Plata (публичная инфа) и Мск vs Мехико.
13 августа — в обед прилетает встреча на 18:00. По участникам всё понятно. 18:03 — уволенза косяки в работе за публичную деятельность по решению топ-менеджмента. 18:10 — забрали ноутбук.
15 августа — улетаю в Стамбул делать ВНЖ Мексики (билеты были куплены заранее).
Лид после увольнения сказал мне примерно так:
Очень расстроен — у нас с тобой были огромные планы, и ты отлично справлялся.
То есть уволили не за работу. Компания просто испугалась микроблога, который не может контролировать.
💭 Зла не держу и благодарен каждому, с кем работал в Plata. Не понимаю только двуличность в компании, с одной стороны Олег Т. про свободу слова, с другой — увольняют человека, который ничего плохого и не сказал. У него просто появился голос.
🚀 Что дальше — и что будет здесь
— Я по-прежнему ахуенный специалист и уже несколько компаний вышли на меня, активно общаемся. Возможно, встретимся в новой стране (лучше, чем Мексика).
— Делаю курс для вас: как попасть в IT, стать продактом и пройти все интервью — качественно и на своём опыте.
— Пилю микро-SaaS. Покажу, когда будет коммерческий результат, не раньше.
Подписывайтесь сюда и в инст — дальше больше. Люблю и обнял каждого 🫶🏼
P.S. Уверен, Олег Т. не был в курсе этого решения. Верю, что Banco Plata станет лучшим банком Латама, и надеюсь, что крупицы моего труда в его фундаменте дадут плоды.
P.P.S. Если ты HR и твоя компания не боится публичности сотрудников или готова адекватно обсудить её рамки — пиши, я открыт.
📅 Как это было
5 августа — выложил Reels-сравнение Banco Plata и T-Bank. Первые просмотры, первые подписчики.
6 августа — Олег Т. репостит его к себе в сторис с комментом о том, что свобода — это важно. Новый виток раскрутки рилса.
7 августа — «встреча» с одним из топов и HR. Три претензии:
Сделал сайт с формой для сбора тг-ников тех, кто хочет в Plata. Идея простая: компании — горячие лиды, мне — бонус как за рефералку. Оказалось, так нельзя. Удалил в тот же день, вопрос закрыт.
Манера общения в интернете. Да, я могу полить говном тех, кто поливает меня в комментах. Это мой стиль, притворяться лавандовым рафом не буду. Тут не сошлись.
Сливаешь внутренние данные. Не сливал и не собирался. Но с порога переговорки летели только обвинения — на контакт никто идти не пытался.
8 августа — выкладываю ещё два видео: этапы отбора в Plata (публичная инфа) и Мск vs Мехико.
13 августа — в обед прилетает встреча на 18:00. По участникам всё понятно. 18:03 — уволен
15 августа — улетаю в Стамбул делать ВНЖ Мексики (билеты были куплены заранее).
Лид после увольнения сказал мне примерно так:
Очень расстроен — у нас с тобой были огромные планы, и ты отлично справлялся.
То есть уволили не за работу. Компания просто испугалась микроблога, который не может контролировать.
💭 Зла не держу и благодарен каждому, с кем работал в Plata. Не понимаю только двуличность в компании, с одной стороны Олег Т. про свободу слова, с другой — увольняют человека, который ничего плохого и не сказал. У него просто появился голос.
🚀 Что дальше — и что будет здесь
— Я по-прежнему ахуенный специалист и уже несколько компаний вышли на меня, активно общаемся. Возможно, встретимся в новой стране
— Делаю курс для вас: как попасть в IT, стать продактом и пройти все интервью — качественно и на своём опыте.
— Пилю микро-SaaS. Покажу, когда будет коммерческий результат, не раньше.
Подписывайтесь сюда и в инст — дальше больше. Люблю и обнял каждого 🫶🏼
P.S. Уверен, Олег Т. не был в курсе этого решения. Верю, что Banco Plata станет лучшим банком Латама, и надеюсь, что крупицы моего труда в его фундаменте дадут плоды.
P.P.S. Если ты HR и твоя компания не боится публичности сотрудников или готова адекватно обсудить её рамки — пиши, я открыт.
Не знаешь, как проходит собеседование на продуктового аналитика?
Советую телеграм канал ребят из бигтеха
✖️ Тех собес по SQL и Python
✖️ Тех собес по АБ тестам
✖️ Как проводить A/B тесты - подробный гайд
✖️ Roadmap подготовки к собесам
👉 Подписывайся — внутри найдешь пдф гайд по прохождению испытательного срока
Советую телеграм канал ребят из бигтеха
👉 Подписывайся — внутри найдешь пдф гайд по прохождению испытательного срока
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥5🤩3
Почему тест «не показал эффекта» — а эффект был
Обещал этот пост еще давно... но руки дошли только сейчас
Представим, что команда прогнала A/B, эффект незначим, вывод — «механика не работает, сворачиваем». А по факту эффект был, просто тест физически не мог его поймать при такой выборке. Один из самых частых и при этом самых незаметных провалов в тестировании — его не видно в цифрах, он прячется за формулировкой «незначимо».
Что такое MDE❓
MDE (Minimum Detectable Effect) — минимальный размер эффекта, который тест вообще способен статистически отличить от нуля при заданных параметрах: размере выборки, мощности (обычно 80%) и уровне значимости (обычно 5%).
Формула для сравнения средних:
MDE = (z₁₋α/₂ + z₁₋β) · √(σₜ²/nₜ + σc²/nc)
где t — тестовая группа, c — контрольная; σ² — дисперсия метрики, n — размер группы.
P.S. напомню, что для метрик-долей (конверсий) формула расчета MDE немного другая
Формулу необязательно помнить наизусть, важна логика: чем больше выборка и чем меньше разброс метрики — тем меньший эффект тест способен поймать. И наоборот.
Главное правило
Если реальный эффект меньше MDE — тест покажет «не значимо», даже если эффект реально существует. Это принципиально разные вещи: «эффекта нет» и «мы не способны его увидеть при таких вводных». Спутать одно с другим — типичная ошибка, которая приводит к закрытию рабочих гипотез.
Пример на пальцах
Сегмент 100 000 человек, средний чек со стандартным отклонением ~1000 ₽. При сплите 50/50 и мощности 80% тест поймает эффект примерно от 15–20 ₽ на человека. Если реальный эффект механики — условные 10 ₽, тест почти гарантированно покажет «незначимо», просто из-за нехватки мощности, а не потому что механика не работает.
Сплит имеет значение
MDE зависит не только от общего размера аудитории, но и от того, как ее делят между группами. При равном общем размере сплит 50/50 всегда чувствительнее, чем 90/10 — потому что MDE зависит от суммы σ²/n по каждой группе, а урезание control-группы резко увеличивает ее вклад в эту сумму.
👉 Экономия бюджета за счет узкой контрольной группы — это прямая плата чувствительностью теста.
Когда считать
MDE считается до запуска, а не после.
Опираться при расчете нужно на эффект, который бизнес закладывает в фичу — тот самый аплифт, из которого считается финэффект предложения. Например: команда посчитала, что фича окупится, если конверсия вырастет на +0.5 п.п., или что механика приносит смысл при аплифте от +3% к среднему чеку. Вот это число и есть точка отсчета для MDE, а не «эффект, который мы ожидаем поймать» в общем смысле.
Дальше смотрим, ловит ли тест именно этот эффект:
➖ MDE ≤ заложенный эффект — отлично, тест в текущем виде способен подтвердить или опровергнуть гипотезу, можно запускать
➖ MDE немного больше — есть шанс дотянуть: увеличить выборку (больше трафика или дольше тест), выровнять сплит к 50/50, снизить дисперсию метрики (CUPED, стратификация, обрезка выбросов, более чувствительная прокси-метрика вместо шумной)
➖ MDE сильно больше, и дотянуть нечем (трафика физически нет, период ограничен, дисперсия не снижается) — смысла в тесте нет: он гарантированно покажет «эффекта нет», даже если он есть. Тут стоит либо пересмотреть механику эксперимента, либо честно признать, что A/B не даст ответа при текущих вводных
Отдельный вопрос — на чем считать σ² для самой формулы. Чаще всего берут исторические данные: дисперсию метрики за прошлый период (без воздействия) или результаты пилота / A/A-теста. Если исторический период нетипичный (сезонность, акция, аномалия) — MDE получится нерепрезентативным. Что делать: брать окно подлиннее, чистить от акций/аномалий и сверяться с A/A — он сразу даст честную σ² без ручного подбора периода.
Чек-лист перед запуском теста
➖ Какой эффект мы реально ожидаем поймать — запрашиваем у бизнеса
➖ Какой MDE при текущем размере выборки и сплите
➖ MDE меньше ожидаемого эффекта? Если нет — тест в текущем виде бессмысленен
➖ Что делать, если MDE слишком большой: увеличить выборку, выровнять сплит, продлить период
❤️🔥 Подписывайтесь и поддержите канал бустом
↗️ Менторю и помогаю выйти на оффер
❓ Бывало ли у вас, что закрывали рабочую гипотезу, а потом оказывалось, что просто не хватило выборки?
@data_driven_bogdan
Обещал этот пост еще давно... но руки дошли только сейчас
Представим, что команда прогнала A/B, эффект незначим, вывод — «механика не работает, сворачиваем». А по факту эффект был, просто тест физически не мог его поймать при такой выборке. Один из самых частых и при этом самых незаметных провалов в тестировании — его не видно в цифрах, он прячется за формулировкой «незначимо».
Что такое MDE
MDE (Minimum Detectable Effect) — минимальный размер эффекта, который тест вообще способен статистически отличить от нуля при заданных параметрах: размере выборки, мощности (обычно 80%) и уровне значимости (обычно 5%).
Формула для сравнения средних:
MDE = (z₁₋α/₂ + z₁₋β) · √(σₜ²/nₜ + σc²/nc)
где t — тестовая группа, c — контрольная; σ² — дисперсия метрики, n — размер группы.
P.S. напомню, что для метрик-долей (конверсий) формула расчета MDE немного другая
Формулу необязательно помнить наизусть, важна логика: чем больше выборка и чем меньше разброс метрики — тем меньший эффект тест способен поймать. И наоборот.
Главное правило
Если реальный эффект меньше MDE — тест покажет «не значимо», даже если эффект реально существует. Это принципиально разные вещи: «эффекта нет» и «мы не способны его увидеть при таких вводных». Спутать одно с другим — типичная ошибка, которая приводит к закрытию рабочих гипотез.
Пример на пальцах
Сегмент 100 000 человек, средний чек со стандартным отклонением ~1000 ₽. При сплите 50/50 и мощности 80% тест поймает эффект примерно от 15–20 ₽ на человека. Если реальный эффект механики — условные 10 ₽, тест почти гарантированно покажет «незначимо», просто из-за нехватки мощности, а не потому что механика не работает.
Сплит имеет значение
MDE зависит не только от общего размера аудитории, но и от того, как ее делят между группами. При равном общем размере сплит 50/50 всегда чувствительнее, чем 90/10 — потому что MDE зависит от суммы σ²/n по каждой группе, а урезание control-группы резко увеличивает ее вклад в эту сумму.
👉 Экономия бюджета за счет узкой контрольной группы — это прямая плата чувствительностью теста.
Когда считать
MDE считается до запуска, а не после.
Опираться при расчете нужно на эффект, который бизнес закладывает в фичу — тот самый аплифт, из которого считается финэффект предложения. Например: команда посчитала, что фича окупится, если конверсия вырастет на +0.5 п.п., или что механика приносит смысл при аплифте от +3% к среднему чеку. Вот это число и есть точка отсчета для MDE, а не «эффект, который мы ожидаем поймать» в общем смысле.
Дальше смотрим, ловит ли тест именно этот эффект:
Отдельный вопрос — на чем считать σ² для самой формулы. Чаще всего берут исторические данные: дисперсию метрики за прошлый период (без воздействия) или результаты пилота / A/A-теста. Если исторический период нетипичный (сезонность, акция, аномалия) — MDE получится нерепрезентативным. Что делать: брать окно подлиннее, чистить от акций/аномалий и сверяться с A/A — он сразу даст честную σ² без ручного подбора периода.
Чек-лист перед запуском теста
@data_driven_bogdan
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🔥1 1
Forwarded from Больше, чем экономика
This media is not supported in your browser
VIEW IN TELEGRAM
Бизнес-аналитик ушел с работы и стал отшельником после того, как ему отказали в удаленке. До этого мужчина работал в IT, получал премии за успешные проекты, имел семью и дом у озера.
После отказа работодателя он оставил карьеру и семью и уехал в индийский Варанаси. Там мужчина отказался от прежнего образа жизни и посвятил себя религии, рассчитывая завершить «круг перерождений». Через несколько месяцев он умер.
@economylive
После отказа работодателя он оставил карьеру и семью и уехал в индийский Варанаси. Там мужчина отказался от прежнего образа жизни и посвятил себя религии, рассчитывая завершить «круг перерождений». Через несколько месяцев он умер.
@economylive
🔥7🐳3👍2
не просто так видимо говорят, что с рынком сейчас траблы...
🔥7💯2
Uplift-моделирование: кому оффер реально нужен, а кому нет
Разослали скидку 100 000 клиентам, продажи выросли на 3% — с виду победа. Но если приглядеться, окажется, что 90% из них купили бы и так, а деньги на скидку просто ушли в минус маржи. Обычная модель «кто купит» при точечных воздействиях — промо, скидках, ретеншн-механиках — регулярно приводит к одному и тому же: воздействие достается тем, кто и так сделал бы целевое действие. Проблема не в самом оффере, а в том, кому его дают.
Response-модель vs uplift-модель
Response-модель — это обычная модель бинарной классификации, с которой все и так работают: на вход признаки человека, на выходе вероятность целевого действия (купит / не купит). Она ничего не знает про воздействие — просто ранжирует людей по вероятности события.
Uplift-модель предсказывает другое — не вероятность события, а разницу в поведении человека от того, было воздействие или нет. Интересует не «кто совершит действие», а «кто совершит его именно из-за воздействия, а не сделал бы это и так».
Классическая рамка — 4 типа людей
➖ Persuadables (убеждаемые) — среагируют только если дать воздействие. Это и есть целевая аудитория.
➖ Sure things (уже решившие) — сделают целевое действие в любом случае, воздействие на них потрачено впустую.
➖ Lost causes (потерянные) — не сделают при любом раскладе, воздействие бесполезно.
➖ Sleeping dogs (спящие собаки) — воздействие их отпугивает или обесценивает то, что они и так планировали. Таким воздействие может вредить.
Response-модель хорошо ловит sure things (высокая вероятность отклика) и путает их с persuadables. Uplift-модель нужна, чтобы их развести.
Как построить проще всего — T-learner
Две отдельные модели одинаковой архитектуры:
➖ model target — обучена только на людях, получивших воздействие, предсказывает их результат
➖ model control — обучена только на людях без воздействия, предсказывает то же самое, но без него
Для любого человека считаем обе модели на его признаках и берем разницу — это оценка персонального причинного эффекта:
predicted_uplift = model_target(x) − model_control(x)
Условие, без которого это не работает: честная рандомизация в исходных данных. И это не только про одну волну — если модель учат на истории нескольких кампаний, важно, чтобы во всех волнах таргетинг был одинаково случайным, а сама аудитория и условия оффера не успели уехать слишком далеко. Иначе разница между моделями отражает не воздействие, а то, что волны изначально были разными.
Другие подходы, если хочется копнуть дальше
➖ S-learner — одна модель на всех данных, с признаком «было ли воздействие». Проще, но хуже ловит взаимодействие признаков с воздействием
➖ X-learner — модификация T-learner, лучше работает при сильно несбалансированных группах (например, 90/10)
➖ Uplift-деревья / causal forest — разбиения дерева строятся не по точности предсказания, а прямо по максимизации разницы между группами. Более нативный подход, но сложнее в реализации и интерпретации
Как проверять качество
Обычные метрики (R², accuracy) не работают — для конкретного человека нет одновременно факта «с воздействием» и факта «без воздействия», посчитать ошибку предсказания не на чем.
Стандартный подход — Qini-кривая (аналог ROC/lift-кривой для uplift-задач): делим людей на группы по предсказанному аплифту, внутри каждой группы сравниваем реальную разницу между теми, кто был в target, и теми, кто в control. Если модель работает — разница растет от группы с низким предсказанием к группе с высоким.
Где применять
➖ Промо и бонусы. Раздавать скидку не всем подряд, а тем, для кого она реально сдвинет решение о покупке
➖ Антиоттоковые механики. Не всем похожим на уходящих клиентов слать удерживающее предложение, а только тем, кого оно правда удержит — часть «уходящих» уйдет при любом предложении, часть осталась бы и так
➖ Апсейл и кредитные лимиты. Предлагать увеличение лимита или допродажу тем клиентам, для кого предложение станет решающим фактором, а не тем, кто купит и без него
➖ Частота коммуникаций. Не заваливать одних и тех же людей рассылками — для части аудитории лишний контакт не увеличивает отклик, а иногда снижает его
О чем нужно помнить еще
➖ Парадокс Симпсона при объединении нескольких волн теста с разным сплитом target/control — можно получить обратный знак эффекта на объединенных данных (подробнее — следующий пост)
➖ Повторяющиеся люди между волнами теста ломают предположение о независимости наблюдений при расчете ДИ (подробнее — пост про кластерный бутстрап)
➖ Целевая метрика должна считаться по всем, кому воздействие полагалось, включая тех, кто не среагировал — а не только среди отреагировавших, иначе можно получить обратный по знаку результат из-за смещения состава групп
❤️🔥 Подписывайтесь и поддержите канал бустом
↗️ Менторю и помогаю выйти на оффер
❓ Слышали ли вы по uplift модели?
@data_driven_bogdan
Разослали скидку 100 000 клиентам, продажи выросли на 3% — с виду победа. Но если приглядеться, окажется, что 90% из них купили бы и так, а деньги на скидку просто ушли в минус маржи. Обычная модель «кто купит» при точечных воздействиях — промо, скидках, ретеншн-механиках — регулярно приводит к одному и тому же: воздействие достается тем, кто и так сделал бы целевое действие. Проблема не в самом оффере, а в том, кому его дают.
Response-модель vs uplift-модель
Response-модель — это обычная модель бинарной классификации, с которой все и так работают: на вход признаки человека, на выходе вероятность целевого действия (купит / не купит). Она ничего не знает про воздействие — просто ранжирует людей по вероятности события.
Uplift-модель предсказывает другое — не вероятность события, а разницу в поведении человека от того, было воздействие или нет. Интересует не «кто совершит действие», а «кто совершит его именно из-за воздействия, а не сделал бы это и так».
Классическая рамка — 4 типа людей
Response-модель хорошо ловит sure things (высокая вероятность отклика) и путает их с persuadables. Uplift-модель нужна, чтобы их развести.
Как построить проще всего — T-learner
Две отдельные модели одинаковой архитектуры:
Для любого человека считаем обе модели на его признаках и берем разницу — это оценка персонального причинного эффекта:
predicted_uplift = model_target(x) − model_control(x)
Условие, без которого это не работает: честная рандомизация в исходных данных. И это не только про одну волну — если модель учат на истории нескольких кампаний, важно, чтобы во всех волнах таргетинг был одинаково случайным, а сама аудитория и условия оффера не успели уехать слишком далеко. Иначе разница между моделями отражает не воздействие, а то, что волны изначально были разными.
Другие подходы, если хочется копнуть дальше
Как проверять качество
Обычные метрики (R², accuracy) не работают — для конкретного человека нет одновременно факта «с воздействием» и факта «без воздействия», посчитать ошибку предсказания не на чем.
Стандартный подход — Qini-кривая (аналог ROC/lift-кривой для uplift-задач): делим людей на группы по предсказанному аплифту, внутри каждой группы сравниваем реальную разницу между теми, кто был в target, и теми, кто в control. Если модель работает — разница растет от группы с низким предсказанием к группе с высоким.
Где применять
О чем нужно помнить еще
@data_driven_bogdan
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5 3🔥2🤝1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2🔥2 1
Ваш доверительный интервал может врать, если люди повторяются в выборке
Обычно доверительный интервал для разницы между группами считают бутстрапом: много раз пересобирают выборку со случайным повторением и смотрят, как гуляет результат. Работает отлично, пока каждая строка - это отдельный независимый человек. А вот когда один и тот же человек сидит в данных несколько раз, начинаются сюрпризы.
Условный пример, цифры для иллюстрации. 10 000 человек, каждый попал в выборку по 3 раза, корреляция между строками одного человека 0,5. Бутстрап по строкам покажет интервал ±0,5 п.п. Честный, по людям, выйдет ±0,7 п.п. Эффект в 0,6 п.п. по первому расчету значим, по второму уже нет.
Откуда берется проблема
Типичный случай: несколько волн одного теста или повторные замеры одних и тех же людей. Один человек легко попадает в выборку 2-3 раза, например, участвовал в нескольких волнах. Обычный бутстрап пересэмплирует строки и считает их независимыми. Но строки одного человека связаны между собой: это не три случайных исхода, а один человек с одним набором привычек, которого просто записали несколько раз.
Чем это плохо
Интервал по строкам выходит уже, чем должен. Расчет думает, что данных больше и они разнообразнее, чем есть на самом деле. В статистике это называется псевдо-репликацией (pseudo-replication): неопределенность занижена, а уверенность в результате завышена.
Аналогия
Представьте, что вы меряете средний рост людей в комнате, но троих случайно измерили по 50 раз, а остальных по одному. Среднее уедет в сторону этих троих, а интервал без поправки покажет разброс куда уже, чем в реальной популяции.
Решение: кластерный бутстрап
Вместо строк пересэмплируем уникальных людей (кластеры) с возвращением, а в каждый ресемпл берем все строки выбранного человека целиком. Корреляция внутри человека сохраняется, и интервал честно показывает неопределенность.
Для средних есть путь попроще: сначала свернуть данные до одной строки на человека (среднее по человеку) и считать обычный бутстрап. Результат тот же или очень близкий, а объяснить и проверить такое проще. Кластерный бутстрап нужен, когда метрика сложнее среднего (отношение, квантиль) и до человека ее так легко не свернуть.
Когда стоит проверять
➖ Панельные данные: одни и те же люди измеряются несколько раз
➖ Несколько волн одного теста с пересекающейся аудиторией
➖ Любая кластерная структура: наблюдения сгруппированы по магазинам, регионам, командам
Насколько это важно на практике
Большая выборка тут сама по себе не спасает. Важны две вещи: сколько строк в среднем приходится на человека (m) и насколько строки одного человека похожи друг на друга (внутриклассовая корреляция ρ). Грубо оценить можно через design effect:
Честный интервал шире наивного примерно в √DEFF раз. При m = 3 и ρ = 0,5 это √2, то есть шире в 1,4 раза. Если людей с повторами мало или строки одного человека почти не связаны, разница будет небольшой. Если повторов много, она вполне может перевернуть вывод о значимости.
Так что проверяйте на своих данных, а не гадайте.
❤️🔥 Подписывайтесь и поддержите канал бустом
↗️ Менторю и помогаю выйти на оффер
❓ Проверяли когда-нибудь разницу между обычным и кластерным бутстрапом на своих данных?
@data_driven_bogdan
Обычно доверительный интервал для разницы между группами считают бутстрапом: много раз пересобирают выборку со случайным повторением и смотрят, как гуляет результат. Работает отлично, пока каждая строка - это отдельный независимый человек. А вот когда один и тот же человек сидит в данных несколько раз, начинаются сюрпризы.
Условный пример, цифры для иллюстрации. 10 000 человек, каждый попал в выборку по 3 раза, корреляция между строками одного человека 0,5. Бутстрап по строкам покажет интервал ±0,5 п.п. Честный, по людям, выйдет ±0,7 п.п. Эффект в 0,6 п.п. по первому расчету значим, по второму уже нет.
Откуда берется проблема
Типичный случай: несколько волн одного теста или повторные замеры одних и тех же людей. Один человек легко попадает в выборку 2-3 раза, например, участвовал в нескольких волнах. Обычный бутстрап пересэмплирует строки и считает их независимыми. Но строки одного человека связаны между собой: это не три случайных исхода, а один человек с одним набором привычек, которого просто записали несколько раз.
Чем это плохо
Интервал по строкам выходит уже, чем должен. Расчет думает, что данных больше и они разнообразнее, чем есть на самом деле. В статистике это называется псевдо-репликацией (pseudo-replication): неопределенность занижена, а уверенность в результате завышена.
Аналогия
Представьте, что вы меряете средний рост людей в комнате, но троих случайно измерили по 50 раз, а остальных по одному. Среднее уедет в сторону этих троих, а интервал без поправки покажет разброс куда уже, чем в реальной популяции.
Решение: кластерный бутстрап
Вместо строк пересэмплируем уникальных людей (кластеры) с возвращением, а в каждый ресемпл берем все строки выбранного человека целиком. Корреляция внутри человека сохраняется, и интервал честно показывает неопределенность.
Для средних есть путь попроще: сначала свернуть данные до одной строки на человека (среднее по человеку) и считать обычный бутстрап. Результат тот же или очень близкий, а объяснить и проверить такое проще. Кластерный бутстрап нужен, когда метрика сложнее среднего (отношение, квантиль) и до человека ее так легко не свернуть.
Когда стоит проверять
Насколько это важно на практике
Большая выборка тут сама по себе не спасает. Важны две вещи: сколько строк в среднем приходится на человека (m) и насколько строки одного человека похожи друг на друга (внутриклассовая корреляция ρ). Грубо оценить можно через design effect:
DEFF = 1 + (m − 1) × ρЧестный интервал шире наивного примерно в √DEFF раз. При m = 3 и ρ = 0,5 это √2, то есть шире в 1,4 раза. Если людей с повторами мало или строки одного человека почти не связаны, разница будет небольшой. Если повторов много, она вполне может перевернуть вывод о значимости.
Так что проверяйте на своих данных, а не гадайте.
@data_driven_bogdan
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5 3🔥2 2 1