Python使用RMF聚类分析客户价值
投资机构或电商企业等积累的客户交易数据繁杂。需要根据用户的以往消费记录分析出不同用户群体的特征与价值,再针对不同群体提供不同的营销策略。
用户分析指标
根据美国数据库营销研究所Arthur Hughes的研究,客户数据库中有三个神奇的要素,这三个要素构成了数据分析最好的指标
R-最近一次消费(Recency)
F-消费频率(Frequency)
M-消费金额(Monetary)

通过该图将用户进行分类:
R、F、M都很高,重要价值客户(VIP客户)
F、M很高,R不高,重要保持客户
R、F、M都很低,流失客户
M很高,R、F不高,重要挽留客户
根据这8个类别的R、F、M指标,对用户进行标注,哪些是重要价值客户,哪些是重要保持客户,哪些是重要发展客户,哪些是流失客户等
流程介绍
以R、F、M这三个核心指标为维度进行聚类分析
利用K-means聚类分析将用户分类
根据R、F、M指标,对用户进行标注
准备工作:
数据:
某电商企业客户近期购买的数据。包含客户注册日期,最后购买日期以及购买消费总金额
参数:
R-求出最近一次投资时间距提数日天数
F-月均投资次数
M-月均投资金额
目标:分析客户交易数据,用户群体的特征与价值,进行精准营销,降低营销成本,提高销售业绩。
1 分析数据获取RFM
R-求出最近一次投资时间距提数日天数
确定一个提现日,减去用户的最新投资日期
F-月均投资次数
总投资次数/总月数
M-月均投资金额
投资总金额/总月数

处理数据获取R-F-M
def dataChange(data):
deadline_time = datetime(2016,7,20)
print(deadline_time) # 时间相减 得到天数查 timedelta64类型
diff_R = deadline_time - data["最近一次投资时间"] # 渠道具体天数
# days = diff_R[0].days
R = []
for i in diff_R:
days = i.days
R.append(days) print(R)
'''
用户在投时长(月
Python没有直接获取月数差的函数
1、获取用户在投天数
2、月=在投天数/30,向上取整
'''
diff = deadline_time - data["首次投资时间"]
print(diff) # 利用向上取整函数
months = []
for i in diff:
month = ceil(i.days/30)
months.append(month) print(months) # 月均投资次数
month_ave = data["总计投标总次数"]/months
F = month_ave.values
print(F) # 月均投资金额
M = (data["总计投资总金额"]/months).values
print(M) return R, M, F
2 训练KMeans模型
先对数据进行转换,然后通过K—Means模型训练,生产模型
def analy_data(data, R, M, F):
cdata = DataFrame([R, list(F), list(M)]).T
# 指定cdata的index和colums
cdata.index = data.index
cdata.columns = ["R-最近一次投资时间距提数日的天数", "F-月均投资次数", "月均投资金额"]
print("cdata_info:\n", cdata) print("cdata:\n", cdata.describe()) # K-Means聚类分析 # 01 数据标准化 均值:cdata.mean() 标准差:cdata.std()
# 对应位置分别先相减 再相除
zcdata = (cdata-cdata.mean())/cdata.std()
print("zcdata:\n", zcdata) # n_clusters:分类种数 n_jobs:计算的分配资源 max_iter:最大迭代次数 random_state:随机数种子,种子相同,参数固定
kModel = KMeans(n_clusters=4, n_jobs=4, max_iter=100, random_state=0)
kModel.fit(zcdata)
print(kModel.labels_)
3 通过模型对用户标注
# 统计每个类别的频率
value_counts = Series(kModel.labels_).value_counts()
print(value_counts) # 将类别标签赋回原来的数据
cdata_rst = pd.concat([cdata, Series(kModel.labels_, index=cdata.index)], axis=1)
print(cdata_rst) # 命名最后一列为类别
cdata_rst.columns = list(cdata.columns) + ["类别"]
print(cdata_rst) # 按照类别分组统计R, F, M的指标均值
user_ret = cdata_rst.groupby(cdata_rst["类别"]).mean()
print(user_ret)
'''
R-最近一次投资时间距提数日的天数 F-月均投资次数 月均投资金额
类别
0 27.859375 2.820312 21906.754297
1 20.684211 4.552632 115842.105263
2 10.568182 5.579545 26984.313636
3 12.111111 17.277778 107986.000000 结论:
类别3:R、F、M都比较高,属于重要价值客户 或 超级用户
类别0:R、F、M都比较低,属于低价值客户
类别1:R一般、F一般、M很高,也属于重要价值客户 ''' 通过模型对新用户标注
1、获取新用户数据
2、通过和原数据处理获取RFM
3、通过训练模型得出用户类型
def user_classes(cdata, user_info):
'''
# 模拟一条用户数据
1、获取当前时间表示为截止时间
2.计算出: R F M '''
R, M, F = user_info_change(user_info)
user_data_info = DataFrame([[R], [F], [M]]).T
print(user_data_info) # user_data_info = DataFrame([[12.5], [18.0], [20000.0]]).T
user_data_info.index = ["lily"]
user_data_info.columns = cdata.columns
print("cdata_info:\n", user_data_info) new_zcdata = (user_data_info-cdata.mean())/cdata.std()
print("new_zcdata", new_zcdata) kModel = load_model("user_classes.pkl")
ret = kModel.predict(new_zcdata)
print("new_zcdata_ret:", ret)
# new_zcdata_ret: [3]

Python使用RMF聚类分析客户价值的更多相关文章
- 数据分析之客户价值模型(RFM)技术总结
作者 | leo 管理学中有一个重要概念那就是客户关系管理(CRM),它核心目的就是为了提高企业的核心竞争力,通过提高企业与客户间的交互,优化客户管理方式,从而实现吸引新客户.保留老客户以及将已有客户 ...
- 如何通过CRM评估客户价值和提高客户忠诚度?
随着市场经济的日益繁荣,同行业之间企业的竞争越来越激烈,企业纷纷各出奇招吸引和挖掘客户,力求让自己的品牌成为更多客户的第一选择.那么,我们可以用什么方法来评估客户价值,提高客户忠诚度呢? 在互联网时代 ...
- 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good
作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...
- k-means实战-RFM客户价值分群
数据挖掘的十大算法 基本概念 导入数据集到mysql数据库中 总共有940个独立消费数据 K-Means 算法 K-Means 算法是一个聚类算法.你可以这么理解,最终我想把物体划分成 K 类.假设每 ...
- RFM客户价值分类
# 自定义好的包,亲测可用 原数据和代码思想来自以下网址 # https://github.com/joaolcorreia/RFM-analysis import datetime as dt im ...
- [Python数据挖掘]第7章、航空公司客户价值分析
一.背景和挖掘目标 二.分析方法与过程 客户价值识别最常用的是RFM模型(最近消费时间间隔Recency,消费频率Frequency,消费金额Monetary) 1.EDA(探索性数据分析) #对数据 ...
- 数据挖掘应用案例:RFM模型分析与客户细分(转)
正好刚帮某电信行业完成一个数据挖掘工作,其中的RFM模型还是有一定代表性,就再把数据挖掘RFM模型的建模思路细节与大家分享一下吧!手机充值业务是一项主要电信业务形式,客户的充值行为记录正好满足RFM模 ...
- python 面向对象终极进阶之开发流程
好了,你现在会了面向对象的各种语法了, 但是你会发现很多同学都是学会了面向对象的语法,却依然写不出面向对象的程序,原因是什么呢?原因就是因为你还没掌握一门面向对象设计利器, 此刻有经验的人可能会想到 ...
- 2019年Python数据挖掘就业前景前瞻
Python语言的崛起让大家对web.爬虫.数据分析.数据挖掘等十分感兴趣.数据挖掘就业前景怎么样?关于这个问题的回答,大家首先要知道什么是数据挖掘.所谓数据挖掘就是指从数据库的大量数据中揭示出隐含的 ...
随机推荐
- pgloader 学习(六) 加载csv 数据
关于加载的配置参数都是使用comand file command file 参考格式 LOAD CSV FROM 'GeoLiteCity-Blocks.csv' WITH ENCODING iso- ...
- html5获取用户当前位置
支持地理定位的浏览器有IE9+.Firefox 3.5+ .Opera 10.6+ .Safari 5+ .Chrome.iOS 版Safari.Android版WebKit. navigator.g ...
- c博客作业—分支,结构顺序
1展现PTA总分 1 2 2本章学习类容总结 1常量和变量 常量:在运行中其值不变的量被称为常量,常量的类型通常是由书写格式决定,包括整型常量,实数型变量等等. 变量: 在运行中其值可变的量被称为变量 ...
- 前端如何搭建vue UI组件库/封装插件(从零到有)
需求 因之前是做外包项目居多,经常用到相同的组件,之前的办法是在一个项目中写一个组件,其他项目直接将compents下的组件复制,粘贴到项目中使用,缺点是维护起来,改一个项目,其他项目也需要修改,所以 ...
- D3.js的v5版本入门教程(第九章)——完整的柱状图
D3.js的v5版本入门教程(第九章) 一个完整的柱状图应该包括的元素有——矩形.文字.坐标轴,现在,我们就来一一绘制它们,这章是前面几章的综合,这一章只有少量新的知识点,它们是 d3.scaleBa ...
- CTF RCE(远程代码执行)
目录 php代码执行 一.相关函数 1.代码注入 2.命令执行 二.命令执行的绕过 1.命令执行的分隔符 2.空格代替 3.绕过 4.命令执行的各种符号 三.命令无回显的情况 1.判断 2.利用 四. ...
- 分布式并行计算MapReduce
作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3319 1.用自己的话阐明Hadoop平台上HDFS和MapReduce ...
- openresty开发系列33--openresty执行流程之3重写rewrite和重定向
openresty开发系列33--openresty执行流程之3重写rewrite和重定向 重写rewrite阶段 1)重定向2)内部,伪静态 先介绍一下if,rewrite指令 一)if指令语法:i ...
- navicat for mysql 如何设置字段唯一
在设计表时,上面会有索引这一项 点开,在栏位处选择你需要设置的字段,然后选择unique索引类型即可 望采纳,谢谢!
- 数据库事务和spring事务的区别
数据库事务和spring事务 本质上其实是同一个概念,spring的事务是对数据库的事务的封装,最后本质的实现还是在数据库,假如数据库不支持事务的话,spring的事务是没有作用的.数据库的事务说简单 ...