Оцените пожизненную ценность (LTV) вашего клиента без подписки с помощью Python, чтобы разработать соответствующие стратегии удержания и минимизировать отток.

В одном из моих предыдущих постов мы обсуждали методы анализа выживаемости, чтобы предсказать, когда наши клиенты уйдут, вместе с индивидуальными стратегиями для минимизации ухода клиентов. Это было в условиях контракта, согласно которым смерть заключалась в том, что клиент прекращал или не продлевал свою подписку.

В этом посте мы рассмотрим класс статистических моделей Buy Till You Die (BTYD) для анализа поведения клиентов и моделей покупок в бизнес-модели без подписки, чтобы моделировать и прогнозировать пожизненную ценность клиента (CLV или LTV).

Что такое LTV клиента?

Пожизненная ценность клиента - это общий чистый доход или доход, который компания может рассчитывать получить от своих клиентов в течение всех своих отношений - на уровне отдельных клиентов, когортных групп или всей клиентской базы - со скидкой до сегодняшней долларовой стоимости. с использованием метода дисконтированного денежного потока (DCF).

В зависимости от доступных данных LTV может представлять либо общий доход, либо чистую прибыль, то есть доход минус расходы. Как правило, использование цифр выручки менее обременительно, поскольку исторические данные о продажах на уровне клиентов легко доступны. Принимая во внимание, что расчет затрат для конкретного клиента может потребовать определенных допущений, что делает его несколько субъективным.

Почему LTV?

В внедоговорной бизнес-модели, когда между компанией и ее клиентами нет контракта или соглашения о подписке (например, в электронной коммерции или розничной торговле), мы можем прекратить наши покупки после любой конкретной транзакции. Или мы можем вернуться через 12 месяцев для повторной покупки. Следовательно, не существует отдельного двоичного события, которое идентифицирует, жив конкретный покупатель или нет. Это делает практически невозможным эффективное прогнозирование оттока как двоичного события с помощью логистической регрессии или деревьев решений.

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

Обратите внимание на разницу: на дату окончания наблюдения мы не знаем, ушел ли клиент или нет. Следовательно, мы не можем обучить алгоритм для прогнозирования точки данных (оттока), которая недоступна нам во время обучения модели. Вместо этого вероятность оттока будет определяться другими статистическими и вероятностными методами на основе истории покупок.

Введение в модели BTYD

Мы будем использовать следующие две статистические и вероятностные модели: Модель бета-геометрического / отрицательного биномиального распределения (BG / NBD) и гамма-гамма-модель денежной стоимости² для анализа исторических данные о покупательском поведении и модели покупателя, а также для прогнозирования будущей частоты и денежной стоимости покупок. Эмпирически доказано, что эти модели лучше традиционных подходов и соответствуют статистическим моделям Buy Till You Die (BTYD).

Модель BG / NBD предсказывает будущее ожидаемое количество транзакций в течение заранее определенного периода вместе с вероятностью того, что клиент будет жив. В то время как модель Gamma-Gamma будет связана с моделью BG / NBD для прогнозирования ожидаемой денежной стоимости покупок в выражении текущей долларовой стоимости после дисконтирования по заранее определенной ставке дисконтирования.

Обе эти модели реализованы в lifetimes пакете Python.

Модельные предположения

На фундаментальном уровне две вышеупомянутые модели основываются на следующих предположениях:

  • У каждого покупателя есть две монеты: монета «купить», которая определяет вероятность совершения покупки и постоянно подбрасывается им; и монета «die», которая определяет вероятность того, что вы бросите курить и никогда больше не совершите покупку, которая подбрасывается один раз после каждой покупки
  • В активном состоянии количество транзакций, совершенных клиентом, соответствует Пуассоновскому процессу со скоростью транзакции, обозначенной λ (ожидаемое количество транзакций за интервал времени). На упрощенном уровне процесс Пуассона представляет собой серию дискретных событий, в которых известно среднее время между событиями, но точное время событий является случайным. Возникновение следующего события не зависит от предшествующего события. Таким образом, в нашем случае, совершает ли покупатель повторную покупку, не зависит от его исторического покупательского поведения. Это кажется нелогичным (обычно можно ожидать, что покупатель, совершивший несколько покупок в одном и том же бизнесе, вернется), но результаты эмпирических исследований подтвердились.
  • У каждого покупателя есть своя монета для покупки (с собственной вероятностью выпадения орла и хвоста).
  • Подобно монете «покупка», у каждого покупателя есть собственная монета «кубик» с определенной вероятностью остаться в живых после каждой транзакции.
  • После каждой транзакции покупатель становится неактивным с вероятностью p, то есть после каждой транзакции каждый покупатель подбрасывает вторую монету «кубика», чтобы определить, совершает ли он повторную покупку или нет.
  • Частота транзакций λ и вероятность выпадения p зависят от клиентов независимо и соответствуют гамма- и бета-распределению соответственно.
  • Денежная долларовая стоимость данной транзакции клиента варьируется случайным образом вокруг ее средней стоимости транзакции.
  • Средние суммы транзакций различаются для разных клиентов, но не меняются со временем для каждого отдельного человека.
  • Распределение средней стоимости транзакции по клиентам не зависит от процесса транзакции.

Требования к данным

Для моделей BG / NBD и Gamma-Gamma на уровне клиента требуются только следующие точки данных:

  • Давность - это возраст клиента, когда он совершил последнюю покупку. Это равно промежутку времени между первой покупкой покупателя и его последней покупкой. Таким образом, если г-жа X совершила только одну покупку, ее давность будет равна 0.
  • Частота представляет собой количество периодов, в течение которых клиент совершал повторные покупки. Это означает, что оно на единицу меньше общего количества периодов, в течение которых покупатель совершал покупки. Если в качестве единиц используются дни, то частота - это количество дней (или любого другого периода времени), которые покупатель приобрел после своей первой покупки. В случае, если покупатель совершил только одну покупку, его частота будет равна 0. Кроме того, частота не учитывает несколько покупок в одной и той же единице времени. Соответственно, если г-н Y совершил две покупки в первый день и три покупки в третий день, его частота по-прежнему будет равна 1, несмотря на несколько ежедневных покупок.
  • Время представляет возраст клиента в любых выбранных единицах времени. Это равно промежутку времени между первой покупкой клиента и концом исследуемого периода.
  • Денежная стоимость представляет собой среднюю стоимость повторных покупок данного клиента, т. е. сумму всех повторных покупок, деленную на общее количество единиц времени, в течение которых были совершены повторные покупки. Денежная ценность может быть прибылью, или доходом, или любой другой суммой, если она последовательно рассчитывается для каждого покупателя.

Мы можем извлечь указанные выше четыре требуемые точки данных из следующих данных на уровне транзакций (которые обычно доступны во внутренних системах отчетности) с помощью удобной служебной функции, доступной в lifetimes и называемой summary_data_from_transaction_data:

  • Дата счета или транзакции
  • денежная стоимость счета или транзакции

Модели BG / NBD и гамма-гамма в действии

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

Необработанные данные имеют следующий формат:

Предварительная обработка данных

Далее мы выполним следующие шаги, чтобы преобразовать наши необработанные данные в требуемый формат:

  • Преобразуйте InvoiceDate в формат DateTime и извлеките из него только значения даты
  • Отбросьте строки с отсутствующим Customer ID, поскольку наш анализ будет проводиться на уровне отдельных клиентов.
  • Отфильтруйте отрицательные значения из поля Quantity, поскольку они могут относиться к возвратам клиентов, которые не имеют отношения к прогнозам LTV.
  • Создайте новый столбец для Sales на счет-фактуру (Quantity x Price) и отфильтруйте эти столбцы, необходимые для lifetimes: Customer ID, InvoiceDate, Sales
  • Преобразуйте наши данные на уровне транзакции в необходимую сводную форму для lifetimes с помощью функции summary_data_from_transaction_data.

Полученные данные будут в таком виде:

Клиент № 12608 совершил только 1 покупку (без повторения), поэтому его частота и новизна равны 0 в соответствии с определением модели, а его возраст составляет 405 дней (то есть промежуток времени между первой покупкой и концом периода в анализе. ). Денежное значение также равно 0, так как это среднее значение для всех повторных покупок, таким образом игнорируя его единственную покупку.

Клиент №12745, напротив, сделал всего 2 покупки, следовательно:

  • frequency равно 1, т. Е. 1 повторная покупка.
  • recency - количество дней между двумя покупками
  • T - количество дней между первой покупкой и датой окончания наблюдения
  • monetary_value - это общая стоимость второй покупки, т.е. единственной повторной покупки. Для более чем 1 повторных покупок это была бы средняя продажная стоимость всех повторных покупок.

Последний шаг предварительной обработки - исключить клиентов, для которых у нас нет повторных покупок, т.е. частота равна 0. И BG / NBD, и Gamma-Gamma модели ориентированы исключительно на выполнение расчетов для клиентов с повторными транзакциями. Если подумать, для любой модели будет довольно сложно предсказать вероятность будущих транзакций и денежную стоимость для клиента, который совершил только одну историческую покупку. В противном случае модель будет предсказывать 100% вероятность того, что клиент будет жив, у которого была только одна транзакция покупки, что нереально.

Код для выполненных работ:

Обучение и визуализация модели BG / NBD

Обучение модели BG / NBD похоже на обучение любого другого алгоритма машинного обучения в scikit-learn с использованием метода lifetimes.BetaGeoFitter() fit.

lifetimes имеет несколько встроенных служебных функций для построения и проверки внутренних допущений модели BG / NBD:

  • lifetimes.plotting.plot_transaction_rate_heterogeneity для построения оценочного гамма-распределения λ (склонности клиентов к покупке). В идеале это должно отражать неоднородное распределение, то есть не концентрироваться вокруг одного значения.
  • lifetimes.plotting.plot_dropout_rate_heterogeneity, чтобы построить расчетное бета-распределение p, вероятности отказа клиента сразу после транзакции (монета «кубик»). Это также должно показать неоднородное распределение

Хотя частота транзакций, по-видимому, неоднородна по нашим данным, вероятность выпадения менее неоднородна - большинство значений сосредоточено только около 0,1. Потенциальной причиной может быть небольшое количество клиентов с повторными покупками в наших данных - сбор большего количества данных за более длительный период может быть полезен для целей нашего моделирования. Однако мы продолжим наши упражнения и посмотрим, как они пойдут.

Визуализации моделей

После обучения модели BG / NBD мы можем почерпнуть полезную информацию из следующих графиков:

Тепловая карта периодичности / давности

На этой тепловой карте показано количество транзакций, которые клиент, вероятно, совершит в следующем периоде (по умолчанию 1, т.е. следующий день, неделя и т. Д. В зависимости от частоты транзакций в наших данных), с учетом параметров модели:

Я использовал T = 7 в качестве параметра функции для анализа ожидаемого количества покупок в следующие 7 дней.

Интуитивно мы видим, что клиенты с высокой частотой (многократные повторные покупки) и давностью (недавняя последняя повторная покупка), как ожидается, будут покупать больше в будущем. Наши лучшие клиенты находятся в правом нижнем углу тепловой карты, для которых характерно 175 повторных покупок, причем последняя покупка была сделана, когда им больше ~ 1000 дней.

Короче:

  • Клиенты, совершающие несколько повторных покупок (частота) и с большим промежутком времени между их первой и последней покупкой (новизна), вероятно, будут лучшими клиентами в будущем.
  • Клиенты, которые совершили несколько повторных покупок (частота), но с меньшим промежутком времени между их первой и последней покупкой (новизна) (верхний правый угол), вероятно, никогда не вернутся.
  • Покупатели в голубой и зеленой зонах представляют интерес, поскольку они могут или могут вернуться за покупкой, но мы все же можем ожидать, что они совершат покупку примерно 0,7 раза в течение следующих семи дней. Это клиенты, которых, возможно, потребуется немного уговорить или подтолкнуть, чтобы они вернулись и купили еще

Вероятность получения "живой карты"

Эта тепловая карта показывает вероятность того, что покупатель жив, с учетом параметров модели:

Независимо от того, покупает ли клиент часто или нет, его вероятность остаться в живых составляет почти 1,0 при условии, что он имеет исторически высокую новизну (т. Е. Разрыв более или равный ~ 1000 дней между их первой и последней покупкой).

Кроме того, клиенты с несколько более низкой давностью (т. Е. Последняя покупка была совершена через относительно короткий период времени с момента их первой покупки) имеют более высокую вероятность остаться в живых, даже если они не совершают большого количества повторных покупок.

Покупатели, которые приобрели много, но с более коротким сроком давности, скорее всего, выбывают из списка (верхний правый квадрант).

Код для обучения модели и визуализации следующий:

Проверка модели BG / NBD

Чтобы выполнить перекрестную проверку модели, мы можем разделить наши транзакционные данные на калибровку и набор данных удержания. Затем мы будем использовать набор отложенных данных в качестве производственных данных (не видимых во время обучения модели), сопоставим новую модель BG / NBD с данными калибровки и сравним прогнозируемое и фактическое количество повторных покупок за период ожидания.

График, сравнивающий средние значения фактического и прогнозируемого количества повторных покупок за период ожидания, показывает следующее:

На графике выше:

  • ось абсцисс представляет значения частоты, наблюдаемые в период калибровки.
  • ось Y представляет собой среднюю частоту в период удержания (синяя линия) и средняя частота, предсказанная моделью (оранжевая линия)

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

Код для проверки модели BG / NBD:

Обучение гамма-гамма модели

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

Нет ничего проще:

Время предсказания

Теперь, когда у нас есть две наши модели, обученные и готовящиеся к работе, давайте сделаем некоторые прогнозы на уровне клиентов. Сначала мы спрогнозируем количество покупок для каждого покупателя в течение следующих 30 дней (или любого другого количества дней по вашему выбору):

Ожидается, что CustomerID 12748 совершит от 5 до 6 покупок в течение следующих 30 дней.

Далее мы рассчитаем вероятность того, что клиенты будут живы, и построим график ее распределения:

График распределения показывает, что вероятность того, что большинство покупателей будут живы, высока. После обсуждения с представителями бизнеса и маркетинга предположим, что мы принимаем решение о следующих порогах вероятности для классификации наших клиентов:

  • сброшен, если вероятность остаться в живых меньше 0,5
  • высокий риск оттока, если вероятность остаться в живых составляет от 0,5 до 0,75
  • иначе не сбит

Получаем следующие подсчеты:

Затем мы будем использовать нашу обученную модель гамма-гамма для прогнозирования средней будущей стоимости транзакции и LTV в течение следующих 12 месяцев с предполагаемой месячной ставкой дисконтирования 0,01%. Основываясь на ожидаемом LTV, наши 20 крупнейших клиентов:

Теперь у нас есть расчетный отток, будущая стоимость покупок и LTV для каждого из наших клиентов, которые ранее покупали у нас более одного раза.

Код для прогнозов:

Вывод

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

Полный блокнот Jupyter доступен на GitHub здесь.

Как всегда, не стесняйтесь обращаться ко мне, если вы хотите обсудить что-либо, связанное с аналитикой данных, машинным обучением, анализом финансовых и кредитных рисков.

До следующего раза, используйте код!

использованная литература

[1] Фейдер, П. С., Харди, Б. Г. С. и Ли, Ка. (2005). Простой способ «подсчета клиентов»: альтернатива модели Парето / NBD. Маркетинговая наука. 24. 275–284. 10.1287 / mksc.1040.0098.

[2] Фейдер, П. С., Харди, Б. Г. С. (2013). Гамма-гамма модель денежной стоимости. Получено отсюда