Profielen en segmenten interpreteren

Klantsegmentatie in Python

Karolis Urbonas

Head of Data Science, Amazon

Aanpakken om klantpersona’s te bouwen

  • Samenvattende statistieken per cluster, bv. gemiddelde RFM-waarden
  • Snake plots (uit marktonderzoek)
  • Relatieve belangrijkheid van clusterattributen t.o.v. populatie
Klantsegmentatie in Python

Samenvattende statistieken per cluster

  • Voer k-means-segmentatie uit voor meerdere k-waarden rond de aanbevolen waarde.
  • Maak een clusterlabelkolom in de originele DataFrame:

    datamart_rfm_k2 = datamart_rfm.assign(Cluster = cluster_labels)
    

    Bereken gemiddelde RFM-waarden en groottes per cluster:

    datamart_rfm_k2.groupby(['Cluster']).agg({
       'Recency': 'mean',
       'Frequency': 'mean',
       'MonetaryValue': ['mean', 'count'],
    }).round(0)
    
    • Herhaal dit voor k=3
Klantsegmentatie in Python

Samenvattende statistieken per cluster

  • Vergelijk gemiddelde RFM-waarden van elke clusteroplossing
Klantsegmentatie in Python

Snake plots om segmenten te begrijpen en te vergelijken

  • Marktonderzoekstechniek om segmenten te vergelijken
  • Visuele weergave van attributen per segment
  • Data eerst normaliseren (centeren & schalen)
  • Plot per cluster de gemiddelde genormaliseerde attribuutwaarden
Klantsegmentatie in Python

Data voorbereiden voor een snake plot

Zet datamart_normalized om naar een DataFrame en voeg een Cluster-kolom toe

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

Smelt de data naar long-formaat zodat RFM-waarden en metriek-namen elk in 1 kolom staan

datamart_melt = pd.melt(datamart_normalized.reset_index(), 
                    id_vars=['CustomerID', 'Cluster'],
                    value_vars=['Recency', 'Frequency', 'MonetaryValue'], 
                    var_name='Attribute', 
                    value_name='Value')
Klantsegmentatie in Python

Een snake plot visualiseren

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

Klantsegmentatie in Python

Relatieve belangrijkheid van segmentattributen

  • Handig om de relatieve belangrijkheid van attributen per segment te zien
  • Gemiddelde waarden per cluster berekenen
  • Gemiddelde waarden van de populatie berekenen
  • Bepaal belangrijkheid: deel door elkaar en trek 1 af (geeft 0 als cluster = populatie)
cluster_avg = datamart_rfm_k3.groupby(['Cluster']).mean()

population_avg = datamart_rfm.mean()
relative_imp = cluster_avg / population_avg - 1
Klantsegmentatie in Python

Analyseer en plot relatieve belangrijkheid

  • Hoe verder de ratio van 0 af ligt, hoe belangrijker het attribuut is voor het segment (t.o.v. totaal).
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()
Klantsegmentatie in Python

Heatmap: relatieve belangrijkheid

         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
Klantsegmentatie in Python

Jouw beurt om te experimenteren met klantprofilering!

Klantsegmentatie in Python

Preparing Video For Download...