RFM是指的什么计算机算法指的是

没有更多推荐了,
不良信息举报
举报内容:
用RFM模型为基础的讨论
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!CRM方法:用RFM分析模型保持有价值客户_CRM_CTI论坛
CRM方法:用RFM分析模型保持有价值客户
  在客户关系管理过程中,商家不断追逐获得客户的信息,而客户往往不愿意主动透露自己的信息或意图,除非客户能立即看到这样做给自己带来的好处。即使商家使出浑身解数,获得的往往也是一些外在的客户行为数据,对于客户内心真实想法及消费趋势,商家仍然知之不多。这正应了一句俗话:"知人知面不知心"。
  为了得到客户的"心"(如客户满意度、忠诚度等),从客户那里获得更大的生命周期价值,CRM提供了许多分析模型和预测模型。在这里向大家介绍一种相对简单可行、且行之有效的方法:RFM分析模型。RFM中,每个英文字母代表一种相对容易获得的已成交客户的行为参数。R(Recency
最近)表示客户最近一次购买的时间距当前有多远,也就是停止采购的时间,例如20天、8周、3个月等;F(Frequency 频率)表示客户在最近一段时间内购买的次数;M(Monetary
Value货币价值)表示客户在最近一段时间内每次购买的平均金额。
  作为一种对客户分类的方法,RFM分析模型起初主要用于直效营销(Direct Marketing)领域,目的是提高老客户交易的次数。
  广东一家办公设备及耗材零售企业,在省内建立了9家连锁配送中心,业务发展迅速,有过成交记录的老客户也多了起来,通过向客户用邮政信函发送商品目录、开展直效营销的成本越来越高。该公司希望找到一种更有效的方法,来区分客户,以便在"更恰当的时间、向恰当的客户传递恰当的商品信息",从而刺激重复交易,同时也适当降低邮寄费用。他们把客户最近一次购买日期到当天的天数算出来,得到R这个参数。
  R≤7天的为 R1级客户
  8天≤R≤30天的为 R2级客户
  R≥30天的为 R3级客户
  对于R1级的客户,该公司会立即再邮寄一份商品目录及奖励积分计划,对于R2级的客户则会在一周内再邮寄一份商品目录及奖励积分计划,对于R3级以下的客户则不采用这重追随购买的邮寄方式。
根据国外的统计结果,R1级客户对直效邮件的回函率是R2级的三倍,因为这些客户刚完成交易不久,所以会更注意同一公司的商品信息。如果及时跟进的邮件内容,采用"交叉销售"(Cross-Sell)或"提升销售"(Up-Sell)的策略,推荐与客户购买需求相关度高的商品,或者提供额外的重复购买奖励,效果更加显著。如果采用M货币价值这个参数对客户分类,则平均交易金额高的客户的反馈率并不见得比平均交易金额低的客户来得多。
采用F购买次数作为参数对客户进行分组,采取不同的邮寄策略也是很有意义的。例如过去6个月购买超过5次以上的客户,今后将每月邮寄一次商品目录;而购买不足2次的客户,将只会每两个月邮寄一次。
  RFM非常适用于提供多种商品的企业,这些商品单价相对不高,或者相互间有互补性,具有多次重复购买的必要,这些企业可能提供如下商品:日用消费品、服装、小家电等;RFM也适用于这类企业,它们既提供高价值耐用商品、同时又提供配套的零部件或维修服务,如下:精密机床、成套生产设备、打印机等;RFM对于商品批发、原材料贸易、以及一些服务业(如旅行、保险、运输、快递、娱乐等)的企业也很适用。
  RFM分析模型不断丰富发展,已经不局限于直效营销领域了。如今它更常用于监测客户消费行为异动、防范重要客户流失方面。
  全胜公司是一家小型化工原料贸易企业,年销售额4000多万元,最有核心竞争力的产品是食品添加剂,如柠檬酸等,顶端客户是几家国际知名大型的饮料制造企业在当地的工厂,由高层管理人员亲自跟进,客户关系维护得很好,能稳定地占有较理想的客户份额。但是该公司还经营其他多条产品线,其他非顶端客户近1000家,来自不同的行业,采购规模和习惯各不相同,要集中有限的企业资源、保持高价值客户的忠诚度、防范高价值客户流失真不是一件容易的事情。利用RFM分析模型,则可有效地改进这方面的工作。
步骤一:分别计算出过去12个月所有已成交客户贡献的总采购金额,可以利用公式计算:
  M×F= TM(Totle Monetary Value,总采购金额)
  *M=过去12个月内的平均采购金额
  *F=过去12个月内的采购次数
  总采购金额也可以通过其他统计途径(例如从进销存软件或销售自动化SFA软件)获得。计算出各个客户的总采购金额后,可以利用EXCEL将客户名单按总采购金额进行降序排列,把1000家客户中最前面的1%约10家客户定义为顶端客户,把其次的4%约40家客户定义为高端客户,把再次的15%约150家客户定义为中端客户,其余的800家客户归入低端客户。
下表是降序排列后第11名起的几家客户的情况,它们是40家高端客户的一部分。
依据总采购金额给客户排名
  步骤二,把客户关系保持的重点首先放在前高端及中端用户那里,因为顶端客户的忠诚度高、客户份额高,再额外花精力的话边际效益不明显;低端客户数量多、贡献小,暂时没有太多精力照料。对于高端和中端的约190家客户,分别计算出它们过去12个月每次购买到下次购买的平均周期,公式为:
  365天÷F= P
  *F=过去12个月的采购次数
  *P=Period平均采购周期
  分别计算出这190家客户最近一次购买日期D到今天的天数:
  Today - D= R
  *D=Date最近购买日期
  *R=停止采购天数
  将P(Period平均采购周期)、D(Date最近购买日期)和R(停止采购天数)依次填写到步骤一制作的客户列表中,并利用EXCEL的公式计算出两者的差△:
  P-R=△
分类信息:&&&&&
电话:010-79677 传真:010- 呼叫中心建设及运营管理咨询服务:010-
京ICP证030771号 Copyright Ctiforum.com All rights reserved注册 | 登录
大数据分析产品经理。
产品经理就业培训班,12周特训,测、练、实战,22位导师全程带班,200+名企内推,保障就业!
通过RFM方法,我们根据用户的属性数据分析,对用户进行了归类。在推送、转化等很多过程中,可以更加精准化,不至于出现用户反感的情景,更重要的是,对产品转化等商业价值也有很大的帮助。
应用背景:
在产品迭代过程中,通常需要根据用户的属性进行归类,也就是通过分析数据,对用户进行归类,以便于在推送及转化过程中获得更大的收益。
分析方法:
RFM分析(Recency,Frequency,Monetary)
分析工具:
SPSS(数据分析的重量级应用,与SAS二选一)
一.RFM基础知识
所谓探索性分析,主要是运用一些分析方法从大量的数据中发现未知且具有价值信息的过程。
常用的探索性分析方法包括:RFM分析、聚类分析、因子分析、对应分析等。
RFM的含义:
R(Recency):客户最近一次交易时间的间隔。R值越大,表示客户交易发生的日期越久,反之则表示客户交易发生的日期越近。
F(Frequency):客户在最近一段时间内交易的次数。F值越大,表示客户交易越频繁,反之则表示客户交易不够活跃。
M(Monetary):客户在最近一段时间内交易的金额。M值越大,表示客户价值越高,反之则表示客户价值越低。
RFM分析就是根据客户活跃程度和交易金额的贡献,进行客户价值细分的一种方法。
RS:基于最近一次交易日期计算的得分,距离当前日期越近,得分越高。例如5分制。
FS:基于交易频率计算的得分,交易频率越高,得分越高。如5分制。
MS:基于交易金额计算的得分,交易金额越高,得分越高。如5分制。
RFM总分值:RFM=RS*100+FS*10+MS*1
RFM分析的主要作用:
识别优质客户。可以指定个性化的沟通和营销服务,为更多的营销决策提供有力支持。
能够衡量客户价值和客户利润创收能力。
RFM的假设前提:
假设交易的可能性:
最近交易过的客户 & 最近没有交易过的
交易频率高的客户 & 交易频率低的
交易金额大的客户 & 交易金额小的
二.分析实践
RFM接受的数据格式有两种:
交易数据:每次交易占用一行,关键变量是客户ID、交易时间、交易金额。
客户数据:每次交易占用一行,关键变量是客户ID、交易总金额、最近交易日期、交易总次数。
我们通常采用交易数据的格式进行分析。因为交易数据可以整理成客户数据,而客户数据无法还原成交易数据。即用交易数据的字段可以得到客户数据的字段,反之不行。
具体是“交易数据”还是“客户数据”根据数据源文件的格式而定。
变量:选择各个变量。
分箱化:评分的总分是多少。
保存:生成哪些新的变量,可以自定义名称。
输出:可以全部勾选,为了能全面的解读RFM分析结果。
确定后,生成了四个新的变量:
崭新-得分:最后一次交易的时间间隔得分;
频率-得分:交易总次数得分;
消费金额-得分:交易总金额得分;
RFM得分:RFM得分
三.结果解读(最重要的环节)
该图主要用来查看每个RFM汇总得分的客户数量分布是否均匀。
我们期望均匀的分布,若不均分,则应该重新考虑RFM的适用性或尝试另一种分箱方法(减少分箱数目或随机分配绑定值)。
“RFM热图”是交易金额均值在RS和FS绘制的矩阵图上的图形化表示,用颜色深浅表示交易金额均值的大小,颜色越深,表示相应矩阵块内的客户交易金额均值越高。
如本例随着RS和FS的分值增大,颜色越来越深,说明客户最近一次交易时间越近、交易次数越多,其平均交易金额越高。
该图是最后一次交易时间、交易总次数、交易总金额之间的散点图。
通过散点图可以清晰直观的看到三个分析指标两两之间的关系,便于指标相关性评估。
本例中,交易总次数和交易总金额存在较为明显的线性关系,而最后一次交易时间和另外两个分析指标之间的相关性较弱。
四.RFM分析应用
为客户分组,即将三个指标分别分为“高”和“低”两种,高于均值的为“高”,低于均值的为“低”。
因此有三件事要做:
计算出各个指标得分的平均值;
将各个变量高于平均分的定义为“高”,低于平均分的定义为“低”;
根据三个变量“高”“低”的组合来定义客户类型;如“高”“高”“高”为高价值客户。
第一步,先计算各个指标的平均值。
一定要勾选平均值,否则输出结果中没有“平均值”。
现在我们得到了各个变量的平均分:3.33,2.99,3.01。
第二步,将各个变量高于平均分值的定义为“高”,否则为“低”。
按照1-2-3-4-5的步骤设置高于平均值的为“2”,也可以设置为“高”
同理去设置FS和MS。
设置后结果如下:
可以在变量设置里设置标签,1代表“低”,2代表“高”,也可以在“重新编码到不同变量”里面设置时就直接定义为“高低”,而不是“1和2”。
第三步:通过各个变量的高低组合,确定客户类型。
第三区域:可以是公式,也可以是具体的数字,其实这里就是输出结果。
第四区域:表示满足的条件。
同理在“变量设置”里对标签就行设置就行。
最终分析结果如下:
通过RFM方法,我们根据用户的属性数据分析,对用户进行了归类。在推送、转化等很多过程中,可以更加精准化,不至于出现用户反感的情景,更重要的是,对产品转化等商业价值也有很大的帮助。
作者:膝盖哥,是一枚“跪着提需求”的产品经理。常说“不用不用,真的不用了,我跪着就好!”
本文由 @膝盖哥 原创发布于人人都是产品经理。未经许可,禁止转载。
赞赏是对原创者的最大认可
赞赏6人打赏
收藏已收藏 | 171赞已赞 | 34
大数据分析产品经理。
产品经理群
运营交流群
数据分析群
文案交流群
Axure交流群
关注微信公众号
大家都在问
21个回答36人关注
13个回答12人关注
23个回答23人关注
13个回答13人关注
48个回答72人关注
14个回答22人关注R语言构建RFM模型了解一下~~~R语言构建RFM模型了解一下~~~临高阁看天下百家号RFM模型是市场营销和CRM客户管理中经常用到的探索性分析方法,透过模型深入挖掘客户行为背后的价值规律,进而更好地利用数据价值推动业务发展和客户管理。RFM是三种客户行为的英文缩写:R:Recency
—— 客户最近一次交易时间的间隔。R值越大,表示客户交易距今越久,反之则越近;F:Frequency—— 客户在最近一段时间内交易的次数。F值越大,表示客户交易越频繁,反之则不够活跃;M:Monetary —— 客户在最近一段时间内交易的金额。M值越大,表示客户价值越高,反之则越低。一般通过对RFM三个原始指标进行分箱操作(分位数法),获得三个指标各自的若干个水平因子(需要注意因子水平大小的对应的实际意义)。R_S:基于最近一次交易日期计算得分,距离当前日期越近,则得分越高,否则得分越低;F_S:基于交易频率计算得分,交易频率越高,则得分越高,否则得分越低;M_S:基于交易金额得分,交易金额越高,则得分越高,反之得分越低。同时为了对每个客户进行综合评价,也可将以上三个得分进行加权计算(权重规则可由专家制定或者营销人员自行根据业务决定,这里统一采用100:10:1)。RFM = 100R_S + 10F_S + 1*M_SRFM核心便是构建在R、F、M三个指标得分构成的立方体组合内,形成一个非常直观的客户价值矩阵。最终通过对R_S、F_S、M_S三指标的得分组合,形成八种客户价值类型,营销人员可以通过以上组合形成的客户类群,针对性的进行活动营销,进而提升客户价值和营收水平。通过RFM分析识别优质客户,可以据此制定个性化沟通与营销服务,可以为营销决策提供更好地支持。以下是利用R语言构建RFM模型的简要步骤:1、数据准备:## !/user/bin/env RStudio 1.1.423## -*- coding: utf-8 -*-## RFM Model#* 最近一次消费(Recency)#* 消费频率(Frenquency)#* 消费金额(Monetary)Code Partsetwd('D:/R/File/')library('magrittr')library('dplyr')library('scales')library('ggplot2')library(&easyGgplot2&)library(&Hmisc&)library('foreign')library('lubridate')mydata &- spss.get(&trade.sav&,datevars ='交易日期',reencode ='GBK') names(mydata) &- c('OrderID','UserID','PayDate','PayAmount') start_time &- as.POSIXct(&&, format=&%Y/%m/%d&) %&%
as.numeric()end_time
&- as.POSIXct(&&, format=&%Y/%m/%d&) %&%
as.numeric()set.seed(233333)mydata$PayDate &- runif(nrow(mydata),start_time,end_time) %&% as.POSIXct(origin=&&) %&% as.Date()mydata$interval &- difftime(max(mydata$PayDate),mydata$PayDate ,units=&days&) %&% round() %&% as.numeric()按照用户ID聚合交易频次、交易总额及首次购买时间salesRFM &- mydata %&% group_by(UserID) %&%
summarise(
= sum(PayAmount),
Frequency = n(),
= min(interval)
)2、计算得分#分箱得分salesRFM &- mutate(
=6- cut(salesRFM$Recency,breaks = quantile(salesRFM$Recency,
probs = seq(0,1,0.2),names = FALSE),include.lowest = TRUE,labels=F),
= cut(salesRFM$Frequency ,breaks = quantile(salesRFM$Frequency, probs = seq(0,1,0.2),names = FALSE),include.lowest = TRUE,labels=F),
= cut(salesRFM$Monetary
,breaks = quantile(salesRFM$Monetary,
probs = seq(0,1,0.2),names = FALSE),include.lowest = TRUE,labels=F),
rankRMF =100*rankR +10*rankF +1*rankM)#标准化得分(也是一种计算得分的方法)salesRFM &- mutate(
rankR1 =1- rescale(salesRFM$Recency,to = c(0,1)),
rankF1 = rescale(salesRFM$Frequency,to = c(0,1)),
rankM1 = rescale(salesRFM$Monetary,to = c(0,1)),
rankRMF1 =0.5*rankR +0.3*rankF +0.2*rankM)3、客户分类:#对R\F\M分类:salesRFM &- within(salesRFM,{
R_S = ifelse(rankR & mean(rankR),2,1)
F_S = ifelse(rankF & mean(rankF),2,1)
M_S = ifelse(rankM & mean(rankM),2,1)})#客户类型归类:salesRFM &- within(salesRFM,{
Custom = NA
Custom[R_S ==2& F_S ==2& M_S ==2] ='高价值客户'Custom[R_S ==1& F_S ==2& M_S ==2] ='重点保持客户'Custom[R_S ==2& F_S ==1& M_S ==2] ='重点发展客户'Custom[R_S ==1& F_S ==1& M_S ==2] ='重点挽留客户'Custom[R_S ==2& F_S ==2& M_S ==1] ='重点保护客户'Custom[R_S ==1& F_S ==2& M_S ==1] ='一般保护客户'Custom[R_S ==2& F_S ==1& M_S ==1] ='一般发展客户'Custom[R_S ==1& F_S ==1& M_S ==1] ='潜在客户'})4、分析结果可视化:4.1 查看RFM分箱后客户分布状况:#RFM分箱计数ggplot(salesRFM,aes(rankF)) +
geom_bar()+
facet_grid(rankM~rankR) +
theme_gray()4.2 RFM热力图:#RFM heatmapheatmap_data &- salesRFM %&% group_by(rankF,rankR) %&% dplyr::summarize(M_mean = mean(Monetary))ggplot(heatmap_data,aes(rankF,rankR,fill =M_mean )) +
geom_tile() +
scale_fill_distiller(palette ='RdYlGn',direction =1)4.3 RFM直方图:#RFM直方图p1 &- ggplot(salesRFM,aes(Recency)) +
geom_histogram(bins =10,fill ='#362D4C')p2 &- ggplot(salesRFM,aes(Frequency)) +
geom_histogram(bins =10,fill ='#362D4C')
p3 &- ggplot(salesRFM,aes(Monetary)) +
geom_histogram(bins =10,fill ='#362D4C')
ggplot2.multiplot(p1,p2,p3, cols=3)4.4 RFM两两交叉散点图:#RFM 两两交叉散点图p1 &- ggplot(salesRFM,aes(Monetary,Recency)) +
geom_point(shape =21,fill ='#362D4C',colour ='white',size =2)p2 &- ggplot(salesRFM,aes(Monetary,Frequency)) +
geom_point(shape =21,fill ='#362D4C',colour ='white',size =2)
p3 &- ggplot(salesRFM,aes(Frequency,Recency)) +
geom_point(shape =21,fill ='#362D4C',colour ='white',size =2)
ggplot2.multiplot(p1,p2,p3, cols=1)5 数据结果导出#导出结果数据write.csv(salesRFM,'salesRFM.csv')Python:1、数据准备#!/usr/bin/env python3# -*- coding: utf-8 -*-importtimeimportnumpyasnpimportpandasaspdimportsavReaderWriterasspssimportosfromdatetimeimportdatetime,timedeltanp.random.seed(233333)os.chdir('D:/R/File') pd.set_option('display.float_format',lambdax:'%.3f'% x)withspss.SavReader('trade.sav',returnHeader =True,ioUtf8=True,rawMode =True,ioLocale='chinese')asreader:
mydata = pd.DataFrame(list(reader)[1:],columns = list(reader)[0])
mydata['交易日期'] = mydata['交易日期'].map(lambdax: reader.spss2strDate(x,&%Y-%m-%d&,None))
mydata.rename(columns={'订单ID':'OrderID','客户ID':'UserID','交易日期':'PayDate','交易金额':'PayAmount'},inplace=True)
start_time = int(time.mktime(time.strptime('','%Y/%m/%d')))
= int(time.mktime(time.strptime('','%Y/%m/%d')))
mydata['PayDate'] = pd.Series(np.random.randint(start_time,end_time,len(mydata))).map(lambdax: time.strftime(&%Y-%m-%d&, time.localtime(x)))
mydata['interval'] = [(datetime.now() - pd.to_datetime(i,format ='%Y %m %d')).daysforiinmydata['PayDate']]
mydata = mydata.astype({'OrderID':'int64','UserID':'int64','PayAmount':'int64'})
print('---------#######-----------')
print(mydata.head())
print('---------#######-----------')
print(mydata.tail())
print('…………………………………………………………………………')
print(mydata.dtypes)
print('---------#######------------')2、得分计算:#按照用户ID聚合交易频次、交易总额及首次购买时间mydata.set_index('UserID', inplace=True)salesRFM = mydata.groupby(level =0).agg({'PayAmount': np.sum,'PayDate':'count','interval':
})# make the column names more meaningfulsalesRFM.rename(columns={'PayAmount':'Monetary','PayDate':'Frequency','interval':'Recency'}, inplace=True)salesRFM.head()#均值划分salesRFM
= salesRFM.assign(
= pd.qcut(salesRFM['Recency'],
q = [0,.2,.4,.6,.8,1.] , labels = [5,4,3,2,1]),
= pd.qcut(salesRFM['Frequency'],q = [0,.2,.4,.6,.8,1.] , labels = [1,2,3,4,5]),
= pd.qcut(salesRFM['Monetary'] ,q = [0,.2,.4,.6,.8,1.] , labels = [1,2,3,4,5]))salesRFM['rankRMF'] =100*salesRFM['rankR'] +10*salesRFM['rankF'] +1*salesRFM['rankM']#特征缩放——0-1标准化from sklearn import preprocessingmin_max_scaler = preprocessing.MinMaxScaler()salesRFM1 = min_max_scaler.fit_transform(salesRFM.loc[:,['Recency','Frequency','Monetary']].values)salesRFM
= salesRFM.assign(
rankR1 =1- salesRFM1[:,0],
rankF1 = salesRFM1[:,1],
rankM1 = salesRFM1[:,2]
)salesRFM['rankRFM1'] =0.5*salesRFM['rankR1'] +0.3*salesRFM['rankF1'] +0.2*salesRFM['rankM1']3、客户分类:#对R\F\M分类:salesRFM = salesRFM.astype({'rankR':'int64','rankF':'int64','rankM':'int64'})salesRFM = salesRFM.assign(
R_S = salesRFM['rankR'].map(lambda x:2ifx & salesRFM['rankR'].mean()else1),
F_S = salesRFM['rankF'].map(lambda x:2ifx & salesRFM['rankF'].mean()else1),
M_S = salesRFM['rankM'].map(lambda x:2ifx & salesRFM['rankM'].mean()else1)
)#客户类型归类:salesRFM['Custom'] = np.NaNsalesRFM.loc[(salesRFM['R_S'] ==2) & (salesRFM['F_S'] ==2) & (salesRFM['M_S'] ==2),'Custom']
='高价值客户'salesRFM.loc[(salesRFM['R_S'] ==1) & (salesRFM['F_S'] ==2) & (salesRFM['M_S'] ==2),'Custom']
='重点保持客户'salesRFM.loc[(salesRFM['R_S'] ==2) & (salesRFM['F_S'] ==1) & (salesRFM['M_S'] ==2),'Custom']
='重点发展客户'salesRFM.loc[(salesRFM['R_S'] ==1) & (salesRFM['F_S'] ==1) & (salesRFM['M_S'] ==2),'Custom']
='重点挽留客户'salesRFM.loc[(salesRFM['R_S'] ==2) & (salesRFM['F_S'] ==2) & (salesRFM['M_S'] ==1),'Custom']
='重点保护客户'salesRFM.loc[(salesRFM['R_S'] ==1) & (salesRFM['F_S'] ==2) & (salesRFM['M_S'] ==1),'Custom']
='一般保护客户'salesRFM.loc[(salesRFM['R_S'] ==2) & (salesRFM['F_S'] ==1) & (salesRFM['M_S'] ==1),'Custom']
='一般发展客户'salesRFM.loc[(salesRFM['R_S'] ==1) & (salesRFM['F_S'] ==1) & (salesRFM['M_S'] ==1),'Custom']
='潜在客户'RFM模型仅仅是一个前期的探索性分析,可以利用RFM模型输出的指标结果还可以进行其他分类以及降维模型的构建,深入探索客户数据价值,挖掘潜在营销点。数据文件及code可以点击下面的GitHub链接获取:https://github.com/ljtyduyu/DataWarehouse/tree/master/Model点击阅读原文,了解R语言可视化课程详情!本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。临高阁看天下百家号最近更新:简介:花时间去解释 不如花时间去证明作者最新文章相关文章没有更多推荐了,
不良信息举报
举报内容:
RFM模型及其用户运营实践
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 算法的确定性是指 的文章

 

随机推荐