用戶RFM模型及應用


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM