RFM模型淺析

RFM模型在客戶管理中常被用來衡量客戶價值和客戶創新能力,主要考量三個指標:最近一次消費-Recency、消費頻率-Frequency、消費金額-Monetary。根據以上三個維度對客戶做細分,假定每個維度劃分五個等級,得到客戶R值(1-5),F值(1-5),M值(1-5)。那麼客戶就被分作125個細分羣,就可根據客戶交易行爲差異針對不同羣體做不同推薦。或進一步針對不同業務場景,對R、F、M賦予不同權重Wr、Wf、Wm得到每個用戶得分:W=Wr*R+Wf*F+Wm*M,根據最終得分W排序,再劃分等級,採用不用的營銷策略

分析的數據是累計一段時間內客戶的消費記錄,每筆記錄至少需要客戶名稱、消費時間、消費金額三個要素。用R模擬生成隨機消費記錄數據,客戶編號爲1000-1999共100人,消費記錄10000條,消費記錄產生時間在2014-01-01到2015-12-29之間

sales<-data.frame(sample(1000:1999,replace=T,size=10000),abs(round(rnorm(10000,178,55)))+1)		#第一列隨機產生用戶ID,第二列產生用戶消費數據
#runif(n,min=0, max=1)產生隨機數,stats::是表明runif函數來自於stats
sales.dates<-as.Date("2014/1/1") + 728*sort(stats::runif(10000)) 
sales<-cbind(sales,sales.dates)  
names(sales)<-c("用戶ID","消費金額","消費時間")  
str(sales)  

根據上述消費記錄,得到Recency、Frequency、Monetary值

sales$距離時間<-round(as.numeric(difftime(Sys.Date(),sales[,3],units="days")))  
salesM<-aggregate(sales[,2],list(sales$用戶ID),sum)		#總消費金額  
names(salesM)<-c("用戶ID","Monetization")  
salesF<-aggregate(sales[,2],list(sales$用戶ID),length)	#消費次數  
names(salesF)<-c("用戶ID","Frequency")  
salesR<-aggregate(sales[,4],list(sales$用戶ID),min)		#最近一次消費時間  
names(salesR)<-c("用戶ID","Recency")  
test1<-merge(salesF,salesR,"用戶ID")  
salesRFM<- merge(salesM,test1,"用戶ID") 

每個維度劃分成5個層次,做均值劃分。並給R、F、M分別賦權重0.5,0.3,0.2來求客戶最終得分,客戶最終得分在1-5之間

#均值劃分
salesRFM0<-salesRFM  
salesRFM0$rankR<-cut(salesRFM0$Recency,5,labels=F)  
salesRFM0$rankR<-6-salesRFM0$rankR						#rankR,5最近,1最遠  
salesRFM0$rankF<-cut(salesRFM0$Frequency,5,labels=F)	#rankF,1最少,5最頻繁  
salesRFM0$rankM<-cut(salesRFM0$Monetization,5,labels=F)	#rankM,1最少,5最多  
salesRFM0$rankRMF<- 0.5*rankR + 0.3*rankF + 0.2*rankM 

對Receny、Frequency、Monetary標準化後,以權重0.5,0.3,0.2來求客戶最終得分,客戶最終得分在0-1之間

#標準化後劃分  
salesRFM1<-salesRFM  
salesRFM1$rankR<-(salesRFM1$Recency-min(salesRFM1$Recency))/(max(salesRFM1$Recency)-min(salesRFM1$Recency))  
salesRFM1$rankR<-1-salesRFM1$rankR		#rankR,1是最近,0是最遠  
salesRFM1$rankF<-(salesRFM1$Frequency-min(salesRFM1$Frequency))/(max(salesRFM1$Frequency)-min(salesRFM1$Frequency))		#rankF,0是最少,1是最頻繁  
salesRFM1$rankM<-(salesRFM1$Monetization-min(salesRFM1$Monetization))/(max(salesRFM1$Monetization)-min(salesRFM1$Monetization))	#rankM,0是最少,1是最多  
salesRFM1$rankRMF<- 0.5*salesRFM1$rankR + 0.3*salesRFM1$rankF + 0.2*salesRFM1$rankM 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章