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

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

Важно правильно описать отток клиентов: выбор неправильной модели оттока означает, что ваш анализ будет либо полон произвольных предположений, либо ошибочным. Слишком часто компании определяют отток как отсутствие покупок по прошествии N дней; обычно N кратно 7 или 30 дням. Из-за этого ограничения по времени он произвольно разделяет клиентов на два состояния: активное или неактивное. Два покупателя в активном состоянии могут выглядеть невероятно по-разному и иметь разную склонность к покупке, поэтому неестественно относиться к ним одинаково. Например, к покупателю, который покупает продукты оптом, следует относиться иначе, чем к покупателю, который покупает продукты каждый день. Эта бинарная модель имеет явные ограничения.

Наша команда данных признала ограничение, связанное с неправильным определением оттока, и нам нужно было работать лучше. Используя вероятность, мы можем по-новому взглянуть на отток клиентов. Представьте, что несколько гипотетических покупателей посещают магазин, как показано на рисунке ниже. Клиент А надежен. Они являются постоянными покупателями и покупают в вашем магазине каждую неделю. Прошло три дня с тех пор, как вы в последний раз видели их в своем магазине, но есть вероятность, что они вернутся. История клиента Б недолговечна. Когда они впервые нашли ваш магазин, они совершали покупки почти ежедневно, но теперь вы не видели их несколько месяцев, поэтому вероятность того, что они все еще будут активны, мала. У клиента C более медленная история. Они покупают что-то в вашем магазине пару раз в год, а в последний раз вы видели их 10 месяцев назад. Что вы можете сказать о вероятности активности клиента C? Скорее всего, где-то посередине.

Мы можем формализовать эту интуицию вероятных клиентов в модели. А пока рассмотрим простую модель. Предположим, у каждого покупателя есть два внутренних параметра: скорость покупок, λ, и вероятность оттока клиентов, p. С точки зрения бизнеса, даже если клиент уходит, мы не видим событие ухода и можем только определить этот факт по его истории покупок. Учитывая скорость покупок клиента, их время между покупками экспоненциально распределяется со скоростью λ, что означает, что это похоже на процесс Пуассона. После каждой будущей покупки у покупателя есть p шанс отказаться от покупки. Вместо того, чтобы пытаться оценить параметры каждого клиента, мы можем подумать о параметре отдельного клиента, исходя из распределения вероятностей. Таким образом, мы можем оценить распределение, которое определяет параметры и, следовательно, поведение клиентов. В целом это известно как иерархическая модель, в которой ненаблюдаемые объекты (поведение клиентов) создаются из распределений вероятностей.

Распределения вероятностей для λ и p различны для каждой компании. Первым шагом в применении этой модели является оценка распределения этих количеств в вашем конкретном бизнесе. Предположим, что λ покупателя происходит из Гамма-распределения (с неизвестными на данный момент параметрами), а p происходит из Бета-распределения ( также с неизвестными на данный момент параметрами). Эту модель предлагают авторы Легкого подсчета клиентов: альтернатива модели Парето / NBD. Они называют это моделью BG / NBD (бета-геометрическое / отрицательное биномиальное распределение).

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

  • Возраст: промежуток времени от первой покупки покупателя до сегодняшнего дня.
  • Давность: каков был возраст покупателя, совершившего последнюю покупку?
  • Частота: сколько повторных покупок они сделали?

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

  • У клиента А большие возраст, частота посещений и давность.
  • У клиента B большой возраст и частота посещений, но гораздо меньшая давность.
  • У клиента C большой возраст, низкая частота посещений и умеренная давность.

Возможность статистически определять поведение клиентов A, B и C означает, что предприниматель может лучше проводить целевые рекламные кампании, вводить коды скидок и прогнозировать пожизненную ценность клиента.

Данные отдельных клиентов могут быть включены в функцию правдоподобия и поданы в стандартную процедуру оптимизации для нахождения параметров гамма-распределения и бета-распределения (r, α) и (a, b) соответственно. Для этого можно использовать функцию правдоподобия, полученную из статьи BG / NBD:

куда

Мы используем процедуры оптимизации в Python, но в документе описано, как это сделать в электронной таблице, если вы предпочитаете.

Как только эти параметры распределения известны (α, r, a, b), мы можем посмотреть на такие показатели, как вероятность активности клиента с учетом его истории покупок. Организация этого как распределения полезна в качестве показателя здоровья клиентской базы. Другой вариант - посмотреть на тепловую карту клиентской базы. По мере того, как мы меняем давность клиента, мы ожидаем, что вероятность его активности возрастет. И по мере того, как мы меняем частоту, мы ожидаем, что вероятность увеличится также с учетом высокой давности. Ниже мы строим график вероятности активности при различной частоте и давности:

Цифра убеждает нас, что модель ведет себя так, как мы ожидали. Точно так же мы можем посмотреть на ожидаемое количество будущих покупок за единицу времени:

В Shopify мы используем модифицированную модель BG / NBD, реализованную в lifetimes, пакет с открытым исходным кодом, поддерживаемый автором и командой Shopify Data. Полученный в результате анализ отправляется в нашу инфраструктуру отчетности для отображения в отчетах клиентов. У нас более 500 тысяч продавцов, на которых мы можем обучить модель BG / NBD менее чем за час. Мы делаем это, используя DataFrames Apache Spark, чтобы собирать необработанные данные, группировать строки по магазинам и применять пользовательскую функцию Python (UDF) к каждому разделу. UDF содержит алгоритм оценки срока службы. По соображениям производительности мы производим подвыборку до 50 тыс. Покупателей на магазин, потому что оценка сверх этого дала убывающую прибыль. После подгонки данных к параметрам модели BG / NBD мы применяем модель к каждому покупателю в этом магазине и снова получаем результаты. В целом, мы делаем вывод о вероятности оттока клиентов и ожидаемых значениях для более чем 500 миллионов клиентов-продавцов в прошлом.

Одна из причин выбора модели BG / NBD - ее легкость в интерпретации. Поскольку мы показываем конечные результаты владельцам магазинов, мы не хотели, чтобы модель была черным ящиком, из-за которого им было бы трудно объяснить, почему клиент подвергался риску или был лоялен. Напомним, переменные, требуемые для модели BG / NBD, - это возраст, частота и новизна. Каждую из этих переменных легко понять даже нетехническим специалистам. Модель BG / NBD кодифицирует взаимодействия между этими тремя переменными и предоставляет количественные меры, основанные на них. С другой стороны, BG / NBD действительно страдает излишней простотой. Он плохо справляется с сезонными тенденциями. Например, термин "частота" сворачивает все покупки в одно значение, игнорируя любую сезонность в покупательском поведении. Еще одно ограничение заключается в использовании этой модели: вы не можете легко добавить в модель дополнительные переменные клиента (например, страну, приобретенные продукты).

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