如何进行有效的RFM模型搭建和分析?

article/2025/10/2 16:07:20

 RFM分析,是用户精细化运营中比较常见的分析方法了。

今天和大家分享一篇历史文章,内容做了微调。是数据分析中比较常用的一个分析框架:RFM分析。该模型用的很多,说明有模型自身的优势;但同时也存在很多的问题。今天和大家一起探讨。

01

什么是RFM分析

RFM分析,其实是一种将用户分层、进而针对不同用户群体进行精细化运营的方法。

RFM的三个字母,分别代表了一个维度:

  • R(Recency):最近一次消费时间。反映了用户最近消费的热度,用以衡量用户是否流失。理论上,最近一次消费时间越长,流失概率越高

  • F(Frequency):用户的消费频率。反映了用户对于产品、品牌的忠诚程度。理论上,一定时间内的购买频率越高,用户忠诚度越高

  • M(Monetary):消费金额。反映了用户的购买力。

通常来讲,是针对每个维度设定一个阈值,将用户群体划分为二(高于阈值、低于阈值),三个维度齐下,则可以将用户整体划分为2^3=8个用户细分群。如下图:

82928e5cdb8d6413c73e3f2bfa2503d6.png

有了用户的细分,可以针对细分用户进行精细化的营销。比如针对【重要价值客户】应该做好用户的权益维系,针对【重要保持客户】做好客户的流失挽回。

关于模型的大体含义和应用价值,就简述一二,详细的请继续。

02


如何进行RFM建模

RFM模型的建立,总结起来一般可以分为以下几步。

(1)关于原始数据

从定义中我们可以看出来,R、F、M其实都是和消费相关的。因此,关于RFM模型的搭建,使用的原始数据很明确:订单表交易表

而且,使用的维度其实并不需要很复杂,只要有以下的维度就足够了:

19fdf494a47a75d714f40dcd7ca24ec7.png

即我们只要有用户唯一标识、消费时间、消费金额,这三个字段的明细,就可以来搭建RFM的分析模型了。

当然,对于原始数据有一些数据清洗的工作,这里就不赘述了。比如选取的是成交的订单,而不是下单未支付的;比如选取的是排除大机构的订单……等等。

(2)三个维度的加工计算

基于上面的原始订单数据,下一步就是RFM三个维度的加工。这里面,有很多细节的问题。

首先,关于最近一次消费时间的计算。这个指标的定义比较明确,直接取最近一次消费的时间和当前时间做差就好。

关于消费频率的计算,必须有时间范围的设定。那具体是设置最近一年的消费频率(即购买了几次),还是最近1个月的消费频率呢?这是有很大差别的。通常来讲,这个范围的设定和分析用户的行业有很大关联。比如快消品,统计用户的几个月的时间就够了,但耐消品,显然不是。统计一年的,可能用户都没有复购。

关于消费金额。这里和消费频率一样,也是要有时间范围设定的,道理也是一样的。确定好了时间范围,直接做sum就行,没有太多的疑惑。

因此参数的设定,没有固定的标准,要多结合自己所处的行业规律。加工完是这样的表:

f2d5ea73ed860e52338198c14d4a6c72.png

(3)阈值的划分

加工好了基础的三个维度的统计指标,接下来就是进行划分阈值的确定。即确定基于多大的数值,将每个维度的用户进行分段划分。

通常来讲,每个维度只需要确定一个阈值即可,这样可以将总体用户划分为8个分段。但现在还有一种套路是每个维度划分为5段,将总体划分为5^3共计125个分层,美其名曰【细分】。但我个人是不认可的。我觉得RFM分析的重要意义就是用户细分的可解释及可落地性,划分成125个用户群体,你该如何精细化运营呢?最终还是要进行合并。

OK,我们还是按照正常8分层来讲。我们看到上面的统计聚合表了,往往分布是下图的样子(以R为例):

c53958772f2c6e11d29933363882ec62.png

如何划分为两群用户呢?这时有很多种不同的方法了。

第一种方法,采取均值的方法。我个人是不太建议用均值作为阈值的。因为现实情况经常有一些异常值,会影响均值的计算。而数据清洗的时候很难都排掉异常。

第二种方法,是采取中位数(或者其他分位数,比如20%分位)的方法。这种方法直接将排序后的用户按照数量进行划分,中位数可以将人群一分为均等两份,其他分位数也可以有合理的业务解释:20%的用户贡献了80%的作用,等等。

这种方法个人觉得比较简单易行,比较推荐。

关于偏态分布(以右偏为例)下,众数、中位数、均值有以下关系:

0d41119d93acfbff4ecaf5ac224afa3f.png

除了用统计量直接作为阈值外,第三种方法,也是市面上看到比较多的方法,就是打分法。

所谓的打分法,就是先将原始的R、F、M数值划分为1~5的分数,然后求分数均值,作为划分阈值。例如下图:

2d928efd7ade99c617a0dc413113d1d3.png

这种方法吧,挺忙活,又是打分又是求均值的。但我个人不太建议。一方面,原本只需要计算一个阈值就好了,现在需要先划分成5段,那这5段该怎么划分才合理呢?其次,这种打分的意义在哪,还增加了计算复杂度。

如果是解决异常值或者分布不均的问题,用分位数的方法就好了,我并没有太想明白市面上大行其道的打分法的意义在哪。我想到了一种可能,就是打分为了使三个维度可以在同一量纲上,进行衡量,以此可以计算一个用户的综合RFM得分,进行综合得分的排名。如下图:

d2e2bef2e98f8573d23eb6619b733207.png

如果是这样,那我觉得,是不是用打分法就主要依赖于模型目标了。若为了划分为8个离散的用户层,就没必要打分;若为了求用户的综合RFM得分,需要打分。除此之外,我确实想不到打分的意义了。希望大神指点。

(4)用户分层计算

经历了上面不同阈值划分方法的纷争,下面就比较顺畅了,那就是用户分层的计算。

这一步比较容易理解,直接根据定好的三个阈值,判断每个用户属于哪个区间,然后打标即可。不赘述了。

(5)模型优化

所谓的模型优化,主要还是在于阈值的调整。

要随着最终划分的人群以及相关的运营效果、活动规律,调整阈值的设定,最终达到一个最合理的划分。

03


RFM模型的优缺点

本文开头也提到了,RFM模型的应用广泛,是有很大优点的,但缺点也是不少,现在来和大家一起探讨一下。

(1)模型的优点

最大的优点,应该是数据的可获得性。

目前在互联网中,基本对于数据的收集做的还是比较完备了,采集了用户的各种行为数据等,可以更好的进行用户打标签、分层的操作。但是在传统行业中,没有太多的行为数据,其实能用的数据比较有限。

但是,无论公司的数据做的有多不完备,也一定是有成交数据的(除非这个公司没收入……)。只要有成交数据,就能进行RFM的分析,这是最大的优势。而且,基于成交数据做的RFM模型,还是比较有效的。

其次,模型的分层可解释性强。

其他很多算法模型、机器学习模型,往往通过聚类进行用户的分层,对于业务来讲,不是很好解释。但RFM模型分成的8个用户类别,是非常好理解的。

(2)模型的缺点

RFM模型其实是滞后性的分析模型,只有当用户发生了购买行为后,才能进行RFM的分析。而且模型的前提假设就是用户的前后行为是无差别的。

另外,使用该模型需要注意的是,不同行业的应用,是有差别的。

最典型的是就是快消品和耐消品的差别。对于耐消品而言,RFM分析并不是一个很行之有效的模型。例如冰箱的购买,用户购买一台冰箱后可能十几年都没有购买了,这是没办法用RFM分析的。如果强搬硬套,是没有任何意义的。

以上。

7d4e7382b497b7885a1a2d1c9527f8ec.gif

 
●10个面试必会的统计学问题!
●品牌知名度分析

http://chatgpt.dhexx.cn/article/USbFx2cK.shtml

相关文章

概念+实战讲解,一文带你了解RFM模型【kaggle项目实战分享】数据分析

大家早上好,本人姓吴,如果觉得文章写得还行的话也可以叫我吴老师。欢迎大家跟我一起走进数据分析的世界,一起学习! 感兴趣的朋友可以关注我或者我的数据分析专栏,里面有许多优质的文章跟大家分享哦。 (有需…

三线性插值(三维线性插值)

三线性插值(trilinear interpolation)主要是用于在一个3D的立方体中,通过给定顶点的数值然后计算立方体中其他点的数值的线性插值方法。 具体推导过程见参考资料1,这里直接给出最终公式: 其中,坐标(x,y,z…

快速三线性插值

转载自https://lianera.github.io/post/2018/fast-trilinear-interpolation/ 快速三线性插值 最近需要对一个体素进行插值,并且应用到一张大图像上。这个本来用三线性插值很容易就实现了,但是体素的尺寸很小,长宽高大概20x15x10的大小&#x…

线性插值、双线性插值、双三次插值学习笔记-图像处理

缺失值之线性插值 interpolate用法 在series中有两个空值 用图的方式表示出四个点 使用线性插值后的结果如下 使用代码演示 线性插值后的结果 再加入一条数据 结果如下 使用pandas中的DataFrame 运行结果,默认在垂直方向上使用线性插值 设置水平方向上的线性插值 …

插值(Interpolation)

前言 插值计算普遍存在于图像处理中,最近在做畸变优化时,看了一些资料中提到了插值&双线性插值,开始没明白,觉得一定很难,直接跳过,到最终写代码时,又不得不使用.于是就这里对这个功能进行学习,记录,并使用vs2017进行实际验证,验证后发现这个原理其实并不复杂. 插值 插值…

三点线性插值

问题: 在三角形的三个顶点具有3个不同颜色,如何通过插值计算出三角形中每个点的颜色? 应用实例:高洛德着色使用3个顶点的颜色进行线性插值,结果如下图: 解决方案: 显然,无论是线性…

线性插值和双线性插值

最近在学数字图像处理中旋转变换的问题,发现旋转以后图片有一些不连续点,于是试着用双线性插值法进行解决。下面就介绍下插值的原理: 线性插值 如果你只处理分离的数据、想知道分离点之间的某些值,需要用到某种类型的插值。这种情况如图5-17坐标所示。对某些分离的(整数)…

没想到会用到:线性插值(Linear Interpolation)原理及使用

各位博友们大家好,小弟遇到一些问题经常会去看大家的博客,所以也想加入大伙的阵营,每每看到一些好的东西,有些心得体会什么的也想与大伙分享。 1.关于插值 插值,它根据已知的数据序列(也可以理解为坐标中一…

线性插值 多项式插值 样条插值 牛顿插值总结

项目github地址:bitcarmanlee easy-algorithm-interview-and-practice 欢迎大家star,留言,一起学习进步 1.什么是插值 在数值分析中,插值(interpolation)是一种通过已知的、离散的数据点,在范围内推求新数据点的过程…

常用线性插值的介绍和应用(双线性插值,三线性插值,平滑曲线插值)

常用线性插值的介绍和应用 线性插值 插值是计算机图形学中非常常用的技术。通常,数据是在常规网格上指定的(值写在2D或3D网格的顶点位置)或在线上(在一维的情况下),但是程序需要在该网格上的随机位置求值。…

线性插值 np.interp()

线性插值是指插值函数为一次多项式的插值方式,其在插值节点上的插值误差为零。线性插值相比其他插值方式,如抛物线插值,具有简单、方便的特点。线性插值的几何意义即为概述图中利用过A点和B点的直线来近似表示原函数。 线性插值法是认为现象…

我与插值萍水相逢:线性插值(Linear Interpolation)原理及使用

各位博友们大家好,小弟遇到一些问题经常会去看大家的博客,所以也想加入大伙的阵营,每每看到一些好的东西,有些心得体会什么的也想与大伙分享。 1.关于插值 插值,它根据已知的数据序列(也可以理解为坐标中一…

对线性插值的理解

【插值】 插值是用已知点求未知点的一种方法,而且通常是用两个已知点求一个未知点。(如果是用很多已知点求未知点一般用曲线拟合) 既然是用两个已知点求一个未知点,那么两个已知点之间的距离要尽可能的小,这样求出来…

python判断是否为数字类型_python判断字符串是否为数字

以下实例通过创建自定义函数 is_number() 方法来判断字符串是否为数字:# -*- coding: UTF-8 -*- # Filename : test.py # author by : www.runoob.com def is_number(s): try: float(s) return True except ValueError: pass try: import unicodedata unicodedata.…

使用正则表达式判断字符串是否为数字类型

java 判断字符串是否是数字 1.用JAVA自带的函数 publicstaticbooleanisNumeric(Stringstr){ for(inti0;i System.out.println(str.charAt(i)); if(!Character.isDigit(str.charAt(i))){ returnfalse; returntrue; 2.用正则表达式 首先要importjava.util.regex.Pattern和java.ut…

java判断字符串是否为数字

一:判断java中的字符串是否为数字,可以通过正则表达式来判断;其判断逻辑如下: 1、根据阿里巴巴代码规范,将Pattern设置为全局常量,通过 -?[0-9](\\\\.[0-9])? 进行匹配是否为数字 private static final P…

二次型化为标准型

将二次型化为标准形有利于我们了解二次型的简单形式、二次型的各种参数如正负惯性指数、得到二次型的规范形、对称矩阵合同的简单形等等。另外,化标准形也是解析几何化简二次曲线和二次曲面的需要。 下面,我们以两道题目为例说明计算二次型的标准形的2种…

二次型的标准型、规范型

若二次型只有平方项,则称二次型为标准型 如果标准型中,系数只有1,-1和0,那么称为二次型的规范型,因为标准型中,1,-1,0的个数是由正负惯性指数决定的,而合同的矩阵正负惯…

二次型,正定二次型

二次型:含有n个变量 x 1 , x 2 , . . . x n x_1,x_2,...x_n x1​,x2​,...xn​的二次齐次函数: f ( x 1 , x 2 , . . . x n ) a 11 x 1 2 a 12 x 1 x 2 a 13 x 1 x 3 a 14 x 1 x 4 . . . a 1 n x 1 x n f(x_1,x_2,...x_n)a_{11}x_1^2a_{12}x_1x_2a_{13}x_1x_3…