【数据分析】基于Pandas的RFM客户分层实战:Python代码全解析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述

一、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,85692.1%
潜力客户102¥89368.4%
流失风险客户89¥43211.3%

5.2 精准营销策略

  1. 高价值客户

    • 提供VIP专属折扣
    • 生日礼品赠送服务
  2. 潜力客户

    • 推送搭配购买优惠
    • 积分翻倍活动
  3. 流失风险客户

    • 发送召回优惠券
    • 触发流失预警机制

六、完整代码获取

请联系博主

技术亮点

  • 使用pd.qcut实现自动分箱
  • 正则表达式匹配分层规则
  • 动态计算最近消费日期

优化方向

  • 引入时间衰减函数优化R值计算
  • 结合聚类算法自动划分客户群体

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云天徽上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值