Сегментация по давности, частоте и сумме покупок (RFM)

Сегментация клиентов в Python

Karolis Urbonas

Head of Data Science, Amazon

Что такое RFM-сегментация?

Поведенческая сегментация клиентов на основе трёх метрик:

  • Давность покупки (R)
  • Частота покупок (F)
  • Денежная ценность (M)
Сегментация клиентов в Python

Группировка RFM-значений

RFM-значения можно группировать несколькими способами:

  • Перцентили, например квантили
  • Разбивка по принципу Парето 80/20
  • Пользовательская — на основе бизнес-знаний

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

Сегментация клиентов в Python

Краткий обзор перцентилей

Процесс вычисления перцентилей:

  1. Отсортируйте клиентов по нужной метрике
  2. Разбейте их на заданное количество равных групп
  3. Присвойте каждой группе метку
Сегментация клиентов в Python

Вычисление перцентилей на Python

Данные с восемью CustomerID и случайно сгенерированными значениями Spend.

Пример данных о расходах

Сегментация клиентов в Python

Вычисление перцентилей на Python

spend_quartiles = pd.qcut(data['Spend'], q=4, labels=range(1,5))

data['Spend_Quartile'] = spend_quartiles
data.sort_values('Spend')

Сегментация клиентов в Python

Присвоение меток

  • Высший балл присваивается лучшему значению метрики — но «лучший» не всегда означает «наибольший», как в случае с давностью
  • Здесь метки инвертируются: чем недавнее покупка, тем выше ценность клиента

Сегментация клиентов в Python

Присвоение меток

# Create numbered labels
r_labels = list(range(4, 0, -1))

# Divide into groups based on quartiles recency_quartiles = pd.qcut(data['Recency_Days'], q=4, labels=r_labels)
# Create new column data['Recency_Quartile'] = recency_quartiles
# Sort recency values from lowest to highest data.sort_values('Recency_Days')
Сегментация клиентов в Python

Присвоение меток

Как видите, метки квартилей инвертированы: чем недавнее покупка, тем ценнее клиент.

Квартили давности

Сегментация клиентов в Python

Пользовательские метки

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

# Create string labels
r_labels = ['Active', 'Lapsed', 'Inactive', 'Churned']

# Divide into groups based on quartiles recency_quartiles = pd.qcut(data['Recency_Days'], q=4, labels=r_labels) # Create new column data['Recency_Quartile'] = recency_quartiles # Sort values from lowest to highest data.sort_values('Recency_Days')
Сегментация клиентов в Python

Пользовательские метки

Пользовательские метки, присвоенные каждому квартилю

Квартили давности с пользовательскими метками

Сегментация клиентов в Python

Давайте потренируемся!

Сегментация клиентов в Python

Preparing Video For Download...