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

简介: 详细解读如何使用RFM模型进行用户分层(附代码)

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分层的内容主要是由不同维度评分的高低决定的,接下来我们再来拆解一下评分的高低是如何划分的。

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

  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值打分
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 1
    elif score[0] < x <= score[1]:
        return 2
    elif score[1] < x <= score[2]:
        return 3
    elif score[2] < x <= score[3]:
        return 4
    else:
        return 5


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()

def score(x,avg):
    if x > avg:
        return 1
    else:
        return 0

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相反,进行倒置
def rev_r(x):
    if x == 1:
        return 0
    else:
        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)

结果示例如下

在这里插入图片描述

相关文章
|
11天前
|
数据采集 数据可视化 数据挖掘
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
本文探讨了金融资产波动率建模中的三种主流方法:GARCH、GJR-GARCH和HAR模型,基于SPY的实际交易数据进行实证分析。GARCH模型捕捉波动率聚类特征,GJR-GARCH引入杠杆效应,HAR整合多时间尺度波动率信息。通过Python实现模型估计与性能比较,展示了各模型在风险管理、衍生品定价等领域的应用优势。
136 65
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
|
6天前
|
存储 缓存 Java
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
38 5
Python高性能编程:五种核心优化技术的原理与Python代码
|
2月前
|
机器学习/深度学习 数据可视化 TensorFlow
使用Python实现深度学习模型的分布式训练
使用Python实现深度学习模型的分布式训练
184 73
|
2月前
|
算法 数据处理 Python
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
Savitzky-Golay滤波器是一种基于局部多项式回归的数字滤波器,广泛应用于信号处理领域。它通过线性最小二乘法拟合低阶多项式到滑动窗口中的数据点,在降噪的同时保持信号的关键特征,如峰值和谷值。本文介绍了该滤波器的原理、实现及应用,展示了其在Python中的具体实现,并分析了不同参数对滤波效果的影响。适合需要保持信号特征的应用场景。
117 11
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
|
24天前
|
安全 数据挖掘 编译器
【01】优雅草央央逆向技术篇之逆向接口协议篇-如何用python逆向接口协议?python逆向接口协议的原理和步骤-优雅草央千澈
【01】优雅草央央逆向技术篇之逆向接口协议篇-如何用python逆向接口协议?python逆向接口协议的原理和步骤-优雅草央千澈
|
2月前
|
机器学习/深度学习 数据采集 供应链
使用Python实现智能食品消费需求分析的深度学习模型
使用Python实现智能食品消费需求分析的深度学习模型
89 21
|
2月前
|
缓存 数据安全/隐私保护 Python
python装饰器底层原理
Python装饰器是一个强大的工具,可以在不修改原始函数代码的情况下,动态地增加功能。理解装饰器的底层原理,包括函数是对象、闭包和高阶函数,可以帮助我们更好地使用和编写装饰器。无论是用于日志记录、权限验证还是缓存,装饰器都可以显著提高代码的可维护性和复用性。
40 5
|
2月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
2月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2月前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
122 80

热门文章

最新文章