最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ù)美國數(shù)據(jù)庫營銷研究所Arthur Hughes的研究,客戶數(shù)據(jù)庫中有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à)值越大,客戶未來的為企業(yè)帶來的價(jià)值越大。這個(gè)前提假

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

本文還進(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è):

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

2、RFM分級

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

本文采取的方法是將三個(gè)指標(biāo)進(jìn)行標(biāo)準(zhǔn)化,然后按照分為數(shù)劃分為5個(gè)等級,數(shù)值越大代表價(jià)值越高;當(dāng)然最終劃分的規(guī)則還是要結(jié)合業(yè)務(wù)來定。劃分為5個(gè)等級后,客戶可以細(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分級
breaks1<-quantile(rfm$Recency, probs = seq(0, 1, 0.2),names = FALSE)
breaks1<-c(1,14,30,57,111,181) #以流失用戶的定義來設(shè)置分級 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)和頻度較低,為無價(jià)值客戶;
  • Cluster4:發(fā)展用戶,用戶頻度和值度較低,但用戶近度較高,可做up營銷;
  • 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 ] = '無價(jià)值客戶' 
Custom[ cluster == 3] = '無價(jià)值客戶' 
Custom[cluster == 4] = '重點(diǎn)發(fā)展客戶'  
Custom[cluster == 5] = '重點(diǎn)挽留客戶' 
})

4、RFM打分

步驟3,我們將客戶劃分為四大類,其實(shí)如果一類客戶中還有大量的客戶,此時(shí)為了精細(xì)化營銷,可以根據(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í)比較粗曠,真正在面對千萬級客戶量時(shí),如此劃分為四大類是難以滿足運(yùn)營需求的。運(yùn)營中,還需要綜合CRM中其他指標(biāo)、維度。

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

簡單實(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)典教程

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

相關(guān)文章

  • Python中__init__和__new__的區(qū)別詳解

    Python中__init__和__new__的區(qū)別詳解

    這篇文章主要介紹了Python中__init__和__new__的區(qū)別詳解,并著重說明了__new__的作用及什么情況下使用__new__,需要的朋友可以參考下
    2014-07-07
  • OpenCV半小時(shí)掌握基本操作之圖像處理

    OpenCV半小時(shí)掌握基本操作之圖像處理

    這篇文章主要介紹了OpenCV基本操作之圖像處理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Python格式化字符串f-string概覽(小結(jié))

    Python格式化字符串f-string概覽(小結(jié))

    這篇文章主要介紹了Python格式化字符串f-string概覽(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python實(shí)現(xiàn)八大排序算法

    Python實(shí)現(xiàn)八大排序算法

    這篇文章主要介紹了Python實(shí)現(xiàn)八大排序算法,如何用Python實(shí)現(xiàn)八大排序算法,感興趣的小伙伴們可以參考一下
    2016-08-08
  • keras訓(xùn)練淺層卷積網(wǎng)絡(luò)并保存和加載模型實(shí)例

    keras訓(xùn)練淺層卷積網(wǎng)絡(luò)并保存和加載模型實(shí)例

    這篇文章主要介紹了keras訓(xùn)練淺層卷積網(wǎng)絡(luò)并保存和加載模型實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • python識別圖標(biāo)并點(diǎn)擊功能實(shí)現(xiàn)

    python識別圖標(biāo)并點(diǎn)擊功能實(shí)現(xiàn)

    這篇文章主要介紹了python識別圖標(biāo)并點(diǎn)擊功能實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • Pygame實(shí)戰(zhàn)之經(jīng)典泡泡龍小游戲

    Pygame實(shí)戰(zhàn)之經(jīng)典泡泡龍小游戲

    Python版的消除類的游戲還是很多的,今天就出一個(gè)消除類——泡泡龍小游戲。文中的示例代碼很詳細(xì),感興趣的小伙伴快來跟隨小編一起學(xué)習(xí)一下吧
    2021-12-12
  • python中opencv?Canny邊緣檢測

    python中opencv?Canny邊緣檢測

    這篇文章主要介紹了python中opencv?Canny邊緣檢測,Canny邊緣檢測是一種使用多級邊緣檢測算法檢測邊緣的方法。OpenCV提供了函數(shù)cv2.Canny()實(shí)現(xiàn)Canny邊緣檢測。更多相關(guān)內(nèi)容需要的小伙伴可以參考下面文章內(nèi)容
    2022-06-06
  • python編程語言中pathlib模塊簡介及使用

    python編程語言中pathlib模塊簡介及使用

    pathlib模塊類似os模塊,包含了對創(chuàng)建和刪除目錄、讀寫文件、獲取文件所在目錄不同部分字段、判斷文件是否存在,是否為文件和文件夾、文件統(tǒng)計(jì)和匹配查找,這篇文章主要介紹了python編程語言中pathlib模塊簡介及使用,需要的朋友可以參考下
    2023-09-09
  • python實(shí)現(xiàn)集中式的病毒掃描功能詳解

    python實(shí)現(xiàn)集中式的病毒掃描功能詳解

    這篇文章主要介紹了python實(shí)現(xiàn)集中式的病毒掃描功能,結(jié)合實(shí)例形式分析了Python集中式的病毒掃描相關(guān)原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下
    2019-07-07

最新評論

阿拉善右旗| 阿瓦提县| 格尔木市| 大丰市| 黎城县| 迭部县| 鄯善县| 信丰县| 当涂县| 鲜城| 阿勒泰市| 昌平区| 中江县| 元氏县| 建始县| 游戏| 吉首市| 磐安县| 兴隆县| 祥云县| 浮山县| 沛县| 凭祥市| 北辰区| 旌德县| 汉寿县| 大城县| 乌海市| 阿拉善左旗| 同心县| 马边| 湘西| 托克托县| 呼和浩特市| 通道| 四平市| 澄江县| 弥勒县| 安乡县| 泗洪县| 丰城市|