Python pandas RFM模型应用实例详解
作者:闲鱼!!! 时间:2023-10-15 23:27:34
本文实例讲述了Python pandas RFM模型应用。分享给大家供大家参考,具体如下:
什么是RFM模型
根据美国数据库营销研究所Arthur Hughes的研究,客户数据库中有3个神奇的要素,这3个要素构成了数据分析最好的指标:
最近一次消费 (Recency): 客户最近一次交易时间的间隔。R值越大,表示客户交易距今越久,反之则越近;
消费频率 (Frequency): 客户在最近一段时间内交易的次数。F值越大,表示客户交易越频繁,反之则不够活跃;
消费金额 (Monetary): 客户在最近一段时间内交易的金额。M值越大,表示客户价值越高,反之则越低。
RFM实践应用
1、前提假设验证
RFM模型的应用是有前提假设的,即R、F、M值越大价值越大,客户未来的为企业带来的价值越大。这个前提假
设其实已经经过大量的研究和实证,假设是成立的。不过为了更加严谨,确保RFM模型对于特殊案例是有效的,
本文还进行了前提假设验证:
ps:Frequency、Monetary均为近6个月内的数据,即1-6月数据;
利用相关性检验,验证假设:
最近购买产品的用户更容易产生下一次消费行为
消费频次高的用户,用户满意度高,忠诚度高,更容易产生下一次消费行为
消费金额高的用户更容易带来高消费行为
2、RFM分级
简单的做法,RFM三个指标以均值来划分,高于均值的为高价值、低于均值的为低价值,如此可以将客户划分为8大类:
本文采取的方法是将三个指标进行标准化,然后按照分为数划分为5个等级,数值越大代表价值越高;当然最终划分的规则还是要结合业务来定。划分为5个等级后,客户可以细分为125种。
#读取数据
rfm<-read.csv('~/desktop/rfm1_7.csv',header=TRUE)
summary(rfm)
#数据分布
par(mfrow=c(1,3))
boxplot(rfm$rankR1)
boxplot(rfm$rankF1)
boxplot(rfm$rankM1)
#rfm分级
breaks1<-quantile(rfm$Recency, probs = seq(0, 1, 0.2),names = FALSE)
breaks1<-c(1,14,30,57,111,181) #以流失用户的定义来设置分级 30天以上为流失用户
breaks2<-quantile(rfm$Frequency, probs = seq(0, 1, 0.2),names = FALSE)
breaks2<-c(1,2,3,6,14,164)
breaks3<-quantile(rfm$Monetary, probs = seq(0, 1, 0.2),names = FALSE)
rfm$rankR1<- cut(rfm$Recency,breaks1, 5,labels=F)
rfm$rankR1<- 6-rfm$rankR1
rfm$rankF1<- cut(rfm$Frequency,breaks2, 5,labels=F)
rfm$rankM1<- cut(rfm$Monetary,breaks3, 5,labels=F)
3、客户分类
本文采用K-means聚类进行分类,聚类结果结合业务划分为4大类:
Cluster1:价值用户R、F、M三项指标均较高;
Cluster2,3:用户贡献值最低,且用户近度(小于2)和频度较低,为无价值客户;
Cluster4:发展用户,用户频度和值度较低,但用户近度较高,可做up营销;
Cluster5:挽留客户,用户近度较低,但频度和值度较高,需采用挽留手段
k值选择:
聚类结果:
#聚类
df<-rfm[,c(6,7,8)]
p1<-fviz_nbclust(df, kmeans, method = "wss")
p2<-p1 + geom_vline(xintercept = 5, linetype = 2)
km_result <- kmeans(df, 5)
dd <- cbind(rfm,df, cluster = km_result$cluster)
##查看每一类的数目
table(dd$cluster)
picture<-fviz_cluster(km_result, df, geom = "point")
####聚类结果解释####
rfm_final <- within(dd,{Custom = NA
Custom[cluster == 1] = '高价值客户'
Custom[cluster == 2 ] = '无价值客户'
Custom[ cluster == 3] = '无价值客户'
Custom[cluster == 4] = '重点发展客户'
Custom[cluster == 5] = '重点挽留客户'
})
4、RFM打分
步骤3,我们将客户划分为四大类,其实如果一类客户中还有大量的客户,此时为了精细化营销,可以根据RFM进行加权打分,给出一个综合价值的分。这里,运用AHP层次分析法确定RFM各指标权重:
客户价值RFM_SCORE= 0.25rankR + 0.20rankF+0.55*rankM
AHP层次分析法(专家打分法)
来源:https://blog.csdn.net/weixin_43158056/article/details/98871967
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python打包文件夹的方法小结(zip,tar,tar.gz等)
浅谈Python数据处理csv的应用小结
![](https://img.aspxhome.com/file/2023/6/75206_0s.png)
vue+el使用this.$confirm,不能阻断代码往下执行的解决
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
![](https://img.aspxhome.com/file/2023/0/136820_0s.jpg)
python数据类型中的字符串你了解多少
python pyqtgraph 保存图片到本地的实例
![](https://img.aspxhome.com/file/2023/4/77764_0s.jpg)
js实现屏蔽默认快捷键调用自定义事件示例
使用SQL语句将相同名的多行字段内容拼接(方法详解)
![](https://img.aspxhome.com/file/2023/2/116322_0s.png)
MySQL中UPDATE语句使用的实例教程
Python跳出循环语句continue与break的区别
![](https://img.aspxhome.com/file/2023/6/100916_0s.jpg)
MYSQL分页limit速度太慢的优化方法
Python爬虫破解登陆哔哩哔哩的方法
Python实现井字棋小游戏
![](https://img.aspxhome.com/file/2023/0/76700_0s.jpg)
如何使用Python破解ZIP或RAR压缩文件密码
![](https://img.aspxhome.com/file/2023/5/92055_0s.png)
python删除服务器文件代码示例
![](https://img.aspxhome.com/file/2023/4/113154_0s.png)
Python实现TOPSIS分析法的示例代码
![](https://img.aspxhome.com/file/2023/1/109621_0s.png)
Python爬虫学习之requests的使用教程
![](https://img.aspxhome.com/file/2023/1/95381_0s.png)
Python实现桌面翻译工具【新手必学】
详解python中的json的基本使用方法
详解用Python调用百度地图正/逆地理编码API
![](https://img.aspxhome.com/file/2023/0/107840_0s.jpg)