Python實現LRFM模型分析客戶價值

1. 分析背景

這是一份某電商平臺的銷售數據,數據包含2010年4月22到2014年7月24的銷售數據。分析該銷售數據,可以發現客戶價值。

現利用KMeans聚類實現LRFM模型來分析客戶的價值,便於客戶分羣,針對性推廣,提高銷售額。

LRFM模型定義:

  • L:會員創建日期距離距離2014年7月25的時間間隔(單位:月 )

  • R:會員最近一次購買時間距離2014年7月25的時間間隔(單位:月 )

  • F:會員購買次數

  • M:會員的總購買金額

2. 分析流程

圖片

3. 數據探索

3.1 導入相關包和讀取數據

import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt
from sklearn import preprocessing
from datetime import datetime
from sklearn.cluster import KMeans

plt.rcParams['font.sans-serif'] = 'SimHei'
%matplotlib inline

# 讀取數據
df = pd.read_csv(r'C:/Users/Administrator/Desktop/RFM分析1.csv',
                engine='python')
# 查看行列                
df.shape














輸出:

3.2 查看錶結構

image.png從圖可以看出這裏的數據只有class2有缺失值,這裏暫時不用提取這個指標,暫不清洗。


3.3 描述性分析查看

image.png這裏銷售金額爲負數的情況,數據清洗的時候得把這些異常值過濾。


4. 數據清洗

4.1 將銷售額<0的過濾掉

# 銷售金額有小於等於0的,直接過濾掉
# 這裏有22542條數據
data = df[df['銷售金額'] >0]
data.shape



輸出:

4.2 會員創建日期、銷售日期轉換成datetime格式

data['會員創建日期'] = pd.to_datetime(data['會員創建日期'])
data['銷售日期'] = pd.to_datetime(data['銷售日期'])

# 查看是否轉換成功
data.info()




輸出:

5. 構建L、R、F、M指標

5.1 提取有用指標

  • L = 相對日期(這裏我指定:2014年7月25) - 會員創建日期

  • R = 相對日期(這裏我指定:2014年7月25) - 最晚(大)的銷售日期

  • F = 用戶購買的次數(這裏針對流水號進行計數不同)

  • M = 用戶購買的彙總金額
    代買實現:

# 計算L,再轉換成月,這裏轉換成月,直接除於30天,保留兩位小數
# L是最早的購買日期距離會員創建日期
data1 = data.groupby('UseId').agg({'會員創建日期': ['min'],
                                    '銷售日期': ['min''max'], 
                                   '銷售金額':['sum'],
                                  '流水號':['nunique']})
data1






輸出:

圖片
刪除一層列名,並重新進行命名:

# 刪除第一層的列名
data1.columns = [col[1] for col in data1.columns]
# 重新命名列名
data1.columns = ['會員創建日期''最早銷售日期''最晚銷售日期''M''F']
data1




輸出:

圖片
M、F指標已經構建完成。

5.2 購買L、R指標

# 先計算L,R,再轉化成單位月
data1['L'] = datetime.strptime('2014-7-25''%Y-%m-%d') - data1['會員創建日期']
data1['R'] = datetime.strptime('2014-7-25''%Y-%m-%d') - data1['最晚銷售日期']

# 將L、R轉換成月做爲單位
data1['L'] = data1['L'].apply(lambda x: round(x.days/30,3))
data1['R'] = data1['R'].apply(lambda x: round(x.days/30,3))
data1







輸出結果:


提取有用的指標:

LRFM_data = data1[['L''R''F''M']]

6. 進行L、R、F、M數據的Z-Score轉換

ss = preprocessing.StandardScaler()
ss_LRFM_data = ss.fit_transform(LRFM_data)
ss_LRFM_data


輸出:

圖片

7. 使用KMeans進行聚類分析

# n_clusters聚類的個數
kmodel = KMeans(n_clusters=5, n_jobs=4)
kmodel.fit(ss_LRFM_data)
#查看聚類中心
kmodel.cluster_centers_ 




輸出:

圖片
將結果轉成DataFrame

client_level = pd.DataFrame(kmodel.cluster_centers_, 
                            index=['客戶羣1''客戶羣2''客戶羣3''客戶羣4''客戶羣5'],
                           columns=['L''R''F''M'])
client_level



輸出:

圖片

8. 針對結果進行客戶羣的分類

  • L越大,代表註冊會員時間距離指定時間(2014年7月25)越長,代表老客戶,該指標越大越好。

  • R越小,代表購買時間距離指定時間(2014年7月25)越短,R越小越好。

  • F越大,代表會員的購買次數越多。

  • M越大,代表會員購買的金額越多。

客戶羣1分析:
L大,R小,F大,M較大,這裏判斷是重要發展客戶。

客戶羣2分析:
L大,R大,F小,M較小,這裏判斷是重要挽留客戶。

客戶羣3分析:
L小,R小,F小,M小,這裏判斷是低價值客戶。

客戶羣4分析:
L大,R大,F小,M小,這裏判斷是一般價值客戶。

客戶羣5分析:
L大,R小,F大,M大,這裏判斷是重要保持客戶。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章