RFM

2025-5-27 Guide
  • 报表设计
  • 分析师
About 13 min

# 概述

RFM分析是一种基于客户购买行为进行细分的市场营销技术。它通过评估客户的三个关键因素来确定哪些客户更有价值,以及如何更好地与这些客户互动。这三个因素分别是:

  1. Recency(最近一次购买的时间):指的是客户上一次购买产品或服务距离现在的时间。较近进行购买的客户通常被认为更有可能再次购买,因为他们对品牌或产品的记忆仍然新鲜。

  2. Frequency(购买频率):表示在特定时间段内客户购买的次数。频繁购买的客户往往对品牌有较高的忠诚度,并且可能代表了重复购买习惯的良好指标。

  3. Monetary(消费金额):指客户在一定时期内花费的总金额。高消费额的客户显然对企业的收入贡献更大,识别并维护这些高价值客户是企业的重要任务。

通过结合这三个维度,RFM分析可以帮助企业将客户分成不同的群体,从而制定针对性的营销策略。例如,对于那些最近有过购买、经常购买并且花费较高的客户(即R、F、M值都高的客户),可以被视为最佳客户,给予特别的关注和奖励;而针对那些很久没有购买、购买频率低且消费金额也低的客户,则可能需要采取重新激活的策略。

RFM分析的优势在于其相对简单却非常有效的方法,不需要复杂的算法即可快速实施,并能产生直观且可操作的结果。这种方法非常适合用于优化客户关系管理(CRM)策略、提升客户满意度和增加销售收益。在实际应用中,企业可以根据自己的业务特点调整RFM分析的具体参数和阈值,以达到最佳效果。

# 案例演示

测试数据-示例超市.xls (opens new window)

我们依旧基于超市订单表数据进行案例演示, 数据特征如下:

  1. 主要使用到的字段有: 客户ID,订单时间,订单ID
  2. 每个客户有多个订单,一个订单可能分拆为多个子订单

# R值

即每个用户最后一次购买时间距 业务最新日期 多少天。

下面是为R值相关新增的 计算字段

首次交易日期={FIXED `客户 id` : min(`订单日期`)}
用户最后交易日期={FIXED `客户 id` : max(`订单日期`)}
业务最新日期={FIXED : max(`订单日期`)} 
# R值取订单表最大日期与最后交易日期差异值, 实际使用中可以根据业务需求调整
R值=DATEDIFF('day', #{用户最后交易日期}, #{业务最新日期}) 
1
2
3
4
5

# 总体平均R值

平均R值为全体客户平均R值, 从上面的订单表可以看到,一个客户有多条记录,每条记录的R值相同,但是计算客户评价R值的时候只能取一条,类似于下面的SQL定义

select sum(R) / count(distinct `客户ID`)
       -- 同 avg(R)
  from (
   select `客户ID`, 
          min(`R值`) R -- 这里因为每个客户的R值都相同,用min/max/avg都可以
     from t_order
    group by `客户ID`
  ) t
1
2
3
4
5
6
7
8

但是,我们在计算字段中不方便做多次汇总,改用均摊方法计算总体R值的和

每条记录的有效R值=#{R值}/#{客户记录数}, 上面截图中 一个客户4条记录,均摊之后则为, 1460/4, sum求和之后依旧为1460

通过LOD FIXED在全体数据记录上求平均R值:

平均R值={FIXED : sum(#{R值}/#{客户记录数}) / distinct(`客户 id`)}
1

# F值

即每个用户累计订单数。把每个用户的下单数做一个计数统计即可得到F值。

F值={FIXED `客户 id` : distinct(`订单 id`)}
1

# 总体平均F值

与平均R值一样,总体平均F值用记录均摊法求和再除以总客户数

平均F值={FIXED : sum(#{F值}/#{客户记录数}) / distinct(`客户 id`)}
1

# M值

即每个客户消费总额

M值={FIXED `客户 id` : sum(`销售额`)}
1

# 总体平均M值

总体平均F值用记录均摊法求和再除以总客户数

平均M值={FIXED : sum(#{M值}/#{客户记录数}) / distinct(`客户 id`)}
1

# 客户分组

客户RFM综合评价,会按照客户自身R/F/M每一项指标是否高于总体平均值,高于平均值记录为1,低于平均值记录为0,于是把用户划分为8类,具体如下:

增加计算字段:

R=IF(#{R值} > #{平均R值}, 1, 0)
F=IF(#{F值} > #{平均F值}, 1, 0)
M=IF(#{M值} > #{平均M值}, 1, 0)
RFM=CONCAT(#{R}, #{F}, #{M})
1
2
3
4

为了RFM值可读,案例中对RFM维度配置了维度字典

# 数据看板

Last update: May 27, 2025 16:53