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种不同的结果(2*2*2=8),不同组合对应的分层类型如下表所示:
R(时间间隔) | F(消费频率) | M(消费金额) | 分层结果 |
---|---|---|---|
高 | 高 | 高 | 重要价值用户 |
高 | 低 | 高 | 重要发展用户 |
低 | 高 | 高 | 重要保持用户 |
低 | 低 | 高 | 重要挽留用户 |
高 | 高 | 低 | 一般价值用户 |
高 | 低 | 低 | 一般发展用户 |
低 | 高 | 低 | 一般保持用户 |
低 | 低 | 低 | 一般挽留用户 |
根据结果我们不难看到RFM分层的内容主要是由不同维度评分的高低决定的,接下来我们再来拆解一下评分的高低是如何划分的。
对于评分首先我们要思考几个问题:
- 消费时间间隔越长评分应该高还是低?
- 消费频率越高评分应该是高还是低?
- 消费金额越大评分应该是高还是低?
弄清楚了这三个问题之后,我们再来思考评分是如何得到的。在进行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值打分 |
---|---|---|---|---|---|---|
1 | 5 | 2 | 6500 | 4 | 1 | 5 |
2 | 3 | 10 | 1700 | 5 | 4 | 3 |
3 | 2 | 7 | 2600 | 5 | 3 | 3 |
得到了每个用户对应的打分之后,我们还需要有一个标准进行对照,超出这个标准的就记为高分,低于则记为低分即可,通常情况下我们会选择所有用户打分的均值作为对照标准,计算RFM三个维度评分的均值结果为:
- R:4.67
- F:2.67
- M:3.67
接下来我们接可以讲上述对于每个用户的打分与这个标准进行对比,得到每个用户最终的RFM评分和结果:
用户ID | R | F | M | 分层结果 |
---|---|---|---|---|
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),
})
构建评分规则区间
def score_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['消费金额'])
根据评分规则进行打分
def func1(x, score):if x <= score[0]:return 1elif score[0] < x <= score[1]:return 2elif score[1] < x <= score[2]:return 3elif score[2] < x <= score[3]:return 4else:return 5df['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()def score(x,avg):if x > avg:return 1else:return 0df['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相反,进行倒置
def rev_r(x):if x == 1:return 0else:return 1
df['R_S'] = df['R_S'].apply(rev_r)
进行RFM映射
def get_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)
结果示例如下
RFM用户分层模型|原理+Python全流程实现相关推荐
- 波士顿矩阵|原理+Python全流程实现
波士顿矩阵 很多公司中都有着不同的产品或者是业务线,但是对于繁琐的业务来说通常我们希望根据业务的好坏进行合理的资源分配,对于这种"好坏"的判断,波士顿矩阵出现了. 一.概念 波士顿 ...
- 数据分析实战项目3-用Excel做RFM模型用户分层模型分析
本文数据集来源:忘记了,私聊发数据源 本次目的是将一份用户订单表做RFM模型分析,做好8个维度的用户分层,可以方便运营和销售有目的去跟进重点和非重点客户. 数据源字段如图所示,但本次是订单表,客户有重 ...
- 《十周成为数据分析师》笔记——业务线 第八节 常见互联网业务的数据分析报告的制作及用户分层模型
互联网业务数据分析报告及用户分层模型 一.业务逻辑回顾及互联网相关指标 1.实战项目与业务逻辑回顾 数据报表(数据源)→用户画像(数据分析)→数据化运营(决策指导)→商业分析(宏观判断)→分析报告(结 ...
- 路面病害检测-从数据清洗到模型部署的全流程方案
转自AI Studio,原文链接: 路面病害检测-从数据清洗到模型部署的全流程方案 - 飞桨AI Studio 1. 项目说明 无论是水泥还是沥青路面,在通车使用一段时间之后,都会陆续出现各种损坏.变 ...
- Python 数据处理数据挖掘(四):用户分层模型RFM
声明:本文为学习笔记,侵权删 一.RFM模型 RFM(Recency最近一次消费,Frequency消费频率,Monetary消费金额) R用户活跃度 F用户忠诚度 M用户重要性 R,F,M都有5个评 ...
- ARMA模型时间序列分析全流程(附python代码)
ARMA模型建模流程 建模流程 1)平稳性检验 原始数据data经过清洗得到data_new,然后进行平稳性检验,非平稳数据无法采用ARMA模型进行预测,ADF检验可以用来确定数据的平稳性,这里导入的 ...
- object怎么转list_PaddleOCR识别模型转Pytorch全流程记录
这篇文章主要负责记录自己在转PaddleOCR 模型过程中遇到的问题,以供大家参考. 重要的话说在最前面,以免大家不往下看: 本篇文章是把 "整个" ppocr 模型 转成了 py ...
- 数据挖掘之时间序列模型(最全流程分析)
时间序列模型 一.获取数据源 二.缺失值处理 三.检验序列的稳定性 四.序列平稳化 五.参数寻优 六.建立模型 七.模型检验 八.模型预测 美股封盘(close)数据 获取数据源->缺失值处理- ...
- 全国大学生数据统计与分析竞赛2021年【本科组】-B题:战胜市场: 应用基于熵权平衡的 CatBoost 二分类模型和改进 RFM 用户价值模型
目录 摘要 1 引言 1.1 问题描述 1.2 我们的思考 1.3 本文主要工作与创新点 2 模型假设
- 【数据分析案例】pandas + matplotlib 人货场+RFM+用户复购分析 电商水果销售
使用python中的pandas和matplotlib简单实现描述性分析,因为数据为随机生产数据,因此该案例更多的是体现分析思路以及过程实现 导入相关库 import matplotlib.pyplo ...
最新文章
- 微软向马斯克的人工智能项目OpenAI投资10亿美元
- 输出nc数据_气象数据处理的火箭加速器—CDO
- 避免活跃性危险(第十章)
- Python base64编码解码
- 烟花程序c语言,C语言烟花程序
- Java 度分秒转经纬度,经纬度转度分秒,度分转经纬度,经纬度转度分
- linux 同步北京时间_设置linux的时间为北京时间
- 蓝牙 aptx android,蓝牙aptx干嘛用的
- 时光老去,远了年少的我
- SHOUG线上活动 Maclean Liu分享《学习甲骨文数据库的自由之翼-与Oracle的世界相连接》...
- 三星i865刷android,三星S11加持黑科技,16GB+骁龙865,手机流畅度超越电脑
- Python3:变量的定义
- python脚本计算STM32的bxCAN的波特率
- GitHub如何配置SSH Key
- logo是啥_Logo什么意思,如何设计logo
- 一、VS2017 编译libiec61850
- 意能通:一名博士CEO的人工智能创业之旅
- 如何把xml格式数据转成json格式?
- 用计算机名怎么共享电视盒,机顶盒播放电脑视频的方法, 局域网共享教程
- 使用代码片断添加交互
热门文章
- 戴顿大学计算机科学,(出国) 2015年 清北 上海交大浙大复旦中科南大 世界TOP30高校 官方数据...
- 检定证书、校准证书与测试证书的区别
- 人脸检测进阶:更快的5点面部标志检测器
- word“您的组织策略阻止我们为您完成此操作”解决记录
- python 统计图绘制,Python绘制统计图表
- “自刎而死”的李贽之 “童心说”
- PNP : Work Cound Frequence
- word文档中添加公式、插入数学公式及其编号
- vins-mono--视觉跟踪--feature_trackers
- mysql数据库外键的作用