Profilowanie i interpretacja segmentów

Segmentacja klientów w Pythonie

Karolis Urbonas

Head of Data Science, Amazon

Metody tworzenia person klientów

  • Statystyki opisowe dla każdego klastra, np. średnie wartości RFM
  • Wykresy wężowe (z badań rynkowych)
  • Względna ważność atrybutów klastra w porównaniu z populacją
Segmentacja klientów w Pythonie

Statystyki opisowe każdego klastra

  • Uruchom segmentację k-means dla kilku wartości k wokół zalecanej.
  • Utwórz kolumnę etykiet klastra w oryginalnym DataFrame:

    datamart_rfm_k2 = datamart_rfm.assign(Cluster = cluster_labels)
    

    Oblicz średnie wartości RFM i rozmiary dla każdego klastra:

    datamart_rfm_k2.groupby(['Cluster']).agg({
       'Recency': 'mean',
       'Frequency': 'mean',
       'MonetaryValue': ['mean', 'count'],
    }).round(0)
    
    • Powtórz to samo dla k=3
Segmentacja klientów w Pythonie

Statystyki opisowe każdego klastra

  • Porównaj średnie wartości RFM dla każdego rozwiązania klasteryzacji
Segmentacja klientów w Pythonie

Wykresy wężowe do analizy i porównywania segmentów

  • Technika z badań rynkowych do porównywania segmentów
  • Wizualna reprezentacja atrybutów każdego segmentu
  • Wymagana normalizacja danych (centrowanie i skalowanie)
  • Wykres średnich znormalizowanych wartości każdego atrybutu dla klastrów
Segmentacja klientów w Pythonie

Przygotowanie danych do wykresu wężowego

Przekształć datamart_normalized w DataFrame i dodaj kolumnę Cluster

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

Przekształć dane do formatu długiego, aby wartości RFM i nazwy metryk były przechowywane w osobnych kolumnach

datamart_melt = pd.melt(datamart_normalized.reset_index(), 
                    id_vars=['CustomerID', 'Cluster'],
                    value_vars=['Recency', 'Frequency', 'MonetaryValue'], 
                    var_name='Attribute', 
                    value_name='Value')
Segmentacja klientów w Pythonie

Wizualizacja wykresu wężowego

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

Segmentacja klientów w Pythonie

Względna ważność atrybutów segmentu

  • Technika identyfikacji względnej ważności atrybutów każdego segmentu
  • Oblicz średnie wartości każdego klastra
  • Oblicz średnie wartości populacji
  • Oblicz wskaźnik ważności, dzieląc je i odejmując 1 (zapewnia zwrócenie 0, gdy średnia klastra równa się średniej populacji)
cluster_avg = datamart_rfm_k3.groupby(['Cluster']).mean()

population_avg = datamart_rfm.mean()
relative_imp = cluster_avg / population_avg - 1
Segmentacja klientów w Pythonie

Analiza i wizualizacja względnej ważności

  • Im bardziej wskaźnik odbiega od 0, tym większa ważność atrybutu dla segmentu (względem całej populacji).
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()
Segmentacja klientów w Pythonie

Mapa ciepła względnej ważności

         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
Segmentacja klientów w Pythonie

Czas na eksperymentowanie z różnymi technikami profilowania klientów!

Segmentacja klientów w Pythonie

Preparing Video For Download...