這是一份某電商平臺的銷售數據,數據包含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
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
從圖能夠看出這裏的數據只有class2有缺失值,這裏暫時不用提取這個指標,暫不清洗。圖片
這裏銷售金額爲負數的狀況,數據清洗的時候得把這些異常值過濾。ci
# 銷售金額有小於等於0的,直接過濾掉
# 這裏有22542條數據
data = df[df['銷售金額'] >0]
data.shape
輸出:
data['會員建立日期'] = pd.to_datetime(data['會員建立日期'])
data['銷售日期'] = pd.to_datetime(data['銷售日期'])
# 查看是否轉換成功
data.info()
輸出:
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指標已經構建完成。
# 先計算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']]
ss = preprocessing.StandardScaler()
ss_LRFM_data = ss.fit_transform(LRFM_data)
ss_LRFM_data
輸出:
# 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
輸出:
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大,這裏判斷是重要保持客戶。