Спасибо всем, кто проголосовал ранее в опросе!
Некоторое время еще повыходят заготовки, но я обязательно учту мнение аудитории. Как раз будет время подумать, какие темы взять на рассмотрение и посидеть над первой из тем.
Некоторое время еще повыходят заготовки, но я обязательно учту мнение аудитории. Как раз будет время подумать, какие темы взять на рассмотрение и посидеть над первой из тем.
#books
На очереди еще одна книга: "Лидер и племя. Пять уровней корпоративной культуры".
Ее очень часто хвалят, много кто советует. Честно, идея книги интересная, но я дочитать не смог. Потому рекомендую краткое содержание (можно посмотреть здесь).
Если коротко, то автор вводит структуру 5 уровней "племен". Каждая организация находится на этой шкале (начиная от банд где-то в Фавелах Бразилии до SpaceX и Илона Маска). И для того, чтобы делать крутые вещи и быть на вершине, нужно поднять организацию до 4 уровня (с редкими подъемами на 5 уровень, где уже организация меняет мир). Примерный смысл каждого уровня на изображении к посту.
Собственно, книга как раз про то, какие это уровни, как работают и как поднимать организацию от уровня к уровню.
Если хотите - можете прочесть полностью. Но я бы рекомендовал поискать краткую выжимку с советами. Они будут весьма занимательны и полезны.
На очереди еще одна книга: "Лидер и племя. Пять уровней корпоративной культуры".
Ее очень часто хвалят, много кто советует. Честно, идея книги интересная, но я дочитать не смог. Потому рекомендую краткое содержание (можно посмотреть здесь).
Если коротко, то автор вводит структуру 5 уровней "племен". Каждая организация находится на этой шкале (начиная от банд где-то в Фавелах Бразилии до SpaceX и Илона Маска). И для того, чтобы делать крутые вещи и быть на вершине, нужно поднять организацию до 4 уровня (с редкими подъемами на 5 уровень, где уже организация меняет мир). Примерный смысл каждого уровня на изображении к посту.
Собственно, книга как раз про то, какие это уровни, как работают и как поднимать организацию от уровня к уровню.
Если хотите - можете прочесть полностью. Но я бы рекомендовал поискать краткую выжимку с советами. Они будут весьма занимательны и полезны.
#statistics
Сегодня речь пойдет про residual bootstrap.
Принцип здесь такой - давайте сэмплировать остатки от изначальной модели, чтобы далее их использовать для построения нового ряда.
Итак, пройдемся по шагам:
1. Строим изначальную модель, чтобы на основании набора признаков
2. Берем наши остатки и случайным образом добавляем к полученным
3. Учим новую модель, но уже на новых
4. Повторяем шаги 2,3 много раз.
Стоит отметить, что данный метод не подойдет для данных с автокорреляцией остатков.
Сегодня речь пойдет про residual bootstrap.
Принцип здесь такой - давайте сэмплировать остатки от изначальной модели, чтобы далее их использовать для построения нового ряда.
Итак, пройдемся по шагам:
1. Строим изначальную модель, чтобы на основании набора признаков
X
предсказывать Y
. Получаем некоторые оценки Y^
. И остатки, то есть разности Y-Y^
;2. Берем наши остатки и случайным образом добавляем к полученным
Y^
, получим некоторые Y'
;3. Учим новую модель, но уже на новых
Y'
. Оцениваем требуемый параметр из регрессии;4. Повторяем шаги 2,3 много раз.
Стоит отметить, что данный метод не подойдет для данных с автокорреляцией остатков.
#interesting_links #marketing
Интересный материал с рассмотрением Adstock функции и использованием вероятностного программирования (полагаю, логично так перевести probabilitistic programming).
Что такое задача Adstock функция? Если коротко - то это способ моделирования эффектов от маркетинга, растянутых во времени.
К примеру, мы запустили рекламную кампанию. Но печаль в том, что на пользователей она действует не мгновенно, нужно, чтобы народ проникся нашим креативом.
Плюс в заметке еще учтен эффект насыщения рынка. То есть, если мы завесили полгорода нашим креативом, то нам нет смысла завешивать остальные полгорода, т.к. это будут деньги на ветер.
Материал сложноват (ибо пользуется магией Байесовского вывода), но любопытен.
P.S. Думаю, попозже напишу что-нибудь про MMM (Marketing Mix Modeling, а не тот, про который вы подумали ;))
Интересный материал с рассмотрением Adstock функции и использованием вероятностного программирования (полагаю, логично так перевести probabilitistic programming).
Что такое задача Adstock функция? Если коротко - то это способ моделирования эффектов от маркетинга, растянутых во времени.
К примеру, мы запустили рекламную кампанию. Но печаль в том, что на пользователей она действует не мгновенно, нужно, чтобы народ проникся нашим креативом.
Плюс в заметке еще учтен эффект насыщения рынка. То есть, если мы завесили полгорода нашим креативом, то нам нет смысла завешивать остальные полгорода, т.к. это будут деньги на ветер.
Материал сложноват (ибо пользуется магией Байесовского вывода), но любопытен.
P.S. Думаю, попозже напишу что-нибудь про MMM (Marketing Mix Modeling, а не тот, про который вы подумали ;))
👍1🔥1
#python
Что такое DataClass и почему его стоит использовать?
Dataclasses – это классы, предназначенные для хранения данных. Суть в том, чтобы не тратить много времени на написание "лишнего" кода, чтобы получить класс для хранения данных. Нам не нужно писать длинную реализацию, переопределять множество методов и пилить собственную логику некоторых операций, т.к. за нас уже сделали достаточно большую часть работы, дав множество плюшек "из коробки".
Если до датаклассов у нас код выглядел примерно так:
То с использованием датаклассов все выглядит чище и красивее:
Помимо уменьшения дополнительного кода, у нас есть и дополнительные плюшки, такие как:
1. Поддержка значений по умолчанию;
2. "Красивое" представление объектов при выводе;
3. Простой перевод в кортеж или словарь;
4. Возможность сделать наш объект
5. Возможность настраивать поведение атрибута посредством field и возможность использовать специальный метод
6. Возможность сравнения атрибутов и сортировки по ним из коробки (то есть нам не надо самим прописывать сравнения).
Стоит отметить, что можно реализовать нечто похожее просто сделав
Итого:
Получаем очень удобный способ работы с контейнерами данных в Python, который позволяет писать меньше кода и проще реализовывать полезные для нас операции (сравнение, преобразования после инициализации и т.п.).
Что такое DataClass и почему его стоит использовать?
Dataclasses – это классы, предназначенные для хранения данных. Суть в том, чтобы не тратить много времени на написание "лишнего" кода, чтобы получить класс для хранения данных. Нам не нужно писать длинную реализацию, переопределять множество методов и пилить собственную логику некоторых операций, т.к. за нас уже сделали достаточно большую часть работы, дав множество плюшек "из коробки".
Если до датаклассов у нас код выглядел примерно так:
class Person():
def __init__(self, first_name, last_name, age, hobby):
self.first_name = first_name
self.last_name = last_name
self.age = age
self.hobby = hobby
То с использованием датаклассов все выглядит чище и красивее:
from dataclasses import dataclass
@dataclass
class Person:
first_name: str
last_name: str
age: int
hobby: str
Помимо уменьшения дополнительного кода, у нас есть и дополнительные плюшки, такие как:
1. Поддержка значений по умолчанию;
2. "Красивое" представление объектов при выводе;
3. Простой перевод в кортеж или словарь;
4. Возможность сделать наш объект
frozen
, то есть неизменяемым;5. Возможность настраивать поведение атрибута посредством field и возможность использовать специальный метод
__post_init__
для добавления атрибутов уже после инициализации (например, для заполнения атрибута на основе значений других атрибутов);6. Возможность сравнения атрибутов и сортировки по ним из коробки (то есть нам не надо самим прописывать сравнения).
Стоит отметить, что можно реализовать нечто похожее просто сделав
tuple, dict
или отдельный класс. А исторически типичным вариантом такой реализации мог бы служить namedtuple
. Но количество дополнительных "танцев с бубном" при использовании вышеуказанных вариантов сильно большее, чем при использовании DataClass
. Итого:
Получаем очень удобный способ работы с контейнерами данных в Python, который позволяет писать меньше кода и проще реализовывать полезные для нас операции (сравнение, преобразования после инициализации и т.п.).
👍6
Я тут из-за праздников совершенно не заметил, а нас уже на канале более трехсот человек!
Спасибо всем, что меня читаете! Мне это греет душу ;)
Спасибо всем, что меня читаете! Мне это греет душу ;)
🎉9🔥3👍2
#marketing
Поговорим про задачу MMM (Marketing Mix Modeling). Итак, тут нам нужно ответить на простой вопрос - как влияет наш marketing mix (то есть набор наших маркетинговых воздействий) на продажи. И, желательно, еще и научиться предсказывать оптимальный набор таких воздействий на будущее.
Казалось бы, все просто - бери данные о продажах, плюсуй стоблец с показами/кликами/тратами -> linear regression goes brrr -> ... -> profit.
Ан нет, в реальности так не работает. Во-первых, измеряем мы только текущих показатели, не учитывая растягивания отклика во времени, во-вторых, обычно идет не одна кампания, то есть эффекты как-то еще и скрещиваются, в-третьих, все же зависимость траты/profit далеко не всегда линейная.
Поэтому и приходится придумывать разные изощренные описания реальности, дабы получить хоть какие-то полезные для нас оценки.
К примеру, можно использовать ранее описанную adstock историю. То есть хитренько добавить сглаживание и насыщение. А уж потом оценивать столь желанные коэффициенты.
Вот пара примеров реализации решения задачки MMM:
1. Вариант попроще;
2. Вариант посложнее (потому что Байесовская магия, ну куда же без нее).
P.S. Но тут стоит помнить, что все модели неправильны, но некоторые полезны. А так же о том, что статистика темна и полна ужасов.
Так что стоит быть аккуратнее с полученными результатами. Т.к. люди, которые не очень понимают во внутренней реализации и способах получения ваших результатов, обязательно выстрелят себе в ногу, если их оставить с этим наедине (увы, но это суровая правда жизни).
Поговорим про задачу MMM (Marketing Mix Modeling). Итак, тут нам нужно ответить на простой вопрос - как влияет наш marketing mix (то есть набор наших маркетинговых воздействий) на продажи. И, желательно, еще и научиться предсказывать оптимальный набор таких воздействий на будущее.
Казалось бы, все просто - бери данные о продажах, плюсуй стоблец с показами/кликами/тратами -> linear regression goes brrr -> ... -> profit.
Ан нет, в реальности так не работает. Во-первых, измеряем мы только текущих показатели, не учитывая растягивания отклика во времени, во-вторых, обычно идет не одна кампания, то есть эффекты как-то еще и скрещиваются, в-третьих, все же зависимость траты/profit далеко не всегда линейная.
Поэтому и приходится придумывать разные изощренные описания реальности, дабы получить хоть какие-то полезные для нас оценки.
К примеру, можно использовать ранее описанную adstock историю. То есть хитренько добавить сглаживание и насыщение. А уж потом оценивать столь желанные коэффициенты.
Вот пара примеров реализации решения задачки MMM:
1. Вариант попроще;
2. Вариант посложнее (потому что Байесовская магия, ну куда же без нее).
P.S. Но тут стоит помнить, что все модели неправильны, но некоторые полезны. А так же о том, что статистика темна и полна ужасов.
Так что стоит быть аккуратнее с полученными результатами. Т.к. люди, которые не очень понимают во внутренней реализации и способах получения ваших результатов, обязательно выстрелят себе в ногу, если их оставить с этим наедине (увы, но это суровая правда жизни).
👍3🔥2
На кого больше похожа дочь? Ненаучное исследование.
В общем, у меня не так давно появилась дочь. Родственники, конечно же, начали держать асинхронный совет, на кого же больше похожа дочь - на маму или папу.
Я решил подойти к делу с позиций анализа данных: выбрал 3 фото для себя, жены и дочери. После чего, сравнил 3 * 3 для каждого родителя с помощью библиотеки face_recognition. Благо, там есть функционал для вычисления similarity между лицами. Логика такая: кто получит больший средний балл близости лиц - на того дочь и больше похожа.
В итоге *барабанная дробь* победила дружба. Оказалось, что распределения очень похожи (см. картинку к посту). И бутстреп разницы средних дает доверительный интервал (-0.017, 0.016
), что означает отсутствие статистически значимой разницы. Правда, распределение расстояния между моими фото и фото дочери было поуже, но это, вероятно, из-за того, что фоток было всего 3 и я не особо регулировал наклон головы, позицию на фото и т.д., а брал рандомные +- нормальные фото.
Конечно, это абсолютно ненаучно, зато весело ;)
Ну и результат отлично показал, что дочь в равной степени похожа на маму с папой (что и требовалось доказать).
В общем, у меня не так давно появилась дочь. Родственники, конечно же, начали держать асинхронный совет, на кого же больше похожа дочь - на маму или папу.
Я решил подойти к делу с позиций анализа данных: выбрал 3 фото для себя, жены и дочери. После чего, сравнил 3 * 3 для каждого родителя с помощью библиотеки face_recognition. Благо, там есть функционал для вычисления similarity между лицами. Логика такая: кто получит больший средний балл близости лиц - на того дочь и больше похожа.
В итоге *барабанная дробь* победила дружба. Оказалось, что распределения очень похожи (см. картинку к посту). И бутстреп разницы средних дает доверительный интервал (-0.017, 0.016
), что означает отсутствие статистически значимой разницы. Правда, распределение расстояния между моими фото и фото дочери было поуже, но это, вероятно, из-за того, что фоток было всего 3 и я не особо регулировал наклон головы, позицию на фото и т.д., а брал рандомные +- нормальные фото.
Конечно, это абсолютно ненаучно, зато весело ;)
Ну и результат отлично показал, что дочь в равной степени похожа на маму с папой (что и требовалось доказать).
🔥10❤2😁2
Я закончил большое изучение материалов по теме Lifetime Value (LTV), так что ближайшие пару-тройку месяцев будут выходить материалы про LTV: что это такое, как считать, как моделировать, обзоры статей и т.п. Все это будет под единым тегом #ltv . Другие теги тоже будут, но этот позволит отыскать потом материалы по теме.
Список будущих постов:
1. Что такое LTV? Простые способы расчета;
2. RFM (Recency Frequency Monetary) анализ;
3. Оценка LTV с использованием Марковских цепей (Markov Chain);
4. Разбор статьи "Beyond Customer Lifetime Valuation: Measuring the Value of Acquisition and Retention for Subscription Services";
5. Оценка LTV посредством моделирования выживаемости;
6. Оценка с использованием Pareto/NBD и ее друзей;
7. Разбор статьи "Profitable Retail Customer Identification Based on a Combined Prediction Strategy of Customer Lifetime Value";
8. Customer2Vec. Обучение представлению пользователей;
9. Разбор статьи "A Deep Probabilistic Model for Customer Lifetime Value Prediction";
10. Разбор статьи "Improved Customer Lifetime Value Prediction with Sequence-To-Sequence Learning and Feature-based Models";
11. Проведение A/B тестов над LTV;
12. Использование суррогатных метрик в онлайн экспериментах. Разбор статьи “Online Experimentation with Surrogate Metrics: Guidelines and a Case Study”.
13. Интересные библиотеки.
Список будущих постов:
1. Что такое LTV? Простые способы расчета;
2. RFM (Recency Frequency Monetary) анализ;
3. Оценка LTV с использованием Марковских цепей (Markov Chain);
4. Разбор статьи "Beyond Customer Lifetime Valuation: Measuring the Value of Acquisition and Retention for Subscription Services";
5. Оценка LTV посредством моделирования выживаемости;
6. Оценка с использованием Pareto/NBD и ее друзей;
7. Разбор статьи "Profitable Retail Customer Identification Based on a Combined Prediction Strategy of Customer Lifetime Value";
8. Customer2Vec. Обучение представлению пользователей;
9. Разбор статьи "A Deep Probabilistic Model for Customer Lifetime Value Prediction";
10. Разбор статьи "Improved Customer Lifetime Value Prediction with Sequence-To-Sequence Learning and Feature-based Models";
11. Проведение A/B тестов над LTV;
12. Использование суррогатных метрик в онлайн экспериментах. Разбор статьи “Online Experimentation with Surrogate Metrics: Guidelines and a Case Study”.
13. Интересные библиотеки.
🔥5👍2
#ltv
Что такое LTV и смысл этой метрики.
LTV (Lifetime Value), CLTV, CLV (customer lifetime value) — количество денег, которые приносит пользователь за свою “жизнь” в продукте. Может считаться немного по-разному (для всех привлеченных или только для пользователей или только для платящих пользователей), но общая суть остается той же.
Смысл считать этот показатель весьма простой - нам надо понимать, сколько денег приносит пользователь, чтобы иметь возможность оценить, сколько денег мы можем вложить в его привлечение (или удержание). Очевидно, желательно, чтобы это число было позитивным, иначе мы работаем в убыток (хотя для растущих бизнесов есть варианты привлекать больше пользователей, пускай и сжигая некоторое количество денег, но этот случай давайте учитывать не будем).
Понятное дело, что помимо основного смысла у нас есть некоторые дополнительные способы использовать метрику, например:
- Сегментация аудитории. Мы можем разбить наших клиентов на разные группы по уровню их прибыльности. Самым топовым клиентам можно дать персональные условия или какие-то дополнительные “плюшки”, чтобы не потерять столь полезного для нас клиента;
- Оптимизация удержания (выше уже упомянул это). Если у нас есть пользователь, которому мы можем дать скидку или иное поощрение, чтобы удержать его, то хорошо бы посмотреть “стоит ли игра свеч”. Возможно, мы просто потратим деньги зря на удержание бесполезного для нас пользователя;
- Понимание различных факторов, влияющих на поведение пользователя. Пересекается с сегментацией аудитории, где мы можем понять, чем отличается каждый отдельный сегмент. Но и внутри одной аудиторной группы могут быть различные клиентские пути и триггеры поведения, которые интересно было бы выделять (и понимать, какие есть проблемы на пути пользователей).
Как посчитать LTV?
В этом посте начнем наше погружение с простых способов посчитать LTV.
1. LTV = LIFETIME * ARPU
Где LIFETIME - среднее время “жизни” пользователя, которое можно вывести эвристически (как вариант, посчитать его в виде 1 / churn rate, то есть обратной величиной к оттоку). А ARPU - это средняя прибыль от клиента за период, которое можно посчитать в виде total_revenue / number_of_customers.
2. Повторение метода 1, но с учетом когорт пользователей. Когорта - это пользователи, объединенные по некоторому признаку (обычно - время их регистрации или иное начало “жизни” в продукте). Тогда можно посчитать LTV покогортно, учитывая показатели каждой конкретной когорты;
3. LTV = AVERAGE_ORDER_VALUE * REPEAT_PURCHASE_RATE * LIFETIME
Где AVERAGE_ORDER_VALUE - средний чек, REPEAT_PURCHASE_RATE - частота повторных покупок, LIFETIME - время “жизни” пользователя.
4. LTV = GML * (R / (1 + D - R))
Где GML - чистый доход от пользователя, то есть маржа * общую выручку с пользователя за время его “жизни”. R - это retention rate (доля остающихся в сервисе пользователей). D - ставка дисконтирования (деньги, полученные сейчас, чуть более ценны, чем деньги полученные через год). В итоге получаем учет возвращаемости и “стоимости” денег во времени.
Что такое LTV и смысл этой метрики.
LTV (Lifetime Value), CLTV, CLV (customer lifetime value) — количество денег, которые приносит пользователь за свою “жизнь” в продукте. Может считаться немного по-разному (для всех привлеченных или только для пользователей или только для платящих пользователей), но общая суть остается той же.
Смысл считать этот показатель весьма простой - нам надо понимать, сколько денег приносит пользователь, чтобы иметь возможность оценить, сколько денег мы можем вложить в его привлечение (или удержание). Очевидно, желательно, чтобы это число было позитивным, иначе мы работаем в убыток (хотя для растущих бизнесов есть варианты привлекать больше пользователей, пускай и сжигая некоторое количество денег, но этот случай давайте учитывать не будем).
Понятное дело, что помимо основного смысла у нас есть некоторые дополнительные способы использовать метрику, например:
- Сегментация аудитории. Мы можем разбить наших клиентов на разные группы по уровню их прибыльности. Самым топовым клиентам можно дать персональные условия или какие-то дополнительные “плюшки”, чтобы не потерять столь полезного для нас клиента;
- Оптимизация удержания (выше уже упомянул это). Если у нас есть пользователь, которому мы можем дать скидку или иное поощрение, чтобы удержать его, то хорошо бы посмотреть “стоит ли игра свеч”. Возможно, мы просто потратим деньги зря на удержание бесполезного для нас пользователя;
- Понимание различных факторов, влияющих на поведение пользователя. Пересекается с сегментацией аудитории, где мы можем понять, чем отличается каждый отдельный сегмент. Но и внутри одной аудиторной группы могут быть различные клиентские пути и триггеры поведения, которые интересно было бы выделять (и понимать, какие есть проблемы на пути пользователей).
Как посчитать LTV?
В этом посте начнем наше погружение с простых способов посчитать LTV.
1. LTV = LIFETIME * ARPU
Где LIFETIME - среднее время “жизни” пользователя, которое можно вывести эвристически (как вариант, посчитать его в виде 1 / churn rate, то есть обратной величиной к оттоку). А ARPU - это средняя прибыль от клиента за период, которое можно посчитать в виде total_revenue / number_of_customers.
2. Повторение метода 1, но с учетом когорт пользователей. Когорта - это пользователи, объединенные по некоторому признаку (обычно - время их регистрации или иное начало “жизни” в продукте). Тогда можно посчитать LTV покогортно, учитывая показатели каждой конкретной когорты;
3. LTV = AVERAGE_ORDER_VALUE * REPEAT_PURCHASE_RATE * LIFETIME
Где AVERAGE_ORDER_VALUE - средний чек, REPEAT_PURCHASE_RATE - частота повторных покупок, LIFETIME - время “жизни” пользователя.
4. LTV = GML * (R / (1 + D - R))
Где GML - чистый доход от пользователя, то есть маржа * общую выручку с пользователя за время его “жизни”. R - это retention rate (доля остающихся в сервисе пользователей). D - ставка дисконтирования (деньги, полученные сейчас, чуть более ценны, чем деньги полученные через год). В итоге получаем учет возвращаемости и “стоимости” денег во времени.
👍5🔥3
#ltv
RFM анализ.
Когда речь заходит о сегментации пользователей применимо к LTV, часто вспоминают RFM анализ. Учитывая, что вещь это достаточно простая, давайте рассмотрим ее одной из первых.
Итак, RFM анализ - это метод анализа, использующийся для разбиения базы клиентов на сегменты по частоте и сумме покупок и поиска клиентов, которые будут для нас наиболее прибыльными.
RFM можно разложить на следующие составляющие:
- Recency — давность (как давно ваши пользователи что-то у вас покупали);
- Frequency — частота (как часто совершаются покупки);
- Monetary — деньги (сумма покупок).
Обычно, клиентам просто присваивают метки по каждому показателю, основанные на статистике пользования продуктом. Это могут быть какие-то вручную заданные границы (на основании эвристик или какой-то иной информации) или автоматически полученные из данных разбиения (простое разделение на квартили по каждой из метрик). Соединение меток дает нам пользовательский сегмент. Максимально простой способ сегментации, который достаточно легко интерпретировать бизнесу.
Очевидными минусами подхода будут:
- Достаточно искусственные границы (почему нужно делить именно на n групп?);
- Возможное отсутствие четкой разницы между близкими сегментами.
Но как базовое начало для анализа вполне себе подойдет.
При этом, никто не мешает делать такой анализ на срезах времени и смотреть на переходы пользователя между группами, либо соединять наши группы по какому-либо критерию.
Закончу рассказ парой примеров таких расчетов (раз и два). Можете позаимствовать оттуда код для RFM-анализа и попробовать его на своих данных.
RFM анализ.
Когда речь заходит о сегментации пользователей применимо к LTV, часто вспоминают RFM анализ. Учитывая, что вещь это достаточно простая, давайте рассмотрим ее одной из первых.
Итак, RFM анализ - это метод анализа, использующийся для разбиения базы клиентов на сегменты по частоте и сумме покупок и поиска клиентов, которые будут для нас наиболее прибыльными.
RFM можно разложить на следующие составляющие:
- Recency — давность (как давно ваши пользователи что-то у вас покупали);
- Frequency — частота (как часто совершаются покупки);
- Monetary — деньги (сумма покупок).
Обычно, клиентам просто присваивают метки по каждому показателю, основанные на статистике пользования продуктом. Это могут быть какие-то вручную заданные границы (на основании эвристик или какой-то иной информации) или автоматически полученные из данных разбиения (простое разделение на квартили по каждой из метрик). Соединение меток дает нам пользовательский сегмент. Максимально простой способ сегментации, который достаточно легко интерпретировать бизнесу.
Очевидными минусами подхода будут:
- Достаточно искусственные границы (почему нужно делить именно на n групп?);
- Возможное отсутствие четкой разницы между близкими сегментами.
Но как базовое начало для анализа вполне себе подойдет.
При этом, никто не мешает делать такой анализ на срезах времени и смотреть на переходы пользователя между группами, либо соединять наши группы по какому-либо критерию.
Закончу рассказ парой примеров таких расчетов (раз и два). Можете позаимствовать оттуда код для RFM-анализа и попробовать его на своих данных.
👍2🔥1
#ltv
Оценка LTV с использованием Марковских цепей (Markov Chain).
Тут мы уже начинаем приближаться к чему-то более интересному. В данной заметке я сознательно возьму только простой случай использования Марковской цепи (пока не залезая в методы Монте-Карло, уж извините).
Начнем с того, а что такое вообще эта ваша Марковская цепь?
Для простоты определим Марковскую цепь в виде последовательности событий, в которой каждое последующее событие зависит от предыдущего (и только от него). То есть в каждый момент времени наш следующий шаг зависит только от нашего нынешнего положения (картинка для понимания).
Мы можем записать нашу матрицу вероятностей перехода между состояниями (она называется матрицей перехода, обозначим ее P). В качестве состояний могут быть время с последней покупки/частота покупок, тип подписки и т.п. (либо сочетание факторов). И мы можем записать вектор прибыль - маркетинговые затраты для каждого n-го состояния (обозначим G). То есть, если упрощать, то мы можем записать, сколько приносит каждый пользователь в некотором состоянии. Например, мы можем потратить какую-то сумму, чтобы сдвинуть пользователя в другое состояние. И можем оценить, сколько прибыли генерирует каждое состояние.
Тогда получим, что значение P*G будет показывать нам вектор ожидаемых чистых прибылей через один период времени. P^2 * G через два и т.д. В итоге, получим, что LTV у нас будет суммой ожидаемых прибылей за несколько периодов времени. Добавив дисконтирование, мы получаем требуемую оценку с учетом “стоимости” денег для нас в каждый момент времени.
Финальная формула на картинке (там немного другое обозначение для вектора G, он там показан буквой ню).
В дополнение прикладываю пример реализации расчета на основе Марковской цепи с использованием RFM анализа для получения состояний пользователей. Можете позаимствовать оттуда код и попробовать применить к своим данным.
Оценка LTV с использованием Марковских цепей (Markov Chain).
Тут мы уже начинаем приближаться к чему-то более интересному. В данной заметке я сознательно возьму только простой случай использования Марковской цепи (пока не залезая в методы Монте-Карло, уж извините).
Начнем с того, а что такое вообще эта ваша Марковская цепь?
Для простоты определим Марковскую цепь в виде последовательности событий, в которой каждое последующее событие зависит от предыдущего (и только от него). То есть в каждый момент времени наш следующий шаг зависит только от нашего нынешнего положения (картинка для понимания).
Мы можем записать нашу матрицу вероятностей перехода между состояниями (она называется матрицей перехода, обозначим ее P). В качестве состояний могут быть время с последней покупки/частота покупок, тип подписки и т.п. (либо сочетание факторов). И мы можем записать вектор прибыль - маркетинговые затраты для каждого n-го состояния (обозначим G). То есть, если упрощать, то мы можем записать, сколько приносит каждый пользователь в некотором состоянии. Например, мы можем потратить какую-то сумму, чтобы сдвинуть пользователя в другое состояние. И можем оценить, сколько прибыли генерирует каждое состояние.
Тогда получим, что значение P*G будет показывать нам вектор ожидаемых чистых прибылей через один период времени. P^2 * G через два и т.д. В итоге, получим, что LTV у нас будет суммой ожидаемых прибылей за несколько периодов времени. Добавив дисконтирование, мы получаем требуемую оценку с учетом “стоимости” денег для нас в каждый момент времени.
Финальная формула на картинке (там немного другое обозначение для вектора G, он там показан буквой ню).
В дополнение прикладываю пример реализации расчета на основе Марковской цепи с использованием RFM анализа для получения состояний пользователей. Можете позаимствовать оттуда код и попробовать применить к своим данным.
👍2
Forwarded from 🔋 Труба данных
Часто-заголядывающая рубрика в моем бложике - про карьеру.
Читая книжку Staff Engineer, зашел к автору в блог и наткнулся на клевую заметку про карьерные решения. Актуально в текущих условиях “кризиса”.
- Во-первых, вы же знаете, что сейчас рецессия, кризис, и не только в мире, но и в айтишке. Хоть дебаты идут, “а вообще мы в рецессии?” и “А сколько она продлится?”, статистика говорит о том, что такие события длятся ±15 месяцев. То есть ориентируемся на конец 2023 года. Что мы можем с этим сделать?
- На любой позиции можно сделать приоритетом деньги, “скорость и режим работы”, собственное обучение, престиж или работу с людьми. Возможно, если вам сейчас комфортно, стоит сфокусироваться на обучении и на работе с классными людьми, чем в неспокойное время менять работу ради максимизации собственной прибыли?
- Если все равно хочется максмимизировать свой доход, помните, что даже FAANG компании заметно потеряли в компенсации, ибо существенная часть их компенсаций это стоки, а стоки сейчас на дне. Престиж тоже сюда.
Остальные пункты можно почтать в статье тут, но в целом мне хочется выделить один абзац и оставить его без перевода, ибо он прекрасен:
Combining the last few points: my general advice to folks would be to stay where you are as long as you’re reasonably happy day to day and feel like you’re learning at a good rate. Even if your effective compensation has declined a bit, it’s very hard to determine if the compensation at any other company will hold up either. Don’t get me wrong, if you’re unhappy for non-compensation reasons, then of course you should find another role. Well, unless you’re unhappy because the company is more focused on short-term profitability, because pretty much anywhere you go right now will have that orientation. Referring back to the first point, this isn’t the new normal, just a difficult ~15 month period to navigate
Читая книжку Staff Engineer, зашел к автору в блог и наткнулся на клевую заметку про карьерные решения. Актуально в текущих условиях “кризиса”.
- Во-первых, вы же знаете, что сейчас рецессия, кризис, и не только в мире, но и в айтишке. Хоть дебаты идут, “а вообще мы в рецессии?” и “А сколько она продлится?”, статистика говорит о том, что такие события длятся ±15 месяцев. То есть ориентируемся на конец 2023 года. Что мы можем с этим сделать?
- На любой позиции можно сделать приоритетом деньги, “скорость и режим работы”, собственное обучение, престиж или работу с людьми. Возможно, если вам сейчас комфортно, стоит сфокусироваться на обучении и на работе с классными людьми, чем в неспокойное время менять работу ради максимизации собственной прибыли?
- Если все равно хочется максмимизировать свой доход, помните, что даже FAANG компании заметно потеряли в компенсации, ибо существенная часть их компенсаций это стоки, а стоки сейчас на дне. Престиж тоже сюда.
Остальные пункты можно почтать в статье тут, но в целом мне хочется выделить один абзац и оставить его без перевода, ибо он прекрасен:
Combining the last few points: my general advice to folks would be to stay where you are as long as you’re reasonably happy day to day and feel like you’re learning at a good rate. Even if your effective compensation has declined a bit, it’s very hard to determine if the compensation at any other company will hold up either. Don’t get me wrong, if you’re unhappy for non-compensation reasons, then of course you should find another role. Well, unless you’re unhappy because the company is more focused on short-term profitability, because pretty much anywhere you go right now will have that orientation. Referring back to the first point, this isn’t the new normal, just a difficult ~15 month period to navigate
Lethain
Downturn career decisions.
When I joined Yahoo In 2008, I received a small number of options. I don’t remember how many–it was very few–but I do know my strike price was roughly $16. I don’t remember that because my strike price was particularly lucrative, but rather because some of…
🔥2
#ltv
Beyond Customer Lifetime Valuation: Measuring the Value of Acquisition and Retention for Subscription Services
В этот раз текст получился большой, потому привожу ссылкой на telegraph
https://telegra.ph/Beyond-Customer-Lifetime-Valuation-Measuring-the-Value-of-Acquisition-and-Retention-for-Subscription-Services-06-28
Beyond Customer Lifetime Valuation: Measuring the Value of Acquisition and Retention for Subscription Services
В этот раз текст получился большой, потому привожу ссылкой на telegraph
https://telegra.ph/Beyond-Customer-Lifetime-Valuation-Measuring-the-Value-of-Acquisition-and-Retention-for-Subscription-Services-06-28
Telegraph
Beyond Customer Lifetime Valuation: Measuring the Value of Acquisition and Retention for Subscription Services
Рассмотрим свеженькую статью от Netflix (апрель 2022). Ребята предлагают в статье свое видение оценки т.н. incremental customer lifetime value, то есть разницы между “живым” пользователем сервиса и тем, кто вне сервиса (ушедшие пользователи, или потенциальные…
👍1
#ltv
Оценка посредством моделирования выживаемости.
При некотором размышлении, мы можем представить наш показатель LTV в таком виде, где для каждого момента “жизни” пользователя у нас есть вероятность того, что к моменту T он все еще с нами и прибыль от клиента к моменту T.
Тогда мы можем использовать для вероятности “выжить” модели, типично применяемые в страховании, то есть оценить вероятность “дожития” пользователя до некоторого наперед заданного момента. А прибыль можно будет взять в виде усредненной прибыли для пользовательского сегмента, либо использовать некоторую регрессионную модель оценки.
Итак, давайте поговорим про анализ выживаемости.
Цель такого анализа - оценка времени до интересующего события и оценка того, как это время зависит от параметров пользователя и воздействия на него. Классически этот подход применяется в медицине, где учитываются параметры самого пользователя (рост, вес, уровни разных показателей в крови и т.п.) и параметры лечения, дабы оценить эффективность этого лечения. Мы же можем считать аналогом “лечения” какие-либо маркетинговые активности. А событием, до которого мы отсчитываем время, может быть покупка, отказ от подписки и т.д. Что вполне укладывается в идею оценки вероятности быть с нами к некоторому моменту времени.
Здесь стоит отметить, что обычно при анализе данных о “выживаемости”, мы имеем не совсем полные данные, т.к. мы не всегда видим для каждого пользователя момент наступления события (к примеру, отписки). Это может происходить из-за того, что на момент анализа мы еще не знаем исхода, либо из-за потери данных (к примеру, из-за того, что у пользователя потерлись cookies). Соответственно, такие данные называются “цензурированными” данными.
Ок, с общими понятиями мы разобрались. Теперь начинается самое интересное. Мы должны записать функцию выживаемости, которая определяется, как вероятность, что человек “проживет” от начального момента до момента времени T. И вот здесь уже становится не так просто. Но давайте разбираться.
Обычно, для оценки функции выживаемости используется оценка Каплана-Мейера. Предположим, что события у нас независимы (что логично, вряд ли пользователи имеют зависимое друг от друга поведение). Мы можем записать вероятность “выжить” в некоторый момент времени t, как 1 - (число наступивших событий / число оставшихся “в живых”). Соответственно, мы можем построить оценку суммарной вероятности “выжить” от начального момента до момента T, которая будет произведением вероятностей для каждого момента до T. То есть на шаге 0 у нас будет 1, на шаге 1 уже 1 - (число наступивших событий / число оставшихся “в живых”) для шага 1, для шага 2 это уже будет вероятность шага 1 * (1 - (число наступивших событий / число оставшихся “в живых”) для шага 2) и т.д. вплоть до нуля.
Тут мы подходим к понятию функции риска. По сути, функция риска описывает противоположное - не риск “выживания”, а риск наступления события. Функцию риска можно записать через функцию выживаемости, в виде
Но и функция выживаемости, и функция риска позволяют проводить скорее описательный анализ, но не предсказать, как влияют те или иные факторы на итоговый риск. И тут на выручку нам приходит господин Кокс, а именно его модель пропорциональных рисков. Формулировку для этой модели можно посмотреть в приложенном к посту изображении. Для оценки нам нужен уровень базового риска для популяции (который еще как-то надо оценить) и набор признаков. Далее мы обучаем нашу модель и получаем оценки параметров при признаках.
Возвратимся к исходной теме. Весь этот мат. аппарат можно применить для описательного сравнения “выживаемости” и оценки LTV разных групп, а также для прогнозирования “выживаемости” на основе модели Кокса и выявления наиболее важных для этого признаков.
В итоге, по признакам пользователя мы сможем предсказывать его LTV (оценив вероятность того, что он с нами останется и прибыль от него за все периоды времени). Здесь добавлю ссылку на код с примером анализа.
Оценка посредством моделирования выживаемости.
При некотором размышлении, мы можем представить наш показатель LTV в таком виде, где для каждого момента “жизни” пользователя у нас есть вероятность того, что к моменту T он все еще с нами и прибыль от клиента к моменту T.
Тогда мы можем использовать для вероятности “выжить” модели, типично применяемые в страховании, то есть оценить вероятность “дожития” пользователя до некоторого наперед заданного момента. А прибыль можно будет взять в виде усредненной прибыли для пользовательского сегмента, либо использовать некоторую регрессионную модель оценки.
Итак, давайте поговорим про анализ выживаемости.
Цель такого анализа - оценка времени до интересующего события и оценка того, как это время зависит от параметров пользователя и воздействия на него. Классически этот подход применяется в медицине, где учитываются параметры самого пользователя (рост, вес, уровни разных показателей в крови и т.п.) и параметры лечения, дабы оценить эффективность этого лечения. Мы же можем считать аналогом “лечения” какие-либо маркетинговые активности. А событием, до которого мы отсчитываем время, может быть покупка, отказ от подписки и т.д. Что вполне укладывается в идею оценки вероятности быть с нами к некоторому моменту времени.
Здесь стоит отметить, что обычно при анализе данных о “выживаемости”, мы имеем не совсем полные данные, т.к. мы не всегда видим для каждого пользователя момент наступления события (к примеру, отписки). Это может происходить из-за того, что на момент анализа мы еще не знаем исхода, либо из-за потери данных (к примеру, из-за того, что у пользователя потерлись cookies). Соответственно, такие данные называются “цензурированными” данными.
Ок, с общими понятиями мы разобрались. Теперь начинается самое интересное. Мы должны записать функцию выживаемости, которая определяется, как вероятность, что человек “проживет” от начального момента до момента времени T. И вот здесь уже становится не так просто. Но давайте разбираться.
Обычно, для оценки функции выживаемости используется оценка Каплана-Мейера. Предположим, что события у нас независимы (что логично, вряд ли пользователи имеют зависимое друг от друга поведение). Мы можем записать вероятность “выжить” в некоторый момент времени t, как 1 - (число наступивших событий / число оставшихся “в живых”). Соответственно, мы можем построить оценку суммарной вероятности “выжить” от начального момента до момента T, которая будет произведением вероятностей для каждого момента до T. То есть на шаге 0 у нас будет 1, на шаге 1 уже 1 - (число наступивших событий / число оставшихся “в живых”) для шага 1, для шага 2 это уже будет вероятность шага 1 * (1 - (число наступивших событий / число оставшихся “в живых”) для шага 2) и т.д. вплоть до нуля.
Тут мы подходим к понятию функции риска. По сути, функция риска описывает противоположное - не риск “выживания”, а риск наступления события. Функцию риска можно записать через функцию выживаемости, в виде
H(t) = -log(S(t))
. Но и функция выживаемости, и функция риска позволяют проводить скорее описательный анализ, но не предсказать, как влияют те или иные факторы на итоговый риск. И тут на выручку нам приходит господин Кокс, а именно его модель пропорциональных рисков. Формулировку для этой модели можно посмотреть в приложенном к посту изображении. Для оценки нам нужен уровень базового риска для популяции (который еще как-то надо оценить) и набор признаков. Далее мы обучаем нашу модель и получаем оценки параметров при признаках.
Возвратимся к исходной теме. Весь этот мат. аппарат можно применить для описательного сравнения “выживаемости” и оценки LTV разных групп, а также для прогнозирования “выживаемости” на основе модели Кокса и выявления наиболее важных для этого признаков.
В итоге, по признакам пользователя мы сможем предсказывать его LTV (оценив вероятность того, что он с нами останется и прибыль от него за все периоды времени). Здесь добавлю ссылку на код с примером анализа.
👍4
#ltv
Оценка с использованием Pareto/NBD модели и ее друзей.
Чтобы сделать пост более читабельным, добавлю его ссылкой на telegraph.
https://telegra.ph/Ocenka-s-ispolzovaniem-ParetoNBD-modeli-i-ee-druzej-07-24
Оценка с использованием Pareto/NBD модели и ее друзей.
Чтобы сделать пост более читабельным, добавлю его ссылкой на telegraph.
https://telegra.ph/Ocenka-s-ispolzovaniem-ParetoNBD-modeli-i-ee-druzej-07-24
Telegraph
Оценка с использованием Pareto/NBD модели и ее друзей.
В этом посте мы подойдем уже к несколько более сложным моделям, которые часто применяются при оценке LTV. Впрочем, забавная часть в том, что их все еще можно посчитать в Excel ;) Итак, начнем с того, что у нас есть разные варианты покупок (все зависит от…
👍4🔥1
#ltv
Profitable Retail Customer Identification Based on a Combined Prediction Strategy of Customer Lifetime Value
https://telegra.ph/Profitable-Retail-Customer-Identification-Based-on-a-Combined-Prediction-Strategy-of-Customer-Lifetime-Value-07-24
Profitable Retail Customer Identification Based on a Combined Prediction Strategy of Customer Lifetime Value
https://telegra.ph/Profitable-Retail-Customer-Identification-Based-on-a-Combined-Prediction-Strategy-of-Customer-Lifetime-Value-07-24
Telegraph
Profitable Retail Customer Identification Based on a Combined Prediction Strategy of Customer Lifetime Value
Начнем разговор про применение ML к прогнозированию LTV с короткой заметки про статью 2021 года. Интересна статья тем, что авторы решили сравнить типичные для табличных данных ML алгоритмы (GBDT, Random Forest) c классическими Pareto/NBD (HB), Pareto/GGG…
👍2🔥1
#ltv
Customer2Vec: Representation learning for customer analytics and personalization
https://telegra.ph/Customer2Vec-Representation-learning-for-customer-analytics-and-personalization-07-24
Customer2Vec: Representation learning for customer analytics and personalization
https://telegra.ph/Customer2Vec-Representation-learning-for-customer-analytics-and-personalization-07-24
Telegraph
Customer2Vec: Representation learning for customer analytics and personalization
Сегодня поговорим о репрезентации пользователей в векторном виде. Идея достаточно простая - давайте вместо ручной генерации признаков мы отдадим все на откуп той или иной нейронной сети, откуда возьмем промежуточную сжатую репрезентацию пользователя в виде…
🔥8👍1