RFM模型

RFM模型介绍

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

最近一次消费(Recency)

消费频率(Frequency)

消费金额(Monetary)

R/F/M计算(sql处理法)

1、R值计算

可选取2020-12-31日(最后一天)作为判断最近一次消费的距离日期

SELECT customerid,(to_date('2020-12-31','yyyy-mm-dd')-to_date(MAX(date_id),'yyyy-mm-dd')) R_time

FROM customer_order

GROUP BY customerid

ORDER BY R_time

图片.png
  • 根据分析结果显示的天数差来反应客户忠诚度。天数差越小说明客户忠诚度越高
    2、F值计算
    频率帮助我们了解客户进行了多少次消费
SELECT customerid,count(DISTINCT invoiceno) as F_times
FROM customer_order
GROUP BY customerid;
图片.png

3、M值计算

SELECT customerid,sum(total_price) M_times
FROM customer_order
GROUP BY customerid;
  • 根据计算可以了解到交易金额的主要范围

4、RFM数据汇总
为方便后续数据处理,为RFM值创建视图

CREATE VIEW view_rfm AS
(select CustomerID,
       (to_date('2020-12-31','yyyy-mm-dd')-to_date(MAX(date_id),'yyyy-mm-dd')) "天数差",
       count(DISTINCT invoiceno) "消费次数",
       sum(total_price) "消费金额" s
from customer_order
group by CustomerID

5、RFM评分

#N,n,a自定义界值
SELECT CustomerID,天数差,消费次数,消费金额,
(case when 天数差<=N1 then 5
when  天数差 >N1 and 天数差 <=N2 then 4 
when 天数差>N2 and 天数差<=N3 then 3  
when 天数差>N3 and 天数差<=N4 then 2 else 1 END) "R评分",
(case when 消费次数<=n1 then 1
when  消费次数 >n1 and 消费次数 <=n2 then 2 
when 消费次数>n2 and 天数差<=n3 then 3 
when 消费次数>n3 and 消费次数<=n4 then 4 else 5 END) "F评分",
(case when 消费金额<=a1 then 1
when  消费金额 >a1 and 消费金额 <=a2 then 2 
when 消费金额>a2 and 消费金额<=a3 then 3  
when 消费金额>a3 and 消费金额<=a4 then 4 else 5 END) "M评分"
from view_rfm;
图片.png

6、客户分层阈值
RFM评分完成,保存视图为view_rfm1,用各自的平均值做为客户划分的阈值,再做最后的客户分层处理

select ROUND(avg(R评分),1) "R平均值",ROUND(avg(F评分),1) "F平均值",ROUND(avg(M评分),1) "M平均值"
FROM view_rfm1;
图片.png
select CustomerID,
(case when R评分>3 then 1 else 0 END)  "R值",
(case when F评分>1 then 1 else 0 END)  "F值",
(case when M评分>1.1 then 1 else 0 END)  "M值"
FROM view_rfm1;
# RFM完成后,保存视图为view_rfm2
图片.png

7、客户分层
根据RFM阈值和客户评分分层表,对客户行为进行分层处理

图片.png
SELECT CustomerID,
(case when R值=1 and F值=1 and M值=1 then '重要价值客户'
  when R值=0 and F值=1 and M值=1 then '重要唤回客户'
  when R值=1 and F值=0 and M值=1 then '重要发展客户'      
  when R值=0 and F值=0 and M值=1 then '重要挽留客户'
  when R值=1 and F值=1 and M值=0 then '一般价值客户'
  when R值=1 and F值=0 and M值=0 then '一般发展客户'
  when R值=0 and F值=1 and M值=0 then '一般保持客户' 
ELSE '一般挽留客户' END) "客户分层"
from view_rfm2
  • 重要价值客户,RFM值都很高,可为其提供优质专属服务,提高其消费体验,增加客户忠诚度

    重要发展客户,消费频率低,但是R和M值都很高,可以进行定向推广或提供价格优惠,提高其消费频次

    重要唤回客户,最近消费的时间较为久远,可能存在流失,但以前的消费金额与频率较高,需了解具体长时间未消费的原因,针对性提供对策

    重要挽留客户,消费金额高,但长时间未进行消费且消费频率低,可主动联系或举行老客户召回活动,尽可能挽留

R/F/M计算(python处理法)

#画RFM,先对数据进行透视
rfm=df.pivot_table(index='user_id',
               values=['date_id','total_price','invoiceno'],
               aggfunc={'date_id':'max',
                       'total_price':'sum',
                       'invoiceno':'sum'})

RFM计算:

#获取最近消费,可选取2020年最后一天作为判断最近一次消费的距离日期
rfm['R']= (rfm.to_date('2020-12-31','yyyy-mm-dd') - rfm.order_dt.max())/np.timedelta64(1,'D')
# 重命名 R :消费时间  F:消费金额  M:消费频次
rfm.rename(columns={'order_products':"F",'order_amount':'M'},inplace=True)
#和各自的均值比较
rfm[['R','F','M']].apply(lambda x:x-x.mean())
#定义打标签的函数
def rfm_func(x):
    level=x.apply(lambda x:'1' if x>=0 else '0')
    # level 的类型是 series,index 是 R、F、M
    label=level.R + level.F + level.M
    d={# R 为1 表示比均值大,离最早时间近,F为1 表示 消费金额比较多,M 为1 表示消费频次比较多,所以是重要价值客户
        '111':'重要价值客户',
        '011':'重要保持客户',
        '101':'重要发展客户',
        '001':'重要挽留客户',
        '110':'一般价值客户',
        '010':'一般保持客户',
        '100':'一般发展客户',
        '000':'一般挽留客户',
    }
    result=d[label]
    return result
# 注意这里是要一行行的传递进来,所以 axis=1,传递一行得到一个 111,然后匹配返回一个值
rfm['label']=rfm[['R','F','M']].apply(lambda x:x-x.mean()).apply(rfm_func,axis=1)

导入excel表中进行Powerbi作图

#对标签求和计数
rfm.groupby('label').sum()
rfm.groupby('label').count()
#导入excel表中
rfm.to_excel(r'.\临时表\RFM模型.xlsx'
图片.png
  • RFM 的划分标准应该以业务为准,也可以通过切比雪夫去除极值后求均值,并且 RFM 的各个划分标准可以都不一样
  • 尽量用小部分的用户覆盖大部分的额度;不要为了数据好看划分等级
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容

  • “RFM分析,是用户精细化运营中比较常见的分析方法了。” 今天和大家分享一下数据分析中比较常用的一个分析框架:RF...
    首席数据科学家阅读 2,663评论 1 6
  • 导读:学习随笔,近期一直在研究关于用户的数据分析产品,网上翻阅了诸多文集,想想还是自己落笔记录下过程。该篇文章主要...
    唛伢旳稥炁阅读 11,325评论 0 33
  • 假设因为某种原因,你需要召回你的老客户。不同消费属性层级的老客户,需要不同的召回触动点,因此你可能需要对你的老客户...
    白驹过隙的白阅读 616评论 0 0
  • RFM模型概述 R=Recency距离最近一次交易的时间:用来代表客户粘性,分5、4、3、2、1,五个等级,5代表...
    波_洛阅读 2,598评论 1 4
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 124,187评论 2 7