RMF含義
R(Recency)(用戶粘性,越小越好):用戶最近一次交易時間的間隔。R值越大,表示用戶交易發生的日期越久,反之則表示用戶交易發生的日期越近
F(Frequency)(用戶忠誠度,越大越好):用戶在最近一段時間內交易的次數,F值越大,表示客戶交易越頻繁,反之則表示用戶交易不夠活躍。
M(Monetary)(用戶貢獻度,越大越好):用戶在最近一段時間內交易的金額。M值越大,表示用戶價值越高,反之則表示用戶價值越低。
R | F | M | 用戶群體類型 |
---|---|---|---|
0 | 1 | 1 | 重要價值用戶 |
1 | 1 | 1 | 重要喚回用戶 |
0 | 0 | 1 | 重要深耕用戶 |
1 | 0 | 1 | 重要挽留用戶 |
0 | 1 | 0 | 潛力用戶 |
1 | 1 | 0 | 一般維持用戶 |
0 | 0 | 0 | 新用戶 |
1 | 0 | 0 | 流失用戶 |
用戶RMF模型的用途
針對不同類型用戶,提出可落地的策列建議,采取不同運營手段措施。
用戶RMF模型處理思路
以電商數據為例
1、確認待分析數據
不同業務R、F、M指標定義不同。
例如:
在電商銷售案例中,通過最后一次消費時間間隔(R)、消費頻率(F)和消費金額(M)進行定義;
在用戶使用產品案例中,通過用戶最后一次使用的時間間隔(R)、使用頻率(F)、和對產品功能的使用(M)進行定義;
在借貸平台的與其用戶案例中,通過最后一次進入還款頁面的時間間隔(R)、進入還款頁面的次數(F)、應還款的賬單金額(M)進行定義
值 | 計算方法 | 計算需要的數據 |
---|---|---|
R | 最后一次訂單日期據今天(或設定時間)的間隔 | 用戶ID、訂單日期 |
F | 一年內用戶下單次數 | 用戶ID |
M | 一年內用戶下單總額 | 用戶ID、銷售額 |
2、計算需要的數據
3、給R、F、M按值划分高低維度
方法一:平均值
平均值作為依據進行划分,(R值計算的大小和用戶價值呈反比,故高於依據的作為低值)
注:由於大部分數據呈長尾分布,導致平均數被拔高或壓低,此時以平均數作為參考並不合適。例如:有一用戶的消費金額達到100K,普遍用戶消費1K,此時平均值被拔高。
方法二:中位數或四分位數(推薦)
選擇四分位數作為依據進行划分,(R值計算的大小和用戶價值呈反比,故高於依據的作為低值)
4、量化用戶價值
將RFM總值量化為用戶價值
方法一:字符串對應法
方法二:數值計算法
將R、F、M三組數據分別無量綱化處理映射到[0,1]區間再合理放大然后相加。(即跳過了給第三步給RFM划分高低維度的步驟)
無量綱化處理具體原理和方法
min-max歸一化
公式:\(x^{'}=\frac{x-min}{max-min}\)
通過無量綱化處理將不同量級的數據歸一化至同一量級,一般將該數放大100倍
RFM計算公式:RFM總值 = R值 * (-1) + F值 + M值 +100
注:-1是由於R值大小和用戶質量成反比,+100是為了保證數據結果不會出現負數,該數不是固定的,如果RFM歸一化未放大100倍,此處+1即可
RFM模型案例
現有一電商銷售訂單的數據表,使用用戶RFM模型對用戶數據進行分析
# 以2014年為時間段,計算F、M值
# 獲取2014年數據
df_14 = df[df['Order_Year']==2014]
'''
|R|最后一次訂單日期據今天(或設定時間)的間隔|用戶ID、訂單日期|
|F|一年內用戶下單次數|用戶ID|
|M|一年內用戶下單總額|用戶ID、銷售額|
提取出需要的數據
'''
df_14=df_14[['CustomerID','OrderDate','Sales']]
df_14
# 將用戶ID作為索引
df_14.set_index('CustomerID',inplace=True)
# 為了計算F,增加一列(因為需要累計同一用戶訂單個數
df_14['orders'] = 1
# 將同一用戶的訂單最大時間、下單次數總合、下單總額以數據透視表的方式計算並保存
customer_pivot = pd.pivot_table(df_14,
index = 'CustomerID',
values=['OrderDate','orders','Sales'],
aggfunc={'OrderDate':'max',
'orders':'sum',
'Sales':'sum'})
# R 以所用用戶中最后下單的時間作為分析開始的一天
customer_pivot['R'] = (customer_pivot.OrderDate.max()-customer_pivot.OrderDate).dt.days
# F
# 新建一個F列,或者可以直接將orders列進行重命名(customer_pivot.rename(columns=,inplace=)
customer_pivot['F'] = customer_pivot.orders
# M
customer_pivot['M'] = customer_pivot.Sales
customer_pivot
# 給RFM划分高低維度
def func(x):
# 根據正負,標記1,0
# level是一個DataFrame類型分別有R、F、M三列
level = x.apply(lambda x:'1' if x >=0 else '0')
# 將RFM值拼成一列 label是Series類型
label = level.R+level.F+level.M
# 構建字典 量化用戶價值
d = {
'011':'重要價值用戶',
'111':'重要喚回用戶',
'001':'重要深耕用戶',
'101':'重要挽留用戶',
'010':'潛力用戶',
'110':'一般維持用戶',
'000':'新用戶',
'100':'流失用戶'
}
result = d[label]
return result
# 以中位數方式划分維度,以字符串對應法量化用戶價值
customer_pivot['label']=customer_pivot[['R','F','M']].apply(lambda x:x-x.median()).apply(func,axis=1)
customer_pivot