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= 是分組的依據