加入收藏 | 设为首页 | 会员中心 | 我要投稿 新余站长网 (https://www.0790zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

不到70行Python代码,轻松玩转RFM用户分析模型

发布时间:2019-10-28 15:48:40 所属栏目:教程 来源:一枚程序媛呀
导读:本文从RFM模型概念入手,结合实际案例,详解Python实现模型的每一步操作,并提供案例同款源数据,以供同学们知行合一。 注:想直接下载代码和数据的同学可以空降文末 看这篇文章前源数据长这样: 学完后只要敲一个回车,源数据就变成了这样: 是不是心动了

RFM模型中打分一般采取5分制,有两种比较常见的方式,一种是按照数据的分位数来打分,另一种是依据数据和业务的理解,进行分值的划分。这里希望同学们加深对数据的理解,进行自己的分值设置,所以讲述过程中使用的是第二种,即提前制定好不同数值对应的分值。

R值根据行业经验,设置为30天一个跨度,区间左闭右开:

不到70行Python代码,轻松玩转RFM用户分析模型

F值和购买频次挂钩,每多一次购买,分值就多加一分:

不到70行Python代码,轻松玩转RFM用户分析模型

我们可以先对M值做个简单的区间统计,然后分组,这里我们按照50元的一个区间来进行划分:

不到70行Python代码,轻松玩转RFM用户分析模型

这一步我们确定了一个打分框架,每一位用户的每个指标,都有了与之对应的分值。

04 分值计算

分值的划分逻辑已经确定,看着好像有点麻烦。下面我们有请潘大师(Pandas)登场,且看他如何三拳两脚就搞定这麻烦的分组逻辑,先拿R值打个样:

不到70行Python代码,轻松玩转RFM用户分析模型

沧海横流,方显潘大师本色,短短一行代码就搞定了5个层级的打分。Pandas的cut函数,我们复习一下:

  • 第一个参数传入要切分的数据列。
  • bins参数代表我们按照什么区间进行分组,上面我们已经确定了R值按照30天的间隔进行分组,输入[0,30,60,90,120,1000000]即可,最后一个数值设置非常大,是为了给分组一个容错空间,允许出现极端大的值。
  • right表示了右侧区间是开还是闭,即包不包括右边的数值,如果设置成False,就代表[0,30),包含左侧的分组数据而不含右侧,若设置为True,则是[0,30],首尾都包含。
  • labels和bins切分的数组前后呼应,什么意思呢?bins设置了6个数值,共切分了5个分组,labels则分别给每个分组打标签,0-30是5分,30-60是4分,依此类推。

接着,F和M值就十分容易了,按照我们设置的值切分就好:

不到70行Python代码,轻松玩转RFM用户分析模型

第一轮打分已经完成,下面进入第二轮打分环节。

客官不要紧脏,面试都还不止两轮呢,伦家RFM模型哪有那么随便的。

现在R-SCORE、F-SCORE、M-SCORE在1-5几个数之间,如果把3个值进行组合,像111,112,113...这样可以组合出125种结果,过多的分类和不分类本质是一样的。所以,我们通过判断每个客户的R、F、M值是否大于平均值,来简化分类结果。

因为每个客户和平均值对比后的R、F、M,只有0和1(0表示小于平均值,1表示大于平均值)两种结果,整体组合下来共有8个分组,是比较合理的一个情况。我们来判断用户的每个分值是否大于平均值:

不到70行Python代码,轻松玩转RFM用户分析模型

Python中判断后返回的结果是True和False,对应着数值1和0,只要把这个布尔结果乘上1,True就变成了1,False变成了0,处理之后更加易读。

05 客户分层

回顾一下前几步操作,清洗完之后我们确定了打分逻辑,然后分别计算每个用户的R、F、M分值(SCORE),随后,用分值和对应的平均值进行对比,得到了是否大于均值的三列结果。至此,建模所需的所有数据已经准备就绪,剩下的就是客户分层了。

RFM经典的分层会按照R/F/M每一项指标是否高于平均值,把用户划分为8类,我们总结了一下,具体像下面表格这样:

不到70行Python代码,轻松玩转RFM用户分析模型

由于传统的分类,部分名称有些拧巴,像大多数分类前都冠以“重要”,“潜力”和“深耕”到底有什么区别?“唤回”和“挽回”有什么不一样?

本着清晰至上原则,我们对原来的名称做了适当的改进。强调了潜力是针对消费(平均支付金额),深耕是为了提升消费频次,以及重要唤回客户其实和重要价值客户非常相似,只是最近没有回购了而已,应该做流失预警等等。这里只是抛砖引玉,提供一个思路,总之,一切都是为了更易理解。

对于每一类客户的特征,我们也做了简单的诠释,比如重要价值客户,就是最近购买我们的产品,且在整个消费生命周期中购买频次较高,平均每次支付金额也高。其他的分类也是一样逻辑,可以结合诠释来强化理解。下面,我们就用Python来实现这一分类。

先引入一个人群数值的辅助列,把之前判断的RFM是否大于均值的三个值给串联起来:

不到70行Python代码,轻松玩转RFM用户分析模型

人群数值是数值类型,所以位于前面的0就自动略过,比如1代表着“001”的高消费唤回客户人群,10对应着“010”的一般客户。

(编辑:新余站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读