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

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

Karolis Urbonas

Head of Data Science, Amazon

Подходы к построению портретов клиентов

  • Сводная статистика по каждому кластеру, например средние значения RFM
  • Змеевидные графики (из маркетинговых исследований)
  • Относительная важность атрибутов кластера по сравнению с генеральной совокупностью
Сегментация клиентов в Python

Сводная статистика по каждому кластеру

  • Выполните k-means-сегментацию для нескольких значений k вблизи рекомендованного.
  • Добавьте столбец с меткой кластера в исходный DataFrame:

    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

Змеевидные графики для анализа и сравнения сегментов

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

Подготовка данных для змеевидного графика

Преобразуйте 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 и названия метрик хранились в отдельных столбцах

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

Визуализация змеевидного графика

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...