FRM方法获取客户消费行为信息,而且计算偏心打折的客户,进行定向营销sql
RFM分析方法获取客户的消费行为信息函数
最近一次消费(Recency), 消费频率(Frequency),消费金融(Monetary)spa
#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))
其中的cast()方法能够对数据进行转置code
#数据重组 #计算特别爱买打折商品的客户,将打折商品除以购买金额的总数 #拆分列:根据观察须要将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)
rfm_w <- cust(rfm,cust_id~type)#cust_id表示要分组依据,type其值为新变量的名称
rfm_l <- melt(rfm_w, id="cust_id") # id= 是分组的依据