市场营销模型-利用RFM模型提取行为数据

作者: 鸣人吃土豆 | 来源:发表于2018-02-01 22:43 被阅读17次

RFM分析是市场营销分析中广泛应用的方法,他通过简单的分析来有效地对营销的对象进行分组,评估其市场反应(接受营销)的可能性,并据此作出相应的市场营销决策,如瞄准可能反应的目标客户,区分营销的条款、信息和方法等

在我们一般的建模过程中,我们通常需要以下这些变量

image.png
属性和状态信息一般都能够取到,而行为信息很多时候需要我们进行变量衍生
本篇我们介绍一个在客户价值分析中常用的模型:RFM模型
具体可以参照RFM模型如何实际应用
根据美国数据库营销研究所Arthur Hughes的研究,客户数据库
中有三个重要指标:
•最近一次消费(Recency)
最近一次消费意指上一次购买的时间。上一次消费时间越近的顾
客对提供即时的商品或是服务也最有可能会有反应。对提供即时的商品或是
服务也最有可能会有反应。
•消费频率(Frequency)
消费频率是顾客在限定的期间内所购买的次数。最常购买的顾客,
也是满意度最高的顾客。这个指标是“忠诚度”很好的代理变量。
•消费金额(Monetary)
消费金额是最近消费的平均金额。是体现客户短期价值重要变量。
如果你的预算不多,而且只能提供服务信息给2000或3000个顾客,你会将
信息邮寄给贡献40%收入的顾客,还是那些不到1%的顾客?数据库营销有时
候就是这么简单。这样的营销所节省下来的成本会很可观。

数据下载地址:https://pan.baidu.com/s/1smcuUsd

library(tidyverse)
library(sqldf)
rfm_trad_flow<-read.csv("rfm_trad_flow.csv",stringsAsFactors = F)
#dplyr方法
rfm <- select(rfm_trad_flow,cust_id,type,time,amount)%>%
  group_by(cust_id,type) %>% summarise(recency=max(time),
                                       frequency=n(),
                                       money=sum(amount))%>%
  filter(type %in%c('Special_offer','Normal'))
#sql方法
rfm_sql<-sqldf("select  cust_id,type,
             max(time) as Recency,count(*) as freq,sum(amount) as Monetary
             from  rfm_trad_flow
             where type='Special_offer' or type='Normal'
             group by cust_id,type")

得到的数据:


image.png

现在我们有这么个需求:
想查看每个每个顾客在正常和特价情况下的行为数据
我们就可以这样操作:

library(reshape2)
rfm <- sselect(rfm_trad_flow,cust_id,type,time,amount)%>%
  group_by(cust_id,type) %>% summarise(frequency=n(),money=sum(amount),
                                       recency=max(time))%>%
  filter(type %in%c('Special_offer','Normal'))

可以得到如下结果:

image.png
巴特,上面图片的数据不利于后续分析,我们想把上面图片的结果变为下面图片的结果:
image.png
那我们可以按照下面的代码进行操作:
关于这个,可以参照另外一篇文章:利用reshape2包进行数据逆透视和数据透视

newdata <- dcast(md, formula, fun.aggregate)
其中的 md 为已融合的数据, formula 描述了想要的最后结果,而 fun.aggregate 是(可选
的)数据整合函数。其接受的公式形如:
rowvar1 + rowvar2 + ... ~ colvar1 + colvar2 + ...
在这一公式中, rowvar1 + rowvar2 + ... 定义了要划掉的变量集合,以确定各行的内容,
而 colvar1 + colvar2 + ... 则定义了要划掉的、确定各列内容的变量集合。

#长表变宽表
library(reshape2)
rfm1 <- select(rfm_trad_flow,cust_id,type,time,amount)%>%
  group_by(cust_id,type) %>% summarise(money=sum(amount))%>%
  filter(type %in%c('Special_offer','Normal'))
rfm1_1 <- dcast(rfm1,cust_id~type)

rfm2 <- select(rfm_trad_flow,cust_id,type,time,amount)%>%
  group_by(cust_id,type) %>% summarise(frequency=n())%>%
  filter(type %in%c('Special_offer','Normal'))
rfm2_1 <- dcast(rfm2,cust_id~type)
#将数据联合起来
rfm3 <- select(rfm_trad_flow,cust_id,type,time)%>%
  group_by(cust_id,type) %>% summarise(recency=max(time))%>%
  filter(type %in%c('Special_offer','Normal')) %>%
  left_join(rfm1_1,by=c('cust_id')) %>% left_join(rfm2_1,by=c('cust_id'),suffix=c(".money",".frequency"))
#将缺失值填充为0
for(i in 4:7){
  rfm3[is.na(rfm3[,i]),i] <- 0
}

相关文章

网友评论

    本文标题:市场营销模型-利用RFM模型提取行为数据

    本文链接:https://www.haomeiwen.com/subject/tvwjzxtx.html