当前位置: 首页 > news >正文

KMeans聚类实战:用Python给客户分群,5步搞定RFM模型分析

KMeans聚类实战:用Python给客户分群,5步搞定RFM模型分析

当市场部同事拿着一份包含10万条交易记录的Excel表格找你时,他们真正需要的不是数据报表,而是能够直接指导营销策略的客户洞察。这就是为什么RFM模型与KMeans的结合会成为电商、零售行业的黄金标准——它把冰冷的交易数据转化成了鲜活的客户画像。

1. 从业务需求到数据准备

在开始敲代码之前,我们需要明确RFM模型的三个核心维度:

  • Recency(最近消费时间):客户最后一次购买距今的天数
  • Frequency(消费频率):客户在统计周期内的购买次数
  • Monetary(消费金额):客户在统计周期内的总消费金额

假设我们已有2023年全年的交易数据,原始数据结构通常包含以下字段:

import pandas as pd raw_data = pd.DataFrame({ 'customer_id': [1001, 1002, 1001, 1003], 'order_date': ['2023-01-15', '2023-03-22', '2023-11-05', '2023-12-12'], 'order_amount': [299, 150, 450, 899] })

2. 构建RFM特征矩阵

数据清洗和特征工程是决定模型效果的关键步骤。我们需要将原始交易数据转换为每个客户对应的RFM值:

# 转换日期格式并设置分析时间点 analysis_date = pd.to_datetime('2024-01-01') raw_data['order_date'] = pd.to_datetime(raw_data['order_date']) # 计算RFM指标 rfm = raw_data.groupby('customer_id').agg({ 'order_date': lambda x: (analysis_date - x.max()).days, # Recency 'customer_id': 'count', # Frequency 'order_amount': 'sum' # Monetary }).rename(columns={ 'order_date': 'recency', 'customer_id': 'frequency', 'order_amount': 'monetary' })

此时我们会发现三个指标的尺度差异巨大:

  • Recency:可能从1天到365天
  • Frequency:通常在1-50次之间
  • Monetary:可能从几十到上万元

3. 数据标准化与异常处理

KMeans对特征的尺度非常敏感,我们需要先进行标准化处理。同时要警惕异常值对聚类中心的拉扯:

from sklearn.preprocessing import StandardScaler import numpy as np # 对数变换处理右偏分布 rfm['monetary'] = np.log1p(rfm['monetary']) # 标准化处理 scaler = StandardScaler() rfm_scaled = pd.DataFrame( scaler.fit_transform(rfm), columns=rfm.columns, index=rfm.index ) # 移除3个标准差之外的异常值 rfm_clean = rfm_scaled[ (np.abs(rfm_scaled) < 3).all(axis=1) ]

注意:对于Recency指标,较小的值代表更好的客户,因此有时会取负值进行标准化,使所有指标方向一致

4. 确定最佳聚类数量

使用肘部法则和轮廓系数相结合的方法确定K值:

from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score import matplotlib.pyplot as plt inertia = [] silhouette = [] k_range = range(2, 8) for k in k_range: kmeans = KMeans(n_clusters=k, random_state=42) labels = kmeans.fit_predict(rfm_clean) inertia.append(kmeans.inertia_) silhouette.append(silhouette_score(rfm_clean, labels)) # 绘制肘部法则图 plt.plot(k_range, inertia, 'bo-') plt.xlabel('Number of clusters') plt.ylabel('Inertia') plt.show()

实际业务中,我们通常会选择4-6个分群,既能体现差异又便于营销策略制定。

5. 模型训练与结果解读

假设我们确定K=5,训练最终模型并分析各簇特征:

final_kmeans = KMeans(n_clusters=5, random_state=42) rfm_clean['cluster'] = final_kmeans.fit_predict(rfm_clean) # 反标准化查看原始尺度 cluster_profile = rfm_clean.groupby('cluster').mean() cluster_profile['monetary'] = np.expm1(cluster_profile['monetary'])

典型的RFM分群结果可能包括:

分群RecencyFrequencyMonetary客户类型
030天15次¥5800高价值忠诚客户
1180天2次¥800流失风险客户
290天5次¥2500潜力客户
310天1次¥300新客户
4365天1次¥200沉睡客户

6. 从分析到行动:制定营销策略

聚类结果需要转化为可执行的业务策略。例如针对不同分群可以采取:

  • 高价值忠诚客户(群0)

    • 邀请参与VIP专属活动
    • 提供个性化推荐和专属客服
    • 测试更高的客单价产品
  • 流失风险客户(群1)

    • 发送挽回优惠券
    • 进行满意度调研
    • 设计唤醒邮件序列
# 生成客户分群标签 def assign_segment(row): if row['cluster'] == 0: return 'VIP' elif row['cluster'] == 1: return 'At Risk' # 其他分群判断... rfm_clean['segment'] = rfm_clean.apply(assign_segment, axis=1)

实际项目中,我们会将分群结果与CRM系统对接,实现自动化营销触达。我曾为一家电商平台实施这套方案,6个月内使高价值客户复购率提升了27%,而营销成本降低了15%。

http://www.zskr.cn/news/1437567.html

相关文章:

  • 别再当AI的‘盲盒玩家’:用SHAP和LIME手把手拆解你的机器学习模型(Python实战)
  • Arm Neoverse V2 PMU架构与性能监控实践
  • 200万token上下文怎么实现的?GPT-5.5架构拆解
  • AI时代艺术家的反抗
  • 基于 Isolation Forest + PyOD + Streamlit 的工业设备异常检测与故障预警系统:Python 机器学习项目实战
  • Gemini Agent框架实战:从零搭建可商用自动化工作流,含3套已通过SOC2认证的Prompt架构
  • HPC基准测试:核心价值、分类法与优化实践
  • 避开SHL题库陷阱:手把手教你高效准备联想技术岗笔试(附图形推理真题思路)
  • Keil MDK调试中System Viewer外设寄存器缺失问题解决方案
  • 书匠策AI:我劝你别再熬夜肝课程论文了,这个工具真的能救命
  • 2026年5月更新:深度剖析四川仟屹集团AI今日头条可靠服务商选择之道 - 2026年企业资讯
  • 方达炬:方家 将用5到10年时间建设【高福利家庭】
  • `build-your-own-x` 涨了817星,但今天真正该装的是这个
  • 2026优质玻璃纤维制造商标杆名录:玻璃纤维销售厂家、玻璃纤维企业、玻璃纤维优质厂家、玻璃纤维供应厂家、玻璃纤维供货商选择指南 - 优质品牌商家
  • 【稳定性评测】同样的 Prompt 测试十次结果都不一样?如何通过系统提示控制一致性
  • 我写了十年代码,直到AI出现
  • web 第二次作业
  • MiMo Vision Router:让纯文本模型秒变多模态
  • 【Android】手机屏幕劫持防护
  • Keil C51编译器Makefile选项解析与替代方案
  • 量子计算冗余架构:双星设计提升容错与并行能力
  • 【元器件专题】MOS管内部结构
  • LEGO框架:空间加速器设计的动态数据流优化
  • 2026年Q2炉渣钢渣供应商评测:上阳建材适配性分析 - 优质品牌商家
  • 乐高wedo《套圈游戏》
  • Codex+Vscode+Remote ssh+ 服务器自定义第三方API配置保姆级教程
  • 最新Python爬虫实战(多线程爬虫篇)——案例26:多线程爬取斗罗大陆3龙王传说小说批量保存到txt(附上完整爬虫代码)
  • 2026年5月秦皇岛酒店之选:为何万怡酒店脱颖而出 - 2026年企业资讯
  • 基于MATLAB的simulink汽车防抱死仿真模型,汽车制动防抱死模型ABS仿真模型
  • RTOS学习笔记,二、多任务管理