Lesson 33 RFM分析
根據客戶活躍程度和交易金額貢獻,進行客戶價值細分的方法
R(Recency)近度: 客戶最近一次交易時間的間隔;R越大,表示客戶越久沒發(fā)生過交易;
F(Frequency)頻度:客戶在最近一段時間內交易的次數;F越大,表示客戶交易越頻繁
M(Monetary)額度:客戶在最近一段時間內交易的金額;M越大,表示客戶價值越高
RFM分析過程
- 計算RFM各項分值
R_S 距離當前日期越近,得分越高,最高5分,最低1分
F_S 交易頻率越高,得分越高,最高5分,最低1分
M_S 交易金額越高,得分越高,最高5分,最低1分 - 匯總RFM分值
RMF = 100 * R_S + 10 * F_S + 1 * M_S - 根據RFM 分值對客戶分類
RFM分析前提
- 最近有過交易行為的客戶,再次發(fā)生交易的可能性要高于最近沒有交易行為的客戶
- 交易頻率較高的客戶比交易頻率較低的客戶,更有可能再次發(fā)生交易行為
- 過去所有交易總金額較多的客戶,比交易總金額較少的客戶,更有消費積極性
常規(guī)RFM數據格式
| OrderID | CustomerID | DealDateTime | Sales |
|---|---|---|---|
| 訂單編號 | 客戶編號 | 交易時間 | 交易金額 |
#對R, F, M進行聚合運算
#R_Agg用的是Python 3寫法,否則有warning
R_Agg = data.groupby(
by=['CustomerID']
)['DateDiff'].agg(numpy.min).rename('amin': 'RecencyAgg')
F_Agg = data.groupby(
by=['CustomerID']
)['OrderID'].agg({
'FrequencyAgg': numpy.size
})
M_Agg = data.groupby(
by=['CustomerID']
)['Sales'].agg({
'MonetaryAgg': numpy.sum
})
#把聚合后的結果匯總進一張表
aggData = R_Agg.join(F_Agg).join(M_Agg)
#對R, M, F score利用正態(tài)分布分組,都是分成五組
bins = aggData.RecencyAgg.quantile(
q=[0, 0.2, 0.4, 0.6, 0.8, 1],
interpolation='nearest'
)
#避免最小值不閉合的錯誤
bins[0] = 0
labels = [5, 4, 3, 2, 1]
R_S = pandas.cut(
aggData.RecencyAgg,
bins, labels=labels
)
bins = aggData.FrequencyAgg.quantile(
q=[0, 0.2, 0.4, 0.6, 0.8, 1],
interpolation='nearest'
)
bins[0] = 0;
labels = [1, 2, 3, 4, 5];
F_S = pandas.cut(
aggData.FrequencyAgg,
bins, labels=labels
)
bins = aggData.MonetaryAgg.quantile(
q=[0, 0.2, 0.4, 0.6, 0.8, 1],
interpolation='nearest'
)
bins[0] = 0
labels = [1, 2, 3, 4, 5]
M_S = pandas.cut(
aggData.MonetaryAgg,
bins, labels=labels
)
#根據行業(yè)專家給出的經驗公式,計算RFM得分
aggData['RFM'] = 100*R_S.astype(int) + 10*F_S.astype(int) + 1*M_S.astype(int)
/*按照RMF對用戶類型的劃分,將所有用戶分成8類:
高價值客戶,重點保持客戶,重點發(fā)展客戶,重點挽留客戶,
一般價值客戶,一般保持客戶,一般發(fā)展客戶,潛在客戶*/
bins = aggData.RFM.quantile(
q=[
0, 0.125, 0.25, 0.375, 0.5,
0.625, 0.75, 0.875, 1
],
interpolation='nearest'
)
bins[0] = 0
labels = [1, 2, 3, 4, 5, 6, 7, 8]
aggData['level'] = pandas.cut(
aggData.RFM,
bins, labels=labels
)
Lesson 34 矩陣分析
根據事物(如產品,服務等)的兩個重要屬性(指標)作為分析的依據,進行關聯分析,找出解決問題的一種分析方法
matplotlib相關問題后續(xù)學習