数据分析之RFM模型

article/2025/10/2 14:58:25

在这里插入图片描述
一.均值 RFM模型算法
从csv文件中读取相应的数据

data=pd.read_csv('./dataset.csv',encoding='ISO-8859-1')

#读取2014年的客户信息

data_14=data[data['Order-year']==2014]
data_14

2.获取相应的列

data_14 = data_14[['CustomerID','OrderDate','Sales']]
data_14 

CustomerID为用户id
OrderDate为下单日期
Sales 为销售金额

3.复制数据(以免修改时改变原有数据)

customerdf=data_14.copy()
customerdf

4.设置CustomerID为索引

customerdf.set_index('CustomerID',drop=True,inplace=True)

5添加交易次数字段(后期计算F时方便)

customerdf['orders']=1
customerdf

6做透视表
最后一次购买时间 购买次数 购买总金额

rfmdf=customerdf.pivot_table(index=['CustomerID'],values=['OrderDate','orders','Sales'],aggfunc={'OrderDate':'max','orders':'sum','Sales':'sum'}
)

aggfunc为各个字段的设置运算 OrderDate 取出最大值,orders为下单次数去和,Sales求每个用户的销售总金额
7. 每一位用户的 R F M
用相同的的标准减去每一位用户最后购买的时间即可算出R,标准一样,则R标准一样

rfmdf['R']=(rfmdf.OrderDate.max()-rfmdf.OrderDate).dt.days
rfmdf.rename(columns={'Sales':'M','orders':'F'},inplace=True)
rfmdf

rfmdf.OrderDate.max()为整个2014年下单日期的最大值,此值可任意选择,选定一个值,则求出的每一列的值都是标准值.
8用户打标签算法

判断结果返回字符串.以便后面将其拼接,整型数字无法拼接
def rfm_func(x):
#与均值的差设置成0和1状态res=x.apply(lambda x:'1'if x>0 else '0')label=res.R+res.F+res.Md={'011':'重要价值客户', '111':'重要唤回客户','001':'重要深耕客户','101':'重要挽留客户','010':'潜力客户','110':'一般维持客户','000':'新客户','100':'流失客户'}result=d[label]return result

9.将RFM进行连接,每个RFM之分别于均值做差,然后用函数将每个用户打上标签

rfmdf['label']=rfmdf[['R','F','M']].apply(lambda x:x-x.mean()).apply(rfm_func,axis=1)

10.计算每种客户类型的数量

rfmdf.groupby('label').count()

在这里插入图片描述

11.将每种客户类型作为横坐标,客户类型的值即数量作为纵坐标进行绘图

rfmdf.label.value_counts().plot.bar(figsize=(20,8),fontsize=15)

在这里插入图片描述
二 RFM评分算法
注:均值算法将最大值和最小值的误差拉小,从而使得整个统计误差变大.
评分算法就是为每个用户根据一定的区间为其用户进行打分,使得整体统计精确值提升.
在这里插入图片描述
1.统计表的基本信息

customer_grade_df = rfmdf[['R','F','M']]
customer_grade_df.describe()

在这里插入图片描述
2.设置打分区间

#1.1 F值区间打分 F值越大,分越高
section_list_F=[0,5,10,15,20,50]
grade_F=pd.cut(customer_grade_df['F'],bins=section_list_F,labels=[1,2,3,4,5])
grade_F
customer_grade_df['F_S']=grade_F.values
#1.2 M值区间打分 M值越大,分越高
section_list_M=[0,500,1000,5000,10000,30000]
grade_M=pd.cut(customer_grade_df['M'],bins=section_list_M,labels=[1,2,3,4,5])
grade_M
customer_grade_df['M_S']=grade_M.values
#1.3 R值区间打分  R值越小,分越高
section_list_R=[-1,32,93,186,270,365]
grade_R=pd.cut(customer_grade_df['R'],bins=section_list_R,labels=[5,4,3,2,1])
grade_R
customer_grade_df['R_S']=grade_R.values
customer_grade_df

注意:每个RFM的区间的设定是根据上表的最大值和最小值设定的,一定要将字段的数值都包含在内,否则会使整个统计值出现误差
在这里插入图片描述
3.查看表的基本信息

customer_grade_df.describe()
#可以查到R_S,F_S,M_S 不是浮点型数字,是个category类型 
#无法进行计算,需要进行转换,这是由于pandas库cut函数导致
customer_grade_df.info()  

在这里插入图片描述
4.修改category类型为int64

rfm_score_grade=pd.DataFrame(customer_grade_df[['R_S','F_S','M_S']],dtype=np.int64)
rfm_score_grade.dtypes

在这里插入图片描述
5.根据打分情况,给用户打标签(同均值算法一样)

def rfm_score_func(x):level=x.apply(lambda x: '1'if x>=0 else '0')label = level.R_S+level.F_S+level.M_Sd={'011':'重要价值客户', '111':'重要唤回客户','001':'重要深耕客户','101':'重要挽留客户','010':'潜力客户','110':'一般维持客户','000':'新客户','100':'流失客户'}result=d[label]return result
rfm_score_grade['RFM']=rfm_score_grade[['R_S','F_S','M_S']].apply(lambda x:x-x.mean()).apply(rfm_score_func,axis=1 )
rfm_score_grade

在这里插入图片描述

6.计算每种每种类型客户的数量

rfm_score_grade.groupby('RFM').count()

在这里插入图片描述
7. 绘图

rfm_score_grade.RFM.value_counts().plot.bar(figsize=(20,8),fontsize=16)

在这里插入图片描述

三 类比均值算法图和评分算法图,由此可看出 均值误差大
在这里插入图片描述


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

相关文章

【数据分析】基于RFM模型的线上零售中的客户细分(二):RFM模型实战

基于RFM模型的线上零售中的客户细分(二) 摘要:在上一篇博客《基于RFM模型的线上零售中的客户细分(一):客户细分》中,我们了解了什么是客户细分,这篇博客将会结合具体的商业实例介绍同…

数据分析 一文搞懂什么是RFM模型

数据分析 | 一文搞懂什么是RFM模型 想知道你在电商平台心里的地位吗?学会RFM分析法,你自然知道 大家好,我是翔宇!今天我们来了解做数据分析一定要会的分析方法之一----RFM分析法。 相信大家在前天的双十一一定也多多少少贡献了…

RFM模型原理详解与实操运用

RFM模型原理详解与实操运用 RFM模型原理介绍为什么要使用RFM模型RMF模型原理介绍RFM模型用户细分 RFM模型实例操作背景/数据介绍RFM模型异化构建代码实现 最近在 运营课程中学习了RFM模型,又正正好在 商务智能的课程中学习了使用K-Means聚类分析实现RFM的操作。 …

如何利用RFM分析模型进行数据分析?

RFM模型 RFM主要根据客户活跃程度和平台交易金额贡献所做的分类。 近度:用字母R表示,代表客户最近一次的活跃距离目前的天数。在这部分客户中,有些优质客户值得通过一定的营销手段进行激活。 频度:用字母F表示,代表…

对RFM模型的理解

客户价值可以衡量客户对企业的相对重要性,是企业进行差异化决策的重要标准。 由此,通过客户价值分类可以为企业进行差异化营销策略奠定基础。 RFM模型对客户价值分类时非常简单的一种模型 以下从几大模块说一下个人对RFM模型的理解。 1.RFM模型是什么 …

RFM分析方法

RFM分析方法 RFM分析方法RFM指标介绍RFM指标作用如何使用RFM分析方法如何精细化运营 如何给R、F、M打分-采用数据分组确定分组的范围和标准利用VLOOKUP匹配函数函数 RFM分析方法 RFM指标介绍 R:最近一次消费时间间隔(Recency) R越小用户价值越高F:消费…

用户行为分析模型——RFM模型

用户行为分析模型——RFM模型 1. RFM模型2. RFM模型分析应用 1. RFM模型 RFM模型根据客户活跃程度和交易金额的贡献,进行客户价值细分的一种方法。 R(Recency)——最近一次交易时间间隔。基于最近一次交易日期计算的得分,距离当前…

客户价值模型:RFM

文章目录 1.1、RFM 模型引入1.1.1、RFM 模型介绍1.1.1.1、一般情况下RFM模型可以说明下列几个事实:1.1.1.2、对最近一个月内所有用户订单数据进行统计RFM值: 1.1.2、RFM 模型的三个指标:1.1.2.1、R:最近一次消费(recen…

RFM分析(Recency,Frequency,Monetary)

通过RFM方法,我们根据用户的属性数据分析,对用户进行了归类。在推送、转化等很多过程中,可以更加精准化,不至于出现用户反感的情景,更重要的是,对产品转化等商业价值也有很大的帮助。 应用背景:…

R语言 RFM分析

目录 一、RFM分析的定义: 二、RFM分析的假设 三、RFM分析的步骤 四、RMF分析实例 4.1 数据准备 4.2 计算R/F/M 4.3 将R、F、M分组打分赋值 4.4 计算RFM综合分值 4.5 客户分类 4.6 完整代码 注:个人学习笔记--谁说菜鸟不会数据分析 R语言篇 一、…

[数据分析] RFM分析方法

美图欣赏2022/06/08 RFM分析方法 作用:对用户分类,识别出有价值的用户,对不同价值的用户使用不同的运营决策,把公司有限的资源发挥到最大的效果(用于用户价值细分,精细化运营) RFM是3个指标的缩写:最近1次消费时间间隔(Recency)…

深入解读RFM模型-实战应用干货

今天想先谈谈传统企业和电商谈的较多的RFM模型,在众多的客户细分模型中,RFM模型是被广泛提到和使用的。 一、RFM模型概述 RFM模型是网点衡量当前用户价值和客户潜在价值的重要工具和手段。RFM是Rencency(最近一次消费)&#xff…

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

“ RFM分析,是用户精细化运营中比较常见的分析方法了。” 今天和大家分享一篇历史文章,内容做了微调。是数据分析中比较常用的一个分析框架:RFM分析。该模型用的很多,说明有模型自身的优势;但同时也存在很多的问题。今…

概念+实战讲解,一文带你了解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个顶点的颜色进行线性插值,结果如下图: 解决方案: 显然,无论是线性…