航空客戶價值分析-聚類分群

對於飛機客戶的屬性是很多的,我們進行挖掘的目的是希望對客戶進行特徵分析,比較不同客戶的價值,分類,然後指定不同的營銷服務。

一共四十多條屬性,兩年的歷史數據,為6萬8千多條數據,大小為13.8M

對於客戶分群,自然是經典的rfm模型,但考慮到種種因素,決定採用trflc(加入時間,f,r,總飛行長度,平均折扣)指標進行分類

1.首先利用python對於各屬性數據進行探索分析,放到我原來用的spss就叫描述性統計。

#coding=utf-8#對數據進行基本探索#返回缺失值個數以及最大最小值import pandas as pddatafile=chapter7/demo/data/air_data.csv#航空的原始數據,第一行為屬性標籤resultfile=chapter7/out/explore.xlsdata=pd.read_csv(datafile,encoding=utf-8)#讀取數據,指定utf—8編碼print len(data)explore=data.describe(percentiles=[],include=all).T#print explore[:5]#包括對數據的基本描述,percentiles參數是指定計算多少分位數表,如四分之1分位數,中位數等,#t是轉置,轉置後更方便查閱explore[null]=len(data)-explore[count]#decribe函數是自動計算非空數值,需要手動計算空值數explore=explore[[null,max,min]]#print explore#explore=explore[null,max,min]錯誤explore.columns=[u空值數,u最大值,u最小值]#print exploreexplore.to_excel(resultfile)#導出結果

票價有缺失值,但前後數據差別太大,無法插補,而且相對於總數據來說也不算多,所以直接刪去。

還有就是金錢為0,飛了了兩年,票價為0,說明數據有問題

所以只保留,票價不為0,或者折扣和里程同時為0的數據

cleanedfile=chapter7/out/cleanedfile.xlsdata=pd.read_csv(datafile,encoding=utf-8)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)print len(data)

內部數據處理完,對屬性變換規約

前面說了只保留五個屬性,因此留下六個(因為加入時間和觀測結束時間需要拿出來相減計算時間長度)

print data.columnsdata=data[[uFFP_DATE,LOAD_TIME,FLIGHT_COUNT,uavg_discount,SEG_KM_SUM,LAST_TO_END]]data.to_excel(chapter7/out/air_data_processed.xls)data=pd.read_excel(chapter7/demo/data/zscoredata.xls)explore2=data.describe().Texplore2=explore2[[min,max]]#這個只能提取列print explore2

對於五個屬性,極差較大,因此標準化

最常見的z分數標準化

接著就是最後的步驟:建模--聚類

根據業務場景,設定為5類

#聚類data=pd.read_excel(chapter7/out/zscoredfole_processed.xls)from sklearn.cluster import KMeansk=5kmodel=KMeans(n_clusters=k,n_jobs=1)kmodel.fit(data)r1=pd.Series(kmodel.labels_).value_counts()print r1r2=pd.DataFrame(kmodel.cluster_centers_)print r2r=pd.concat([r2,r1],axis=1)r.columns=list(data.columns)+[u類別數目]print rr=pd.concat([data,pd.Series(kmodel.labels_,index=data.index)],axis=1)r.columns=list(data.columns)+[u類別]#r.to_excel(chapter7/out/kmeans.xls)

這就是聚類中心,與各個類別的數目。(k—means均值聚類是隨機選擇聚類中心,所以每次聚類的類別號和聚類中心是不盡相同的)

構建雷達圖

客戶群4在fm上最大,r最小,客戶群3在l上最大,1在r最大,fm最小,0在lc上最小,2在c屬性上最大。

根據業務經驗,將五類化為保持客戶,發展客戶,挽留客戶,一般價值客戶,和低價值客戶

可以看到,類別都標註出來了,這裡因為偷懶所以把id刪掉了,所以只需要保留原始客戶的id,就可以根據id為索引查找客戶的屬性,對這些不同族群的客戶進行不同的分類營銷政策。


推薦閱讀:

票房數據脫水後,到底誰在裸泳?
泰坦尼克號倖存者特徵分析
R之重抽樣與自助法(一)
手機報表用處多,這些場景值得收藏!
小白python之路的開啟

TAG:數據分析 | 數據挖掘 | Python |