RFM-сегментація: давність, частота, виручка

Сегментація клієнтів у Python

Karolis Urbonas

Head of Data Science, Amazon

Що таке RFM-сегментація?

Поведінкова сегментація клієнтів за трьома метриками:

  • Recency (R)
  • Frequency (F)
  • Monetary Value (M)
Сегментація клієнтів у Python

Групування значень RFM

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

  • Перцентилі, напр. квантилі
  • Правило Парето 80/20
  • Кастомні — на основі знання бізнесу

Ми реалізуємо групування за перцентилями.

Сегментація клієнтів у Python

Коротко про перцентилі

Процес обчислення перцентилів:

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

Обчислення перцентилів у Python

Дані з вісьмома CustomerID і випадково розрахованими значеннями Spend.

dummy_percentile_data

Сегментація клієнтів у Python

Обчислення перцентилів у Python

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

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

Сегментація клієнтів у Python

Призначення ярликів

  • Найвищий бал — за найкращу метрику; найкраще не завжди найбільше, напр. для recency
  • Тут ярлик інверсний — що клієнт «свіжіший», то краще

Сегментація клієнтів у 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

Призначення ярликів

Як бачите, ярлики квартилів інверсні, адже більш недавні клієнти цінніші.

recency_quartiles

Сегментація клієнтів у 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

Кастомні ярлики

Кастомні ярлики, призначені кожному квартилю

Recency_quartiles

Сегментація клієнтів у Python

Давайте потренуємось із перцентилями!

Сегментація клієнтів у Python

Preparing Video For Download...