当前位置: 首页 > 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.jsqmd.com/news/926235/

相关文章:

  • 简单记录---小小的第一步
  • 别再当AI的‘盲盒玩家’:用SHAP和LIME手把手拆解你的机器学习模型(Python实战)
  • 2026年正规GPS定位器TOP5评测:北斗卫星定位器/单北斗定位器/定位器产品/宠物定位器/微型定位器/无线定位器/选择指南 - 优质品牌商家
  • Arm Neoverse V2 PMU架构与性能监控实践
  • Spring Boot 、Spring Cloud 微服务架构认证授权方案
  • 2026年优质镍锻件TOP5推荐:N4纯镍板、N6纯镍板、N6镍卷带、N6镍管、纯镍棒、纯镍管、钛镍合金材料、钛镍材料选择指南 - 优质品牌商家
  • 200万token上下文怎么实现的?GPT-5.5架构拆解
  • UICollectionView基础
  • 国内的七大主流大模型推荐算法有那些差异
  • CC-Switch 全平台部署与使用正式教程【2026-05-31】
  • AI时代艺术家的反抗
  • 【AI问答】GoLang关于代码复用
  • 基于 Isolation Forest + PyOD + Streamlit 的工业设备异常检测与故障预警系统:Python 机器学习项目实战
  • 用Python实战LSTM:从数学建模到量化交易,手把手复现华中杯B题(附完整代码)
  • 2026年苏州本地正规房屋漏水维修三家机构核心能力梳理与场景适配分析 专业防水公司排名推荐(2026年6月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • Gemini Agent框架实战:从零搭建可商用自动化工作流,含3套已通过SOC2认证的Prompt架构
  • 避开SHL题库陷阱:手把手教你高效准备联想技术岗笔试(附图形推理真题思路)
  • Codex 从安装到国内接入跑通了:Windows / Mac / Linux 小白版记录
  • PYTHON+AI LLM DAY SIXTY-TWO
  • HPC基准测试:核心价值、分类法与优化实践
  • Keil MDK调试中System Viewer外设寄存器缺失问题解决方案
  • 2026年5月更新:深度剖析四川仟屹集团AI今日头条可靠服务商选择之道 - 2026年企业资讯
  • 书匠策AI:我劝你别再熬夜肝课程论文了,这个工具真的能救命
  • 方达炬:方家 将用5到10年时间建设【高福利家庭】
  • VirtualBox 7.0.x 在Win10/11上启动报错supR3HardenedWinReSpawn?保姆级修复教程(含注册表修改与驱动安装)
  • 从SVD到RANSAC:深入理解点云平面拟合的数学原理与Python实现细节
  • 20260531 区块链与数字货币 实验二:图算法与社交网络分析
  • 2026优质玻璃纤维制造商标杆名录:玻璃纤维销售厂家、玻璃纤维企业、玻璃纤维优质厂家、玻璃纤维供应厂家、玻璃纤维供货商选择指南 - 优质品牌商家
  • 【稳定性评测】同样的 Prompt 测试十次结果都不一样?如何通过系统提示控制一致性
  • `build-your-own-x` 涨了817星,但今天真正该装的是这个