Объяснение модели BG/NBD.

Знание того, какую ценность каждый конкретный клиент добавляет вашему бизнесу, имеет решающее значение, не в последнюю очередь потому, что это помогает определить бюджеты на привлечение и удержание клиентов. Модели Lifetime Value для клиентов — полезный инструмент для получения такой информации. Однако кажется, что с ними много путаницы, и, по-видимому, все используют их неправильно. Как мы можем прогнозировать пожизненную ценность и отток клиентов только на основе данных о транзакциях? Что означает BG/NBD? Какие данные используют эти модели? Давай выясним!

Избавьтесь от основ

Прежде чем мы углубимся в модели Lifetime Value или CLV, давайте убедимся, что у нас есть некоторые основные определения и предположения.

Что такое пожизненная ценность клиента?

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

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

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

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

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

Пожизненная ценность клиента в (не)контрактных условиях

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

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

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

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

Купить модели Till You Die

Самый популярный и точный способ оценки CLV для внедоговорных данных, который широко использовался в течение многих лет, — это класс вероятностных моделей, получивший название «Купи, пока не умрешь». Одна из них, в частности, гамма-гамма-модель BG/NBD, получила широкое распространение.

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

Бета-геометрическая модель/модель отрицательного биномиального распределения

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

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

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

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

  • Давность или время между первой и последней покупкой клиента;
  • Частота или количество периодов времени, в течение которых клиент совершал покупки
    (Важное примечание: некоторые ресурсы в Интернете утверждают, что частота – это количество повторных покупок, совершенных клиентом. что делает его на единицу меньше, чем общее количество покупок. Это неверно, так как частота не должна учитывать несколько покупок за один и тот же период времени.);
  • Время или возраст клиента (это разница во времени между первой покупкой клиента и датой окончания нашего анализа, часто последней доступной датой в данных);
  • Денежная стоимость или средний доход или доход от повторных покупок клиента).

Давность и время могут быть выражены в любых интересующих единицах: часах, днях, неделях и т. д.

Чтобы дать вам представление о том, как могут выглядеть необходимые данные о транзакциях, давайте взглянем на набор данных cdnow, который поставляется с пакетом btyd Python (преемником популярного пакета lifetimes, поддержка которого прекратилась). ).

      customer_id       date  volume  value
0           00001 1997-01-01       1  11.77
1           00002 1997-01-12       1  12.00
2           00002 1997-01-12       5  77.00
3           00003 1997-01-02       2  20.76
4           00003 1997-03-30       2  20.76
              ...        ...     ...    ...
69654       23568 1997-04-05       4  83.74
69655       23568 1997-04-22       1  14.99
69656       23569 1997-03-25       2  25.74
69657       23570 1997-03-25       3  51.12
69658       23570 1997-03-26       2  42.96

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

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

             frequency  recency      T  monetary_value
customer_id                                           
00001              0.0      0.0  545.0        0.000000
00002              0.0      0.0  534.0        0.000000
00003              5.0    511.0  544.0       27.140000
00004              3.0    345.0  545.0       23.723333
00005             10.0    367.0  545.0       35.628000
                ...      ...    ...             ...
23566              0.0      0.0  462.0        0.000000
23567              0.0      0.0  462.0        0.000000
23568              2.0     28.0  462.0       49.365000
23569              0.0      0.0  462.0        0.000000
23570              1.0      1.0  462.0       42.960000

Предположения модели

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

  • Транзакции. Модель предполагает, что пока клиент жив, количество его транзакций следует процессу Пуассона с некоторой скоростью λ. Например, λ=2 означает, что клиент совершает в среднем две покупки за период времени. Ставка λ различна для каждого клиента, и предполагается, что ее распределение по всем клиентам является гамма-распределением. Когда клиент мертв (то есть ушел), количество транзакций, естественно, равно нулю.
  • Изменение. После каждой покупки клиент может уйти с некоторой вероятностью p. Эта вероятность различна для каждого клиента, и предполагается, что ее распределение по всем клиентам является бета-распределением.

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

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

Во-вторых, недавно клиент задал мне интересный вопрос: должны ли данные транзакций быть распределены Пуассоном, является ли это необходимым условием для использования модели? Ответ - нет! Во-первых, у вас может даже не быть достаточно данных по каждому покупателю, чтобы оценить вероятность того, что он следует какому-то определенному распределению. И затем, опять же, алгоритм моделирует данные с помощью распределения Пуассона, чтобы упростить вещи, и потому что Пуассон является естественным выбором для этого типа данных. Пока ваши данные содержат несколько транзакций для каждого клиента в разные периоды времени, все в порядке!

Примерка модели

Давайте соберем модель. Как мы сопоставляем его с данными и каков результат? Подумайте о простой модели линейной регрессии. Когда вы подгоняете его к данным, результатом являются параметры модели, которые в данном случае представляют собой влияние функций на цель. В нашей модели BG/NBD целью также является оценка значений параметров модели.

Работа модели BG/NBD заключается в оценке параметров двух вероятностных распределений:

  • Гамма-распределение, из которого получаются индивидуальные скорости транзакций клиентов λ,
  • Бета-распределение, из которого получаются индивидуальные вероятности оттока клиентов p.

Бета-версия имеет два параметра, условно называемых a и b, тогда как гамма также нуждается в двух параметрах: rи а. Всего получается четыре параметра модели. Они оцениваются с использованием подхода максимального правдоподобия, что означает, что выбираются такие значения параметров, при которых модель с наибольшей вероятностью будет генерировать данные, которые у нас есть на самом деле. Посмотрим на практике.

             coef  se(coef)  lower 95% bound  upper 95% bound
r        2.009639  0.041406         1.928483         2.090795
alpha  154.393028  3.700599       147.139853       161.646203
a        0.455240  0.019355         0.417304         0.493175
b        1.264726  0.069044         1.129400         1.400051

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

Анализ модели

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

Оба кажутся разумными. Самое главное, у большинства клиентов низкая вероятность оттока (или отсева), что желательно.

Следующий шаг — взглянуть на график частота/новизна. Чтобы нарисовать его, нам нужно определить диапазон частоты и давности в наших данных. Затем мы создаем точную сетку всех возможных комбинаций этих двух параметров и передаем их модели, чтобы она могла предсказать ожидаемое количество будущих покупок в заранее определенный промежуток времени (подробнее о том, как делаются прогнозы, будет сказано ниже). Здесь мы устанавливаем T=7, чтобы получить ожидаемое количество покупок в течение следующей недели.

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

Далее, давайте посмотрим на вероятность оттока. Или, точнее, клиент с определенной комбинацией частоты/давности еще не ушел.

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

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

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

Сколько покупок совершит клиент в следующие 100 дней, учитывая, что они имеют историческую частоту 3,5, давность 450 и возраст 500 дней?

Прогноз равен 0.680, что означает, что мы можем ожидать, что такой клиент совершит в среднем примерно две трети покупки. Другими словами, если мы рассмотрим 100 таких покупателей с одинаковыми характеристиками, то можно ожидать, что 2/3 из них сделают одну покупку, а 1/3 не совершит ни одной (или 1/3 совершит две покупки, а остальные — ни одной, в результате в том же среднем).

Как мы пришли к этому предсказанию? Ну, это все математика, примененная к плотности вероятности, которую оценила модель. Подробности можно найти в этой статье Fader et al (см. уравнение 10 и его вывод в приложении).

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

В то время как сам вывод весьма сложен (он использует Теорему Байеса для расчета совместного распределения коэффициента оттока p и коэффициента транзакций λ, а также решает интеграл Эйлера для гауссовой гипергеометрической функции), полученная формула для прогноза, который необходимо оценить, довольно проста.

Деньги, деньги, деньги: модель Гамма-Гамма

До сих пор мы прогнозировали будущее количество транзакций. Вот как далеко может зайти наша модель BG/NBD. Но чтобы завершить нашу оценку пожизненной ценности клиента, нам нужно преобразовать эти прогнозы объема в денежное выражение. Наиболее распространенный способ сделать это — использовать гамма-гамма-модель, неотъемлемую часть подхода «Купи, пока не умрешь».

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

                monetary_value  frequency
monetary_value        1.000000   0.072322
frequency             0.072322   1.000000

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

Когда модель готова, мы можем оценить среднюю стоимость транзакции для каждого клиента.

0        28.233236
1        26.190742
2        35.487043
3        90.966309
4        31.681303
           ...    
11387    28.755547
11388    41.177010
11389    30.689138
11390    44.424422
11391    38.599852

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

Инфляция — это снижение стоимости денег с течением времени, а это означает, что 100 долларов, которые вы получите через год, сейчас стоят меньше, чем 100 долларов, которые уже есть в вашем кошельке. В мире CLV ценность, которую клиент принесет в будущем, в текущий момент стоит меньше, чем предполагает ее номинальная денежная стоимость. Чтобы учесть это, нам нужно дисконтировать будущие долларовые значения с некоторой ставкой дисконтирования.

Хотя правильное значение скидки может быть предметом экономических дебатов или даже зависеть от бизнеса, мы просто произвольно установим его равным 1% в этом примере. Итак, каков CLV каждого из наших клиентов в ближайшие 12 месяцев?

0         76.130371
1         32.012197
2         73.677196
3        112.946757
4         89.223161
            ...    
11387     43.924401
11388     19.281169
11389     28.020272
11390      3.078582
11391      2.298163

Итак, у нас есть оценки CLV: это денежные значения, приведенные к сегодняшнему доллару, которые мы можем ожидать от каждого клиента в течение следующего года.

Заключительные слова

Мы увидели, что такое пожизненная ценность клиента, почему так важно ее знать и как ее оценить во внеконтрактных условиях с помощью модели «Купи, пока не умрешь». Мы обсудили требования к данным, предположения и архитектуру модели, а также то, как ее подогнать и проанализировать в Python.

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

Если вам понравился этот пост, почему бы вам не подписаться на обновления по электронной почте на мои новые статьи? А, став участником Medium, вы можете поддержать меня и получить неограниченный доступ ко всем историям других авторов и меня.

Нужна консультация? Вы можете спросить меня о чем угодно или заказать 1:1 здесь.

Вы также можете попробовать одну из других моих статей. Не можете выбрать? Выберите один из них: