1、背景與挖掘目標
信息時代的來臨使得企業營銷焦點從產品中心轉變爲客戶中心,而客戶關係管理的關鍵問題是客戶分類。
面對市場激烈的競爭,通過建立合理的客戶價值評估模型,對客戶進行分羣,分析比較不同客戶羣的客戶價值,並制定相應的 營 銷策略,對不同的客戶羣提供個性化的客戶服務是必須和有效的,目前該航空公司已積累了大量的會員檔案信息和其乘坐航 班記錄,已得到經加工後的數據,根據這些數據實現以下目標:
1)藉助航空公司客戶數據,對客戶進行分類。
2)對不同的客戶類別進行特徵分析,比較不同類客戶的客戶價值。
3)對不同價值的客戶類別提供個性化服務,制定相應的營銷策略。
2、分析方法與過程
本案例將客戶關係長度L、消費時間間隔R、消費頻率F、飛行里程M和折扣係數的平均值C五個指標作爲航空公司識別客戶價值指標,記爲LRFMC模型。 針對航空公司LRFMC模型,如果採用傳統RFM模型分析的屬性分箱方法,雖然也能夠識別出最有價值的客戶,但是細分的客戶羣太多,提高了針對性營銷的成本。因此,本案例採用聚類的方法識別客戶價值。通過對航空公司客戶價值的LRFMC模型的五個指標進行K-Means聚類,識別出最有價值客戶。
3、航空客運信息挖掘主要步驟:
1)從航空公司的數據源中進行選擇性抽取與新增數據抽取分別形成歷史數據和增量數據。
2)對步驟1)中形成的兩個數據集進行數據探索分析與預處理,包括數據缺失值與異常值的探索分析,數據的屬性規約、清洗和變換。
3)利用步驟2)中形成的已完成數據預處理的建模數據,基於旅客價值LRFMC模型進行客戶分羣,對各個客戶羣進行特徵分析,識別出有價值的客戶。
4)針對模型結果得到不同價值的客戶,採用不同的營銷手段,提供定製化的服務。
#coding:utf-8
#對數據進行基本的探索分析
#返回缺失值個數以及最大最小值
import pandas as pd
datafile = './data/air_data.csv' #航空原始數據,第一行爲屬性標籤
resultfile = './tmp/explore.xls' #數據探索結果表
data = pd.read_csv(datafile, encoding='utf-8') #讀取原始數據,指定utf-8編碼(需要用文本編輯器將數據轉換爲utf-8編碼)
explore = data.describe(percentiles=[], include='all').T
'''
包括對數據的基本描述,percentiles參數是制定計算多少的分位數表(如1/4分位數、中位數,默認爲1/2);
T是轉置,轉置後更方便查閱
'''
explore['null'] = len(data) - explore['count'] #describe()函數自動計算非空數值,需要手動計算空值數
explore = explore[['null', 'max', 'min']] #從描述數據中篩選出空值、最大值、最小值
explore.columns = [u'空值數',u'最大值',u'最小值'] #表頭重命名
'''
這裏只選取部分探索結果。
describe()函數自動計算的字段有count(非空值數)、unique(唯一值數)、top(頻數最高者)、
freq(最高頻數)、mean(平均值)、std(方差)、min(最小值)、50%(中位數)、max(最大值)
'''
explore.to_excel(resultfile) #導出結果
#coding:utf-8
#數據清洗,過濾掉不符合規則的數據
import pandas as pd
datafile = './data/air_data.csv' #航空原始數據,第一行爲屬性標籤
cleanedfile = './tmp/data_cleaned.xls' #數據清洗後保存的文件
data = pd.read_csv(datafile, encoding='utf-8') #讀取原始數據,指定utf-8編碼(需要用文本編輯器將數據轉換爲utf-8編碼)
data = data[data['SUM_YR_1'].notnull() * data['SUM_YR_2'].notnull()] #票價非空值才保留
#只保留票價非零的,或者平均折扣率與總飛行公里數同時爲0的記錄。
index1 = data['SUM_YR_1'] != 0
index2 = data['SUM_YR_2'] != 0
index3 = (data['SEG_KM_SUM'] == 0) & (data['avg_discount'] == 0) #該規則是“與”
data = data[index1 | index2 | index3] #該規則是“或”
data.to_excel(cleanedfile)
#coding:utf-8
#標準差標準化
import pandas as pd
datafile = './data/zscoredata.xls' #需要進行標準化的數據文件
zscoredfile = './tmp/zscoreddata.xls' #標準化後的數據存儲路徑文件
#標準化處理
data = pd.read_excel(datafile)
data = (data - data.mean(axis=0))/(data.std(axis=0)) #簡單的語句實現了標準化變換,類似的可以實現任何想要的變換
data.columns = ['Z'+ i for i in data.columns] #表頭重命名 列表解析
data.to_excel(zscoredfile, index=False) #數據寫入
#coding:utf-8
#K-Means聚類算法
import pandas as pd
from sklearn.cluster import KMeans #導入均值聚類算法
inputfile = './tmp/zscoreddata.xls' #待聚類的數據文件
k = 5 #需要進行的聚類類別數
#讀取數據並進行聚類分析
data = pd.read_excel(inputfile) #讀取數據
#調用K-means算法,進行聚類分析
kmodel = KMeans(n_clusters=k, n_jobs=1) #n_jobs是並行數,一般等於CPU數較好
kmodel.fit(data) #訓練模型
print(kmodel.cluster_centers_) #查看聚類中心
print(kmodel.labels_) #查看各樣本對應的類別
參考自:《python數據分析與挖掘》 --張良均