侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python pandas RFM模型应用实例详解

Python  /  管理员 发布于 7年前   253

本文实例讲述了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$rankR1rfm$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 = NACustom[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层次分析法(专家打分法)

总结

上述客户分类其实比较粗旷,真正在面对千万级客户量时,如此划分为四大类是难以满足运营需求的。运营中,还需要综合CRM中其他指标、维度。

ps:后续作者利用RFM客户价值得分进行潜在客户挖掘,尝试利用决策树等模型挖掘平台潜在客户特征。

简单实例

import pandas as pdimport numpy as npimport time#todo 读取数据data = pd.read_csv('RFM_TRAD_FLOW.csv',encoding='gbk')# print(ret)# todo RFM------>R(最近一次消费)#todo 时间与字符串相互转换data['time'] = data['time'].map(lambda x:time.mktime(time.strptime(x,'%d%b%y:%H:%M:%S')))# print(data)# todo 分组groupby_obj = data.groupby(['cumid','type'])# for name,data in groupby_obj:#   print(name)#   print(data)# todo 取值R = groupby_obj[['time']].max()# print(# todo 转为透视表r_trans = pd.pivot_table(R,index='cumid',columns='type',values='time')# print(data_trans)# todo 替换缺失值 有缺失值,替换成最远的值r_trans[['Special_offer','returned_goods']] = r_trans[['Special_offer','returned_goods']].apply(lambda x:x.replace(np.nan,min(x)),axis = 0)# print(data_trans)r_trans['r_max'] = r_trans.apply(lambda x:sum(x),axis=1)# print(r_trans)# todo RFM------>F(消费频率)# 取值F =groupby_obj[['transID']].count()# print(F)#转为透视表f_trans = pd.pivot_table(F,index='cumid',columns='type',values='transID')# print(f_trans)#替换缺失值f_trans[['Special_offer','returned_goods']]= f_trans[['Special_offer','returned_goods']].fillna(0)# print(f_trans)#f_trans['returned_goods'] = f_trans['returned_goods'].map(lambda x:-x)# print(f_trans)f_trans['f_total'] = f_trans.apply(lambda x:sum(x),axis=1)# print(f_trans)# todo RFM------>M(消费金额)# 取值M =groupby_obj[['amount']].sum()# print(M)#转为透视表m_trans = pd.pivot_table(M,index='cumid',columns='type',values='amount')# print(f_trans)#替换缺失值m_trans[['Special_offer','returned_goods']]= m_trans[['Special_offer','returned_goods']].fillna(0)# print(f_trans)#m_trans['m_total'] = m_trans.apply(lambda x:sum(x),axis=1)# print(m_trans)# 合并RFM=pd.concat([r_trans["r_max"],f_trans['f_total'],m_trans['m_total']],axis=1)print(RFM)r_score = pd.cut(RFM.r_max,3,labels=[0,1,2])f_score = pd.cut(RFM.r_max,3,labels=[0,1,2])m_score = pd.cut(RFM.r_max,3,labels=[0,1,2])

关于Python相关内容感兴趣的读者可查看本站专题:《Python函数使用技巧总结》、《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。


  • 上一条:
    Python求解正态分布置信区间教程
    下一条:
    使用Python实现正态分布、正态分布采样
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客