自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

開發(fā) 后端 大數(shù)據(jù)
本文從RFM模型概念入手,結(jié)合實(shí)際案例,詳解Python實(shí)現(xiàn)模型的每一步操作,并提供案例同款源數(shù)據(jù),以供同學(xué)們知行合一。

本文從RFM模型概念入手,結(jié)合實(shí)際案例,詳解Python實(shí)現(xiàn)模型的每一步操作,并提供案例同款源數(shù)據(jù),以供同學(xué)們知行合一。

注:想直接下載代碼和數(shù)據(jù)的同學(xué)可以空降文末

看這篇文章前源數(shù)據(jù)長(zhǎng)這樣: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

學(xué)完后只要敲一個(gè)回車,源數(shù)據(jù)就變成了這樣: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

是不是心動(dòng)了?OK,閑話少敘,我們來開動(dòng)正餐!

RFM,是一種經(jīng)典到頭皮發(fā)麻的用戶分類、價(jià)值分析模型,同時(shí),這個(gè)模型以直白著稱,直白到把需要的字段寫在了臉上,讓我們?cè)倌钜槐椋?ldquo;R!F!M!”:

  • R,Rencency,即每個(gè)客戶有多少天沒回購(gòu)了,可以理解為最近一次購(gòu)買到現(xiàn)在隔了多少天。
  • F,F(xiàn)requency,是每個(gè)客戶購(gòu)買了多少次。
  • M,Monetary,代表每個(gè)客戶平均購(gòu)買金額,這里也可以是累計(jì)購(gòu)買金額。

這三個(gè)維度,是RFM模型的精髓所在,幫助我們把混雜一體的客戶數(shù)據(jù)分成標(biāo)準(zhǔn)的8類,然后根據(jù)每一類用戶人數(shù)占比、金額貢獻(xiàn)等不同的特征,進(jìn)行人、貨、場(chǎng)三重匹配的精細(xì)化運(yùn)營(yíng)。

用Python建立RFM模型,整體建模思路分為五步,一言蔽之——“五步在手,模型你有”,分別是數(shù)據(jù)概覽、數(shù)據(jù)清洗、維度打分、分值計(jì)算和客戶分層。

01 數(shù)據(jù)概覽

我們的源數(shù)據(jù)是訂單表,記錄著用戶交易相關(guān)的字段: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

有個(gè)細(xì)節(jié)需要注意,訂單每一行代表著單個(gè)用戶的單次購(gòu)買行為,什么意思呢?如果一個(gè)用戶在一天內(nèi)購(gòu)買了4次,訂單表對(duì)應(yīng)記錄著4行,而在實(shí)際的業(yè)務(wù)場(chǎng)景中,一個(gè)用戶在一天內(nèi)的多次消費(fèi)行為,應(yīng)該從整體上看作一次。

比如,我今天10點(diǎn)在必勝客天貓店買了個(gè)披薩兌換券,11點(diǎn)又下單了飲料兌換券,18點(diǎn)看到優(yōu)惠又買了兩個(gè)冰淇淋兌換券。這一天內(nèi)雖然我下單了3次,但最終這些兌換券我會(huì)一次消費(fèi)掉,應(yīng)該只算做一次完整的消費(fèi)行為,這個(gè)邏輯會(huì)指導(dǎo)后面F值的計(jì)算。

我們發(fā)現(xiàn)在訂單狀態(tài)中,除了交易成功的,還有用戶退款導(dǎo)致交易關(guān)閉的,那還包括其他狀態(tài)嗎?Let me see see: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

只有這兩種狀態(tài),其中退款訂單對(duì)于我們模型價(jià)值不大,需要在后續(xù)清洗中剔除。

接著再觀察數(shù)據(jù)的類型和缺失情況: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

訂單一共28833行,沒有任何缺失值,Nice!類型方面,付款日期是時(shí)間格式,實(shí)付金額、郵費(fèi)和購(gòu)買數(shù)量是數(shù)值型,其他均為字符串類型。

02 數(shù)據(jù)清洗

剔除退款

在觀察階段,我們明確了第一個(gè)清洗的目標(biāo),就是剔除退款數(shù)據(jù): 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

關(guān)鍵字段提取

剔除之后,覺得我們訂單的字段還是有點(diǎn)多,而RFM模型只需要買家昵稱,付款時(shí)間和實(shí)付金額這3個(gè)關(guān)鍵字段,所以提取之: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

關(guān)鍵字段構(gòu)造

上面的基礎(chǔ)清洗告一段落,這一步關(guān)鍵在于構(gòu)建模型所需的三個(gè)字段:R(最近一次購(gòu)買距今多少天),F(xiàn)(購(gòu)買了多少次)以及M(平均或者累計(jì)購(gòu)買金額)。

首先是R值,即每個(gè)用戶最后一次購(gòu)買時(shí)間距今多少天。如果用戶只下單過一次,用現(xiàn)在的日期減去付款日期即可;若是用戶多次下單,需先篩選出這個(gè)用戶最后一次付款的時(shí)間,再用今天減去它。

需要提醒的是,時(shí)間洪流越滾越兇,對(duì)應(yīng)在時(shí)間格式中,就是距離今天越近,時(shí)間也就越“大”,舉個(gè)例子,2019年9月9日是要大于2019年9月1日的: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

因此,要拿到所有用戶最近一次付款時(shí)間,只需要按買家昵稱分組,再選取付款日期的最大值即可:

 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

為了得到最終的R值,用今天減去每位用戶最近一次付款時(shí)間,就得到R值了,這份訂單是7月1日生成的,所以這里我們把“2019-7-1”當(dāng)作“今天”: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

接著來搞定F值,即每個(gè)用戶累計(jì)購(gòu)買頻次。

在前面數(shù)據(jù)概覽階段,我們明確了“把單個(gè)用戶一天內(nèi)多次下單行為看作整體一次”的思路,所以,引入一個(gè)精確到天的日期標(biāo)簽,依照“買家昵稱”和“日期標(biāo)簽”進(jìn)行分組,把每個(gè)用戶一天內(nèi)的多次下單行為合并,再統(tǒng)計(jì)購(gòu)買次數(shù): 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

上一步計(jì)算出了每個(gè)用戶購(gòu)買頻次,這里我們只需要得到每個(gè)用戶總金額,再用總金額除以購(gòu)買頻次,就能拿到用戶平均支付金額: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

最后,萬(wàn)劍歸宗,三個(gè)指標(biāo)合并: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

至此,我們完成了模型核心指標(biāo)的計(jì)算,算是打掃干凈了屋子再請(qǐng)客。

03 維度打分

維度確認(rèn)的核心是分值確定,按照設(shè)定的標(biāo)準(zhǔn),我們給每個(gè)消費(fèi)者的R/F/M值打分,分值的大小取決于我們的偏好,即我們?cè)较矚g的行為,打的分?jǐn)?shù)就越高:

以R值為例,R代表了用戶有多少天沒來下單,這個(gè)值越大,用戶流失的可能性越大,我們當(dāng)然不希望用戶流失,所以R越大,分值越小。

F值代表了用戶購(gòu)買頻次,M值則是用戶平均支付金額,這兩個(gè)指標(biāo)是越大越好,即數(shù)值越大,得分越高。

RFM模型中打分一般采取5分制,有兩種比較常見的方式,一種是按照數(shù)據(jù)的分位數(shù)來打分,另一種是依據(jù)數(shù)據(jù)和業(yè)務(wù)的理解,進(jìn)行分值的劃分。這里希望同學(xué)們加深對(duì)數(shù)據(jù)的理解,進(jìn)行自己的分值設(shè)置,所以講述過程中使用的是第二種,即提前制定好不同數(shù)值對(duì)應(yīng)的分值。

R值根據(jù)行業(yè)經(jīng)驗(yàn),設(shè)置為30天一個(gè)跨度,區(qū)間左閉右開: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

F值和購(gòu)買頻次掛鉤,每多一次購(gòu)買,分值就多加一分: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

我們可以先對(duì)M值做個(gè)簡(jiǎn)單的區(qū)間統(tǒng)計(jì),然后分組,這里我們按照50元的一個(gè)區(qū)間來進(jìn)行劃分: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

這一步我們確定了一個(gè)打分框架,每一位用戶的每個(gè)指標(biāo),都有了與之對(duì)應(yīng)的分值。

04 分值計(jì)算

分值的劃分邏輯已經(jīng)確定,看著好像有點(diǎn)麻煩。下面我們有請(qǐng)潘大師(Pandas)登場(chǎng),且看他如何三拳兩腳就搞定這麻煩的分組邏輯,先拿R值打個(gè)樣: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

滄海橫流,方顯潘大師本色,短短一行代碼就搞定了5個(gè)層級(jí)的打分。Pandas的cut函數(shù),我們復(fù)習(xí)一下:

  • 第一個(gè)參數(shù)傳入要切分的數(shù)據(jù)列。
  • bins參數(shù)代表我們按照什么區(qū)間進(jìn)行分組,上面我們已經(jīng)確定了R值按照30天的間隔進(jìn)行分組,輸入[0,30,60,90,120,1000000]即可,最后一個(gè)數(shù)值設(shè)置非常大,是為了給分組一個(gè)容錯(cuò)空間,允許出現(xiàn)極端大的值。
  • right表示了右側(cè)區(qū)間是開還是閉,即包不包括右邊的數(shù)值,如果設(shè)置成False,就代表[0,30),包含左側(cè)的分組數(shù)據(jù)而不含右側(cè),若設(shè)置為True,則是[0,30],首尾都包含。
  • labels和bins切分的數(shù)組前后呼應(yīng),什么意思呢?bins設(shè)置了6個(gè)數(shù)值,共切分了5個(gè)分組,labels則分別給每個(gè)分組打標(biāo)簽,0-30是5分,30-60是4分,依此類推。

接著,F(xiàn)和M值就十分容易了,按照我們?cè)O(shè)置的值切分就好: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

第一輪打分已經(jīng)完成,下面進(jìn)入第二輪打分環(huán)節(jié)。

客官不要緊臟,面試都還不止兩輪呢,倫家RFM模型哪有那么隨便的。

現(xiàn)在R-SCORE、F-SCORE、M-SCORE在1-5幾個(gè)數(shù)之間,如果把3個(gè)值進(jìn)行組合,像111,112,113...這樣可以組合出125種結(jié)果,過多的分類和不分類本質(zhì)是一樣的。所以,我們通過判斷每個(gè)客戶的R、F、M值是否大于平均值,來簡(jiǎn)化分類結(jié)果。

因?yàn)槊總€(gè)客戶和平均值對(duì)比后的R、F、M,只有0和1(0表示小于平均值,1表示大于平均值)兩種結(jié)果,整體組合下來共有8個(gè)分組,是比較合理的一個(gè)情況。我們來判斷用戶的每個(gè)分值是否大于平均值: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

Python中判斷后返回的結(jié)果是True和False,對(duì)應(yīng)著數(shù)值1和0,只要把這個(gè)布爾結(jié)果乘上1,True就變成了1,F(xiàn)alse變成了0,處理之后更加易讀。

05 客戶分層

回顧一下前幾步操作,清洗完之后我們確定了打分邏輯,然后分別計(jì)算每個(gè)用戶的R、F、M分值(SCORE),隨后,用分值和對(duì)應(yīng)的平均值進(jìn)行對(duì)比,得到了是否大于均值的三列結(jié)果。至此,建模所需的所有數(shù)據(jù)已經(jīng)準(zhǔn)備就緒,剩下的就是客戶分層了。

RFM經(jīng)典的分層會(huì)按照R/F/M每一項(xiàng)指標(biāo)是否高于平均值,把用戶劃分為8類,我們總結(jié)了一下,具體像下面表格這樣: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

由于傳統(tǒng)的分類,部分名稱有些擰巴,像大多數(shù)分類前都冠以“重要”,“潛力”和“深耕”到底有什么區(qū)別?“喚回”和“挽回”有什么不一樣?

本著清晰至上原則,我們對(duì)原來的名稱做了適當(dāng)?shù)母倪M(jìn)。強(qiáng)調(diào)了潛力是針對(duì)消費(fèi)(平均支付金額),深耕是為了提升消費(fèi)頻次,以及重要喚回客戶其實(shí)和重要價(jià)值客戶非常相似,只是最近沒有回購(gòu)了而已,應(yīng)該做流失預(yù)警等等。這里只是拋磚引玉,提供一個(gè)思路,總之,一切都是為了更易理解。

對(duì)于每一類客戶的特征,我們也做了簡(jiǎn)單的詮釋,比如重要價(jià)值客戶,就是最近購(gòu)買我們的產(chǎn)品,且在整個(gè)消費(fèi)生命周期中購(gòu)買頻次較高,平均每次支付金額也高。其他的分類也是一樣邏輯,可以結(jié)合詮釋來強(qiáng)化理解。下面,我們就用Python來實(shí)現(xiàn)這一分類。

先引入一個(gè)人群數(shù)值的輔助列,把之前判斷的R\F\M是否大于均值的三個(gè)值給串聯(lián)起來: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

人群數(shù)值是數(shù)值類型,所以位于前面的0就自動(dòng)略過,比如1代表著“001”的高消費(fèi)喚回客戶人群,10對(duì)應(yīng)著“010”的一般客戶。

為了得到最終人群標(biāo)簽,再定義一個(gè)判斷函數(shù),通過判斷人群數(shù)值的值,來返回對(duì)應(yīng)的分類標(biāo)簽: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

最后把標(biāo)簽分類函數(shù)應(yīng)用到人群數(shù)值列: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

客戶分類工作的完成,宣告著RFM模型建模的結(jié)束,每一位客戶都有了屬于自己的RFM標(biāo)簽。

RFM模型結(jié)果分析

其實(shí)到上一步,已經(jīng)走完了整個(gè)建模流程,但是呢,一切模型結(jié)果最終都要服務(wù)于業(yè)務(wù),所以,最后我們基于現(xiàn)有模型結(jié)果做一些拓展、探索性分析。

查看各類用戶占比情況: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

探究不同類型客戶消費(fèi)金額貢獻(xiàn)占比: 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

結(jié)果可視化之(可視化代碼留給大家自行嘗試): 

不到70行Python代碼,輕松玩轉(zhuǎn)RFM用戶分析模型

從上面結(jié)果,我們可以快速得到一些推斷:

  • 客戶流失情況嚴(yán)峻,高消費(fèi)喚回客戶、流失客戶占比超過50%,怎么樣制定針對(duì)性喚回策略迫在眉睫。
  • 重要價(jià)值客戶占比僅2.97%,還有三個(gè)客戶占比甚至不足2%,我們模型打分可能不夠科學(xué),可以進(jìn)一步調(diào)整打分區(qū)間進(jìn)行優(yōu)化。
  • ...

再結(jié)合金額進(jìn)行分析:

  • 高消費(fèi)喚回客戶人數(shù)占比28.87%,金額占比上升到了38.11%,這部分客戶是消費(fèi)的中流砥柱,他們?yōu)槭裁戳魇?,?yīng)結(jié)合訂單和購(gòu)買行為數(shù)據(jù)進(jìn)一步展開挖掘。
  • 頻次深耕客戶金額占比緊隨其后,這部分客戶的特征是近期有消費(fèi)、消費(fèi)頻次低、消費(fèi)金額高,和高消費(fèi)喚回客戶僅有購(gòu)買時(shí)間上的不同,如何避免這部分客戶向高消費(fèi)喚回客戶的流轉(zhuǎn)是我們要思考的主要命題。
  • 流失客戶人數(shù)占比26.28%,金額占比僅12.66%,這部分客戶中有多少是褥羊毛用戶,有多少是目標(biāo)用戶,對(duì)我們引流策略能夠進(jìn)行怎么樣的指導(dǎo)和調(diào)整?
  • .....

至此,我們基于訂單源數(shù)據(jù),按照五步法用Python完成了RFM模型的建立,并對(duì)結(jié)果進(jìn)行了簡(jiǎn)單的分析。最后,只要把上述代碼封裝成函數(shù),對(duì)于新的數(shù)據(jù)源,只要一個(gè)回車就能夠擼出模型,So Easy!

整個(gè)案例、數(shù)據(jù)和完整代碼精心花了N周的時(shí)間準(zhǔn)備,覺得有用的旁友動(dòng)動(dòng)小手來一波評(píng)論 or 在看吧~

 

責(zé)任編輯:未麗燕 來源: 今日頭條
相關(guān)推薦

2024-03-26 09:58:01

CohortRFM分層模型

2024-08-16 14:28:21

2021-09-01 07:21:41

數(shù)倉(cāng)RFM模型

2010-09-01 10:09:32

CSS樣式

2015-03-20 14:51:09

Testin云測(cè)

2022-05-09 13:59:41

Python提取PPTword文檔

2019-05-05 09:46:01

Python代碼神經(jīng)網(wǎng)絡(luò)

2023-05-04 07:34:37

Rust代碼CPU

2022-04-14 07:57:52

Python代碼熱力圖

2018-07-12 09:51:04

Python代碼對(duì)象模型

2023-02-01 23:00:42

大數(shù)據(jù)

2024-04-18 08:30:00

留存分析模型數(shù)據(jù)分析

2020-09-24 10:57:12

編程函數(shù)式前端

2021-11-10 16:07:01

鴻蒙HarmonyOS應(yīng)用

2021-11-10 16:08:45

鴻蒙HarmonyOS應(yīng)用

2021-11-18 10:20:22

代碼PDFPython

2023-10-24 07:22:22

Nginx運(yùn)維管理

2020-12-28 09:00:00

開發(fā)Python語(yǔ)言

2023-02-01 22:50:41

大數(shù)據(jù)

2023-11-25 20:11:48

APPRFM模型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)