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 數據預處理
本案例主要採用數據清洗、屬性規約與數據變換的預處理方法。
一、數據清洗
經過數據分析探索發現,存在缺失值,票價最小值爲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、具體提取辦法:
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']]
方法2、也能夠直接導入書中自帶的數據集:html
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個指標的數據,對客戶進行聚類分羣。第二部分結合業務對每一個客戶羣進行特徵分析,分析客戶價值,並對每一個客戶羣進行排名。
一、客戶聚類
採用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