python实现RFM建模(一)

简介: python实现RFM建模(一)

1、RFM模型的含义

 RFM模型是衡量客户价值和客户创利能力的重要工具和手段。在众多的客户关系管理(CRM)的分析模式中,RFM模型是被广泛提到的。

 该模型通过一个客户的近期购买行为®、购买的总体频率(F)以及花了多少钱(M)三项指标来描述该客户的价值状况,从而能够更加准确地将成本和精力更精确的花在用户层次身上,实现针对性的营销。

 详细来说,R指的是客户最后一次下单时间距离今天多少天了,该指标与客户的复购和流失直接相关。F指标指的是客户的下单频率,即客户在某个时间段内共消费了多少次,该指标用于衡量客户消费的活跃度。M指标指的是客户在该时间段内共消费了多少钱,该指标用于反应客户对于公司的贡献值。

image.png


2、RFM分析的前提条件

最近有过交易行为的客户,再次发生交易行为的可能性高于最近没有交易行为的客户。

交易频率高的客户,比交易频率低的客户,更有可能再次发生交易行为。

过去所有交易总金额较大的客户,比过去所有交易总金额较小的客户,更有消费积极性。

3、原始数据

 本文数据集如果有需要的话,可以留言获取。如果觉得本文写的还不错,可以关注一下,获取更多精彩文章。

 原始数据集在这里先展示一下,让你对这个数据有一个主观印象。

image.png

4、数据处理

1)什么是R、F、M呢?

“R”表示最近一次消费时间距离今天共有多少天。什么是最近一次消费时间呢?如果同一个人在不同时间有不同多个订单,那么该时间距离当前时间的差值的最小值,就是最近一次消费时间。

“F”表示某个人一段时间内的消费频次。

“M”表示一段时间内的消费总额。

2)熟悉数据集

 熟悉数据集,就是在进行数据处理之前,应该先熟悉数据,只有对数据充分熟悉之后,才能更好的进行分析。

熟悉数据常用的方法和属性有shape、head()、tail()、sample()、info()、describe()。


df = pd.read_excel(r"C:\Users\黄伟\Desktop\RFM_Model\RFM.xlsx")
display(df.shape)
display(df.sample(5))


结果如下:

image.png

从上述结果中可以发现:这笔数据总共有28833行条记录,12列。观察上图,可以清楚地看到每一列数据代表什么含义。


3)保留有效数据

 针对此数据集,我们先说一下什么是“有效数据”。“有效数据”指的就是有效购买,也就是说对应的“订单状态”字段显示的是“交易成功”,对于“退款”的记录,我们就直接将这个数据剔除掉。


display("剔除之前共有:"+ str(df.shape[0]) + "条记录")
df = df[df["订单状态"]=="交易成功"]
display("剔除之后共有:"+ str(df.shape[0]) + "条记录")


结果如下:

image.png


4)选取有效字段

 通过上面的分析,我们知道了“R”、“F”、“M”三个指标的概念。鉴于此,我们只需要选取"买家昵称",“付款时间”,"实付金额"这三个字段,用于RFM模型的构建,其余字段用处不大,因此删除其余字段。


df1 = df[["买家昵称","付款时间","实付金额"]]
df1.index = np.arange(df1.shape[0])
display(df1.shape)
display(df1.head())


结果如下:

image.png


5)缺失值处理

df1.isnull().sum(axis=0)


结果如下:

image.png

从上述结果中可以发现:各字段中没有缺失值,因此不需要做任何处理。

 


5、RFM建模过程

1)计算RFM三个指标

① 增加“天数”字段,用于计算“R”指标

 针对上述“R”、“F”、“M”三个指标的概念,我们对数据做一定的处理。由于 “R”表示的是最近一次消费时间距离今天共有多少天。但是数据集中只有每一天的“付款时间”字段。因此计算RFM指标之前,需要事先添加一个“天数”字段,求出每个“付款时间”距今共有多少天。“天数”越小,就表示最近一次的消费时间。

 然后针对上述处理后的数据,做一个数据透视表。以“买家昵称”作为分组字段,对“天数”求最小值;对“付款昵称”计数;对“实付金额”求和,就可以得到我们想要的RFM三个指标。


df1["付款时间"] = pd.to_datetime(df1["付款时间"])
df1["天数"] = (pd.to_datetime("today")-df1["付款时间"]).dt.days
display(df1.sample(10))


结果如下:

image.png

相关文章
|
存储 关系型数据库 MySQL
Centos Mysql忘记密码,修改密码
Centos Mysql忘记密码,修改密码
568 0
|
SQL 监控 网络协议
线上故障如何快速排查?来看这套技巧大全
有哪些常见的线上故障?如何快速定位问题?本文详细总结工作中的经验,从服务器、Java应用、数据库、Redis、网络和业务六个层面分享线上故障排查的思路和技巧。较长,同学们可收藏后再看。
线上故障如何快速排查?来看这套技巧大全
|
XML 数据格式
hutool工具 XML工具
hutool工具 XML工具
|
11月前
|
Java Scala
Scala 教程
Scala 教程
192 2
|
数据采集 数据挖掘 数据库
你还不会用python进行数据分析吗
你还不会用python进行数据分析吗
86 0
|
Kubernetes 测试技术 数据安全/隐私保护
如何使用Vcluster实现Kubernetes中的多租户
如何使用Vcluster实现Kubernetes中的多租户
435 0
|
API 开发者 Python
SendCloud和Aoksend邮箱API发送邮件的方法
本文介绍了如何使用Aoksend和SendCloud的API发送邮件。首先注册两个平台的账号获取API密钥和地址,然后可通过SMTP或HTTP API发送邮件。示例代码分别展示了使用SMTP API(通过`smtplib`)和HTTP API(借助`requests`库)的Python实现。在实际操作中,需确保邮件内容与收件人信息的准确性。
|
NoSQL 前端开发 Java
Sa-Token实现分布式登录鉴权(Redis集成 前后端分离)
Sa-Token实现分布式登录鉴权(Redis集成 前后端分离)
Sa-Token实现分布式登录鉴权(Redis集成 前后端分离)