Profila e interpreta i segmenti

Customer Segmentation in Python

Karolis Urbonas

Head of Data Science, Amazon

Approcci per creare buyer persona

  • Statistiche riassuntive per ogni cluster, es. valori RFM medi
  • Snake plot (dalla ricerca di mercato)
  • Importanza relativa degli attributi del cluster rispetto alla popolazione
Customer Segmentation in Python

Statistiche riassuntive di ogni cluster

  • Esegui k-means per diversi valori di k intorno a quello consigliato.
  • Crea una colonna etichetta cluster nel DataFrame originale:

    datamart_rfm_k2 = datamart_rfm.assign(Cluster = cluster_labels)
    

    Calcola valori RFM medi e dimensioni per ogni cluster:

    datamart_rfm_k2.groupby(['Cluster']).agg({
       'Recency': 'mean',
       'Frequency': 'mean',
       'MonetaryValue': ['mean', 'count'],
    }).round(0)
    
    • Ripeti lo stesso per k=3
Customer Segmentation in Python

Statistiche riassuntive di ogni cluster

  • Confronta i valori RFM medi di ogni soluzione di clustering
Customer Segmentation in Python

Snake plot per capire e confrontare i segmenti

  • Tecnica di ricerca di mercato per confrontare segmenti
  • Rappresentazione visiva degli attributi di ogni segmento
  • Prima normalizza i dati (centratura e scalatura)
  • Traccia i valori medi normalizzati di ogni attributo per cluster
Customer Segmentation in Python

Prepara i dati per uno snake plot

Trasforma datamart_normalized in DataFrame e aggiungi una colonna Cluster

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

Trasforma i dati in formato long così che valori RFM e nomi metriche siano in 1 colonna ciascuno

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

Visualizza uno snake plot

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

Customer Segmentation in Python

Importanza relativa degli attributi del segmento

  • Tecnica utile per capire l'importanza relativa degli attributi di ogni segmento
  • Calcola le medie di ogni cluster
  • Calcola le medie della popolazione
  • Calcola l'indice di importanza dividendo le due medie e sottraendo 1 (restituisce 0 quando la media del cluster = media della popolazione)
cluster_avg = datamart_rfm_k3.groupby(['Cluster']).mean()

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

Analizza e traccia l'importanza relativa

  • Più il rapporto si allontana da 0, maggiore è l'importanza dell'attributo per il segmento (rispetto al totale).
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()
Customer Segmentation in Python

Heatmap dell'importanza relativa

         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
Customer Segmentation in Python

È il tuo turno: prova diverse tecniche di profiling clienti!

Customer Segmentation in Python

Preparing Video For Download...