Пока думал, с чего начать серию постов о трудностях прогноза спроса Q(P, др. факторы), коллеги из Самоката выпустили статью о своём прогнозе спроса
В основном рассказ про то, как заставить бустинги работать на шумных временных рядах. Из интересного:
- Доп. статистическая модель прогноза ошибки бустинга. Деревья плохо ловят тренды и иногда средние по товарам, поэтому подход оправдан
- Восстановление спроса с учётом остатков товара
- Прогноз новинок
Мой рекомендасьон к прочтению. Особенно если вы раньше тесно не работали с временными рядами)
В основном рассказ про то, как заставить бустинги работать на шумных временных рядах. Из интересного:
- Доп. статистическая модель прогноза ошибки бустинга. Деревья плохо ловят тренды и иногда средние по товарам, поэтому подход оправдан
- Восстановление спроса с учётом остатков товара
- Прогноз новинок
Мой рекомендасьон к прочтению. Особенно если вы раньше тесно не работали с временными рядами)
Хабр
Как построить прогноз спроса и не потерять голову
Какой ваш прогноз спроса? Всем привет! Представьте себе ситуацию: ваша уютная маленькая команда Data Science занимается прогнозированием спроса для пары десятков дарксторов с помощью какого-нибудь...
👍24🔥8🤯1
Прогноз спроса ч.2
Несмещенность эффекта цены
Итак, мы прогнозируем спрос в зависимости от цены Q(P). Для наглядности возьмем самую простую линейную модель:
Q(P) = c0 + c1 * P
Нам важна несмещенность коэффициента c1, чтобы корректно управлять ценой. Пожалуй, важнейший фактор, влияющий на несмещенность - пропущенные переменные
Есть даже красивая теорема о пропущенной переменной:
Если ты забыл добавить в модель фичу, которая влияет на таргет и коррелирует с ценой, то коэффициент c1 (~влияние цены) смещается
То есть, если в праздники растут скидки, и вы не добавили фичу на праздники - влияние цен учтено неверно:)
(!) Также если влияние цены нелинейно, и ты не добавил условно price**2 / не применил нелинейную модель, то коэффициент смещается 🥶
#pricing #timeseries
Несмещенность эффекта цены
Итак, мы прогнозируем спрос в зависимости от цены Q(P). Для наглядности возьмем самую простую линейную модель:
Q(P) = c0 + c1 * P
Нам важна несмещенность коэффициента c1, чтобы корректно управлять ценой. Пожалуй, важнейший фактор, влияющий на несмещенность - пропущенные переменные
Есть даже красивая теорема о пропущенной переменной:
Если ты забыл добавить в модель фичу, которая влияет на таргет и коррелирует с ценой, то коэффициент c1 (~влияние цены) смещается
То есть, если в праздники растут скидки, и вы не добавили фичу на праздники - влияние цен учтено неверно:)
(!) Также если влияние цены нелинейно, и ты не добавил условно price**2 / не применил нелинейную модель, то коэффициент смещается 🥶
#pricing #timeseries
👍12🔥5😐2
..и что делать?
Во-первых, учитывать другие фичи, которые коррелируют с ценами. То есть в случае линейной модели важно прогнозировать
Q(P) = f(P) + g(other features)
Я бы не рекомендовал использовать что-то сложнее:
Q(P) = f(P) + g(other features)
Q(P) = f(P) * g(other features)
Иначе потом будет крайне сложно решать оптимизационную задачу. Например, коллеги из Я.Маркета используют довольно сложные нейронки для функций f(P) и g(*). Но в конце эти функции просто суммируются и нормируются
А что ещё можно делать - расскажу в следующих постах 😉
Во-первых, учитывать другие фичи, которые коррелируют с ценами. То есть в случае линейной модели важно прогнозировать
Q(P) = f(P) + g(other features)
Я бы не рекомендовал использовать что-то сложнее:
Q(P) = f(P) + g(other features)
Q(P) = f(P) * g(other features)
Иначе потом будет крайне сложно решать оптимизационную задачу. Например, коллеги из Я.Маркета используют довольно сложные нейронки для функций f(P) и g(*). Но в конце эти функции просто суммируются и нормируются
А что ещё можно делать - расскажу в следующих постах 😉
Хабр
ML для оптимизации цен на основе эластичности по цене
English version Статья подготовлена для конференции Aha'22 и рассказывает про задачу вычисления оптимальных цен. Я в последнее время работал над этой задачей в Яндекс Маркете и попробовал выписать ряд...
👍14🔥4
Итоги года
2022 был очень напряжённым на события в мире. Много переживаний и саморефлексии. Что я понял за это время и во что это вылилось:
1. Стал "Head of ..." на 9 мес и вернулся обратно в "ML team lead"
Как оказалось, на уровне "Head of ..." вместо многоточия можно ставить что угодно: в основном, тут работа по построению команды, найму, росту людей в команде, общению с бизнесом. Поэтому условно не так важно Head of чего вы становитесь
Это был прикольный опыт (со стороны "менеджеров" бизнес, команда и вообще все выглядит иначе), но я все же хочу быть поближе именно к ML продуктам. Из этого последовал такой поинт
2. Переход в Яндекс.Лавку 🥖
В целом, критериев выбора работы я сформировал 3:
- Интересная и сложная ML / оптимизационная задача
- Большое влияние на бизнес
- Сильная команда
В Лавке все это было! Поэтому тут я занимаюсь как Team lead алгоритмами прогноза спроса, закупки товаров, и ценообразованием
3. Кажется стал digital nomad-ом
За год побывал в Киргизии, Армении, Грузии, Турции и на 2ух островах: Сахалине и Шри-Ланке. И даже покатал на борде недели 3 суммарно 🏂
Совмещать продуктивную работу и кучу путешествий можно - проверено ✔️
4. Запустил свой курс по А/В
Долго к этому шёл, и наконец первый поток курса завершен!) Смог рассказать кучу всего про бизнесовые моменты в АВ, но осознал, что многим интересны ещё и технические детали. В 2023 будет второй запуск, но уже в обновлённом формате - сейчас думаю над ним
..и в 2023 надеюсь мир вокруг меня станет постабильнее - смогу писать больше постов 😄
2022 был очень напряжённым на события в мире. Много переживаний и саморефлексии. Что я понял за это время и во что это вылилось:
1. Стал "Head of ..." на 9 мес и вернулся обратно в "ML team lead"
Как оказалось, на уровне "Head of ..." вместо многоточия можно ставить что угодно: в основном, тут работа по построению команды, найму, росту людей в команде, общению с бизнесом. Поэтому условно не так важно Head of чего вы становитесь
Это был прикольный опыт (со стороны "менеджеров" бизнес, команда и вообще все выглядит иначе), но я все же хочу быть поближе именно к ML продуктам. Из этого последовал такой поинт
2. Переход в Яндекс.Лавку 🥖
В целом, критериев выбора работы я сформировал 3:
- Интересная и сложная ML / оптимизационная задача
- Большое влияние на бизнес
- Сильная команда
В Лавке все это было! Поэтому тут я занимаюсь как Team lead алгоритмами прогноза спроса, закупки товаров, и ценообразованием
3. Кажется стал digital nomad-ом
За год побывал в Киргизии, Армении, Грузии, Турции и на 2ух островах: Сахалине и Шри-Ланке. И даже покатал на борде недели 3 суммарно 🏂
Совмещать продуктивную работу и кучу путешествий можно - проверено ✔️
4. Запустил свой курс по А/В
Долго к этому шёл, и наконец первый поток курса завершен!) Смог рассказать кучу всего про бизнесовые моменты в АВ, но осознал, что многим интересны ещё и технические детали. В 2023 будет второй запуск, но уже в обновлённом формате - сейчас думаю над ним
..и в 2023 надеюсь мир вокруг меня станет постабильнее - смогу писать больше постов 😄
🔥57👍22
Что тебя ждет при переходе Team Lead —> Head of ML
Вы просили в комментариях пост на эту тему - я делаю)
Если кратко в 3 пунктах:
- Позиция именно про людей = команду 💪
- Умей говорить “нет” так, чтобы не обижать людей
- Как сам все организуешь - так все и будет. А-ля “Делай нормально - нормально будет" 🧐
Дальше немного рандомных, но важных поинтов про работу с людьми, задачами и деньгами
Люди
Ты руководишь непосредственно team lead-ами (1-3 чел), а не дата саентистами (суммарно их до 25 чел). Если маркетинг говорит, что кто-то неверно сделал дешборд / модель странная / whatever, то нужно прийти к тим лиду, обсудить это с ним - а он сам уже поговорит с командой
Приходится давать негативный фидбек (если не ты, то кто?). А потом еще и придумывать на 1-1, как можно исправить проблемы
Приходится сравнивать людей между собой (привет, review) - лично мне это не очень нравилось
Если бизнес хочет от вас странных вещей, то ты должен им обьяснить, что не так и предложить альтернативу
Задачи
Внезапно задач а-ля “Сделай модель оттока” нет. Вместо этого есть боли бизнеса. “Кажется, мы тратим слишком много денег на привлечение новичков. Как нам растить клиентскую базу?”. В куче болей ищешь действительно важные (95% негативного фидбека - про крайние кейсы, которые в масштабах компании ни на что не влияют). И думаешь “что ML-ного делать?”, чтобы это исправить. А вот “как делать?” - решают скорее тим лиды и члены команд
Надо продавать ML идеи бизнесу. Это сложно. Нужно считать финансовый эффект от моделей: да, возможно ты откроешь эксель😱
Внезапно обнаруживаешь, что гениальные идеи изначально финансово убыточны
Вдруг понимаешь, что иногда хороший дашборд полезнее SOTA модели
Деньги
Бюджет на команду, новые ставки, закупка чего-то - теперь это к тебе)
Например, бюджет на команду Х, суммарно все хотят повышений зп до 1.5 Х - тебе нужно что-то с этим делать 🤔
Нужно много общаться про ревью и про то, кто что хочет от него
Надо показывать денежный эффект от работы команды (не ROC AUC +3%, и даже не +2% конверсии), и убеждать бизнес, что именно вы его принесли. А/В тут здорово помогают! Ах да.. помогают, если ты обьяснил бизнесу, что это такое:)
Вы просили в комментариях пост на эту тему - я делаю)
Если кратко в 3 пунктах:
- Позиция именно про людей = команду 💪
- Умей говорить “нет” так, чтобы не обижать людей
- Как сам все организуешь - так все и будет. А-ля “Делай нормально - нормально будет" 🧐
Дальше немного рандомных, но важных поинтов про работу с людьми, задачами и деньгами
Люди
Ты руководишь непосредственно team lead-ами (1-3 чел), а не дата саентистами (суммарно их до 25 чел). Если маркетинг говорит, что кто-то неверно сделал дешборд / модель странная / whatever, то нужно прийти к тим лиду, обсудить это с ним - а он сам уже поговорит с командой
Приходится давать негативный фидбек (если не ты, то кто?). А потом еще и придумывать на 1-1, как можно исправить проблемы
Приходится сравнивать людей между собой (привет, review) - лично мне это не очень нравилось
Если бизнес хочет от вас странных вещей, то ты должен им обьяснить, что не так и предложить альтернативу
Задачи
Внезапно задач а-ля “Сделай модель оттока” нет. Вместо этого есть боли бизнеса. “Кажется, мы тратим слишком много денег на привлечение новичков. Как нам растить клиентскую базу?”. В куче болей ищешь действительно важные (95% негативного фидбека - про крайние кейсы, которые в масштабах компании ни на что не влияют). И думаешь “что ML-ного делать?”, чтобы это исправить. А вот “как делать?” - решают скорее тим лиды и члены команд
Надо продавать ML идеи бизнесу. Это сложно. Нужно считать финансовый эффект от моделей: да, возможно ты откроешь эксель😱
Внезапно обнаруживаешь, что гениальные идеи изначально финансово убыточны
Вдруг понимаешь, что иногда хороший дашборд полезнее SOTA модели
Деньги
Бюджет на команду, новые ставки, закупка чего-то - теперь это к тебе)
Например, бюджет на команду Х, суммарно все хотят повышений зп до 1.5 Х - тебе нужно что-то с этим делать 🤔
Нужно много общаться про ревью и про то, кто что хочет от него
Надо показывать денежный эффект от работы команды (не ROC AUC +3%, и даже не +2% конверсии), и убеждать бизнес, что именно вы его принесли. А/В тут здорово помогают! Ах да.. помогают, если ты обьяснил бизнесу, что это такое:)
🔥42👍13🤔3
А ты сам бы..
Anonymous Poll
36%
Рос как Senior (individual contributor)
15%
Остановился на Team Lead
49%
Рос до Head и выше
Данные ~ сила влияния в компании
Недавно осознал, что возможность работать с данными даёт очень много власти (да-да!) внутри компании
Как:
1. Создаёшь 1 полезный дашборд
2. Ставишь регулярно встречу, где аналитики и бизнес смотрят на дэш
3. На этой встрече рассказываешь инсайты из данных дэша, проблемы и тд
4. По результатам встречи ставишь задачи другим командам на исправление проблем (разработке, операционной команде, ...)
Profit - вы стали частично влиять на другие команды 😈
Недавно осознал, что возможность работать с данными даёт очень много власти (да-да!) внутри компании
Как:
1. Создаёшь 1 полезный дашборд
2. Ставишь регулярно встречу, где аналитики и бизнес смотрят на дэш
3. На этой встрече рассказываешь инсайты из данных дэша, проблемы и тд
4. По результатам встречи ставишь задачи другим командам на исправление проблем (разработке, операционной команде, ...)
Profit - вы стали частично влиять на другие команды 😈
👍30😱8🔥4🥴3
Про цели на уровне всего бизнеса в конкретных метриках
Супер важно до старта любых проектов договориться, чего вы хотите на уровне всего бизнеса. Из-за целей может меняться набор проектов (ратсите заказы - нужны проекты с промо, растите маржинальность - нужно что-то совем иное) или их настройки (повышать / понижать цены в динамическом прайсинге)
Обычно все метрики крутятся вокруг заказов в шт, выручки в руб, маржи в руб и маржинальности в %. Я определяю, хороша ли целевая метрика тем, насколько легко ее “хакнуть”. Пара спорных примеров целей бизнеса (легко хакнуть)
1) Максимизируем заказы
Спорно, потому что скорее всего это приведет к сильному падению маржи и маржинальности
Как хакаем: Даем скидку 90% на все - перевыполняем любые мыслимые KPI, получаем кучу бонусов (если после такого маневра у компании останутся хоть какие-то деньги)
Иногда рабочая стратегия, если сейчас вы захватываете долю рынка, а потом резко сможете стать прибыльными - выиграете за счет масштаба
2) Максимизируем выручку
Лучше, но хакается почти также: даем не такую агрессивную скидку, чтобы рост заказов был > падения цены (выручка растет)
3) Максимизируем маржу
Пам-пам, тоже не очень хорошая метрика
Хакнуть сложнее. Но представьте, что у вас был бизнес с маржинальностью 20% и маржой в рублях = 1 млрд. Можно сделать маржинальность 1% и маржой в рублях 1.1 млрд. Номинально маржа в руб выросла, но бизнес стал сильно менее выгодным по маржинальности в %. +любое внешнее колебание (выросли ставки по кредиту бизнесу, зп рабочих, закупочные цены) и выши +1.1 млрд стремительно превратятся в условно -3 млрд
4) Максимизируем маржу/выручку с ограничением на маржинальность
Вот это уже годится!
Но тоже есть пара нюансов (опрос ниже)
И можно еще лучше (следующий пост)
Супер важно до старта любых проектов договориться, чего вы хотите на уровне всего бизнеса. Из-за целей может меняться набор проектов (ратсите заказы - нужны проекты с промо, растите маржинальность - нужно что-то совем иное) или их настройки (повышать / понижать цены в динамическом прайсинге)
Обычно все метрики крутятся вокруг заказов в шт, выручки в руб, маржи в руб и маржинальности в %. Я определяю, хороша ли целевая метрика тем, насколько легко ее “хакнуть”. Пара спорных примеров целей бизнеса (легко хакнуть)
1) Максимизируем заказы
Спорно, потому что скорее всего это приведет к сильному падению маржи и маржинальности
Как хакаем: Даем скидку 90% на все - перевыполняем любые мыслимые KPI
Иногда рабочая стратегия, если сейчас вы захватываете долю рынка, а потом резко сможете стать прибыльными - выиграете за счет масштаба
2) Максимизируем выручку
Лучше, но хакается почти также: даем не такую агрессивную скидку, чтобы рост заказов был > падения цены (выручка растет)
3) Максимизируем маржу
Пам-пам, тоже не очень хорошая метрика
Хакнуть сложнее. Но представьте, что у вас был бизнес с маржинальностью 20% и маржой в рублях = 1 млрд. Можно сделать маржинальность 1% и маржой в рублях 1.1 млрд. Номинально маржа в руб выросла, но бизнес стал сильно менее выгодным по маржинальности в %. +любое внешнее колебание (выросли ставки по кредиту бизнесу, зп рабочих, закупочные цены) и выши +1.1 млрд стремительно превратятся в условно -3 млрд
4) Максимизируем маржу/выручку с ограничением на маржинальность
Вот это уже годится!
Но тоже есть пара нюансов (опрос ниже)
И можно еще лучше (следующий пост)
👍11🥴5🗿4🔥3
Какая из точек (1, 2, 3) соответствует:
а) максимум маржи в руб
б) максимум маржинальности в % (=маржа/выручка) в) максимум выручки при ограничении, что маржа в % не падает г) максимум выручки при ограничении, что маржа на заказ (=маржа / заказы) не падет
а) максимум маржи в руб
б) максимум маржинальности в % (=маржа/выручка) в) максимум выручки при ограничении, что маржа в % не падает г) максимум выручки при ограничении, что маржа на заказ (=маржа / заказы) не падет
Anonymous Poll
30%
1 - а, 2 - б, 3 - в, г
16%
1 - б, 2 - б, в 3 - г
35%
1 - а, б 2- г 3 - в
15%
1 - а, б 2 - г 3 - в
4%
1 - а, в 2 - в 3 - г
Верный ответ на опрос выше - 3ий и 4ый
1) Точка 1 - а, б
В ней маржа +15%, выручка +0%
поэтому это точка максимума как маржи в руб, так и маржи в %
(!) Прелесть в том, что это кажется идеальным вариантом, но график вам немножко привирает 😈
Надо посмотреть на то, какой будет прирост заказов в этой точке. А он будет сильно отрицательным (пересечение продолжения оранжевой кривой и горизонтали от точки 3 где-то в отрицательной области оси Х)!
Возможно вы вырастите маржу на 15%, но снизите заказы условно в 2 раза (~потеряете кучу клиентов)
2) Точка 3 - в
Изменение маржи, % = маржа * (1 + delta_margin) / (выручка *(1 + delta_revenue)) = (маржа / выручка) * (1 + delta_margin) / (1 + delta_revenue)
чтобы маржа в % не менялось надо имет delta_margin = delta_revenue (как раз верно на диагонали)
Максимизация выручки - движение вправо вдоль оси Х. Максимальный сдвиг вправо, но не ниже диагонали дает нам точку
3 - в: максимум выручки при ограничении, что маржа в % не падает
3) Точка 2 - г
Вот тут интереснее
Ограничение, что маржа в руб не падает соответствует пересечению диагонали и оранжевой кривой (точка 4)
Чтобы его сохранить, но мыслить в размене маржа-выручка, нужно провести огранчение по горизонтали - мы не можем падать ниже горизонтали, двигаясь по синей кривой - это нам дает точку 2
Обратите внимание, и в точке 2, и в точке 3 мы максимизируем выручку при огрничении на маржинальность. Но оказывается, маржинальность = маржа / заказ накладывает сильно более жесткое ограничение (получаем прирост маржи в руб около 5% вместо 10%), чем маржа = маржа / выручка
1) Точка 1 - а, б
В ней маржа +15%, выручка +0%
поэтому это точка максимума как маржи в руб, так и маржи в %
(!) Прелесть в том, что это кажется идеальным вариантом, но график вам немножко привирает 😈
Надо посмотреть на то, какой будет прирост заказов в этой точке. А он будет сильно отрицательным (пересечение продолжения оранжевой кривой и горизонтали от точки 3 где-то в отрицательной области оси Х)!
Возможно вы вырастите маржу на 15%, но снизите заказы условно в 2 раза (~потеряете кучу клиентов)
2) Точка 3 - в
Изменение маржи, % = маржа * (1 + delta_margin) / (выручка *(1 + delta_revenue)) = (маржа / выручка) * (1 + delta_margin) / (1 + delta_revenue)
чтобы маржа в % не менялось надо имет delta_margin = delta_revenue (как раз верно на диагонали)
Максимизация выручки - движение вправо вдоль оси Х. Максимальный сдвиг вправо, но не ниже диагонали дает нам точку
3 - в: максимум выручки при ограничении, что маржа в % не падает
3) Точка 2 - г
Вот тут интереснее
Ограничение, что маржа в руб не падает соответствует пересечению диагонали и оранжевой кривой (точка 4)
Чтобы его сохранить, но мыслить в размене маржа-выручка, нужно провести огранчение по горизонтали - мы не можем падать ниже горизонтали, двигаясь по синей кривой - это нам дает точку 2
Обратите внимание, и в точке 2, и в точке 3 мы максимизируем выручку при огрничении на маржинальность. Но оказывается, маржинальность = маржа / заказ накладывает сильно более жесткое ограничение (получаем прирост маржи в руб около 5% вместо 10%), чем маржа = маржа / выручка
🔥10🤔3👍2🤯2🥴1
Последний душный пост в серии или лучшая Цель = размен метрик
Какие минусы max выручка, маржинальность >= Х%:
1) Не позволит вам сильно вырастить выручку
max выручка = двигаемся вправо по синей кривой;
маржинальность >= Х% = не ниже диагонали
—> мы должны выбирать точку на пересечении диагонали и синей кривой 🤔
Единственный способ дальше улучшать выручку - растить маржу в руб сильнее, чем выручку. Просто скидками / маркетингом / минорными улучшениями продукта не обойтись. Нужно делать качественные улучшения (новый алгоритм прайсинга условно) и сдвигать синюю кривую вверх
2) Переход из точки А в точку В дает увеличение прироста маржи 5 —> 10% (+5 пп), а падение выручки всего c 5 до 4% (-1 пп) 📈
То есть мы размениваем 1 пп выручки на 5 пп маржи - неплохо, да? Но с текущими целевыми метриками этого сделать нельзя
Цель = допустимый размен метрик
Поэтому в идеале ставить цель в допустимых разменах метрик. Например: готовы менять -1 пп выручки на +3 пп маржи
Это дает касательную к графику с наклоном 1/3 —> выбираем точку В
Можно эту цель дополнительно ограничить условием ”маржинальность в % не падает”
Космические плюсы этого подхода:
- Легко балансировать метрики. Причем сколько угодно штук
- Не уходите в крайность вроде max Маржа, руб (помните кейс в посте выше, где маржа в руб растет на 10%, а маржинальность падет с 20% до 1%?)
- Просто аккуратно задаете вопросы бизнесу “На сколько % выручки мы готовы поменять 1% маржи”? Поначалу никто не будет хотеть вам отвечать (потому что именно это в итоге определяет цель компании, а определить ее сложно), но если вы будете настойчивыми, то оно того стоит!
Бонус для тех, кто еще не устал от душности в постах:
- Видео с теорией про то, как строятся кривые и находятся точки оптимума. Много формул, графиков, но тема разбирается от и до
P.S. Удивительно, но я не смог найти ни одного короткого и простого обьяснения кривых размена маржа-выручка или маржа-заказы 👀
Видимо, буду сам писать пост на Хабр про них
Какие минусы max выручка, маржинальность >= Х%:
1) Не позволит вам сильно вырастить выручку
max выручка = двигаемся вправо по синей кривой;
маржинальность >= Х% = не ниже диагонали
—> мы должны выбирать точку на пересечении диагонали и синей кривой 🤔
Единственный способ дальше улучшать выручку - растить маржу в руб сильнее, чем выручку. Просто скидками / маркетингом / минорными улучшениями продукта не обойтись. Нужно делать качественные улучшения (новый алгоритм прайсинга условно) и сдвигать синюю кривую вверх
2) Переход из точки А в точку В дает увеличение прироста маржи 5 —> 10% (+5 пп), а падение выручки всего c 5 до 4% (-1 пп) 📈
То есть мы размениваем 1 пп выручки на 5 пп маржи - неплохо, да? Но с текущими целевыми метриками этого сделать нельзя
Цель = допустимый размен метрик
Поэтому в идеале ставить цель в допустимых разменах метрик. Например: готовы менять -1 пп выручки на +3 пп маржи
Это дает касательную к графику с наклоном 1/3 —> выбираем точку В
Можно эту цель дополнительно ограничить условием ”маржинальность в % не падает”
Космические плюсы этого подхода:
- Легко балансировать метрики. Причем сколько угодно штук
- Не уходите в крайность вроде max Маржа, руб (помните кейс в посте выше, где маржа в руб растет на 10%, а маржинальность падет с 20% до 1%?)
- Просто аккуратно задаете вопросы бизнесу “На сколько % выручки мы готовы поменять 1% маржи”? Поначалу никто не будет хотеть вам отвечать (потому что именно это в итоге определяет цель компании, а определить ее сложно), но если вы будете настойчивыми, то оно того стоит!
Бонус для тех, кто еще не устал от душности в постах:
- Видео с теорией про то, как строятся кривые и находятся точки оптимума. Много формул, графиков, но тема разбирается от и до
P.S. Удивительно, но я не смог найти ни одного короткого и простого обьяснения кривых размена маржа-выручка или маржа-заказы 👀
Видимо, буду сам писать пост на Хабр про них
🤔11👍9🔥1🥴1
Недавно во Вьетнаме встретил человека, который не умеет читать на родном языке - шок
Но еще больший шок, когда data-people плохо знают свой родной язык - метрики 😱
Поэтому с понедельника начнём разбирать, как выглядят в реальном мире разные концепции метрик: воронка конверсий, юнит экономика и PnL
Но еще больший шок, когда data-people плохо знают свой родной язык - метрики 😱
Поэтому с понедельника начнём разбирать, как выглядят в реальном мире разные концепции метрик: воронка конверсий, юнит экономика и PnL
👍36🔥18
Воронка конверсий - идея
К нам на сайт / в приложение приходят X пользователей в неделю
30% из них кликают на карточку товара = 0.3Х
Из этих 30% аж половина (50%) жмет “добавить в корзину” = 0.3 * 0.5X
Ну а реально оплачивают из нажавших всего 10% = 0.3 * 0.5 * 0.1X = 0.015 Х
💡 Базовых идей в воронке конверсий 3
1. Заказы = Трафик * конверсия из захода в приложение в заказ
2. Конверсия из захода в приложение в заказ (CR appstart-order) раскладывается на произведение поэтапных конверсий:
CR appstart-order = CR appstart-item click * CR item click - add to cart * CR add to cart - order
3. Мы можем работать над отдельными этапами воронки. Если улучшаем конверсию на одном этапе и не снижаем конверсию на других этапах + не влияем на трафик, то мы растим заказы. Вот про эту идею часто забывают 🥲. Разберем ее детальнее завтра
Зачем такая концепция нужна?
1. Определить, на каком этапе пути пользователя есть проблемы
В кейсе выше CR appstart-order = 1.5% (0.015 Х)
Кажется, можно лучше (спойлер: не всегда). Тут выглядит проблемной конверсия из добавления в корзину в оплату (CR add to cart - order = 10%)
Тут уже можно дальше закапываться и смотреть, что не так: оплата картой не работает? Юзер добавил товар в корзину, а при оплате видит, что его нет в наличии? Доставка стоит 100500 руб?
2. Упростить понимание бизнеса:
Сравните запрос: “Что-то у нас мало заказов - что делать?” и “Давайте посмотрим, какой этап воронки конверсий у нас проседает”
3. Ускорить ваши А/В 😇
Дисперсия поэтапных конверсий (того же CR add to cart - order) обычно кратно ниже дисперсии общей конверсии (CR appstart-order) и тем более заказов
Поэтому для роста условно “CR add to cart - order” на 1 пп нужно в разы меньше наблюдений, чем для роста на 1 пп “CR appstart-order”. На есть нюансы из-за базовой идеи №3
К нам на сайт / в приложение приходят X пользователей в неделю
30% из них кликают на карточку товара = 0.3Х
Из этих 30% аж половина (50%) жмет “добавить в корзину” = 0.3 * 0.5X
Ну а реально оплачивают из нажавших всего 10% = 0.3 * 0.5 * 0.1X = 0.015 Х
💡 Базовых идей в воронке конверсий 3
1. Заказы = Трафик * конверсия из захода в приложение в заказ
2. Конверсия из захода в приложение в заказ (CR appstart-order) раскладывается на произведение поэтапных конверсий:
CR appstart-order = CR appstart-item click * CR item click - add to cart * CR add to cart - order
3. Мы можем работать над отдельными этапами воронки. Если улучшаем конверсию на одном этапе и не снижаем конверсию на других этапах + не влияем на трафик, то мы растим заказы. Вот про эту идею часто забывают 🥲. Разберем ее детальнее завтра
Зачем такая концепция нужна?
1. Определить, на каком этапе пути пользователя есть проблемы
В кейсе выше CR appstart-order = 1.5% (0.015 Х)
Кажется, можно лучше (спойлер: не всегда). Тут выглядит проблемной конверсия из добавления в корзину в оплату (CR add to cart - order = 10%)
Тут уже можно дальше закапываться и смотреть, что не так: оплата картой не работает? Юзер добавил товар в корзину, а при оплате видит, что его нет в наличии? Доставка стоит 100500 руб?
2. Упростить понимание бизнеса:
Сравните запрос: “Что-то у нас мало заказов - что делать?” и “Давайте посмотрим, какой этап воронки конверсий у нас проседает”
3. Ускорить ваши А/В 😇
Дисперсия поэтапных конверсий (того же CR add to cart - order) обычно кратно ниже дисперсии общей конверсии (CR appstart-order) и тем более заказов
Поэтому для роста условно “CR add to cart - order” на 1 пп нужно в разы меньше наблюдений, чем для роста на 1 пп “CR appstart-order”. На есть нюансы из-за базовой идеи №3
👍11🫡6🔥5
Нюансы воронки конверсий
Как и писал выше,
Мы можем работать над отдельными этапами воронки. Если улучшаем конверсию на одном этапе и не снижаем конверсию на других этапах + не влияем на трафик, то мы растим заказы
Представьте, что вы решили добавить на главной странице огромный баннер “Скидка 90% на все по промокоду DISCO”. Клиенты радостно выбирают товары, добавляют в корзину, собираются оплатить и тут.. не видят поля, куда ввести промокод. Что происходит с точки зрения метрик:
- CR app start - item click — растет
- СR item click - add to cart — растет
- СR add to cart - order — падает
- Общая конверсия CR appstart-order — скорее всего не меняется
По идее баннер размещен на главной странице, поэтому влияет в первую очередь на CR app start - item click. Если аналитик не подумал посмотреть в А/В остальные метрики, то он мог бы решить, что фича отличная, а это не так!
———————
Пример выше немного вымышленный, …хотя посмотрите на главные страницы некоторых приложений 😅
Но вот вам менее очевидные кейсы из реальной жизни:
- Убрали принудительную регистрацию при старте приложения. Нужно регистрироваться только при оформлении заказа
- Стали показывать стоимость доставки не только на корзине, но на каждом этапе воронки
- Добавляем раздел “Избранное” на маркетплейсе машин
- Добавляем фичу “Подписаться на скидки на данный товар”
Можете подумать, как себя поведут разные конверсии в этих кейсах. Ну а разбор будет уже завтра 👀
Как и писал выше,
Мы можем работать над отдельными этапами воронки. Если улучшаем конверсию на одном этапе и не снижаем конверсию на других этапах + не влияем на трафик, то мы растим заказы
Представьте, что вы решили добавить на главной странице огромный баннер “Скидка 90% на все по промокоду DISCO”. Клиенты радостно выбирают товары, добавляют в корзину, собираются оплатить и тут.. не видят поля, куда ввести промокод. Что происходит с точки зрения метрик:
- CR app start - item click — растет
- СR item click - add to cart — растет
- СR add to cart - order — падает
- Общая конверсия CR appstart-order — скорее всего не меняется
По идее баннер размещен на главной странице, поэтому влияет в первую очередь на CR app start - item click. Если аналитик не подумал посмотреть в А/В остальные метрики, то он мог бы решить, что фича отличная, а это не так!
———————
Пример выше немного вымышленный, …хотя посмотрите на главные страницы некоторых приложений 😅
Но вот вам менее очевидные кейсы из реальной жизни:
- Убрали принудительную регистрацию при старте приложения. Нужно регистрироваться только при оформлении заказа
- Стали показывать стоимость доставки не только на корзине, но на каждом этапе воронки
- Добавляем раздел “Избранное” на маркетплейсе машин
- Добавляем фичу “Подписаться на скидки на данный товар”
Можете подумать, как себя поведут разные конверсии в этих кейсах. Ну а разбор будет уже завтра 👀
👍9🔥6🤡2💘1
Разбор кейсов с конверсиями случился не вчера, а сегодня)
Про влияние на другие этапы конвесрий, как эти конверсии считать и влияние на траффик
1. Убрали принудительную регистрацию при старте приложения. Нужно регистрироваться только при оформлении заказа
- Растим CR app start - item click, тк убрали барьер новичкам на первом шаге
- Почти наверняка роняем CR add to cart - order, тк новичкам теперь придется тут проходить регистрацию - не все захотят и отвалятся
- CR item click - add to cart неочевидно, но возможно немножко уроним 🥲 Тк на этом этапе стало больше новичков, котоыре еще не особо знакомы с приложением и вообще не особо уверены, нужо ли оно им
В итоге, надо конечно же смореть на общую конверсию CR app start - order
Но ее очень сложно прокрасить. Тут кейс с регистрацией (актуально только для новичка). Поэтому можно смотреть CR app start - order по новичкам. Она будет скорее всего более чувствительной в АВ 👍
Второй кейс очень похож на первый
Call-to-action: когда можете повлиять на другие этапы воронки, то смотрите в первую очередь на общую конверсию!
Про влияние на другие этапы конвесрий, как эти конверсии считать и влияние на траффик
1. Убрали принудительную регистрацию при старте приложения. Нужно регистрироваться только при оформлении заказа
- Растим CR app start - item click, тк убрали барьер новичкам на первом шаге
- Почти наверняка роняем CR add to cart - order, тк новичкам теперь придется тут проходить регистрацию - не все захотят и отвалятся
- CR item click - add to cart неочевидно, но возможно немножко уроним 🥲 Тк на этом этапе стало больше новичков, котоыре еще не особо знакомы с приложением и вообще не особо уверены, нужо ли оно им
В итоге, надо конечно же смореть на общую конверсию CR app start - order
Но ее очень сложно прокрасить. Тут кейс с регистрацией (актуально только для новичка). Поэтому можно смотреть CR app start - order по новичкам. Она будет скорее всего более чувствительной в АВ 👍
Второй кейс очень похож на первый
Call-to-action: когда можете повлиять на другие этапы воронки, то смотрите в первую очередь на общую конверсию!
👍9😁1🤡1💘1
2. Добавляем раздел “Избранное” на маркетплейсе машин
Покупка машины - дело довольно редкое для обычного пользователя. Поэтому тут я бы считал конверсию не по сессиям (у юзера 10 сессий, в 3 совершил покупку, CR = 3/10), а бинарно с окном, скажем, в месяц. То есть 0/1, купил ли машину чере змесяц после первого App-start
Если будете использовать не бинарную общую конверсию, а другую - скорее всего могут получиться странноватые выводы 🥶
При этом для пошаговых конверсий, например CR app start - item click конверсию по сессиям использовать вполне ОК
В этом кейсе, при использовании удачных конверсий
- CR app start - item click (по сессиям) вероятно немножко вырастет или не изменится. Потому что юзер может чуть чаще возвращаться в приложение, чтобы сравнить условно новинки со своим избранным
- CR item click - add to cart (0/1) вероятно, вырастет. Пользователь, долго выбирая на сайте, теперь не забывают свои старые выборы, а добавляет их в ”Избранное”
Важный момент: CR item click - add to cart (по сессиям) может упасть. Если число item-click вырастет, а число add to cart - нет (или вырастет меньше)
Call-to-action: Будьте акуратны в выборе конверсий. В случае редких событий лучше считать бинарную конверсию 0/1, а не по сессиям (купил в 3 сессиях из 10)
3. Добавляем фичу “Подписаться на скидки на данный товар”
Вероятнее всего это увеличит трафик (кол-во сессий, app start). И возможно даже и вырастит, но слабее кол-во item click и order
Поэтому на сессиянных конверсиях вы можете увидеть падение всех этапов воронки и даже общей CR app start - order
но тк траффик растет, то кол-во заказов растет!
orders = кол-во App start * CR app start - order
Call-to-action: Думайте, не влияете ли вы экспериментом на траффик
Note: в кейсе со сидками не забудьте и про денежные метрики) О них - в следующих постах о юнит экономике и PnL
Покупка машины - дело довольно редкое для обычного пользователя. Поэтому тут я бы считал конверсию не по сессиям (у юзера 10 сессий, в 3 совершил покупку, CR = 3/10), а бинарно с окном, скажем, в месяц. То есть 0/1, купил ли машину чере змесяц после первого App-start
Если будете использовать не бинарную общую конверсию, а другую - скорее всего могут получиться странноватые выводы 🥶
При этом для пошаговых конверсий, например CR app start - item click конверсию по сессиям использовать вполне ОК
В этом кейсе, при использовании удачных конверсий
- CR app start - item click (по сессиям) вероятно немножко вырастет или не изменится. Потому что юзер может чуть чаще возвращаться в приложение, чтобы сравнить условно новинки со своим избранным
- CR item click - add to cart (0/1) вероятно, вырастет. Пользователь, долго выбирая на сайте, теперь не забывают свои старые выборы, а добавляет их в ”Избранное”
Важный момент: CR item click - add to cart (по сессиям) может упасть. Если число item-click вырастет, а число add to cart - нет (или вырастет меньше)
Call-to-action: Будьте акуратны в выборе конверсий. В случае редких событий лучше считать бинарную конверсию 0/1, а не по сессиям (купил в 3 сессиях из 10)
3. Добавляем фичу “Подписаться на скидки на данный товар”
Вероятнее всего это увеличит трафик (кол-во сессий, app start). И возможно даже и вырастит, но слабее кол-во item click и order
Поэтому на сессиянных конверсиях вы можете увидеть падение всех этапов воронки и даже общей CR app start - order
но тк траффик растет, то кол-во заказов растет!
orders = кол-во App start * CR app start - order
Call-to-action: Думайте, не влияете ли вы экспериментом на траффик
Note: в кейсе со сидками не забудьте и про денежные метрики) О них - в следующих постах о юнит экономике и PnL
👍12🔥3❤1🤡1💘1
Нас уже почти 2к 🚀
Кажется, пора еще раз всем представиться и завести наконец хорошую навигацию по каналу
Кажется, пора еще раз всем представиться и завести наконец хорошую навигацию по каналу
🔥17👍5💘2
➡️ Навигация по каналу
На связи Ваня Максимов @Ivan_maksimov - ML team lead в Яндекс.Лавке, 7+ лет в DS
Забустить канал, чтобы я публиковал больше сторис, можно по ссылке 😄
Пишу алгоритмы, чтобы ваш любимый миндальный круассан всегда был в наличии и по хорошей цене 😇
Если чуть серьезнее, то делаю автозаказ товаров и ценообразование в Лавке
А еще увлекаюсь Recsys и А/В. Построил с нуля перс рекомендации и АВ платформу в Delivery Club
На канале пишу о том, как преодолеть путь от ML модели до реального Value для бизнеса. И какие грабли я собрал на этом пути
👍 Самые залайканные / обсуждаемые посты
- Серия про оптимизацию цен на товары
- Что тебя ждет при переходе team lead —> head of ML
- 13 способов ускорить АВ тест или “не CUPED-ом единым”
- Лучше модель с ROC AUC 50% или 85%? Все не так очевидно
- Серия постов о метриках регрессии: от RMSE до WAPE и SMAPE
- Отсортируй товары “по популярности” - делов на 30 минут! Стой, а почему 3 спринта?
- Какая трансформация фичи влияет на перформанс CatBoost? Спойлер: log(x) - влияет!
Популярные хэштеги
#ab, #metrics, #recsys, #timeseries, #pricing
💡Написать мне: @Ivan_maksimov
Например, вы можете обсудить свой DS-кейс, позвать рассказать что-то интересное на конференции или в вашей компании, записаться на консультацию по data science
На связи Ваня Максимов @Ivan_maksimov - ML team lead в Яндекс.Лавке, 7+ лет в DS
Забустить канал, чтобы я публиковал больше сторис, можно по ссылке 😄
Пишу алгоритмы, чтобы ваш любимый миндальный круассан всегда был в наличии и по хорошей цене 😇
Если чуть серьезнее, то делаю автозаказ товаров и ценообразование в Лавке
А еще увлекаюсь Recsys и А/В. Построил с нуля перс рекомендации и АВ платформу в Delivery Club
На канале пишу о том, как преодолеть путь от ML модели до реального Value для бизнеса. И какие грабли я собрал на этом пути
👍 Самые залайканные / обсуждаемые посты
- Серия про оптимизацию цен на товары
- Что тебя ждет при переходе team lead —> head of ML
- 13 способов ускорить АВ тест или “не CUPED-ом единым”
- Лучше модель с ROC AUC 50% или 85%? Все не так очевидно
- Серия постов о метриках регрессии: от RMSE до WAPE и SMAPE
- Отсортируй товары “по популярности” - делов на 30 минут! Стой, а почему 3 спринта?
- Какая трансформация фичи влияет на перформанс CatBoost? Спойлер: log(x) - влияет!
Популярные хэштеги
#ab, #metrics, #recsys, #timeseries, #pricing
💡Написать мне: @Ivan_maksimov
Например, вы можете обсудить свой DS-кейс, позвать рассказать что-то интересное на конференции или в вашей компании, записаться на консультацию по data science
👍39🔥24🤯4❤3🗿3
Топ-5 граблей Юнит Экономики
…и при чем тут воронка конверсий
Юзер за время пользования приложением должен приносить больше денег (LTV - LifeTime Value), чем потратили на его привлечение (CAC - Customer Acquisition Cost)
UE = LTV - CAC > 0
Если так, то мы часть избыточно заработанных денег (UE > 0) тратим на привлечение новых пользователей —> Они тоже приносят UE > 0 —> повторяем этот цикл и получаем стабильный рост компании
Ну а дальше начинаем детализировать нашу формулу
UE = ARPU * LifeTime - CAC
➡️ UE = (ARPPU * Conversion) * Lifetime - CAC
ARPU - Average Revenue Per User за какой-то период. Обычно 1 или 3 мес
ARPPU - Average Revenue Per _Paying_ User за какой-то период. Обычно 1 или 3 мес
Conversion - конверсия из захода в приложение в первую покупку
LifeTime - среднее время жизни пользователя в мес
CAC - Customer Acquisition Cost
Вокруг улучшения этих 4 составляющих крутится вся продуктовая работа и куча мифов. Развеять которые поможет иногда не такая уж простая аналитика (интегралы для кривой ретеншена, ML-модели LTV и оттока и тп)
Ну хоть с первой составляющей, Conversion, уже все понятно по прошлому посту …или нет?🙃
…и при чем тут воронка конверсий
Юзер за время пользования приложением должен приносить больше денег (LTV - LifeTime Value), чем потратили на его привлечение (CAC - Customer Acquisition Cost)
UE = LTV - CAC > 0
Если так, то мы часть избыточно заработанных денег (UE > 0) тратим на привлечение новых пользователей —> Они тоже приносят UE > 0 —> повторяем этот цикл и получаем стабильный рост компании
Ну а дальше начинаем детализировать нашу формулу
UE = ARPU * LifeTime - CAC
➡️ UE = (ARPPU * Conversion) * Lifetime - CAC
ARPU - Average Revenue Per User за какой-то период. Обычно 1 или 3 мес
ARPPU - Average Revenue Per _Paying_ User за какой-то период. Обычно 1 или 3 мес
Conversion - конверсия из захода в приложение в первую покупку
LifeTime - среднее время жизни пользователя в мес
CAC - Customer Acquisition Cost
Вокруг улучшения этих 4 составляющих крутится вся продуктовая работа и куча мифов. Развеять которые поможет иногда не такая уж простая аналитика (интегралы для кривой ретеншена, ML-модели LTV и оттока и тп)
Ну хоть с первой составляющей, Conversion, уже все понятно по прошлому посту …или нет?🙃
👍33🔥8🗿2💘1