精細(xì)化運(yùn)營神器:RFM用戶分層
編輯導(dǎo)語:在互聯(lián)網(wǎng)紅利逐漸消失的當(dāng)下,粗狂式的運(yùn)營已經(jīng)難以為繼,如何把有限的費(fèi)用投入到我們最精準(zhǔn)的用戶上,也就是所謂的精細(xì)化運(yùn)營,是每個(gè)公司應(yīng)該關(guān)注的問題。這其中最重要的是用戶分層,本文介紹了用戶分層的一種最常見、也最常見的方法:RFM用戶分層。
一、寫在前面
隨著互聯(lián)網(wǎng)流量紅利的逐漸消失,之前粗狂式的拓客和一刀切的用戶運(yùn)營已經(jīng)難以為繼,越來越多的公司開始意識(shí)到,只靠燒錢圈用戶、養(yǎng)用戶成本太高,因?yàn)椴皇撬械挠脩舳夹枰阒攸c(diǎn)投入,金主爸爸一定要好好維護(hù),潛力股一定要加大投入挖掘價(jià)值,而羊毛黨永遠(yuǎn)都是你應(yīng)該嚴(yán)防的對(duì)象,這就是所謂的精細(xì)化運(yùn)營,錢要花在刀刃上,要花在業(yè)務(wù)和核心用戶上。
精細(xì)化運(yùn)營講究的是千人千面,一千類用戶一千種運(yùn)營策略,所以第一步就是要把用戶進(jìn)行分類,然后才有針對(duì)性的運(yùn)營策略,而用戶分類中一種尤為重要和常用的方法就是RFM。
二、什么是RFM?
什么是RFM?RFM最早產(chǎn)生于電商領(lǐng)域,根據(jù)客戶的交易頻次和交易額衡量客戶的價(jià)值,對(duì)客戶進(jìn)行細(xì)分。
RFM是衡量客戶價(jià)值的三個(gè)維度,分別為R(Recency)交易間隔、F(Frequency)交易頻度、M(Monetary)交易金額組成。
R表示間隔(Recency):也就是客戶最近一次交易距今的間隔,需要注意的是,R是最近一次交易時(shí)間到現(xiàn)在的間隔,而不是最近一次的交易時(shí)間,R越大,表示客戶越久未發(fā)生交易,反之R越小,表示客戶越近有交易發(fā)生。
F表示頻次(Frequency):也就是客戶在最近一段時(shí)間內(nèi)交易的次數(shù),一般來說選取一個(gè)特定的時(shí)間段,F(xiàn)越大,表示客戶交易越頻繁,反之F越小,表示客戶不夠活躍。
M表示額度(Monetary):也在同樣的時(shí)間段內(nèi),客戶交易的金額,M越大,表示客戶價(jià)值越高,M越小,表示客戶價(jià)值越低。
有了以上3個(gè)維度的數(shù)據(jù),就可以對(duì)每個(gè)用戶按照每個(gè)維度進(jìn)行衡量,一般來說我們會(huì)選取一個(gè)合理的分值對(duì)R、F、M進(jìn)行劃分,將3個(gè)維度分別分為高、低兩類,組合下來就是8類,也就形成了8個(gè)用戶群體。
當(dāng)然你說我每個(gè)維度分成3類行不行,最終分成27個(gè)用戶群體不是更精細(xì),當(dāng)然沒問題,但是我們能不能給出27種不同的運(yùn)營方案,如果給不出,如此細(xì)分不就是自嗨么?
畢竟,分為多少個(gè)群體不重要,每個(gè)群體都要有個(gè)性化的運(yùn)營策略才重要。
下面是一張經(jīng)典RFM客戶細(xì)分模型圖,R分值、F分值和M分值三個(gè)指標(biāo)構(gòu)成了一個(gè)三維立方圖,在各自維度上,根據(jù)得分值又可以分為高、低兩個(gè)分類,分別用2、1表示,最終3個(gè)指標(biāo)兩兩組合,就構(gòu)成了8大客戶群體。
對(duì)每個(gè)用戶群體進(jìn)行定性,例如R、F、M分值高的客戶為重要價(jià)值客戶,R、F、M三個(gè)分值都低的客戶為潛在客戶,其他類型客戶可以此類推解讀。
三、RFM實(shí)際案例
RFM的原理到這里就講完了,是不是很簡(jiǎn)單?確實(shí)很簡(jiǎn)單,但是也確實(shí)很實(shí)用,在實(shí)際的工作中是如何實(shí)施這個(gè)用戶分層模型的呢?下面我們就用一個(gè)實(shí)際的案例手把手教你如何進(jìn)行RFM用戶分層。
整體來說,RFM模型實(shí)施需要以下幾個(gè)關(guān)鍵的步驟。
1. 數(shù)據(jù)準(zhǔn)備
下面通過一個(gè)實(shí)際的案例學(xué)習(xí)RFM分析的使用,案例是用python做的,當(dāng)然了Excel也能做,不必糾結(jié)于工具哈,首先將數(shù)據(jù)導(dǎo)入到data變量,代碼如下:
import pandas data=pandas.read_csv(‘./RFM分析.csv’,engine=’python’)
可以大致看一眼data數(shù)據(jù)的樣式,如下圖所示。
可以看到,這里記錄的是客戶的每一個(gè)訂單的信息,第一列為訂單ID,第二列為客戶ID,第三列為交易日期,第四列為交易金額。
對(duì)數(shù)據(jù)進(jìn)行一下加工,根據(jù)交易日期,計(jì)算出每次交易距今的間隔天數(shù),代碼如下:
#將交易日期處理為日期數(shù)據(jù)類型
data[‘DealDateTime’]=pandas.to_datetime(data.DealDateTime,format=’%Y/%m/%d’)
#假設(shè)2015-10-1是計(jì)算當(dāng)天,求交易日期至計(jì)算當(dāng)天的距離天數(shù)
data[‘Days’]=pandas.to_datetime(‘2015-10-1’)-data[‘DealDateTime’]
#從時(shí)間距離中獲取天數(shù) data[‘Days’]=data[‘Days’].dt.days
執(zhí)行以上代碼,即可得到用戶每一次交易日期距離指定日期的天數(shù),如下圖所示。
2. 計(jì)算R、F、M
用戶的明細(xì)數(shù)據(jù)準(zhǔn)備好后,接下來就可以計(jì)算每個(gè)客戶的最近交易間隔R、交易頻率F以及交易總額M,計(jì)算方法如下:
最近交易間隔R:使用CustomerID作為分組列,距離指定日期間隔天數(shù)Days作為聚合列,統(tǒng)計(jì)函數(shù)使用最小值函數(shù)min,即可得到每個(gè)客戶的最近交易間隔R。
交易頻率F:使用CustomerID作為分組列,OrderID作為聚合列,統(tǒng)計(jì)函數(shù)使用計(jì)數(shù)函數(shù)count。
交易總額M:使用CustomerID作為分組列,訂單金額Sales作為聚合列,統(tǒng)計(jì)函數(shù)使用求和函數(shù)sum。
對(duì)應(yīng)的代碼如下:
#統(tǒng)計(jì)每個(gè)客戶距離指定日期有多久沒有消費(fèi)了,即找出最小的最近消費(fèi)距離
R=data.groupby(by=[‘CustomerID’],as_index=False)[‘Days’].agg(‘min’)
#統(tǒng)計(jì)每個(gè)客戶交易的總次數(shù),即對(duì)訂單ID計(jì)數(shù)
F=data.groupby(by=[‘CustomerID’],as_index=False)[‘OrderID’].agg(‘count’)
#統(tǒng)計(jì)每個(gè)客戶交易的總額,即對(duì)每次的交易金額求和
M=data.groupby(by=[‘CustomerID’],as_index=False)[‘Sales’].agg(‘sum’)
執(zhí)行以上代碼,得到的結(jié)果如下圖所示。
接下來使用merge方法,將R、F、M三個(gè)數(shù)據(jù)在客戶CustomerID維度上關(guān)聯(lián)起來,因?yàn)樗鼈儞碛泄餐牧忻?,在這種情況下,on參數(shù)可以省略不寫,代碼如下:
#將R、F、M三個(gè)數(shù)據(jù)框關(guān)聯(lián),merge默認(rèn)內(nèi)連接,可省略,兩表on條件的關(guān)聯(lián)列名均為CustomerID
Data=R.merge(F).merge(M)
#修改列名 RFMData.columns=[‘CustomerID’,’R’,’F’,’M’]
執(zhí)行以上代碼,得到的結(jié)果如下圖所示。
3. 計(jì)算R、F、M綜合分值
每個(gè)客戶的R、F、M數(shù)據(jù)計(jì)算好后,接下來就可以對(duì)R、F、M這三個(gè)維度進(jìn)行分組打分賦值,得到對(duì)應(yīng)的R分值、F分值、M分值。
打分標(biāo)準(zhǔn)可以按照業(yè)務(wù)經(jīng)驗(yàn)、平均值等標(biāo)準(zhǔn)進(jìn)行劃分。最好是按照業(yè)務(wù)經(jīng)驗(yàn)劃分,因?yàn)檫@里分類的的用戶是要到后面進(jìn)行精細(xì)化運(yùn)營的,可以通過已有的運(yùn)營策略反推這里的劃分閾值。
當(dāng)然,如果還沒有特別清晰的運(yùn)營策略,也可以采用平均值進(jìn)行劃分。本例將R、F、M三列分別按照各自的平均值劃分為高、低2個(gè)組,并分別賦值1分、2分。
R分值(R_S):距離指定日期越近,R_S越大,R>=平均值,R_S為1,R<平均值,R_S為2。
F分值(F_S):定義為交易頻率越高,F(xiàn)_S越大,F(xiàn)<=平均值,F(xiàn)_S為1,F(xiàn)>平均值,F(xiàn)_S為2。
M分值(M_S):定義為交易金額越高,M_S越大,M<=平均值,M_S為1,M>平均值,M_S為2。對(duì)各個(gè)用戶的RFM的數(shù)據(jù)行進(jìn)行打分賦值,代碼如下:
#判斷R列是否大于等于R列的平均值,使用loc將符合條件R_S列的值賦值為1
RFMData.loc[RFMData[‘R’]>=RFMData.R.mean(),’R_S’]=1
#判斷R列是否小于R列的平均值,使用loc將符合條件R_S列的值賦值為2
RFMData.loc[RFMData[‘R’]<RFMData.R.mean(),’R_S’]=2
#同R_S賦值方法,對(duì)F_S、M_S進(jìn)行賦值,但與R相反,F(xiàn)、M均為越大越好
RFMData.loc[RFMData[‘F’]<=RFMData.F.mean(),’F_S’]=1
RFMData.loc[RFMData[‘F’]>RFMData.F.mean(),’F_S’]=2
RFMData.loc[RFMData[‘M’]<=RFMData.M.mean(),’M_S’]=1RFMData.loc[RFMData[‘M’]>RFMData.M.mean(),’M_S’]=2
執(zhí)行代碼,R_S、F_S、M_S的分組分值就計(jì)算出來了,如下圖所示。
基于以上得出用戶最終的RFM分層,如下圖所示。
#計(jì)算RFM綜合分值
RFMData[‘RFM’]=100*RFMData.R_S+10*RFMData.F_S+1*RFMData.M_S
執(zhí)行代碼,得到的RFM綜合分值如下圖所示。CustomerID:14568的分層為221,對(duì)應(yīng)的就是一般價(jià)值用戶。
4. 用戶分層
接下來結(jié)合文章開頭提到的用戶分層定義,將用戶細(xì)分為8種不同的類型。本例采用與RFM綜合分值與用戶類型的對(duì)應(yīng)關(guān)系表映射的方式實(shí)現(xiàn)用戶分層。
首先將各個(gè)RFM綜合分值與用戶類型的對(duì)應(yīng)關(guān)系定義為一個(gè)映射匹配表。
然后再使用merge中的內(nèi)連接inner方法,將RFMData與剛定義的RFM綜合分值用戶類型的映射匹配表,根據(jù)關(guān)聯(lián)列名RFM匹配合并為一個(gè)dataframe,這樣就完成了用戶分層的操作,代碼如下:
#定義RFM綜合分值與客戶類型的對(duì)應(yīng)關(guān)系表
CustomerType=pandas.DataFrame(data={‘RFM’:[111,112,121,122,211,212,221,222]’Type’:[‘潛在客戶’,’重點(diǎn)挽留客戶’,’一般保持客戶’,’重點(diǎn)保持客戶’,’一般發(fā)展客戶’,’重點(diǎn)發(fā)展客戶’,’一般價(jià)值客戶’,’高價(jià)值客戶’]})
#將RFMData與RFM綜合分值客戶類型的對(duì)應(yīng)關(guān)系表合并為一個(gè)數(shù)據(jù)框#merge默認(rèn)內(nèi)連接,可省略,兩表on條件的關(guān)聯(lián)列名均為RFM,同樣可省略 RFMData=RFMData.merge(CustomerType)
執(zhí)行代碼,得到的數(shù)據(jù)如下圖所示。
可以看到,最后一列數(shù)據(jù),就是對(duì)每個(gè)用戶細(xì)分的用戶分層。最后,我們來看看,每個(gè)類別的用戶數(shù)是多少,代碼如下:
#按RFM、Type進(jìn)行分組統(tǒng)計(jì)客戶數(shù)
RFMData.groupby(by=[‘RFM’,’Type’])[‘CustomerID’].agg(‘count’)
執(zhí)行代碼,就可以得到各個(gè)客戶類型的客戶數(shù)了。
后續(xù)就可以對(duì)不同的客戶群體,有針對(duì)性地采取相應(yīng)運(yùn)營策略進(jìn)行推廣、管理,進(jìn)而提升客戶價(jià)值和營收水平,限于篇幅,這里就不再展開,我們會(huì)在后續(xù)的用戶運(yùn)營專題上和大家繼續(xù)討論。
本文由 @數(shù)據(jù)分析星球 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 Unsplash,基于CC0協(xié)議
寫的很好,看懂了,之前看的都是方法論,很難落實(shí),現(xiàn)在完全明白了
代碼部分也屬于我們做嘛?
ip美國?
很棒很實(shí)用!
為什么要摻雜代碼相關(guān)的內(nèi)容進(jìn)去,純粹講RFM就好了。
重在實(shí)踐
請(qǐng)問下最開始的數(shù)據(jù)選取是以什么標(biāo)準(zhǔn)的呢?如某一天的交易數(shù)據(jù),進(jìn)行數(shù)據(jù)清洗后,在劃分?