0


RFM用户分层模型|原理+Python全流程实现

RFM 模型

在这里插入图片描述

在数据分析中经常会进行用户分层,本文我们来了解一下常见的用户分层模型RFM。

RFM概念

RFM是由**R(Recency)F (Frequency)**、 M(Monetary) 三个维度构成的,其具体含义如下:

  • R:最近一次消费时间间隔
  • F:消费频率
  • M:消费金额

这里对于这三个维度的概念简单的做一个说明:

  • R:当前日期为3.25日,上一次消费日期3月20日,消费时间间隔为5天。
  • F:一年内去某商场消费100次,消费频率为100次。
  • M:一年内去某商场消费总额为1W元,消费金额为1W元。

RFM分层方式

一般情况下,在具体分层的时候,我们可以从RFM三个不同的维度进行高或低的评分,最终得到8种不同的结果(222=8),不同组合对应的分层类型如下表所示:
R(时间间隔)F(消费频率)M(消费金额)分层结果高高高重要价值用户高低高重要发展用户低高高重要保持用户低低高重要挽留用户高高低一般价值用户高低低一般发展用户低高低一般保持用户低低低一般挽留用户
根据结果我们不难看到RFM分层的内容主要是由不同维度评分的高低决定的,接下来我们再来拆解一下评分的高低是如何划分的。

对于评分首先我们要思考几个问题:

  1. 消费时间间隔越长评分应该高还是低?
  2. 消费频率越高评分应该是高还是低?
  3. 消费金额越大评分应该是高还是低?

弄清楚了这三个问题之后,我们再来思考评分是如何得到的。在进行RFM不同维度评分的时候根据不同的业务具有不同的业务评分表,示例如下所示(如何进行评分表的设计后文会说明):
打分消费间隔(R)(天)消费频率 (F) (次)消费金额(M) (元)1[20,inf][0,2][0,1000]2[11,20][3,5][1001,1500]3[6,10][6,8][1501,3000]4[4,5][9,16][3001,5000]5[0,3][16,inf][5000,inf]
根据上表所示的评分表我们将所有用户的数据进行对照打分即可,示例如下:
用户ID消费间隔(R)消费频率(F)消费金额(M)R值打分F值打分M值打分1526500415231017005433272600533
得到了每个用户对应的打分之后,我们还需要有一个标准进行对照,超出这个标准的就记为高分,低于则记为低分即可,通常情况下我们会选择所有用户打分的均值作为对照标准,计算RFM三个维度评分的均值结果为:

  • R:4.67
  • F:2.67
  • M:3.67

接下来我们接可以讲上述对于每个用户的打分与这个标准进行对比,得到每个用户最终的RFM评分和结果:
用户IDRFM分层结果1低低高重要挽留用户2高高低一般价值用户3高高低一般价值用户

RFM评分表设计

当没有具体的业务规定时,我们可以使用如下的方法进行评分表的设计。

假设一共有10000个用户,用M(消费金额)维度举例,我们首先将所有人的消费金额进行排序,然后按照人数将整体等分成5个连续的区间,区间的评分分别对应[1,2,3,4,5]即可。

在这里插入图片描述

RFM策略

了解完了RFM的概念与分层方式,我们再来了解一下RFM分层后的实际应用,根据分层结果,通常我们会对重要的用户进行运营,策略如下:

  • 重要价值用户:保持长期联系与重点关注
  • 重要保持用户:发放小额优惠券,吸引用户回流
  • 重要发展客户:促导用户办理会员卡,积分卡
  • 重要挽留客户:发放大额优惠券,吸引用户回流

RFM分层Python实现

创建虚拟数据

import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings("ignore")# 随机创建用户数据
df = pd.DataFrame({'用户ID': np.arange(1,10001),'时间间隔': np.random.randint(1,10,10000),'消费频次': np.random.randint(1,100,10000),'消费金额': np.random.randint(1000,10000,10000),})

构建评分规则区间

defscore_list(data):
    re =list(data.values)
    re.sort()return re[2000:10000:2000]

r_score = score_list(df['时间间隔'])
f_score = score_list(df['消费频次'])
m_score = score_list(df['消费金额'])

根据评分规则进行打分

deffunc1(x, score):if x <= score[0]:return1elif score[0]< x <= score[1]:return2elif score[1]< x <= score[2]:return3elif score[2]< x <= score[3]:return4else:return5

df['R']= df['时间间隔'].apply(func1, score=r_score)
df['F']= df['消费频次'].apply(func1, score=f_score)
df['M']= df['消费金额'].apply(func1, score=m_score)

区分打分的高低

R_avg = df['R'].mean()
F_avg = df['F'].mean()
M_avg = df['M'].mean()defscore(x,avg):if x > avg:return1else:return0

df['R_S']= df['R'].apply(score,avg=R_avg)
df['F_S']= df['F'].apply(score,avg=F_avg)
df['M_S']= df['M'].apply(score,avg=M_avg)# R的逻辑和F/M相反,进行倒置defrev_r(x):if x ==1:return0else:return1
df['R_S']= df['R_S'].apply(rev_r)

进行RFM映射

defget_sum_value(series):return''.join([str(i)for i in series.values.tolist()])# 添加RFM字符串列
df['data_rfm']= df[['R_S','F_S','M_S']].apply(get_sum_value, axis=1)

dic ={'111':'重要价值客户','011':'重要保持客户','001':'重要挽留客户','101':'重要发展客户','010':'一般保持客户','110':'一般价值客户','000':'一般挽留客户','100':'一般发展客户'}# RFM字符串数据映射成对应类型文字
df['data_rfm_re']= df['data_rfm'].map(dic)

结果示例如下

在这里插入图片描述


本文转载自: https://blog.csdn.net/qq_35164554/article/details/123760839
版权归原作者 二哥不像程序员 所有, 如有侵权,请联系我们删除。

“RFM用户分层模型|原理+Python全流程实现”的评论:

还没有评论