Profilera och tolka segment

Kundsegmentering i Python

Karolis Urbonas

Head of Data Science, Amazon

Metoder för att bygga kundprofiler

  • Sammanfattande statistik för varje kluster, t.ex. genomsnittliga RFM-värden
  • Ormdiagram (från marknadsundersökning)
  • Relativ vikt av klusterattribut jämfört med populationen
Kundsegmentering i Python

Sammanfattande statistik per kluster

  • Kör k-means-segmentering för flera k-värden nära det rekommenderade värdet.
  • Skapa en klusteretikettskolumn i den ursprungliga DataFrame:n:

    datamart_rfm_k2 = datamart_rfm.assign(Cluster = cluster_labels)
    

    Beräkna genomsnittliga RFM-värden och storlekar för varje kluster:

    datamart_rfm_k2.groupby(['Cluster']).agg({
       'Recency': 'mean',
       'Frequency': 'mean',
       'MonetaryValue': ['mean', 'count'],
    }).round(0)
    
    • Upprepa samma steg för k=3
Kundsegmentering i Python

Sammanfattande statistik per kluster

  • Jämför genomsnittliga RFM-värden för varje klusterlösning
Kundsegmentering i Python

Ormdiagram för att förstå och jämföra segment

  • Marknadsundersökningsteknik för att jämföra olika segment
  • Visuell representation av varje segments attribut
  • Data behöver normaliseras först (centrera & skala)
  • Rita varje klusters genomsnittliga normaliserade värden per attribut
Kundsegmentering i Python

Förbered data för ett ormdiagram

Omvandla datamart_normalized till en DataFrame och lägg till en Cluster-kolumn

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

Omvandla datan till långformat så att RFM-värden och måttnamn lagras i varsitt kolumn

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

Visualisera ett ormdiagram

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

Kundsegmentering i Python

Relativ vikt av segmentattribut

  • Användbar teknik för att identifiera den relativa vikten av varje segments attribut
  • Beräkna genomsnittsvärden för varje kluster
  • Beräkna genomsnittsvärden för populationen
  • Beräkna viktpoäng genom att dividera dem och subtrahera 1 (returnerar 0 när klustrets genomsnitt är lika med populationens)
cluster_avg = datamart_rfm_k3.groupby(['Cluster']).mean()

population_avg = datamart_rfm.mean()
relative_imp = cluster_avg / population_avg - 1
Kundsegmentering i Python

Analysera och visualisera relativ vikt

  • Ju mer ett kvotvärde avviker från 0, desto viktigare är attributet för ett segment (relativt hela populationen).
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()
Kundsegmentering i Python

Heatmap över relativ vikt

         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
Kundsegmentering i Python

Nu kör vi en övning!

Kundsegmentering i Python

Preparing Video For Download...