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.爬虫.数据分析.数据挖掘等十分感兴趣.数据挖掘就业前景怎么样?关于这个问题的回答,大家首先要知道什么是数据挖掘.所谓数据挖掘就是指从数据库的大量数据中揭示出隐含的 ...
随机推荐
- spring-cloud(一)
1.SpringCloud概述和搭建Eureka服务注册中心 Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注 ...
- C# 监测每个方法的执行次数和占用时间(测试4)
今天也要做这个功能,就百度一下,结果搜索到了自己的文章.一开始还没注意,当看到里面的一个注释的方法时,一开始还以为自己复制错了代码,结果仔细一看网页的文章,我去,原来是自己写的,写的确实不咋地. 把自 ...
- 深入浅出的Java网络通信
已经发表个人公众号 代码展示 package two; import java.io.BufferedReader; import java.io.InputStreamReader; import ...
- mysql 去除字符串中的空格
mysql> select " ddd dddee "; +--------------+ | ddd dddee | +--------------+ | ddd ddde ...
- 【NQG】Paragraph-level Neural Question Generation with Maxout Pointer and Gated Self-attention Networks论文笔记
这篇文章主要处理了在问题生成(Question Generation,QG)中,长文本(多为段落)在seq2seq模型中表现不佳的问题.长文本在生成高质量问题方面不可或缺. 1. Introducti ...
- Unity3d客户端与Photon服务器数据通信
今天先介绍一下Photon服务器是什么,可以做什么,为什么要使用它? Photon:开发多人联网游戏最轻松的方案!可以迅速简单实现多人实时在线网络游戏(pvp). Photon:透过位于各地的Phot ...
- Typescript 开发环境的最佳实践
Typescript 开发环境的最佳实践 0️⃣ git init(略) 1️⃣️️ 初始化:$ yarn add -D ts-node typescript 2️⃣ 生成 tsconfig.json ...
- Xamarin图表开发基础教程(3)OxyPlot框架
Xamarin图表开发基础教程(3)OxyPlot框架 Xamarin.Android中使用OxyPlot框架 在Xamarin.Android平台上实现图表显示需要完成以下的步骤: 1.添加OxyP ...
- 在Nginx容器安装Keepalived后端项目双机热备
docker exec -it n1 bash apt-get update apt-get install keepalived apt-get install vim 再次之前要配置VIP虚拟IP ...
- Redis常见问题及解决方案
在Redis的运维使用过程中你遇到过那些问题,又是如何解决的呢?本文收集了一些Redis的常见问题以及解决方案,与大家一同探讨. 码字不易,欢迎大家转载,烦请注明出处:谢谢配合 你的Redis有big ...