实战: 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行的数据结构:

0?wx_fmt=png


接下来就是用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)


0?wx_fmt=png


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

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

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

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

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

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

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


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

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


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

0?wx_fmt=png0?wx_fmt=png


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

0?wx_fmt=png


二、其次要根据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打上不同的标签:

0?wx_fmt=png

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

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


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

0?wx_fmt=png


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


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

RMySQL包

dbDriver()

dbConnect()

dbGetQuery()

stats包

within()

cbind()

table()

for循环

Hmisc包

cut2()

ggplot2包

qplot()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值