Оценка ценности ваших клиентов и формулирование упреждающих действий с помощью нескольких строк кода

Модель бета-геометрического отрицательного биномиального распределения (BG-NBD) — это влиятельная вероятностная модель для описания поведения клиентов и прогнозирования жизненного цикла клиента (CLV)¹. В предыдущей статье серии мы исследовали интуицию, предположения и математический вывод этой модели. Я бы посоветовал вам взглянуть на это, если вы этого не сделали!

Как вы могли понять из этой статьи, вручную закодировать все эти уравнения BG-NBD непросто. К счастью, существует библиотека Python под названием lifetimes, которая может сделать всю тяжелую работу за нас. время жизни позволяет абстрагироваться от внутренней сложности BG-NBD и позволяет нам сосредоточиться на извлечении информации и бизнес-ценности из модели.

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

В этой статье рассматриваются все тонкости жизни. Вот наша повестка дня:

  1. Во-первых, мы рассмотрим необходимый формат таблицы, который должен быть у нашего набора данных до моделирования.
  2. Во-вторых, мы увидим, как обучать и оценивать модель BG-NBD, используя время жизни.
  3. В-третьих, мы поймем различные идеи и анализы, которые облегчает жизнь.
  4. Наконец, мы обсудим несколько практических бизнес-приложений, которые стали возможными благодаря времени жизни.

Давайте начнем!

Подготовка данных

Преобразование данных

Обычно предприятия записывают свои транзакции в таблицу «транзакции». В такой таблице есть строки, представляющие отдельные транзакции, и столбцы, представляющие различные аспекты транзакций, такие как вовлеченный клиент, отметка времени транзакции и ее стоимость.

Пример таблицы транзакций предоставлен lifetimes. В этой таблице записываются транзакции CDNow, компании эпохи доткомов, которая продавала компакт-диски и музыкальные продукты. Он содержит 6 919 транзакций от 2 357 клиентов с 1 января 1997 г. по 30 июня 1998 г. (всего 78 недель). Мы будем использовать его на протяжении всей этой статьи. Вот как его загрузить:

Прежде чем подгонять модель BG-NBD, нам нужно сначала преобразовать эту таблицу в канонический формат «RFM». Таблица в формате RFM содержит строки, представляющие отдельных клиентов, и следующие столбцы:

  • частота, которая представляет собой количество повторных покупок, сделанных клиентом.
  • актуальность — возраст клиента, когда он совершал последние покупки.
  • T — возраст клиента в конце периода наблюдения.
  • monetary_value, необязательный столбец, которыйпредставляет среднюю стоимость покупок данного клиента, исключая первую покупку.

lifetimes предоставляет вспомогательную функцию, упрощающую преобразование из формата "транзакций" в формат RFM.

То, как мы интерпретируем первую строку кадра данных RFM, выглядит следующим образом:

  • За период наблюдения клиент 4 совершил в общей сложности 4 покупки (таким образом, 3 повторные покупки).
  • Промежуток времени между его первой и последней покупками составил 49 недель.
  • Промежуток времени между его первой покупкой и окончанием периода наблюдения составил 78 недель.
  • Средняя сумма его транзакций, исключая первую, составляет 23,73 доллара США.

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

Разделение между калибровкой и задержкой

При преобразовании нашей таблицы в формат RFM у нас есть возможность также выполнить разделение калибровки-задержки, что по духу похоже на процедуру разделения поезд-тест, с которой мы все знакомы. Разделение калибровки и удержания делит наши транзакции на две в зависимости от того, попадают ли они в период калибровки или в период наблюдения. Транзакции, имевшие место в течение периода калибровки, используются для обучения модели, тогда как транзакции, имевшие место в течение периода наблюдения ("задержанные"транзакции), используются для проверки модели.

В этом примере мы установим периоды калибровки и наблюдения равными 52 и 26 неделям соответственно. Вот как мы можем выполнить разделение, используя время жизни:

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

Обучение, прогнозирование и оценка

примерка

В жизни подгонка модели следует знакомым шагам scikit-learn по созданию экземпляра объекта модели (который может включать настройку гиперпараметров) и подгонке его под данные калибровки (обучения):

Вот и все — две строчки и у нас рабочая модель БГ-НБД!

Как вы помните из первой статьи, модель BG-NBD состоит из гамма- и бета-распределения. Параметры rиα изгамма-дистрибутива и aи bбета-дистрибутива доступны через атрибут .summary подогнанный объект модели:

В следующем разделе мы получим некоторые сведения о бизнесе на основе этих параметров.

Оценка соответствия модели путем сравнения сгенерированных моделью искусственных данных и реальных данных

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

время жизни предоставляет несколько способов оценки нашей модели. Во-первых, нужно сравнить частоты между нашими реальными данными калибровки и искусственными данными, взятыми из распределений, сгенерированных моделью BG-NBD. Функция plot_period_transactions делает это в одну строку:

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

Делать прогнозы

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

При задании клиента с определенной частотой, давностью и T подогнанный объект модели может генерировать два типа прогнозов:

  1. Количество покупок, которые он совершит в k будущих периодов.
  2. Вероятность его активности в конце периода наблюдения.

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

Мы видим, что за период наблюдения покупатель совершил 2 + 1 = 3 транзакции («+1» получается из пересчета количества повторныхтранзакций, исключающих первые транзакции, к всему транзакциям).

Давайте теперь сравним это «настоящее» число с предсказанием, сгенерированным BG-NBD. Следующий код дает ожидаемое количество транзакций, которые клиент совершит в течение следующих 26 недель (продолжительность периода наблюдения)²:

Мы видим, что предсказанное количество транзакций (0,76 транзакций) меньше фактического (3 транзакции).

Аналогичным образом мы можем предсказать вероятность того, что определенный клиент все еще активен/жив в конце периода калибровки/начале периода наблюдения).³

Поскольку клиент совершил некоторые покупки в период наблюдения, мы с абсолютной уверенностью знаем, что он был активен в конце периода калибровки. Таким образом, предсказанная вероятность 0,57 является заниженной.

Сравнение реального и прогнозируемого количества транзакций

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

Если требуется более строгая оценка, эти два столбца можно подвергнуть типовым регрессионным показателям, таким как RMSE:

Взгляд и интерпретация

Визуализация распределений MLE Gamma и Beta

Как только мы будем удовлетворены производительностью нашей модели, мы можем приступить к получению информации из нее.

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

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

Из графика видно, что гамма-распределение относительно здоровое, при этом большая часть 𝜆 находится около 2. Это означает, что наши клиенты должны делать покупки со скоростью 2 транзакции в неделю.

Бета-распределение также кажется стабильным, поскольку большая часть p оказалась близкой к 0. Это означает, что наши клиенты вряд ли скоро деактивируют его.

Матрица частоты/давности/будущих покупок

В дополнение к описанной оценке соответствия модели объект подобранной модели также может использоваться для некоторого интерпретационного анализа.

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

Как мы видим, наши лучшие клиенты находятся в правом нижнем углу — эти люди совершали частые покупки совсем недавно, поэтому мы очень надеемся, что они вернутся.

Наоборот, наши наименее перспективные клиенты находятся в правом верхнем углу — они делали частые покупки, а потом перестали приходить, и мы не видели их месяцами. Скорее всего, они нашли другой магазин (т.е. деактивировали).

Матрица частоты/давности/вероятности

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

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

Бизнес-приложения

Оценка CLV с использованием BG-NBD

Мы видели, как можно использовать модель BG-NBD для прогнозирования вероятности выживания p, а также количества покупок в следующие kпериоды. Эти два прогноза, в свою очередь, можно использовать для расчета приблизительной оценки ценности клиента для следующих k периодов. Оценка может быть рассчитана следующим образом:

Эта оценка основана на следующих двух упрощенных допущениях:

  1. Вероятность остаться в живых p остается неизменной в следующие kпериоды
  2. Средняя стоимость покупок в следующие k периоды равна средней стоимости покупок за период наблюдения.

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

Вот как мы выполняем приведенный выше расчет в Pandas:

Результирующий столбец value_10_pred содержит расчетную ценность наших клиентов в течение следующих 10 недель. Затем мы можем использовать эту оценку для измерения состояния нашего бизнеса. Например, мы можем получить сводную статистику value_10_pred:

Мы видим, что в среднем мы ожидаем, что клиенты потратят около 5,18 долларов США в течение следующих 10 недель.

Мы также можем построить гистограмму:

Мы видим, что у значительной части наших клиентов значение value_10_pred близко к 0. Полученное среднее значение в 5,18 долл. США обусловлено несколькими отклонениями (несколько клиентов с очень высоким значением value_10_pred). ). В следующем разделе мы увидим, как в дальнейшем использовать этот результат.

Проактивное вмешательство

Эти три новых столбца, alive_prob, n_transactions_10_pred и value_10_pred, кристаллизуют и количественно оценивают аспекты наших клиентов, которые ранее были невидимы. Помимо того, что эти новые функции носят информационный характер, их можно использовать для конкретных действий. Например, мы можем использовать эти новые функции, чтобы выборочно и активно обращаться к различным сегментам наших клиентов с целью увеличения их ожидаемого CLV.

Ранее мы пришли к выводу, что наша общая ценность для клиентов в значительной степени связана с несколькими клиентами с высокой ценностью. Поскольку эти клиенты являются источником нашего дохода, мы хотели бы уделить им особое внимание. Одна из идей состоит в том, чтобы время от времени отправлять им поздравительные сообщения / ваучеры, чтобы поощрять их постоянную лояльность.

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

Прогноз спроса

Как мы видели ранее, value_10_pred оценивает сумму покупок, которые наши клиенты сделают в следующие десять периодов. Еще один способ использовать это значение — рассматривать это значение как прогнозируемый спрос со стороны клиента. Этот прогноз, в свою очередь, может поддержать наше решение по цепочке поставок (например, пополнение запасов или график производства).

Предостережение: BG-NBD не задумывался как модель временного ряда; он не оснащен функциями временного ряда, такими как учет сезонности и тенденции. Таким образом, когда дело доходит до прогнозирования, было бы разумно не только полагаться на прогнозы, сделанные BG-NBD, а комбинировать их с моделями временных рядов, такими как ARIMA.

Заключение

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

Хотя это замечательно, имейте в виду, что оценки по времени жизни — это оценки максимальной вероятности, которые выводятся исключительно из данных, которые мы предоставляем.

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

Я надеюсь увидеть вас там!

Рекомендации

[1] Простой способ подсчета клиентов: альтернатива модели Парето/NBD (Брюс Харди et. al, 2005)

[2] Эта функция взята из уравнения (10) статьи BG-NBD (источник [1])

[3] Вычисление P(живого) с использованием модели BG/NBD (Брюс Харди et. al, 2008)

[4] Гамма-модель денежной стоимости (Брюс Харди et. al, 2013)

Примечание. Все изображения, диаграммы, таблицы и уравнения были созданы мной, если не указано иное.

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