前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >数仓:如何使用RFM模型进行用户分层?

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

作者头像
Python数据科学
发布2021-09-08 15:25:00
发布2021-09-08 15:25:00
1.9K00
代码可运行
举报
文章被收录于专栏:Python数据科学Python数据科学
运行总次数:0
代码可运行

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

代码语言:javascript
代码运行次数:0
运行
复制
SELECT 
     customer_name,-- 客户名称
     customer_avg_money,-- 当前客户的平均消费金额
     customer_frequency, -- 当前客户的消费频次
     total_frequency,-- 所有客户的总消费频次
     total_avg_frequency, -- 所有客户平均消费频次
     customer_recency_diff, -- 当前客户最近一次消费日期与当前日期差值
     total_recency, -- 所有客户最近一次消费日期与当前日期差值的平均值
     monetary,-- 消费金额向量化
     frequency, -- 消费频次向量化
     recency, -- 最近消费向量化
     rfm, -- rfm
     CASE
        WHEN rfm = "111" THEN "重要价值客户"
        WHEN rfm = "101" THEN "重要发展客户"
        WHEN rfm = "011" THEN "重要保持客户"
        WHEN rfm = "001" THEN "重要挽留客户"
        WHEN rfm = "110" THEN "一般价值客户"
        WHEN rfm = "100" THEN "一般发展客户"
        WHEN rfm = "010" THEN "一般保持客户"
        WHEN rfm = "000" THEN "一般挽留客户"
    END AS rfm_text
FROM
  (SELECT 
       customer_name,-- 客户名称
       customer_avg_money,-- 当前客户的平均消费金额
       customer_frequency, -- 当前客户的消费频次
       total_avg_money ,-- 所有客户的平均消费总额
       total_frequency,-- 所有客户的总消费频次
       total_frequency / count(*) over() AS total_avg_frequency, -- 所有客户平均消费频次
       customer_recency_diff, -- 当前客户最近一次消费日期与当前日期差值
       avg(customer_recency_diff) over() AS total_recency, -- 所有客户最近一次消费日期与当前日期差值的平均值
       if(customer_avg_money > total_avg_money,1,0) AS monetary, -- 消费金额向量化
       if(customer_frequency > total_frequency / count(*) over(),1,0) AS frequency, -- 消费频次向量化
       if(customer_recency_diff > avg(customer_recency_diff) over(),0,1) AS recency, -- 最近消费向量化
       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
   FROM
     (SELECT 
           customer_name, -- 客户名称
           max(customer_avg_money) AS customer_avg_money , -- 当前客户的平均消费金额
           max(customer_frequency) AS customer_frequency, -- 当前客户的消费频次
           max(total_avg_money) AS total_avg_money ,-- 所有客户的平均消费总额
           max(total_frequency) AS total_frequency,-- 所有客户的总消费频次
           datediff(CURRENT_DATE,max(customer_recency)) AS customer_recency_diff -- 当前客户最近一次消费日期与当前日期差值
      FROM
        (SELECT 
               customer_name, -- 客户名称
               avg(money) over(partition BY customer_name) AS                customer_avg_money, -- 当前客户的平均消费金额
               count(amount) over(partition BY customer_name) AS customer_frequency, -- 当前客户的消费频次
               avg(money) over() AS total_avg_money,-- 所有客户的平均消费总额
               count(amount) over() AS total_frequency, --所有客户的总消费频次
               max(sale_date) over(partition BY customer_name) AS customer_recency -- 当前客户最近一次消费日期

       FROM customer_sales) t1
       GROUP BY customer_name)t2) t3

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

结论

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

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

总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python数据科学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本概念
  • 通过RFM模型能得到什么信息
  • 数据分析案例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档