描繪並解讀族群

Python 的客群分群

Karolis Urbonas

Head of Data Science, Amazon

建立客群人物誌的方法

  • 各叢集的摘要統計,例如平均 RFM 值
  • Snake plot(市調常用)
  • 叢集屬性相對於全體的相對重要性
Python 的客群分群

各叢集的摘要統計

  • 在建議值附近以多個 k 執行 k-means 分群。
  • 在「原始」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 的客群分群

用 Snake plot 理解與比較族群

  • 比較不同族群的市調技巧
  • 以視覺方式呈現各族群屬性
  • 需先正規化資料(置中與縮放)
  • 繪出各叢集於各屬性的平均正規化值
Python 的客群分群

為 Snake plot 準備資料

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 值與指標名稱各存在 1 欄

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

視覺化 Snake plot

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