FRM方法获取客户消费行为信息,并且计算偏爱打折的客户,进行定向营销
RFM分析方法获取客户的消费行为信息
最近一次消费(Recency), 消费频率(Frequency),消费金融(Monetary)
#FRM提取行为变量
#读取数据
library(sqldf)
setwd("C:\\Users\\Xu\\Desktop\\data")
FRMtable <- read.csv("rfm_trad_flow.csv",stringsAsFactors = F)
#subset()创建子集,选择表中的FRM信息
FRMinformation <- subset(FRMtable,select = c(time,amount,type_label))
#获取重要type的分类
table(FRMtable$type)
#第一步:算出近期购买的时间,并添加到原表上
#rfm_trd_flow$time1 <- as.Date(Sys.Date(),format='%m/%d/%Y')-as.Date(FRMtable$time,format='%m/%d/%Y')
#以系统的时间计算
#FRMtable$time1 <- Sys.Date()-as.Date(FRMtable$time,format='%m/%d/%Y')
#在这里以2017/05/13的时间去计算
FRMtable$time2 <- as.Date("05/13/2017",format ='%m/%d/%Y')-as.Date(FRMtable$time,format = '%m/%d/%Y')
RMF <- sqldf("select cust_id, min(time2) as Recency,count(*) as Freq,sum(amount) as Monetary
from FRMtable
where type='Special_offer' or type ='Normal'
group by cust_id")
#quantil函数是取分位数,小于50%的为T,
RMF$r_rank <- RMF$Recency < quantile(RMF$Recency,probs = c(0.5))
- reshape包
其中的cast()方法可以对数据进行转置
#数据重组
#计算特别爱买打折商品的客户,将打折商品除以购买金额的总数
#拆分列:根据观察需要将type类别下normal金额,Special_offer金额当成列(需要进行转置),然后将其下进入进行汇总
#先计算客户每种的金额
rfm <- sqldf("select cust_id,type,sum(amount) as Monetary
from FRMtable
where type = 'Special_offer' or type='Normal'
group by cust_id,type")
library(reshape)
rfm_w <- cast(rfm,cust_id~type) #cust_id表示要分组依据,type其值为新变量的名称
#对缺失值进行处理用0替换,否者计算的结果都是NA
rfm_w[is.na(rfm_w$Special_offer),]$Special_offer <- 0
rfm_w$Special_offer_ratio <- rfm_w$Special_offer/(rfm_w$Special_offer + rfm_w$Normal)
- cast()方法,拆分列
rfm_w <- cust(rfm,cust_id~type)#cust_id表示要分组依据,type其值为新变量的名称
- melt()方法,堆叠列
rfm_l <- melt(rfm_w, id="cust_id") # id= 是分组的依据