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


猜你喜欢
- 函数调用方法:numpy.zeros(shape, dtype=float)各个参数意义:shape:创建的新数组的形状(维度)。dtype
- 前言可扩展标记语言,是一种简单的数据存储语言,XML被设计用来传输和存储数据存储,可用来存放配置文件,例:java配置文件传输,网络传输以这
- 1、搭载QT环境按win+R输入 pip install pyqt5 下载QT5 当然也可以去Qt的官网的下载 ,使用命令行更快捷方便 所以
- 登录页面能访问得到,但当执行下级目录的文件就不行了,浏览器直接跳出以下错误页面: 除些以外没有任何其它有价值的信息,因为此网站在我的电脑上执
- 前言我原本是学C\C++,这是本人第一篇关于python的文章。请多多关照!对于python为什么要打包成exe文件,是因为传输源文件以及源
- golang字符串比较的三种常见方法fmt.Println("go"=="go")fmt.Print
- 1.自定义线程池import threadingimport Queueimport timequeue = Queue.Queue()de
- 最近需要各种转格式,这里对相关代码作一个记录,方便日后查询。xlsx文件转csv文件import xlrdimport csvdef xls
- numpy数据保存到文件Numpy提供了几种数据保存的方法。以3*4数组a为例:1. a.tofile("filename.bin
- 创建主键可以有两种方式:create table 表名(字段名 类型,字段名 类型,……primary key(name));或者是crea
- Oracle数据库以其高可靠性、安全性、可兼容性,得到越来越多的企业的青睐。如何使Oracle数据库保持优良性能,这是许多数据库管理员关心的
- 近日,有关微软Open XML标准的问题又引发了某些业内人士的关注。其一是因为日前ISO(国际标准组织)成员南非和巴西相继就ISO批准微软的
- 1.首先安装依赖包,避免在安装过程中出现问题[root@chufeng yusen]# yum -y install wget vim ba
- Mysql的connector/net5.0下载地址: http://dev.mysql.com/get/Downloads/Connect
- #!/usr/bin/python #-*-coding:utf-8-*-from PyQt4.QtGui import *fr
- python菜鸟,每天都要进步一点点。二维元组的例子:A = ((1, 1, 1), (1, 1, 1),(1, 1, 1),(0, 0,
- 前言requests是Python发送接口请求非常好用的一个三方库,由K神编写,简单,方便上手快。但是requests发送请求是串行的,即阻
- 用golang来实现的webserver通常是是这样的//main.gopackage mainimport ("fmt"
- 概述Rollup, 和 Webpack, Parcel 都是模块打包工具(module bundler tool), 但是侧重点不同, 我们
- 设想这样一种情况,你在一个平台上操作你的工程,但你希望在另外一个平台上完善并运行它,这就是为什么Pycharm做了很多工作来支持远程调试。在