数仓 | 如何使用RFM模型进行用户分层

大数据
RFM模型是在客户关系管理(CRM)中常用到的一个模型,RFM模型是衡量客户价值和客户创利能力的重要工具和手段。该模型通过一个客户的近期购买行为、购买的总体频率以及花了多少钱三项指标来描述该客户的价值状况。

[[420810]]

本文转载自微信公众号「大数据技术与数仓 」,作者西贝。转载本文请联系大数据技术与数仓 公众号。

在适当、有效的商务智能环境中,数据分析的质量必须得到保障。而确保数据分析质量的第一步就是根据问题需求从海量数据中提炼出真正所需的数据,因为这是发挥数据价值很重要的一个方面。通过数据的分析与可视化呈现可以更加直观的提供数据背后的秘密,从而辅助业务决策,实现真正的数据赋能业务。本文主要介绍在用户分层和用户标签中常常使用的一个模型——RFM模型。

基本概念

RFM模型是在客户关系管理(CRM)中常用到的一个模型,RFM模型是衡量客户价值和客户创利能力的重要工具和手段。该模型通过一个客户的近期购买行为、购买的总体频率以及花了多少钱三项指标来描述该客户的价值状况。

RFM模型较为动态地层示了一个客户的全部轮廓,这对个性化的沟通和服务提供了依据,同时,如果与该客户打交道的时间足够长,也能够较为精确地判断该客户的长期价值(甚至是终身价值),通过改善三项指标的状况,从而为更多的营销决策提供支持。

RFM由三要素构成,即R – Recency 最近一次活动,F – Frequency用户活动频率,M – Monetary 消费金额,每个要素都代表着用户某种重要的行为特征。RFM衡量数据是分析用户行为的重要指标,用户活动频率F和消费金额M代表了用户终生价值,最近一次活动R则代表了用户留存率以及用户参与度。

在RFM模式中,包括三个关键的因素,分别为:

  • R(Recency):表示客户最近一次购买的时间有多远,即最近的一次消费,消费时间越近的客户价值越大
  • F(Frequency):表示客户在最近一段时间内购买的次数,即消费频率,经常购买的用户也就是熟客,价值肯定比偶尔来一次的客户价值大
  • M (Monetary):表示客户在最近一段时间内购买的金额,即客户的消费能力,通常以客户单次的平均消费金额作为衡量指标,消费越多的用户价值越大。

最近一次消费、消费频率、消费金额是测算消费者价值最重要也是最容易的方法,这充分的表现了这三个指标对营销活动的指导意义。而其中,最近一次消费是最有力的预测指标。

通过上面分析可以对客户群体进行分类:

客户类型与等级 R F M 客户特征
重要价值客户
(A级/111)
高(1) 高(1) 高(1) 最近消费时间近、消费频次和消费金额都很高
重要发展客户
(A级/101)
高(1) 低(0) 高(1) 最近消费时间较近、消费金额高,但频次不高,忠诚度不高,很有潜力的用户,必须重点发展
重要保持客户
(B级/011)
低(0) 高(1) 高(1) 最近消费时间交远,消费金额和频次都很高。
重要挽留客户
(B级/001)
低(0) 低(0) 高(1) 最近消费时间较远、消费频次不高,但消费金额高的用户,可能是将要流失或者已经要流失的用户,应当基于挽留措施。
一般价值客户
(B级/110)
高(1) 高(1) 低(0) 最近消费时间近,频率高,但消费金额低,需要提高其客单价。
一般发展客户
(B级/100)
高(1) 低(0) 低(0) 最近消费时间较近、消费金额,频次都不高。
一般保持客户
(C级/010)
低(0) 高(1) 低(0) 最近消费时间较远、消费频次高,但金额不高。
一般挽留客户
(C级/000)
低(0) 低(0) 低(0) 都很低

通过RFM模型能得到什么信息

  • 谁是最佳用户?
  • 哪些用户即将流失?
  • 谁有潜力成为有价值用户?
  • 哪些用户可以留存?

数据分析案例

  • 效果图

  • 实现步骤

假设有如下的样例数据:

客户名称 日期 消费金额 消费数量
上海****有限公司 2020-05-20 76802 2630

需要将数据集加工成如下格式:

具体SQL实现

  1. SELECT  
  2.      customer_name,-- 客户名称 
  3.      customer_avg_money,-- 当前客户的平均消费金额 
  4.      customer_frequency, -- 当前客户的消费频次 
  5.      total_frequency,-- 所有客户的总消费频次 
  6.      total_avg_frequency, -- 所有客户平均消费频次 
  7.      customer_recency_diff, -- 当前客户最近一次消费日期与当前日期差值 
  8.      total_recency, -- 所有客户最近一次消费日期与当前日期差值的平均值 
  9.      monetary,-- 消费金额向量化 
  10.      frequency, -- 消费频次向量化 
  11.      recency, -- 最近消费向量化 
  12.      rfm, -- rfm 
  13.      CASE 
  14.         WHEN rfm = "111" THEN "重要价值客户" 
  15.         WHEN rfm = "101" THEN "重要发展客户" 
  16.         WHEN rfm = "011" THEN "重要保持客户" 
  17.         WHEN rfm = "001" THEN "重要挽留客户" 
  18.         WHEN rfm = "110" THEN "一般价值客户" 
  19.         WHEN rfm = "100" THEN "一般发展客户" 
  20.         WHEN rfm = "010" THEN "一般保持客户" 
  21.         WHEN rfm = "000" THEN "一般挽留客户" 
  22.     END AS rfm_text 
  23. FROM 
  24.   (SELECT  
  25.        customer_name,-- 客户名称 
  26.        customer_avg_money,-- 当前客户的平均消费金额 
  27.        customer_frequency, -- 当前客户的消费频次 
  28.        total_avg_money ,-- 所有客户的平均消费总额 
  29.        total_frequency,-- 所有客户的总消费频次 
  30.        total_frequency / count(*) over() AS total_avg_frequency, -- 所有客户平均消费频次 
  31.        customer_recency_diff, -- 当前客户最近一次消费日期与当前日期差值 
  32.        avg(customer_recency_diff) over() AS total_recency, -- 所有客户最近一次消费日期与当前日期差值的平均值 
  33.        if(customer_avg_money > total_avg_money,1,0) AS monetary, -- 消费金额向量化 
  34.        if(customer_frequency > total_frequency / count(*) over(),1,0) AS frequency, -- 消费频次向量化 
  35.        if(customer_recency_diff > avg(customer_recency_diff) over(),0,1) AS recency, -- 最近消费向量化 
  36.        concat(if(customer_recency_diff > avg(customer_recency_diff) over(),0,1),if(customer_frequency > total_frequency / count(*) over(),1,0),if(customer_avg_money > total_avg_money,1,0)) AS rfm 
  37.    FROM 
  38.      (SELECT  
  39.            customer_name, -- 客户名称 
  40.            max(customer_avg_money) AS customer_avg_money , -- 当前客户的平均消费金额 
  41.            max(customer_frequency) AS customer_frequency, -- 当前客户的消费频次 
  42.            max(total_avg_money) AS total_avg_money ,-- 所有客户的平均消费总额 
  43.            max(total_frequency) AS total_frequency,-- 所有客户的总消费频次 
  44.            datediff(CURRENT_DATE,max(customer_recency)) AS customer_recency_diff -- 当前客户最近一次消费日期与当前日期差值 
  45.       FROM 
  46.         (SELECT  
  47.                customer_name, -- 客户名称 
  48.                avg(money) over(partition BY customer_name) AS                customer_avg_money, -- 当前客户的平均消费金额 
  49.                count(amount) over(partition BY customer_name) AS customer_frequency, -- 当前客户的消费频次 
  50.                avg(money) over() AS total_avg_money,-- 所有客户的平均消费总额 
  51.                count(amount) over() AS total_frequency, --所有客户的总消费频次 
  52.                max(sale_date) over(partition BY customer_name) AS customer_recency -- 当前客户最近一次消费日期 
  53.  
  54.        FROM customer_sales) t1 
  55.        GROUP BY customer_name)t2) t3 

通过上面的分析,可以为相对应的客户打上客户特征标签,这样就可以针对某类客户指定不同的营销策略。

结论

  • 如果一家公司「重要价值」的客户不多,其他都是价值很低的「一般保持」客户,表示客户结构很不健康,无法承受客户流失的风险。
  • 「重要保持客户」是指最近一次的消费时间离现在较久,但消费频率和金额都很高的客户,企业要主动和他们保持联系。
  • 「重要发展客户」是最近一次消费时间较近、消费金额高,但频率不高、忠诚度不高的潜力客户。企业必须严格检视每一次服务体验,是否让客户非常满意。
  • 「重要挽留客户」则是最近一次消费时间较远、消费频率不高,但消费金额高的用户。企业要主动厘清久未光顾消费的原因,避免失去这群客户。

要减少重要挽留客户,促活重要保持客户,挖掘重要发展客户,才能产生源源不绝的重要价值客户。

总结

 

营销人员利用RFM分析能够快速地将用户细分成同类群组,并针对这些用户采取不同的个性化营销策略,从而提高用户的参与度和留存率。值得注意的是,不同的行业的数据特点和用户行为特点是不尽相同的,所以在实际的操作过过程中,会制定符合自己公司业务特点的RFM规则,但是基本的思路都是一致的。

 

责任编辑:武晓燕 来源: 大数据技术与数仓
相关推荐

2022-12-08 10:16:58

数据模型

2021-01-31 23:54:23

数仓模型

2021-01-04 05:42:48

数仓模型设计

2019-10-26 13:59:35

PythonRFM模型数据

2016-10-10 13:17:21

数据分析数据驱动用户分层

2022-01-13 10:45:48

数仓对象主题域

2013-01-18 14:07:09

2023-11-25 20:11:48

APPRFM模型

2023-03-30 10:30:15

数据系统

2022-08-22 17:46:56

虚拟数仓Impala

2021-09-28 07:12:08

数仓开发工具

2021-05-18 07:33:20

模型分层

2009-07-27 10:03:02

分层模型网络故障

2023-12-11 13:57:00

RFM模型激励机制

2023-01-03 17:43:39

网易邮箱数仓

2016-03-16 10:22:28

Spark用户画像数据科学

2022-07-26 15:38:58

数据仓数据治理数据团队

2021-05-09 21:57:08

数据仓库Olap

2021-06-11 07:26:16

数据仓库机器学习

2023-05-31 08:41:23

分层架构对象模型
点赞
收藏

51CTO技术栈公众号