航空公司客戶價值分析
數據集:http://pan.baidu.com/s/1clfQY6
挖掘目標
(1) 根據航空公司客戶數據對客戶進行分類。
(2) 對不同的客戶類別進行特征分析,比價不同類客戶的客戶價值。
(3) 對不同價值的客戶類別提供個性化服務,制定相應的營銷策略。
分析方法與過程
識別客戶價值應用最廣泛的模型指標:最近消費時間間隔,消費頻率,消費金額(RFM模型)。
本案例考慮項目指標(LRFMC模型):
(1) 客戶關系長度L:航空公司會員時間的長短。
(2) 是消費時間間隔R。
(3) 消費頻率F。
(4) 飛行裏程M。
(5) 折扣系數的平均值C。
觀測窗口:以過去某個時間段為結束時間,某一時間長度作為寬度,得到歷史時間範圍內的一個時間段。
LRFMC模型指標含義:
(1) L:會員入會時間距觀測窗口結束的月數。
(2) R:客戶最近一次乘坐公司飛機距離觀測窗口結束的月數。
(3) F:客戶在觀測窗口內乘坐公司飛機的次數。
(4) M:客戶在觀測窗口內累計的飛行裏程碑。
(5) C:客戶在觀測窗口內乘坐倉位所對應的折扣系數的平均值。
方法:本案例采用聚類的方法,通過對航空公司客戶價值的LRFMC模型的五個指標進行K-Means聚類,識別客戶價值。
總體流程:數據抽取->數據預處理(數據清洗(缺失值填補舍棄等),屬性規約(提取需要特征數據),數據變換(轉換適當格式))->建模->結果
代碼實踐
1. 數據抽取
以2014-03-31為結束時間,選取寬度為兩年的時間段為分析窗口,抽取觀測窗口內有乘機記錄的所有客戶的詳細數據形成歷史數據。
抽取2012-04-01至2014-03-31所有乘客的詳細數據,總共62988條,44個屬性。
2. 數據探索分析
查找每列屬性觀測值個數,最大值,最小值。完整代碼如下:
1 # -*- coding: UTF-8 -*- 2 #對數據進行基本的探索 3 #返回缺失值個數以及最大值最小值 4 5 import pandas as pd 6 7 datafile=‘air_data.csv‘#航空原始數據,第一行為屬性標簽 8 9 resultfile=‘explore.xls‘#數據探索結果表 10 11 data=pd.read_csv(datafile,encoding=‘utf-8‘) #讀取原始數據,指定UTF-8編碼(需要用文本編輯器將數據轉換為UTF-8) 12 explore=data.describe(percentiles=[],include=‘all‘).T #.T對數據進行轉置,方便查閱,percentiles是指定計算多少的分位數(如1/4分位數,中位數) 13 ‘‘‘describe()函數自動計算字段count(非空值),unique(唯一值),top(頻數最高者),freq(最高頻數),std(方差),min(最小值), 14 50%(中位數),max(最大值)‘‘‘ 15 16 explore[‘null‘]=len(data)-explore[‘count‘] #describe()函數自動計算非空值,需要手動計算空值,每個屬性空值數 17 explore=explore[[‘null‘,‘max‘,‘min‘]] 18 explore.columns=[u‘空值數‘,u‘最大值‘,u‘最小值‘] #表頭重命名 19 20 explore.to_excel(resultfile) #導出結果
效果如下:
3.數據預處理
數據清洗,屬性規約,數據變換。
3.1數據清洗
通過數據探索分析,發現數據中存在缺失值,由於原始數據量大,這類數據量少,對其進行丟棄處理。
(1)丟棄票價為空的記錄。
(2)丟棄票價為0、平均折扣率不為0、總飛行公裏數等於0的記錄。
滿足清洗條件的一行數據全部丟棄,使用Pandas對滿足清洗條件的數據進行丟棄。
完整代碼如下:
1 # -*- coding: UTF-8 -*- 2 # 數據清洗,過濾掉不符合規則的數據 3 4 import pandas as pd 5 6 datafile = ‘air_data.csv‘ # 航空原始數據,第一行為屬性標簽 7 cleanedfile = ‘data_cleaned.scv‘ # 數據清洗後保存文件 8 9 data = pd.read_csv(datafile, encoding=‘utf-8‘) # 讀取原始數據,指定UTF-8編碼 10 data = data[data[‘SUM_YR_1‘].notnull() * 11 data[‘SUM_YR_2‘].notnull()] # 票價非空值才保留 12 13 # 只保留票價非零的,或者平均折扣率與總飛行公裏數同時為0的記錄 14 index1 = data[‘SUM_YR_1‘] != 0 # 屬性下面返回True或者False 15 index2 = data[‘SUM_YR_2‘] != 0 16 index3 = (data[‘SEG_KM_SUM‘] == 0) & (data[‘avg_discount‘] == 0) # 該規則是與‘ 17 18 data = data[index1 | index2 | index3] 19 20 data.to_csv(cleanedfile, encoding=‘utf-8‘) # 導出實驗結果
3.2屬性規約
根據我們建立的LRFMC模型,提取這五個特征,刪除語氣不相關的屬性。
3.3數據變換
將數據變換成‘適當的’格式。通過數據變換來構造這個五個特征。
計算方式如下:
(1) L=LOAD_TIME-FFP_DATE
會員入會時間距觀測窗口結束的月數=觀測窗口的結束時間-入會時間[單位:月]
(2) R=LAST_TO_END
客戶最近一次乘坐公司飛機距觀測窗口結束的月數=最後一次乘機時間至觀測窗口末端時長[單位:月]
(3)F=FLIGHT_COUNT
客戶在觀測窗口內乘坐公司飛機的次數=觀測窗口飛行次數[單位:次]
(4)M=SEG_KM_SUM
客戶在觀測時間內在公司累計的飛行裏程=觀測窗口的總飛行裏數[單位:公裏]
(5)C=AVG_DISCOUNT
客戶在觀測時間內乘坐艙位所對應的折扣系數的平均值=平均折扣率[單位:無]
提取5個特征後生成文件:zscoredata.xls
發現5個特征取值範圍差異較大,現對數據進行標準化
1 # -*- coding: UTF-8 -*- 2 # 對數據進行基本的探索 3 # 返回缺失值個數以及最大值最小值 4 5 import pandas as pd 6 7 datafile = ‘zscoredata.xls‘ # 航空原始數據,第一行為屬性標簽 8 zscoredfile = ‘zscoreddata.xls‘ # 標準化後的數據儲存路徑 9 10 # 標準化處理 11 data = pd.read_excel(datafile) 12 data = (data - data.mean(axis=0)) / (data.std(axis=0)) # 標準化變換 13 14 data.columns = [‘Z‘ + i for i in data.columns] # 表頭重命名 15 16 data.to_excel(zscoredfile, index=False) # 寫入數據,False不要序列
4.構建模型
客戶價值分析模型包括兩個:
(1) 根據5個特征對客戶進行聚類分群。
(2) 對每個客戶群進行特征分析,分析客戶價值,並對每個客戶進行排名。
完整代碼如下:
1 #-*- coding: utf-8 -*- 2 #K-Means聚類算法 3 4 import pandas as pd 5 from sklearn.cluster import KMeans #導入K均值聚類算法 6 7 inputfile = ‘zscoreddata.xls‘ #待聚類的數據文件 8 k = 5 #需要進行的聚類類別數 9 10 #讀取數據並進行聚類分析 11 data = pd.read_excel(inputfile) #讀取數據 12 13 #調用k-means算法,進行聚類分析 14 if __name__==‘__main__‘: 15 kmodel = KMeans(n_clusters = k, n_jobs = 8) #n_jobs是並行數,一般等於CPU數較好 16 kmodel.fit(data) #訓練模型 17 18 kmodel.cluster_centers_ #查看聚類中心 19 kmodel.labels_ #查看各樣本對應的類別
客戶價值分析:
根據聚類結果構造客戶群特征分析圖。
根據特征值大小總結出每個群體優勢特征和弱勢特征,將客戶群分為四類:
a重要保持客戶:平均折扣率高,乘坐次數或裏程高,最近坐過本公司航班。
b重要發展客戶:平均折扣率較高,乘坐次數和裏程較低。
c重要挽留客戶:平均折扣率,乘坐次數或者裏程較高,較長時間沒坐本公司航班。
d一般與低價值客戶:折扣率低,較長時間未做本公司航班,乘坐次數或裏程較低,入會時長短。
航空公司客戶價值分析