7.1 背景與挖掘目標
客戶分類,通過客戶分類,區分無價值客戶、高價值客戶,將優先營銷資源集中於高價值客戶,實現企業利潤最大化目標。
現在通過建立合理的客戶價值評估模型,對客戶進行分群,分析比較不同客戶群的客戶價值,並制定相應的營銷策略,對不同的客戶群提供個性化的客戶服務是必須和有效的。(市場細分)
根據數據實現以下目標:
1)借助航空公司客戶數據,對客戶進行分類
2)對不同的客戶類別進行特征分析,比較不同類客戶的客戶價值
3)對不同價值的客戶類別提供個性化服務,制定相應的策略營銷
7.2 分析方法與過程
本案例的目標是客戶價值識別,即通過航空公司客戶數據識別不同價值的客戶。
識別客戶價值應用最廣泛的模型是通過3個指標:
1)最近消費時間間隔Recency
2)消費頻率Frequency
3)消費金額Monetary
來進行客戶細分,識別高價值的客戶,簡稱RFM模型。
在RFM模型中,消費金額表示在一段時間內,客戶購買該企業產品金額的總和。由於航空價受到運輸距離、航位等級等多種因素影響,同樣消費金額的不同旅客對航空公司的價值是不同的。所以消費金額這個指標並不適用於航空公司的客戶價值分析。我們選擇客戶在一定時間內累積的飛行里程M和客戶在一定時間內乘坐艙位所對應的折扣系數的平均值C兩個指標代替消費金額。
本案例將客戶關系長度L、消費時間間隔R、消費頻率F、飛行里程M、折扣系數的平均值C五個指標作為航空公司識別客戶價值,記為LRFMC模型。
L:會員入會時間距觀測窗口結束的月數;
R:客戶最近一次乘坐公司飛機距觀測窗口結束的月數
F:客戶在觀測窗口內乘坐公司飛機的次數
M:客戶在觀測窗口內累計的飛行里程
C:客戶在觀測窗口內乘坐艙位所對應的折扣系數的平均值
針對航空公司LRFMC模型,如果采用傳統的RFM模型分析的屬性分箱法,也能夠識別出最有價值的客戶,但細分的客戶群太多,提高了針對性營銷的成本。因此本案例采用聚類的方法識別客戶價值。
航空客運信息挖掘的步驟:
1)從航空公司的數據源中選擇性抽取數據與新增數據抽取分別形成歷史數據和增量數據
2)對步驟1中的兩個數據集進行數據探索分析與預處理
3)利用步驟2 中的已經完成數據預處理的建模數據,基於旅客價值LRFMC模型進行客戶分群,對各個客戶群進行特征分析,識別出有價值的客戶。
4)針對模型結果得到不同價值的客戶,采用不同的營銷手段,提供定制化的服務。
7.2.1 數據抽取
以2014-03-31為結束時間,選取寬度為2年的時間段作為分析觀測窗口,抽取觀測窗口內有乘機記錄的所有客戶的詳細數據形成歷史數據。
對於后續新增的客戶詳細信息,以后續新增數據中最新的時間點作為結束時間,采用上述同樣的方法進行抽取,形成增量數據。
7.2.2 數據探索分析
本案例的探索分析是對數據進行缺失值分析與異常值分析,分析出數據的規律以及異常值。
通過對原始數據觀察,發現票價存在空值,票價最小值為0,折扣率最小值為0,總飛行公里數大於0的記錄。票價為空值的數據可能是客戶不存在乘機記錄造成的,其他數據可能是客戶乘坐0折機票或者積分兌換產生的。
1 import pandas as pd 2 data=pd.read_csv(r'E:\siren\Python dataAnalyst\chapter7\demo\data\air_data.csv',encoding='utf-8') 3 #對數據進行基本的描述
4 #percentiles參數是指定計算多少的分位數表,T是轉置
5 explore=data.describe(percentiles=[],include='all').T 6
7 #describe函數自動計算非空數值數,手動計算空值數
8 explore['null']=len(data)-explore['count'] 9 #這里只選取部分探索結果
10 explore=explore[['null','max','min']] 11 #重命名表頭
12 explore.columns=[u'空值',u'最大值',u'最小值'] 13 #將explore文件導出
14 explore.to_excel(r'E:\siren\Python dataAnalyst\chapter7\demo\data\explore.xls')
7.2.3 數據預處理
本案例主要采用數據清洗、屬性規約與數據變換的預處理方法。
1、數據清洗
通過數據分析探索發現,存在缺失值,票價最小值為0,折扣率最小值為0,總飛行公里數大於0的記錄。
因為原始數據量較大,這類數據所占比例較小,對問題影響不大,因此進行丟棄處理。
具體做法:
1)丟棄票價為空的記錄
2)丟棄票價為0,平均折扣率不為0、總飛行公里數大於0的記錄。
1 #票價非空值保留
2 data=data[data['SUM_YR_1'].notnull()*data['SUM_YR_2'].notnull()] 3
4 #只保留非空票價,或者平均值扣率與總飛行公里數同時為0的記錄
5 index1=data['SUM_YR_1']!=0 6 index2=data['SUM_YR_2']!=0 7 index3=(data['SEG_KM_SUM']==0) & (data['avg_discount']==0) 8
9 data=data[index1|index2|index3]
2.屬性規約
原始數據中屬性太多,根據航空公司客戶價值LRFMC模型,選擇與LRFMC指標相關的6個屬性:FFP_DATE、LOAD_TIME、FLIGHT_COUNT、avg_discount、SEG_KM_SUM、LAST_TO_END。
刪除與其不相關、弱相關或冗余的屬性,例如,會員卡號、性別、工作城市、工作地所在省份、工作所在國家和年齡等屬性。
3.數據變換
數據變換是將數據轉換成“適當”的格式,以適應挖掘任務及算法的需要。本案例中主要采用的數據變換方式為屬性構造和數據標准化。
因為原始數據中並沒有直接給出LRFMC五個指標,需要通過原始數據提取這五個指標,具體計算如下:
1)L=LOAD_TIME-FFP_DATE
會員入會時間距觀測窗口結束的月數=觀測窗口的結束時間-入會時間【單位:月】
2)R=LAST_TO_END
客戶最近一次乘坐公司飛機距觀測窗口結束的月數=最后一次乘機時間至觀察窗口末端時長【單位:月】
3)F=FLIGHT_COUNT
客戶在觀測窗口內乘坐公司飛機的次數=觀測窗口的總飛行次數【單位:月】
4)M=SEG_KM_SUM
客戶在觀測時間內在公司累計的飛行里程=觀測窗口的總飛行公里數【單位:公里】
5)C=AVG_DISCOUNT
客戶在觀測時間內乘坐艙位多對應的折扣系數的平均值=平均折扣率【單位:無】
方法一、具體提取辦法:
1 import datetime 2 #將數據轉換為時間格式
3 data['LOAD_TIME']=pd.to_datetime(data['LOAD_TIME']) 4 data['FFP_DATE']=pd.to_datetime(data['FFP_DATE']) 5 #求時間差
6 data['L']=data['LOAD_TIME']-data['FFP_DATE'] 7
8 # 將間隔時間轉成月份為單位
9 data['L']=data['L']/np.timedelta64(1, 'M') 10
11 data['R']=data['LAST_TO_END'] 12 data['F']=data['FLIGHT_COUNT'] 13 data['M']=data['SEG_KM_SUM'] 14 data['C']=data['avg_discount'] 15
16 data=data[['L','R','F','M','C']] 17 data_T=data.describe() 18 data_T.loc[['min','max']]
方法二、也可以直接導入書中自帶的數據集:
data=pd.read_excel(r'E:\siren\Python dataAnalyst\chapter7\demo\data\zscoredata.xls')
對數據進行標准差標准化處理:
1 data=(data-data.mean(axis=0))/(data.std(axis=0)) 2 data.columns=['Z'+i for i in data.columns]
標准差標准化:也叫零-均值規范化
經過處理的數據的均值為0,標准差為1.


(注:在本書的第4章中的4.3.2 規范化中有介紹)
7.2.4 模型構建
客戶價值分析模型構建主要由兩部分構成,第一部分根據航空公司客戶5個指標的數據,對客戶進行聚類分群。第二部分結合業務對每個客戶群進行特征分析,分析客戶價值,並對每個客戶群進行排名。
1、客戶聚類
采用K-Means聚類算法對客戶數據進行客戶分群,聚成5類(需要結合業務的理解與分析來確定客戶的類別數量)
1 from sklearn.cluster import KMeans 2 k=5
3 kmodel=KMeans(n_clusters=k,n_jobs=4) 4 kmodel.fit(data) 5
6 labels = kmodel.labels_#查看各樣本類別
7 demo = pd.DataFrame(labels,columns=['numbers']) 8 demo1= pd.DataFrame(kmodel.cluster_centers_, columns=data.columns) # 保存聚類中心
9 demo2= demo['numbers'].value_counts() # 確定各個類的數目
10
11 demo4 = pd.concat([demo2,demo1],axis=1) 12 demo4.index.name='labels'
13
14 kmodel.cluster_centers_ 15 kmodel.labels_
2.客戶價值分析
針對聚類結果進行特征分析,其中
優勢 | 劣勢 | 數目 | |
客戶群1 | C | R、F、M | 最少 5 |
客戶群2 | C、L | 最多1 | |
客戶群3 | R、M、F | 3 | |
客戶群4 | L、F、M | 2 | |
客戶群5 | M、F、R | 4 |
分析:
客戶群1的數量最少,所乘航班折扣率較高(一般所乘航班的等級較高),屬於重要發展客戶。
客戶群2的數量較多,所乘航班折扣率較低,加入會員時間短,這類客戶一般在打折時才會乘坐航班,屬於一般客戶。
客戶群3,乘坐次數很少,累計總飛行公里數較少,很久沒有乘坐飛機,屬於低價值客戶。
客戶群4的數量較多,加入會員時間長,但是最近乘坐頻率變小,屬於重要挽留客戶。
客戶群5,累計總飛行公里數較大,飛行次數較多,最近乘坐過飛機,屬於重要保持客戶。
客戶價值排名:
客戶群 | 排名 | 排名含義 |
客戶群5 | 1 | 重要保持客戶 |
客戶群1 | 2 | 重要發展客戶 |
客戶群4 | 3 | 重要挽留客戶 |
客戶群2 | 4 | 一般客戶 |
客戶群3 | 5 | 低價值客戶 |
其中重要發展客戶、重要保持客戶、重要挽留客戶分別對應客戶生命周期管理的發展期、穩定期、衰退期。
3. 模型應用
根據對每個客戶群進行特征分析,采取針對性營銷:
1)會員升級與保級--客戶群4(數量較大)
2)首次兌換--客戶群2
3)交叉銷售--客戶群5