剖析并解读细分

Python 中的客户细分

Karolis Urbonas

Head of Data Science, Amazon

构建客户画像的方法

  • 各簇的汇总统计,如平均 RFM 值
  • 蛇形图(市场研究)
  • 与总体相比的簇属性相对重要性
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 中的客户细分

用蛇形图理解并比较细分

  • 用于比较不同细分的市场研究方法
  • 各细分属性的可视化
  • 需先标准化数据(中心化与缩放)
  • 绘制各簇在各属性上的平均标准化值
Python 中的客户细分

为蛇形图准备数据

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 数值和指标名各在一列

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

可视化蛇形图

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