不到70行Python代码,轻松玩转RFM用户分析模型(附案例数据和代码)(一)

简介: 本文从RFM模型概念入手,结合实际案例,详解Python实现模型的每一步操作,并提供案例同款源数据,以供同学们知行合一。

本文从RFM模型概念入手,结合实际案例,详解Python实现模型的每一步操作,并提供案例同款源数据,以供同学们知行合一。


看这篇文章前源数据长这样:


39.png


学完后只要敲一个回车,源数据就变成了这样:


40.png


是不是心动了?OK,闲话少叙,我们来开动正餐!


RFM,是一种经典到头皮发麻的用户分类、价值分析模型,同时,这个模型以直白著称,直白到把需要的字段写在了脸上,让我们再念一遍:“R!F!M!”:


  • R,Rencency,即每个客户有多少天没回购了,可以理解为最近一次购买到现在隔了多少天。
  • F,Frequency,是每个客户购买了多少次。
  • M,Monetary,代表每个客户平均购买金额,这里也可以是累计购买金额。


这三个维度,是RFM模型的精髓所在,帮助我们把混杂一体的客户数据分成标准的8类,然后根据每一类用户人数占比、金额贡献等不同的特征,进行人、货、场三重匹配的精细化运营。


用Python建立RFM模型,整体建模思路分为五步,一言蔽之——“五步在手,模型你有”,分别是数据概览、数据清洗、维度打分、分值计算和客户分层。


01  数据概览



我们的源数据是订单表,记录着用户交易相关的字段:


41.png


有个细节需要注意,订单每一行代表着单个用户的单次购买行为,什么意思呢?如果一个用户在一天内购买了4次,订单表对应记录着4行,而在实际的业务场景中,一个用户在一天内的多次消费行为,应该从整体上看作一次。


比如,我今天10点在必胜客天猫店买了个披萨兑换券,11点又下单了饮料兑换券,18点看到优惠又买了两个冰淇淋兑换券。这一天内虽然我下单了3次,但最终这些兑换券我会一次消费掉,应该只算做一次完整的消费行为,这个逻辑会指导后面F值的计算。


我们发现在订单状态中,除了交易成功的,还有用户退款导致交易关闭的,那还包括其他状态吗?Let me see see:


42.png


只有这两种状态,其中退款订单对于我们模型价值不大,需要在后续清洗中剔除。


接着再观察数据的类型和缺失情况:


43.png


订单一共28833行,没有任何缺失值,Nice!类型方面,付款日期是时间格式,实付金额、邮费和购买数量是数值型,其他均为字符串类型。


02  数据清洗



剔除退款


在观察阶段,我们明确了第一个清洗的目标,就是剔除退款数据:


44.png


关键字段提取


剔除之后,觉得我们订单的字段还是有点多,而RFM模型只需要买家昵称,付款时间和实付金额这3个关键字段,所以提取之:


45.png


关键字段构造


上面的基础清洗告一段落,这一步关键在于构建模型所需的三个字段:R(最近一次购买距今多少天),F(购买了多少次)以及M(平均或者累计购买金额)。


首先是R值,即每个用户最后一次购买时间距今多少天。如果用户只下单过一次,用现在的日期减去付款日期即可;若是用户多次下单,需先筛选出这个用户最后一次付款的时间,再用今天减去它。


需要提醒的是,时间洪流越滚越凶,对应在时间格式中,就是距离今天越近,时间也就越“大,举个例子,2019年9月9日是要大于2019年9月1日的:


46.png


因此,要拿到所有用户最近一次付款时间,只需要按买家昵称分组,再选取付款日期的最大值即可:


47.png


为了得到最终的R值,用今天减去每位用户最近一次付款时间,就得到R值了,这份订单是7月1日生成的,所以这里我们把“2019-7-1”当作“今天”:


48.png


接着来搞定F值,即每个用户累计购买频次。


在前面数据概览阶段,我们明确了“把单个用户一天内多次下单行为看作整体一次”的思路,所以,引入一个精确到天的日期标签,依照“买家昵称”和“日期标签”进行分组,把每个用户一天内的多次下单行为合并,再统计购买次数:


49.png


上一步计算出了每个用户购买频次,这里我们只需要得到每个用户总金额,再用总金额除以购买频次,就能拿到用户平均支付金额:


50.png


最后,万剑归宗,三个指标合并:


51.png


至此,我们完成了模型核心指标的计算,算是打扫干净了屋子再请客。


03  维度打分



维度确认的核心是分值确定,按照设定的标准,我们给每个消费者的R/F/M值打分,分值的大小取决于我们的偏好,即我们越喜欢的行为,打的分数就越高:


  • 以R值为例,R代表了用户有多少天没来下单,这个值越大,用户流失的可能性越大,我们当然不希望用户流失,所以R越大,分值越小。
  • F值代表了用户购买频次,M值则是用户平均支付金额,这两个指标是越大越好,即数值越大,得分越高。


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


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


52.png


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


53.png


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


54.png


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


04  分值计算



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


55.png


沧海横流,方显潘大师本色,短短一行代码就搞定了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值就十分容易了,按照我们设置的值切分就好:


56.png


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


客官不要紧脏,面试都还不止两轮呢,伦家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个分组,是比较合理的一个情况。我们来判断用户的每个分值是否大于平均值:


57.png


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





相关文章
|
3天前
|
机器学习/深度学习 人工智能 算法框架/工具
使用Python实现深度学习模型:智能家电控制与优化
使用Python实现深度学习模型:智能家电控制与优化
47 22
使用Python实现深度学习模型:智能家电控制与优化
|
5天前
|
机器学习/深度学习 数据采集 算法
数据稀缺条件下的时间序列微分:符号回归(Symbolic Regression)方法介绍与Python示例
有多种方法可以处理时间序列数据中的噪声。本文将介绍一种在我们的研究项目中表现良好的方法,特别适用于时间序列概况中数据点较少的情况。
19 1
数据稀缺条件下的时间序列微分:符号回归(Symbolic Regression)方法介绍与Python示例
|
5天前
|
机器学习/深度学习 数据可视化 算法框架/工具
使用Python实现深度学习模型:智能家庭安防系统
使用Python实现深度学习模型:智能家庭安防系统
19 1
|
5天前
|
机器学习/深度学习 数据可视化 搜索推荐
使用Python实现深度学习模型:智能睡眠监测与分析
使用Python实现深度学习模型:智能睡眠监测与分析
27 2
|
2天前
|
机器学习/深度学习 数据采集 算法
机器学习新纪元:用Scikit-learn驾驭Python,精准模型选择全攻略!
在数据爆炸时代,机器学习成为挖掘数据价值的关键技术,而Scikit-learn作为Python中最受欢迎的机器学习库之一,凭借其丰富的算法集、简洁的API和高效性能,引领着机器学习的新纪元。本文通过一个实际案例——识别垃圾邮件,展示了如何使用Scikit-learn进行精准模型选择。从数据预处理、模型训练到交叉验证和性能比较,最后选择最优模型进行部署,详细介绍了每一步的操作方法。通过这个过程,我们不仅可以看到如何利用Scikit-learn的强大功能,还能了解到模型选择与优化的重要性。希望本文能为你的机器学习之旅提供有价值的参考。
7 0
|
2天前
|
机器学习/深度学习 监控 TensorFlow
使用Python实现深度学习模型:智能宠物监控与管理
使用Python实现深度学习模型:智能宠物监控与管理
14 0
|
3天前
|
机器学习/深度学习 自然语言处理 语音技术
使用Python实现深度学习模型:智能语音助手与家庭管理
使用Python实现深度学习模型:智能语音助手与家庭管理
13 0
|
Python
猪行天下之Python基础——2.2 标识符,基础函数,行与缩进,空语句
内容简述: 1、标识符 2、print()打印输出函数 3、input()输入函数 4、dir()函数 5、help()函数 6、type()函数 & isinstance()函数 7、行与缩进 8、pass空语句
130 0
|
5天前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从零基础到实战应用
【9月更文挑战第15天】本文将引导读者从零开始学习Python编程,通过简单易懂的语言和实例,帮助初学者掌握Python的基本语法和常用库,最终实现一个简单的实战项目。文章结构清晰,分为基础知识、进阶技巧和实战应用三个部分,逐步深入,让读者在学习过程中不断积累经验,提高编程能力。