实战: RFM模型使用

浏览: 2211

RFM模型是衡量客户价值和客户创利能力的重要工具和手段。该机械模型通过一个客户的近期购买行为、购买的总体频率以及花了多少钱三项指标来描述该客户的价值状况。

本文所使用到的数据纯属随机产生,也许结果没有任何意义,但重点是理解RFM模型背后的原理。接下来将结合Mysql数据库和R语言实现该理论的应用。

如下是Mysql随机产生的R、F和M三个指标的数值代码,共产生10万行的虚拟记录:

#创建数据库

create database sample;

use sample;

#创建表

drop table if exists data_rfm;

create table data_rfm(

id int unsigned primary key auto_increment,

Recency mediumint unsigned,

Frequency smallint unsigned,

Monetary decimal(10,2)

);

#删除是否存在的存储过程

drop procedure if exists randnum_p;

#变换SQL语句的结束符

\d //

#创建存储过程

create procedure randnum_p(n int)

begin

declare i int default 1;

declare Recency mediumint default 0;

declare Frequency smallint default 0;

declare Monetary decimal(10,2) default 0.00;

while i <= n do

set autocommit = 0;

set Recency = floor(1+365*rand());

set Frequency = floor(1+150*rand());

set Monetary = floor(200+3500*rand());

insert into data_rfm

(id,Recency,Frequency,Monetary)

values

(null,Recency,Frequency,Monetary);

set i = i+1;

end while;

commit;

end//

#重新变换SQL语句的结束符

\d ;

#调用存储过程

call randnum_p(100000);

查看一下前10行的数据结构:


接下来就是用R去连接Mysql数据库,需要下载并加载RMySQL包

if(!suppressWarnings(require('RMySQL'))){

install.packages('RMySQL')

require('RMySQL')

}


#接下来,通过dbDriver函数加载MySQL驱动程序,使DBI接口知道它正在链接什么类型的数据库

driver <- dbDriver('MySQL')

#连接数据库

connect <- dbConnect(driver,dbname='sample',user='root',

password='snake',host='localhost')

#通过dbGetQuery()函数取出Mysql数据库中的数据

data_rfm <- dbGetQuery(connect,"select * from data_rfm")

head(data_rfm)


数据有了,接下来就是如何实现RFM模型的应用:

一、首先需要为R、F、M三个维度的指标打上相应的分数。具体步骤如下:

1)对三个指标进行分箱的工作,一般采用等深的原则对数据进行分箱,这里的等深指每个箱中的样本量大体一致。

2)根据样本的三个指标值落在不同的箱中,打上不同的分数,这里的处理原则是:

对于R(最近消费时间距当前日期的时间长度)从小到大分别给出10至1分(反向打分)

对于F(某段时间内消费者消费的频次)从小到大分别给出1至10分(正向打分)

对于M(某段时间内消费者消费的总金额)从小到大分别给出1至10分(正向打分)

这里采用Hmisc包中的cut2函数对数据进行分箱


从图中的结果可以发现,各个区间(箱)中的样本量大体一致。

接下来需要为数据进行重编码,即根据不同的区间(箱)打上不同的分数。

然后需要将打好分的R、F、M合并到原来的数据框中,效果如下图:


二、其次要根据R、F和M的得分,为每一个id算一个综合得分,这里使用加权总得分法,根据不同的行业背景,给R、F和M不同的权重,SPSS Modeler默认的采用100、10和1加权。这里使用2、3和5加权,即消费总额最重要,其次频次最后是最近消费时间。

data_rfm$Tot_score <- 2*data_rfm$R_score+3*data_rfm$F_score+5*data_rfm$M_score

根据著名的2-8原则,接下来根据每个id的总得分为其打上标签。一般有4个标签:VIP,高价值,潜在价值和低价值。这4个标签的的比例一般为5%、15%、30%和50%,这样就需要为每个标签定制好总分区间。

#计算各个标签的临界值

q <- quantile(data_rfm$Tot_score,probs = c(0.95,0.8,0.5))

接下来就是根据总分所属的区间为每一个id打上不同的标签:


我们来看看实际情况下,各个标签所占比重,为了从VIP到低价值的顺序显示,我给Flag字段设为了有序的因子:


各价值标签的比例基本满足5%,15%,30%和50%的比重

最后使用刚学到的ggplot包中的qplot函数小试牛刀一下条形图:


到这里就基本完成了RFM模型的应用,该模型的中心理论思想就是对每个客户的R、F和M值进行打分,并根据加权总得分重新为客户打上标签,实现市场中的精准营销。该方法简单直观,但非常实用。至少我在工作中还在使用该方法为客户打标签。

最后总结一下文中使用到的R包和函数

RMySQL包

dbDriver()

dbConnect()

dbGetQuery()

stats包

within()

cbind()

table()

for循环

Hmisc包

cut2()

ggplot2包

qplot()



推荐 1
本文由 每天进步一点点2015 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

2 个评论

老师,很多图片是没有的。。。。
我从公众号找到这篇文章了 有图片 谢谢

要回复文章请先登录注册