Профілювання та інтерпретація сегментів

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

Karolis Urbonas

Head of Data Science, Amazon

Підходи до створення портретів клієнтів

  • Описова статистика для кожного кластера, напр., середні значення RFM
  • Snake-плоти (з маркетингових досліджень)
  • Відносна важливість атрибутів кластера порівняно з популяцією
Сегментація клієнтів у Python

Описова статистика кожного кластера

  • Запустіть сегментацію k-means для кількох значень k навколо рекомендованого.
  • Створіть стовпчик міток кластера в початковому датафреймі:

    datamart_rfm_k2 = datamart_rfm.assign(Cluster = cluster_labels)
    

    Обчисліть середні RFM-значення та розміри для кожного кластера:

    datamart_rfm_k2.groupby(['Cluster']).agg({
       'Recency': 'mean',
       'Frequency': 'mean',
       'MonetaryValue': ['mean', 'count'],
    }).round(0)
    
    • Повторіть те саме для k=3
Сегментація клієнтів у Python

Описова статистика кожного кластера

  • Порівняйте середні RFM-значення для кожного варіанта кластеризації
Сегментація клієнтів у Python

Snake-плоти для розуміння й порівняння сегментів

  • Маркетинговий метод для порівняння сегментів
  • Візуальне представлення атрибутів кожного сегмента
  • Спершу потрібно нормалізувати дані (центрування й масштабування)
  • Побудуйте середні нормалізовані значення кожного атрибуту для кластерів
Сегментація клієнтів у Python

Підготовка даних для snake-плоту

Перетворіть datamart_normalized на DataFrame і додайте стовпчик Cluster

datamart_normalized = pd.DataFrame(datamart_normalized, 
                                   index=datamart_rfm.index, 
                                   columns=datamart_rfm.columns)
datamart_normalized['Cluster'] = datamart_rfm_k3['Cluster']

Розплавте дані у довгий формат, щоб значення RFM і назви метрик зберігалися по 1 стовпчику кожна

datamart_melt = pd.melt(datamart_normalized.reset_index(), 
                    id_vars=['CustomerID', 'Cluster'],
                    value_vars=['Recency', 'Frequency', 'MonetaryValue'], 
                    var_name='Attribute', 
                    value_name='Value')
Сегментація клієнтів у Python

Візуалізація snake-плоту

plt.title('Snake plot of standardized variables')
sns.lineplot(x="Attribute", y="Value", hue='Cluster', data=datamart_melt)

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

Відносна важливість атрибутів сегмента

  • Корисно для визначення відносної важливості атрибутів сегмента
  • Обчисліть середні значення кожного кластера
  • Обчисліть середні значення по популяції
  • Обчисліть індекс важливості: поділити й відняти 1 (дає 0, коли середнє кластера дорівнює середньому популяції)
cluster_avg = datamart_rfm_k3.groupby(['Cluster']).mean()

population_avg = datamart_rfm.mean()
relative_imp = cluster_avg / population_avg - 1
Сегментація клієнтів у Python

Аналіз і візуалізація відносної важливості

  • Чим далі від 0 відношення, тим вища важливість атрибуту для сегмента (відносно загальної попул.)
relative_imp.round(2)
         Recency  Frequency  MonetaryValue
Cluster                                   
0          -0.82       1.68           1.83
1           0.84      -0.84          -0.86
2          -0.15      -0.34          -0.42
# Plot heatmap
plt.figure(figsize=(8, 2))
plt.title('Relative importance of attributes')
sns.heatmap(data=relative_imp, annot=True, fmt='.2f', cmap='RdYlGn')
plt.show()
Сегментація клієнтів у Python

Теплокарта відносної важливості

         Recency  Frequency  MonetaryValue
Cluster                                   
0          -0.82       1.68           1.83
1           0.84      -0.84          -0.86
2          -0.15      -0.34          -0.42
Сегментація клієнтів у Python

Ваш час поекспериментувати з різними методами профілювання клієнтів!

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

Preparing Video For Download...