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

1. 分析背景

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

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

LRFM模型定義:ide

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

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

  • F:會員購買次數code

  • M:會員的總購買金額orm

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

輸出:
blog

3.2 查看錶結構

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


3.3 描述性分析查看

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


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大,這裏判斷是重要保持客戶。

相關文章
相關標籤/搜索