欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python pandas RFM模型應(yīng)用實(shí)例詳解

 更新時(shí)間:2019年11月20日 11:19:16   作者:閑魚!!!  
這篇文章主要介紹了Python pandas RFM模型應(yīng)用,結(jié)合實(shí)例形式詳細(xì)分析了pandas RFM模型的概念、原理、應(yīng)用及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python pandas RFM模型應(yīng)用。分享給大家供大家參考,具體如下:

什么是RFM模型

根據(jù)美國(guó)數(shù)據(jù)庫(kù)營(yíng)銷研究所Arthur Hughes的研究,客戶數(shù)據(jù)庫(kù)中有3個(gè)神奇的要素,這3個(gè)要素構(gòu)成了數(shù)據(jù)分析最好的指標(biāo):

  • 最近一次消費(fèi) (Recency): 客戶最近一次交易時(shí)間的間隔。R值越大,表示客戶交易距今越久,反之則越近;
  • 消費(fèi)頻率 (Frequency): 客戶在最近一段時(shí)間內(nèi)交易的次數(shù)。F值越大,表示客戶交易越頻繁,反之則不夠活躍;
  • 消費(fèi)金額 (Monetary): 客戶在最近一段時(shí)間內(nèi)交易的金額。M值越大,表示客戶價(jià)值越高,反之則越低。

RFM實(shí)踐應(yīng)用

1、前提假設(shè)驗(yàn)證

RFM模型的應(yīng)用是有前提假設(shè)的,即R、F、M值越大價(jià)值越大,客戶未來(lái)的為企業(yè)帶來(lái)的價(jià)值越大。這個(gè)前提假

設(shè)其實(shí)已經(jīng)經(jīng)過(guò)大量的研究和實(shí)證,假設(shè)是成立的。不過(guò)為了更加嚴(yán)謹(jǐn),確保RFM模型對(duì)于特殊案例是有效的,

本文還進(jìn)行了前提假設(shè)驗(yàn)證:

ps:Frequency、Monetary均為近6個(gè)月內(nèi)的數(shù)據(jù),即1-6月數(shù)據(jù);

利用相關(guān)性檢驗(yàn),驗(yàn)證假設(shè):

  • 最近購(gòu)買產(chǎn)品的用戶更容易產(chǎn)生下一次消費(fèi)行為
  • 消費(fèi)頻次高的用戶,用戶滿意度高,忠誠(chéng)度高,更容易產(chǎn)生下一次消費(fèi)行為
  • 消費(fèi)金額高的用戶更容易帶來(lái)高消費(fèi)行為

2、RFM分級(jí)

簡(jiǎn)單的做法,RFM三個(gè)指標(biāo)以均值來(lái)劃分,高于均值的為高價(jià)值、低于均值的為低價(jià)值,如此可以將客戶劃分為8大類:

本文采取的方法是將三個(gè)指標(biāo)進(jìn)行標(biāo)準(zhǔn)化,然后按照分為數(shù)劃分為5個(gè)等級(jí),數(shù)值越大代表價(jià)值越高;當(dāng)然最終劃分的規(guī)則還是要結(jié)合業(yè)務(wù)來(lái)定。劃分為5個(gè)等級(jí)后,客戶可以細(xì)分為125種。

#讀取數(shù)據(jù)
rfm<-read.csv('~/desktop/rfm1_7.csv',header=TRUE)
summary(rfm)
#數(shù)據(jù)分布
par(mfrow=c(1,3))
boxplot(rfm$rankR1) 
boxplot(rfm$rankF1) 
boxplot(rfm$rankM1)
#rfm分級(jí)
breaks1<-quantile(rfm$Recency, probs = seq(0, 1, 0.2),names = FALSE)
breaks1<-c(1,14,30,57,111,181) #以流失用戶的定義來(lái)設(shè)置分級(jí) 30天以上為流失用戶
breaks2<-quantile(rfm$Frequency, probs = seq(0, 1, 0.2),names = FALSE)
breaks2<-c(1,2,3,6,14,164) 
breaks3<-quantile(rfm$Monetary, probs = seq(0, 1, 0.2),names = FALSE)
rfm$rankR1<- cut(rfm$Recency,breaks1, 5,labels=F)
rfm$rankR1<- 6-rfm$rankR1
rfm$rankF1<- cut(rfm$Frequency,breaks2, 5,labels=F)
rfm$rankM1<- cut(rfm$Monetary,breaks3, 5,labels=F)

3、客戶分類

本文采用K-means聚類進(jìn)行分類,聚類結(jié)果結(jié)合業(yè)務(wù)劃分為4大類:

  • Cluster1:價(jià)值用戶R、F、M三項(xiàng)指標(biāo)均較高;
  • Cluster2,3:用戶貢獻(xiàn)值最低,且用戶近度(小于2)和頻度較低,為無(wú)價(jià)值客戶;
  • Cluster4:發(fā)展用戶,用戶頻度和值度較低,但用戶近度較高,可做up營(yíng)銷;
  • Cluster5:挽留客戶,用戶近度較低,但頻度和值度較高,需采用挽留手段

k值選擇:

聚類結(jié)果:

#聚類
df<-rfm[,c(6,7,8)]
p1<-fviz_nbclust(df, kmeans, method = "wss")
p2<-p1 + geom_vline(xintercept = 5, linetype = 2)
km_result <- kmeans(df, 5)
dd <- cbind(rfm,df, cluster = km_result$cluster)
##查看每一類的數(shù)目
table(dd$cluster)
picture<-fviz_cluster(km_result, df, geom = "point")
####聚類結(jié)果解釋####
rfm_final <- within(dd,{Custom = NA
Custom[cluster == 1] = '高價(jià)值客戶' 
Custom[cluster == 2 ] = '無(wú)價(jià)值客戶' 
Custom[ cluster == 3] = '無(wú)價(jià)值客戶' 
Custom[cluster == 4] = '重點(diǎn)發(fā)展客戶'  
Custom[cluster == 5] = '重點(diǎn)挽留客戶' 
})

4、RFM打分

步驟3,我們將客戶劃分為四大類,其實(shí)如果一類客戶中還有大量的客戶,此時(shí)為了精細(xì)化營(yíng)銷,可以根據(jù)RFM進(jìn)行加權(quán)打分,給出一個(gè)綜合價(jià)值的分。這里,運(yùn)用AHP層次分析法確定RFM各指標(biāo)權(quán)重:

客戶價(jià)值RFM_SCORE= 0.25rankR + 0.20rankF+0.55*rankM

AHP層次分析法(專家打分法)

總結(jié)

上述客戶分類其實(shí)比較粗曠,真正在面對(duì)千萬(wàn)級(jí)客戶量時(shí),如此劃分為四大類是難以滿足運(yùn)營(yíng)需求的。運(yùn)營(yíng)中,還需要綜合CRM中其他指標(biāo)、維度。

ps:后續(xù)作者利用RFM客戶價(jià)值得分進(jìn)行潛在客戶挖掘,嘗試?yán)脹Q策樹等模型挖掘平臺(tái)潛在客戶特征。

簡(jiǎn)單實(shí)例

import pandas as pd
import numpy as np
import time
#todo 讀取數(shù)據(jù)
data = pd.read_csv('RFM_TRAD_FLOW.csv',encoding='gbk')
# print(ret)
# todo RFM------>R(最近一次消費(fèi))
#todo 時(shí)間與字符串相互轉(zhuǎn)換
data['time'] = data['time'].map(lambda x:time.mktime(time.strptime(x,'%d%b%y:%H:%M:%S')))
# print(data)
# todo 分組
groupby_obj = data.groupby(['cumid','type'])
# for name,data in groupby_obj:
#   print(name)
#   print(data)
# todo 取值
R = groupby_obj[['time']].max()
# print(
# todo 轉(zhuǎn)為透視表
r_trans = pd.pivot_table(R,index='cumid',columns='type',values='time')
# print(data_trans)
# todo 替換缺失值 有缺失值,替換成最遠(yuǎn)的值
r_trans[['Special_offer','returned_goods']] = r_trans[['Special_offer','returned_goods']].apply(lambda x:x.replace(np.nan,min(x)),axis = 0)
# print(data_trans)
r_trans['r_max'] = r_trans.apply(lambda x:sum(x),axis=1)
# print(r_trans)
# todo RFM------>F(消費(fèi)頻率)
# 取值
F =groupby_obj[['transID']].count()
# print(F)
#轉(zhuǎn)為透視表
f_trans = pd.pivot_table(F,index='cumid',columns='type',values='transID')
# print(f_trans)
#替換缺失值
f_trans[['Special_offer','returned_goods']]= f_trans[['Special_offer','returned_goods']].fillna(0)
# print(f_trans)
#
f_trans['returned_goods'] = f_trans['returned_goods'].map(lambda x:-x)
# print(f_trans)
f_trans['f_total'] = f_trans.apply(lambda x:sum(x),axis=1)
# print(f_trans)
# todo RFM------>M(消費(fèi)金額)
# 取值
M =groupby_obj[['amount']].sum()
# print(M)
#轉(zhuǎn)為透視表
m_trans = pd.pivot_table(M,index='cumid',columns='type',values='amount')
# print(f_trans)
#替換缺失值
m_trans[['Special_offer','returned_goods']]= m_trans[['Special_offer','returned_goods']].fillna(0)
# print(f_trans)
#
m_trans['m_total'] = m_trans.apply(lambda x:sum(x),axis=1)
# print(m_trans)
# 合并
RFM=pd.concat([r_trans["r_max"],f_trans['f_total'],m_trans['m_total']],axis=1)
print(RFM)
r_score = pd.cut(RFM.r_max,3,labels=[0,1,2])
f_score = pd.cut(RFM.r_max,3,labels=[0,1,2])
m_score = pd.cut(RFM.r_max,3,labels=[0,1,2])

關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python函數(shù)使用技巧總結(jié)》、《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 在matlab中創(chuàng)建類似字典的數(shù)據(jù)結(jié)構(gòu)方式

    在matlab中創(chuàng)建類似字典的數(shù)據(jù)結(jié)構(gòu)方式

    這篇文章主要介紹了在matlab中創(chuàng)建類似字典的數(shù)據(jù)結(jié)構(gòu)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 用Python判斷奇偶數(shù)示例

    用Python判斷奇偶數(shù)示例

    大家好,本篇文章主要講的是用Python判斷奇偶數(shù)示例,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • python之django路由和視圖案例教程

    python之django路由和視圖案例教程

    這篇文章主要介紹了python之django路由和視圖案例教程,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Python的deque雙端隊(duì)列詳解

    Python的deque雙端隊(duì)列詳解

    這篇文章主要介紹了Python的deque雙端隊(duì)列詳解,deque(雙端隊(duì)列)是一種數(shù)據(jù)結(jié)構(gòu),允許使用O(1)時(shí)間復(fù)雜度從兩端添加和刪除元素, Python的deque類實(shí)現(xiàn)了此數(shù)據(jù)結(jié)構(gòu),需要的朋友可以參考下
    2023-09-09
  • 淺談?dòng)肞ython實(shí)現(xiàn)一個(gè)大數(shù)據(jù)搜索引擎

    淺談?dòng)肞ython實(shí)現(xiàn)一個(gè)大數(shù)據(jù)搜索引擎

    這篇文章主要介紹了淺談?dòng)肞ython實(shí)現(xiàn)一個(gè)大數(shù)據(jù)搜索引擎,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • Flask入門之上傳文件到服務(wù)器的方法示例

    Flask入門之上傳文件到服務(wù)器的方法示例

    這篇文章主要介紹了Flask入門之上傳文件到服務(wù)器的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Python單向鏈表和雙向鏈表原理與用法實(shí)例詳解

    Python單向鏈表和雙向鏈表原理與用法實(shí)例詳解

    這篇文章主要介紹了Python單向鏈表和雙向鏈表原理與用法,結(jié)合實(shí)例形式詳細(xì)分析了單向鏈表與雙向鏈表的概念、原理以及創(chuàng)建、添加、刪除等相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • Python 條件,循環(huán)語(yǔ)句詳解

    Python 條件,循環(huán)語(yǔ)句詳解

    這篇文章主要介紹了詳解Python中的條件,循環(huán)語(yǔ)句,循環(huán)語(yǔ)句是學(xué)習(xí)各個(gè)編程語(yǔ)言的最基本的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2021-09-09
  • python+elasticsearch實(shí)現(xiàn)標(biāo)簽匹配計(jì)數(shù)操作

    python+elasticsearch實(shí)現(xiàn)標(biāo)簽匹配計(jì)數(shù)操作

    這篇文章主要介紹了python+elasticsearch實(shí)現(xiàn)標(biāo)簽匹配計(jì)數(shù)操作,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • Python Django框架設(shè)計(jì)模式詳解

    Python Django框架設(shè)計(jì)模式詳解

    Django是一個(gè)開(kāi)源的Web應(yīng)用框架,由Python寫成。采用MVC的軟件設(shè)計(jì)模式,主要目標(biāo)是使得開(kāi)發(fā)復(fù)雜的、數(shù)據(jù)庫(kù)驅(qū)動(dòng)的網(wǎng)站變得簡(jiǎn)單。Django注重組件的重用性和“可插拔性”,敏捷開(kāi)發(fā)和DRY法則(Don’t Repeat Yoursef)
    2021-11-11

最新評(píng)論