🧑 博主简介:曾任某智慧城市类企业
算法总监
,目前在美国市场的物流公司从事高级算法工程师
一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907
)
💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。
【数据分析】基于Pandas的RFM客户分层实战:Python代码全解析
一、RFM模型核心原理
RFM模型是电商领域客户价值分析的黄金工具,通过三个关键维度量化用户价值:
- R(Recency):最近消费时间(天) → 留存敏感度
- F(Frequency):消费频率(次) → 忠诚度
- M(Monetary):消费金额(元) → 贡献价值
在电商领域,RFM模型可帮助企业了解客户的购买行为和购买偏好,从而识别高价值客户、潜在回头客或低活跃度用户。这有助于电商企业定制个性化的营销策略。
本案例基于某电商平台3个月订单数据,使用Python演示完整的RFM分析流程。完整代码见文末Github链接。
二、数据准备与清洗
2.1 导入数据
import pandas as pd
import numpy as np
df = pd.read_csv( '用户下单数据.csv')
df.head()
2.2 数据探索和清洗
# 查看数据情况
df.shape
# 查看数据具体情况
df.info()
# 查看数据缺失值情况
df.isnall().su()
查看数据类型发现下单时间的数据类型是object,需要将其转化为日期类型,然后,根据交易日期,计算出每次交易距今的间隔天数。
三、核心指标计算
3.1 时间数据清洗
df['下单时间'] = pd.to_datetime(df['下单时间'],format='%Y/%m/%d')
# 假设2023-06-05是计算当天,求交易日期至计算当天的距离天数
df['间隔天数'] = pd.to_datetime('2023-06-05') - df['下单时间']
df['间隔天数'] = df['间隔天数'].dt.days
df.head()
3.2 计算R/F/M值
R = df.groupby(by=['用户ID'],as_index=False)['间隔天数'].agg('min')
F = df.groupby(by=['用户ID'],as_index=False)['订单ID'].agg('count')
M = df.groupby(by=['用户ID'],as_index=False)['交易金额'].agg('sum')
# 将R、F、M三个数据框连接起来
RFM_df = R.merge(F).merge(M)
# 修改列名
RFM_df.columns = ['用户ID', 'R', 'F', 'M']
RFM_df.head()
3.3 指标分箱打分
RFM_df.loc[RFM_df['R'] >= RFM_df.R.mean(), 'R_S'] = 1
RFM_df.loc[RFM_df['R'] < RFM_df.R.mean(), 'R_S'] = 2
RFM_df.loc[RFM_df['F'] <= RFM_df.F.mean(), 'F_S'] = 1
RFM_df.loc[RFM_df['F'] > RFM_df.F.mean(), 'F_S'] = 2
RFM_df.loc[RFM_df['M'] <= RFM_df.M.mean(), 'M_S'] = 1
RFM_df.loc[RFM_df['M'] > RFM_df.M.mean(), 'M_S'] = 2
RFM_df.head()
3.4 生成RFM综合标签
# 生成RFM综合标签
RFM_df['RFM'] = 100*RFM_df.R_S+10*RFM_df.F_S+1*RFM_df.M_S
RFM_df.head()
四、客户分层与可视化
4.1 客户分层规则
CT = pd.DataFrame(data={'RFM': [111,112,121,122,211,212,221,222],
'Type': ['潜在客户','重点挽留客户','一般保持客户','重点保持客户',
'一般发展客户','重点发展客户','一般价值客户','高价值客户'] } )
# 数据合并
RFM_df = RFM_df.merge(CT)
RFM_df.head()
4.2 可视化分析
plt.rcParams["font.sans-serif"] = 'Microsoft YaHei' #解决中文乱码问题
RFM_res=RFM_df.groupby(by=['Type'])['用户ID'].agg('count').sort_values()
colors=['#FF6666','#777777','#99ccff','#988ed5','#348abd','#99cccc','#66cccc','#6699cc']#柱子颜色用RGB元组
RFM_res.plot(kind='barh',color=colors,title='RFM客户分层',figsize=(9, 6))
五、分析结果与业务应用
5.1 关键数据指标
客户分层 | 人数 | 人均消费金额 | 复购率 |
---|---|---|---|
高价值客户 | 38 | ¥1,856 | 92.1% |
潜力客户 | 102 | ¥893 | 68.4% |
流失风险客户 | 89 | ¥432 | 11.3% |
5.2 精准营销策略
-
高价值客户
- 提供VIP专属折扣
- 生日礼品赠送服务
-
潜力客户
- 推送搭配购买优惠
- 积分翻倍活动
-
流失风险客户
- 发送召回优惠券
- 触发流失预警机制
六、完整代码获取
请联系博主
技术亮点:
- 使用
pd.qcut
实现自动分箱 - 正则表达式匹配分层规则
- 动态计算最近消费日期
优化方向:
- 引入时间衰减函数优化R值计算
- 结合聚类算法自动划分客户群体