基於K-Means聚類的航空公司客戶價值分析
目錄
1 背景與挖掘目標
2 業務分析及數據預處理
3 模型構建
4 模型應用
=======================================================
1 背景與挖掘目標
大數據時代的來臨使企業營銷焦點從產品為中心轉變為客戶為中心,客戶關係管理成為核心問題。而通過客戶分類優化客戶關係管理,可以區分無價值客戶、高價值客戶,針對不同價值的客戶制定優化的個性化服務方案,採取不同營銷策略,將有限的營銷資源集中於高價值客戶,實現企業利潤最大化目標。
面對激烈的市場競爭,各個航空公司都推出了更優惠的營銷方式來吸引更多客戶。某航空公司面臨著旅客流失、競爭力下降和航空資源未充分利用等經營危機。解決方案之一是通過建立合理的客戶價值評估模型,對客戶進行分群,分析比較不同客戶群的客戶價值,並制定相應的營銷策略。
原始數據為該航空公司積累的部分會員檔案信息及航班乘坐記錄,分析目標是:
(1)藉助航空公司數據,對客戶進行分類。
(2)對不同的客戶類別進行特徵分析,比較不同類客戶的客戶價值。
(3)對不同價值的客戶類別提供個性化服務,制定相應營銷策略。
2 業務分析及數據預處理
識別客戶價值應用最廣泛的模型是RFM模型,即通過最近消費時間間隔(Recency)、消費頻率(Frequency)和消費金額(Monetary)來進行客戶群體細分,識別出高價值的客戶,如下圖所示。
在航空業,由於票價受到運輸距離、艙位等級等多種因素影響,相同消費金額的不同旅客對航空公司的價值是不同的,傳統RFM模型在此應用場景下並不合適。本案例選擇客戶在一定時間內累計飛行里程M和一定時間內乘坐艙位所對應的折扣係數的平均值C兩個指標來代替消費金額。此外,考慮航空公司會員入會時間的長短在一定程度上能夠影響客戶價值,在模型中增加客戶關係長度L,作為區分客戶的另一指標。
綜上所述,本例將客戶關係長度L、消費時間間隔R、消費頻率F、飛行里程M和平均折扣係數C作為航空公司識別客戶價值指標,各指標具體含義如下表所示。
傳統RFM模型依據各個屬性的平均值進行劃分(圖1),存在細分客戶群太多、精準營銷成本高等問題。本例採用K-Means聚類的方法實現客戶價值識別。
2.1 數據抽取
以2014-12-31為結束時間,選取寬度為兩年的時間段作為分析觀測窗口,抽取該窗口內有乘機記錄的所有客戶的詳細數據形成歷史數據。對於後續新增的客戶詳細信息記錄,以新增數據中最近的時間點作為結束時間,採用同樣的方法進行抽取,形成增量數據。
按照上述處理方法,本例共得到62988條記錄,包括客戶會員卡號、入會時間、性別、年齡、會員卡級別、工作地城市、觀測窗口結束時間、觀測窗口乘機積分、飛行公里數、飛行次數、飛行時間、乘機時間間隔和平均折扣率等44個屬性。
2.2 數據探索分析
本例的探索分析主要是對數據進行缺失值分析和異常值分析。通過對數據觀察發現原始數據中存在票價為空值、票價最小值為0、折扣率最小值為0、總飛行公里數大於0的記錄。票價為空值的數據可能是客戶不存在乘機記錄造成,其他數據產生原因可能是客戶乘坐0折機票或者機票獲得渠道為積分兌換。
數據探索分析代碼如下。
# 數據探索分析import pandas as pdimport numpy as npdatafile= ./air_data.csv #航空原始數據resultfile = ./explore.xls #數據探索結果表data = pd.read_csv(datafile, encoding = utf-8) #讀取原始數據,指定UTF-8編碼explore = data.describe(percentiles = [], include = all).T explore[null] = len(data)-explore[count] explore = explore[[null, max, min]]explore.columns = [u空值數, u最大值, u最小值] #表頭重命名explore.to_excel(resultfile) #導出結果
2.3 數據預處理
預處理包括數據清洗、屬性規約及數據變換。
1. 數據清洗
丟棄票價為空值的記錄;丟棄票價為0、平均折扣率不為0、總飛行公里數大於0的記錄。代碼如下。
#數據清洗,過濾掉不符合規則的數據import csvcleanedfile = ./data_cleaned.xls data = data[data[SUM_YR_1].notnull()*data[SUM_YR_2].notnull()] index1 = data[SUM_YR_1] != 0index2 = data[SUM_YR_2] != 0index3 = (data[SEG_KM_SUM] == 0) & (data[avg_discount] == 0) data = data[index1 | index2 | index3] data.to_excel(cleanedfile) #導出結果
2. 數據規約
原始數據中包含44個屬性,此處選取與模型相關的六個屬性——FFP_DATE、LOAD_TIME、FLIGHT_COUNT、AVG_DISCOUNT、SEG_KM_SUM、LAST_TO_END,刪除與其不相關、弱相關或冗餘屬性。
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(單位:無)
為消除數量級帶來的影響,對數據進行Z-標準化處理。
數據規約及變換代碼如下。
# 數據規約testData = pd.read_excel(cleanedfile)reductionData = testData[[FFP_DATE,LOAD_TIME,FLIGHT_COUNT,avg_discount,SEG_KM_SUM,LAST_TO_END]]# 數據類型轉換reductionData.loc[:,FFP_DATE]=pd.to_datetime(reductionData.loc[:,FFP_DATE], format=%Y-%m-%d, errors=coerce)reductionData.loc[:,LOAD_TIME]=pd.to_datetime(reductionData.loc[:,LOAD_TIME], format=%Y-%m-%d, errors=coerce)reductionData=reductionData.dropna(subset=[FFP_DATE,LOAD_TIME],how=any)res = reductionData[LOAD_TIME]-reductionData[FFP_DATE]reductionData[L_days] = resdatafile = ./zscoredata.xls zscoredfile = ./zscoreddata.xls #標準化後的數據存儲路徑文件;#標準化處理zdata = pd.read_excel(datafile)zdata = (zdata - zdata.mean(axis = 0))/(zdata.std(axis = 0)) zdata.columns=[Z+i for i in zdata.columns] zdata.to_excel(zscoredfile, index = False) #數據寫入
3 模型構建
客戶價值分析模型構建由兩部分構成:一是根據5個指標的數據,進行航空公司客戶聚類分群,二是結合業務對客戶群進行特徵分析。
3.1 客戶聚類
採用K-Means聚類演算法對客戶數據進行客戶分群,聚為5類。代碼如下。
#K-Means聚類演算法from sklearn.cluster import KMeans inputfile = ./zscoreddata.xls k = 5 data1 = pd.read_excel(inputfile) kmodel = KMeans(n_clusters = k, n_jobs = 4) kmodel.fit(data1) #訓練模型kmodel.cluster_centers_ kmodel.labels_
數據聚類分群的結果如下表所示。
3.2 客戶價值分析
針對聚類結果進行特徵分析,如圖2所示。
針對聚類結果進行特徵分析,其中,客戶群4在F、M屬性上最大,在R屬性上最小;客戶群1在L屬性上最大;客戶群5在R屬性上最大,在M、F屬性上最小;客戶群2在C屬性上最小;客戶群3在L、C屬性上最小。每個群體的優勢和弱勢特徵結果如下表所示。
基於上述特徵描述,定義五個等級的客戶類別:重要保持客戶、重要發展客戶、重要挽留客戶、一般客戶、低價值客戶。每種客戶類別的特徵如下。
(1)重要保持客戶(客戶群4):這類客戶的平均折扣率(C)較高(一般所乘航班的艙位等級較高),最近乘坐本公司航班的時間間隔(R)較低,乘坐的次數(F)或里程(M)較高。他們是航空公司的高價值客戶,是最理想的客戶類型,對航空公司的貢獻最大,所佔比例卻較小。航空公司應該優先將資源投放到他們身上,進行差異化和一對一營銷,提高這類客戶的忠誠度與滿意度,儘可能增加這類客戶的高水平消費。
(2)重要發展客戶(客戶群2):這類客戶的平均折扣率(C)較高,最近乘坐本公司航班的時間間隔(R)低,同時乘坐次數(F)或乘坐里程(M)較低。這類客戶入會時長(L)短,是航空公司的潛在價值客戶。航空公司要努力促使這類客戶增加在本公司的乘機消費和合作夥伴處的消費,通過客戶價值的提升,加強這一客戶群體的滿意度,提高他們轉向競爭對手的轉移成本,使他們逐漸成為公司的忠誠客戶。
(3)重要挽留客戶(客戶群5):這類客戶過去所乘航班的平均折扣率(C)、乘坐次數(F)或者累計飛行里程(M)較高,但是已有較長時間沒有乘坐本公司的航班(R較高)或是乘坐頻率降低。他們客戶價值變化的不確定性很高,因此具體問題具體分析,掌握客戶的最新信息、維持與客戶的互動就顯得十分必要。航空公司應根據這些客戶的最近消費時間、消費次數的變化情況,推測客戶消費的異動,並對其重點跟蹤聯繫,採取一定的營銷手段,延長客戶消費的生命周期。
(4) 一般與低價值客戶(客戶群3及客戶群1):這類客戶所乘航班的平均折扣率(C)很低,較長時間沒有乘坐過本公司航班(R較高),乘坐的次數(F)或累計飛行里程(M)較低,入會時長(L)短。他們是航空公司的一般用戶與低價值客戶,可能只有在航空公司機票打折促銷時,才會乘坐本公司航班。
其中,重要發展客戶、重要保持客戶、重要挽留客戶這三類群體可以分別歸入客戶生命周期管理的發展期、穩定期、衰退期三個階段。針對不同類型的客戶群,航空公司要提供差異化的產品和服務,提升重要發展客戶的價值,穩定和延長重要保持客戶的高水平消費,防範重要挽留客戶的流失並積極進行關係恢復。
4 模型應用
根據上述客戶群體特徵分析結果,航空公司可採取下面的一些營銷手段和策略。
(1)會員的升級與保級
航空公司的會員等級有白金卡、金卡、銀卡、普通卡等,其中非普通卡會員可以統稱為航空公司的精英會員,但需要客戶在一定時間內累計一定的飛行里程或航段,達到要求後就會在有效期內成為精英會員並享受相應的高級別服務。有效期快結束時,根據相關評價方法對客戶進行相應的升級或降級。然而由於許多客戶不了解會員升級或保級的要求,經常在評價期過後才發現錯過了升級和保級機會,白白損失之前累積的里程。同時,這種認知還可能導致客戶的不滿,乾脆放棄在本公司的消費。
因此,航空公司可以在進行會員升級或保級評價的時間點之前,對那些接近但尚未達標的較高消費客戶進行適當提醒,或採取一些促銷活動,刺激他們通過消費達到相應標準。這樣既可以獲得收益,同時也提高了客戶的滿意度,增加了公司的精英會員。
(2)首次兌換
航空公司常旅客計劃中最能吸引客戶的內容就是客戶可通過消費積累的里程來兌換免票或免費升艙等。各個航空公司都有一個首次兌換標準,也就是當客戶的里程或航段積累到一定程度時才能實現第一次兌換,這個標準通常高於正常的里程兌換標準。但是很多公司的里程積累會隨著時間進行一定的削減,例如年末里程折半等,這會導致不了解規則的會員損失自己的里程積累,有引起客戶流失的風險。
針對這種情況,可從資料庫中提取出接近但尚未達到首次兌換標準的會員,對他們進行提醒或促銷,使其通過消費達到標準。一旦實現了首次兌換,客戶在本公司進行再次消費兌換就比在競爭對手公司進行兌換要容易得多,在一定程度上提高了客戶對本公司的忠誠度。
(3)交叉銷售
通過發行聯名卡等與非航空類企業的合作,使客戶在其他企業的消費過程中獲得本公司的積分,加強客戶與公司的聯繫,提高他們的忠誠度。
推薦閱讀:
※R之重抽樣與自助法(一)
※不識廬山真面目,只緣身在此山中
※人類史上最大惡性海難-TITANIC沉船事故
※敲黑板!從零開始,小白如何通過Kaggle競賽提高數據分析能力!
※如何學習python
TAG:數據分析 |