MySQL_RFM客户价值模型

RFM很久以前已经写过一篇Python实现的方式,并给出了可视化的展示方法,文章是《RFM模型_Python》,可以跳转去查看。然后对RFM模型的介绍也是引用的那一篇的,直接复制过来了,之后最后实现的方式是MySQL实现的。

RFM模型是衡量客户价值和客户创利能力的重要工具和手段。在众多的客户关系管理(CRM)的分析模式中,RFM模型是被广泛提到的。该模型通过一个客户的近期购买行为、购买的总体频率以及花了多少钱三项指标来描述该客户的价值状况。后面有实现方式和可视化展示。

图片

一般情况下,三个维度,每个维度去高低两个值,放在一起就形成了8个指标,如下。也可以根据实际情况划分更多维度,就能进行更精细化的客户分群了。

  • 重要价值用户,RFM三个值都很高,要提供vip服务;
  • 重要发展用户,消费频率低,但是其他两个值很高,就要想办法提高他的消费频率;
  • 重要保持用户,最近消费距离现在时间较远,也就是F值低,但是消费频次和消费金额高。这种用户,是一段时间没来的忠实客户。应该主动和他保持联系,提高复购率;
  • 重要挽留客户,最近消费时间距离现在较远、消费频率低,但消费金额高。这种用户,即将流失,要主动联系用户,调查清楚哪里出了问题,并想办法挽回;
  • 一般价值客户,也叫潜力客户。这类用户消费频次高,时间近,只是消费金额低,需要想办法提高购买金额;
  • 一般发展客户,也叫新客户。刚接触平台,可以大力发展;
  • 一般保持客户
  • 一般挽留客户,也叫流失客户。这种客户基本上是无效的客户了,应该只是有羊毛的时候来了一下的人。

实现方式其实也很简单,Excel、PowerPivot、SQL、R、Python都可以很轻松的实现,这里就以SQL为例,操作一下。

首先分别计算三个指标
R最近一次购买日期距今天数,有两种方法,因为我们的数据是到2021.1.31号的,所以比较日期就是和1.31号进行比较。第一种方法是先计算每条订单的日期和1.31号的日期差,然后取最小值就是最近一次购买日期的天数;第二种方法是用1.31号和每个用户的最近一次日期进行比较,算出来也是一样的。这里多说一句,因为使用了聚合函数,所以需要用GROUP BY对用户id分组一下,不然会报错。
F购买次数,这个就很简单了,对每个用户的订单号去重计数就可以了。
** M购买金额**,也是一样的,对每个用户金额求和在聚合就行了。
下面三个指标一起写,SQL语句如下↓

SELECT
 `用户id`,
 MIN(DATEDIFF('2021-01-31',日期)) AS R1,
 DATEDIFF('2021-01-31',MAX(日期)) AS R2,
 COUNT(DISTINCT 订单号) AS F,
 SUM(单价*数量) AS M
FROM
 `order`
GROUP BY
 `用户id`

我们已经得到了每个用户的RFM值,现在需要把每个值分成0和1两类。如果实际情况需要,也可以分更多类,而且分类最好结合业务实际情况,多和业务的同学交流。我们这里就按天数小于30天为1,订单号大于10单为1,金额大于10万为1,用IF语句就行,如果条件多了就要CASE-WHEN,SQL语句和结果如下↓

SELECT
 `用户id`,
 MIN(DATEDIFF('2021-01-31',日期)) AS R1,
 DATEDIFF('2021-01-31',MAX(日期)) AS R2,
 COUNT(DISTINCT 订单号) AS F,
 SUM(单价*数量) AS M,
 IF(MIN(DATEDIFF('2021-01-31',日期))>30,0,1) AS R_Value,
 IF(COUNT(DISTINCT 订单号)>10,1,0) AS F_Value,
 IF(SUM(单价*数量)>100000,1,0) AS M_Value
FROM
 `order`
GROUP BY
 `用户id`

然后我们再根据RFM值,匹配出相应的客户解释,这里就用CASE_WHEN了,SQL语句如下↓

SELECT
 `用户id`,
 R_Value,
 F_Value,
 M_Value,
 (CASE
  WHEN R_Value = 1 AND F_Value = 1 AND M_Value = 1 THEN '1重要价值客户' 
  WHEN R_Value = 0 AND F_Value = 1 AND M_Value = 1 THEN '2重要发展客户' 
  WHEN R_Value = 1 AND F_Value = 0 AND M_Value = 1 THEN '3重要发展客户' 
  WHEN R_Value = 0 AND F_Value = 0 AND M_Value = 1 THEN '4重要挽留客户' 
  WHEN R_Value = 1 AND F_Value = 1 AND M_Value = 0 THEN '5一般价值客户' 
  WHEN R_Value = 1 AND F_Value = 0 AND M_Value = 0 THEN '6一般发展客户' 
  WHEN R_Value = 0 AND F_Value = 1 AND M_Value = 0 THEN '7一般保持客户'
  ELSE '8一般挽留客户' 
  END 
 ) AS 客户类型
FROM
 (SELECT
  `用户id`,
  MIN(DATEDIFF('2021-01-31',日期)) AS R1,
  DATEDIFF('2021-01-31',MAX(日期)) AS R2,
  COUNT(DISTINCT 订单号) AS F,
  SUM(单价*数量) AS M,
  IF(MIN(DATEDIFF('2021-01-31',日期))>30,0,1) AS R_Value,
  IF(COUNT(DISTINCT 订单号)>10,1,0) AS F_Value,
  IF(SUM(单价*数量)>100000,1,0) AS M_Value
 FROM
  `order`
 GROUP BY
  `用户id`) tp

到上面基本工作就完成了,下面再汇总一下每类客户的数据,直观感受一下,然后想想每一类客户使用什么样的营销策略,SQL语句看上去很复杂,其实就是在上面的基础上,把上面的语句作为一个子查询,在GROUP BY一下就行了↓

SELECT
 客户类型,
 COUNT(*) AS 客户数量
FROM
 (SELECT
  R_Value,
  F_Value,
  M_Value,
  (CASE
   WHEN R_Value = 1 AND F_Value = 1 AND M_Value = 1 THEN '1重要价值客户' 
   WHEN R_Value = 0 AND F_Value = 1 AND M_Value = 1 THEN '2重要发展客户' 
   WHEN R_Value = 1 AND F_Value = 0 AND M_Value = 1 THEN '3重要发展客户' 
   WHEN R_Value = 0 AND F_Value = 0 AND M_Value = 1 THEN '4重要挽留客户' 
   WHEN R_Value = 1 AND F_Value = 1 AND M_Value = 0 THEN '5一般价值客户' 
   WHEN R_Value = 1 AND F_Value = 0 AND M_Value = 0 THEN '6一般发展客户' 
   WHEN R_Value = 0 AND F_Value = 1 AND M_Value = 0 THEN '7一般保持客户'
   ELSE '8一般挽留客户' 
   END 
  ) AS 客户类型
 FROM
  (SELECT
   `用户id`,
   MIN(DATEDIFF('2021-01-31',日期)) AS R1,
   DATEDIFF('2021-01-31',MAX(日期)) AS R2,
   COUNT(DISTINCT 订单号) AS F,
   SUM(单价*数量) AS M,
   IF(MIN(DATEDIFF('2021-01-31',日期))>30,0,1) AS R_Value,
   IF(COUNT(DISTINCT 订单号)>10,1,0) AS F_Value,
   IF(SUM(单价*数量)>100000,1,0) AS M_Value
  FROM
   `order`
  GROUP BY
   `用户id`) tp)tp2
 GROUP BY
  客户类型

最后需要把用户分类和用户信息导出来给到运营的同学,让他们去针对每一类客户进行电话或邮箱的触达跟进。这里只需要跟进用户id关联一下用户表就行了。SQL语句如下↓

SELECT
 u.`用户id`,
 u.`省份`,
 u.性别,
 u.年龄,
 u.电话,
 u.邮箱,
 R_Value,
 F_Value,
 M_Value,
 (CASE
  WHEN R_Value = 1 AND F_Value = 1 AND M_Value = 1 THEN '1重要价值客户' 
  WHEN R_Value = 0 AND F_Value = 1 AND M_Value = 1 THEN '2重要发展客户' 
  WHEN R_Value = 1 AND F_Value = 0 AND M_Value = 1 THEN '3重要发展客户' 
  WHEN R_Value = 0 AND F_Value = 0 AND M_Value = 1 THEN '4重要挽留客户' 
  WHEN R_Value = 1 AND F_Value = 1 AND M_Value = 0 THEN '5一般价值客户' 
  WHEN R_Value = 1 AND F_Value = 0 AND M_Value = 0 THEN '6一般发展客户' 
  WHEN R_Value = 0 AND F_Value = 1 AND M_Value = 0 THEN '7一般保持客户'
  ELSE '8一般挽留客户' 
  END 
 ) AS 客户类型
FROM
 (SELECT
  `用户id`,
  MIN(DATEDIFF('2021-01-31',日期)) AS R1,
  DATEDIFF('2021-01-31',MAX(日期)) AS R2,
  COUNT(DISTINCT 订单号) AS F,
  SUM(单价*数量) AS M,
  IF(MIN(DATEDIFF('2021-01-31',日期))>30,0,1) AS R_Value,
  IF(COUNT(DISTINCT 订单号)>10,1,0) AS F_Value,
  IF(SUM(单价*数量)>100000,1,0) AS M_Value
 FROM
  `order`
 GROUP BY
  `用户id`) tp
LEFT JOIN user_t AS u ON u.用户id = tp.用户id

End

◆ 蒙太奇马赛克图
◆ Python高德地图可视化
◆ Python不规则条形图

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容