实战: RFM模型使用
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字段设为了有序的因子:
最后使用刚学到的ggplot包中的qplot函数小试牛刀一下条形图:
到这里就基本完成了RFM模型的应用,该模型的中心理论思想就是对每个客户的R、F和M值进行打分,并根据加权总得分重新为客户打上标签,实现市场中的精准营销。该方法简单直观,但非常实用。至少我在工作中还在使用该方法为客户打标签。
最后总结一下文中使用到的R包和函数
RMySQL包
dbDriver()
dbConnect()
dbGetQuery()
stats包
within()
cbind()
table()
for循环
Hmisc包
cut2()
ggplot2包
qplot()