基於R語言的航空公司客戶價值分析

平醬發表於2020-05-14

分析航空公司現狀

1.行業內競爭

民航的競爭除了三大航空公司之間的競爭之外,還將加入新崛起的各類小型航空公司、民營航空公司,甚至國外航空巨頭。航空產品生產過剩,產品同質化特徵愈加明顯,於是航空公司從價格、服務間的競爭逐漸轉向對客戶的競爭

2.行業外競爭

隨著高鐵、動車等鐵路運輸的興建,航空公司受到巨大沖擊。

航空公司客戶資料說明

目前航空公司已積累了大量的會員檔案資訊和其乘坐航班記錄。

以2014-03-31為結束時間,選取寬度為兩年的時間段作為分析觀測視窗,抽取觀測視窗內有乘機記錄的所有客戶的詳細資料形成歷史資料,44個特徵,總共62988條記錄。資料特徵及其說明如下表所示。

案例目標

結合目前航空公司的資料情況,實現以下目標。

1、資料清洗
(1)資料分析,找出資料存在的問題(例如:異常值、缺失值),給出處理辦法
(2)使用R語言對資料進行處理,給出程式碼、對使用的函式進行說明
2、構建航空客戶價值分析的關鍵特徵
構建航空客戶價值分析的關鍵特徵(從44個變數中選擇出適合後期聚類的變數),選擇客戶價值分析模型,對模型進行解釋。
3、資料標準化
(1)資料標準化的目的是什麼?
(2)對於2中選出的變數進行標準化(程式碼)
(3)並將標準化後的資料存入檔案
(4)截圖(5分)
4.對資料進行聚類分群
(1)給出聚類演算法(程式碼+函式解釋)
(2)分析聚類結果,對客戶價值進行評價
(3)對結果進行視覺化表示,可選擇多種圖形進行表示
(4)給出營銷策略

實現過程

資料清洗

(1)資料分析,找出資料存在的問題(例如:異常值、缺失值),給出處理辦法

  • 通過對資料觀察發現原始資料中存在票價為空值,票價最小值為0,折扣率最小值為0,總飛行公里數大於0的記錄。票價為空值的資料可能是客戶不存在乘機記錄造成。
    處理方法:丟棄票價為空的記錄。
  • 其他的資料可能是客戶乘坐0折機票或者積分兌換造成。由於原始資料量大,這類資料所佔比例較小,對於問題影響不大,因此對其進行丟棄處理。
    處理方法:丟棄票價為0,平均折扣率不為0,總飛行公里數大於0的記錄。

(2)使用R語言對資料進行處理,給出程式碼、對使用的函式進行說明

#設定工作空間
setwd("D:/develop/R/workspace")
#讀取資料
datafile<-read.csv('./data/航空公司資料集.csv',header=T)
#查詢資料
View(datafile)
#選擇資料探索變數
col=c(15:18,20:29)
#輸出資料概覽
summary(datafile[,col])
#找出票價為缺失值的資料
na_index<-is.na(datafile$SUM_YR_1) | is.na(datafile$SUM_YR_2)
na_datafile<-datafile[which(na_index==1),]
#缺失值資料佔總資料的比例
nrow(na_datafile)/nrow(datafile) *100
#丟棄票價為空的記錄
#先識別觀測視窗第一年、第二年票價收缺失值所在的行,然後刪除;$符號表示中文“的”意思, “,”前面表示行,後面表示列。
delet_na = datafile[-which(is.na(datafile$SUM_YR_1) |
                             is.na(datafile$SUM_YR_2)),]
#檢視相應記錄及所佔比例
index<-((delet_na$SUM_YR_1==0 & delet_na$SUM_YR_2==0)
        *(delet_na$avg_discount!=0)
        *(delet_na$SEG_KM_SUM>0))
nrow(delet_na[which(index==1),])/nrow(datafile) *100
#丟棄異常的記錄
deletdata<-delet_na[-which(index==1),]
#儲存資料
write.csv(deletdata,'./tmp/cleanedfile.csv',row.names = FALSE)


構建航空客戶價值分析的關鍵特徵

LRFMC模型:將客戶關係長度L,消費時間間隔R,消費頻率F,飛行里程M和折扣係數的平均值C作為航空公司識別客戶價值的關鍵特徵記為LRFMC模型。
L;會員入會時間距觀測視窗結束的月數。
R:客戶最近一次乘坐公司飛機距觀測視窗結束的月數。
F:客戶在觀測視窗內乘坐公司飛機的次數。
M:客戶在觀測視窗內累計的飛行里程。
C:客戶在觀測視窗內乘坐艙位所對應的折扣係數的平均值。

#讀取資料
cleanedfile<-read.csv('./tmp/cleanedfile.csv',header = T)
#檢視欄位名
names(cleanedfile)
#選取6個相關屬性變數
LRFMC<-c('FFP_DATE','LOAD_TIME','FLIGHT_COUNT','SEG_KM_SUM','LAST_FLIGHT_DATE','avg_discount')
reduceddata<-cleanedfile[,LRFMC]
#儲存資料
write.csv(reduceddata,'./tmp/reducedfile.csv',row.names = FALSE)
#讀取資料
cleanedfile<-read.csv('./tmp/cleanedfile.csv',header = T)
#檢視欄位名
names(cleanedfile)
#選取6個相關屬性變數
LRFMC<-c('FFP_DATE','LOAD_TIME','FLIGHT_COUNT','SEG_KM_SUM','LAST_FLIGHT_DATE','avg_discount')
reduceddata<-cleanedfile[,LRFMC]
#儲存資料
write.csv(reduceddata,'./tmp/reducedfile.csv',row.names = FALSE)
#資料讀取
reducedfile<-read.csv('./tmp/reducedfile.csv',header = T)
#檢視資料欄位型別
str(reducedfile)
#因子型資料轉換為日期格式
reducedfile$FFP_DATE<-as.Date(reducedfile$FFP_DATE)
reducedfile$LOAD_TIME<-as.Date(reducedfile$LOAD_TIME)
reducedfile$LAST_FLIGHT_DATE<-as.Date(reducedfile$LAST_FLIGHT_DATE)
#新增L和R  L為離當前時間的入會月數 R為離當前時間的最近坐飛機的時間
reducedfile<-transform(reducedfile,L=difftime(LOAD_TIME,FFP_DATE,units = 'days')/30,
                       R=difftime(LOAD_TIME,LAST_FLIGHT_DATE,units = 'days')/30)
#檢視概要
summary(reducedfile)
#刪除缺失值 na.omit為刪除所有包含缺失值的行
reducedfile<-na.omit(reducedfile)
#摘取有用的資料 並對指標進行重新命名
transformeddata<-reducedfile[,c('L','R','FLIGHT_C','SEG_KM_SUM','avg_discount')]
colnames(transformeddata)<-c('L','R','F','M','C')
#儲存資料
write.csv(transformeddata,'./tmp/transformedfile.csv',row.names = FALSE)

資料標準化

(1)資料標準化的目的是什麼
五個特徵的取值範圍資料差異較大,資料標準化可以消除資料量級對資料帶來的影響。
(2)對於2中選出的變數進行標準化(程式碼)

#資料讀取
transformeddata<-read.csv('./tmp/transformedfile.csv',header = T)
#資料標準化
zscoreddata<-scale(transformeddata)
#欄位重新命名
colnames(zscoreddata)<-c('ZL','ZR','ZF','ZM','ZC')
#檢視錶轉化後的資料
head(zscoreddate)

(3)並將標準化後的資料存入檔案

#儲存標準化後的資料
write.csv(zscoreddate,'./tmp/zscoredfile.csv',row.names = FALSE)

(4)截圖

對資料進行聚類分群

(1)給出聚類演算法(程式碼+函式解釋

#資料讀取
inputfile<-read.csv('./tmp/zscoredfile.csv',header = T)
#聚類分析
result<-kmeans(inputfile,5)
#結果輸出 cluster表示各類別編號 center表示各類的中心
type<-result$cluster
centervec<-result$centers
#檢視類別分佈
table(type)
#檢視類別中心
centervec

(2)分析聚類結果,對客戶價值進行評價


基於特徵描述,定義五個等級的客戶類別:重要保持客戶,重要發展客戶,重要挽留客戶,低價值客戶。每種客戶類別的特徵如圖所示。

客戶群1,R最大已經很久沒有登機了,同時F、L、M、G最小,也就是說這個客戶極可能是折扣率很低的時候才選擇坐飛機,屬於低價值客戶。
客戶群2,公里數M、登機的頻次F比較高,最近登機的時間間隔R以及折扣C比較低,這樣的客戶是重要保持客戶。
客戶群3,入會時間L最長,但是距最近登記時間間隔R比較短,折扣率C比較低,公里數M和頻次F也比較低,屬於重要挽留客戶。
客戶群4,儘管公里數M和頻次F比較小,但是入會時間L和最近登機的間隔R很短,同時折扣率C最高,屬於重要發展客戶。
客戶群5,R、F、L、M、C五個指標都很小,屬於一般客戶。

(3)對結果進行視覺化表示,可選擇多種圖形進行表示

雷達圖:
①設定各個變數的取值範圍,即最大值和最小值
②設定準備繪圖指標型別的資料
③把變數取值範圍和資料組合成為新的資料集
④進行繪圖

#繪製雷達圖
#匯入資料包
library(fmsb)
#設定各變數的最大值最小值
#centervec為矩陣物件,2表示列操作,max/min為處理資料函式
max<-apply(centervec,2,max)
min<-apply(centervec,2,min)
#把變數取值範圍和資料組合成為新的資料集
df=data.frame(rbind(max,min,centervec))
#繪製雷達圖
#seg=5表示分為五個等分,plty=1表示使用實線,vlcex為座標字型大小
radarchart(df=df,seg=5,plty=1,vlcex=0.7)

綠線代表的客戶群1屬於低價值客戶。
深藍線代表的客戶群2是重要保持客戶。
紅線代表的客戶群3屬於重要挽留客戶。
黑線代表的客戶群4屬於重要發展客戶。
淺藍線代表的客戶群5屬於一般客戶。

(4)給出營銷策略

  • 會員的升級與保級:航空公司可以在對會員升級或保級進行評價的時間點之前,對那些接近但尚未達到要求的較高消費客戶進行適當提醒甚至採取一些促銷活動,刺激他們通過消費達到相應標準。這樣既可以獲得收益,同時也提高了客戶的滿意度,增加了公司的精英會員。
  • 首次兌換:採取的措施是從資料庫中提取出接近但尚未達到首次兌換標準的會員,對他們進行提醒或促銷,使他們通過消費達到標準。一旦實現了首次兌換,客戶在本公司進行再次消費兌換就比在其他公司進行兌換要容易許多,在一定程度上等於提高了轉移的成本。
  • 交叉銷售:通過發行聯名卡等與非航空類企業的合作,使客戶在其他企業的消費過程中獲得本公司的積分,增強與公司的聯絡,提高他們的忠誠度。
原創:平醬
部落格主頁:https://www.cnblogs.com/p1ng/
歡迎轉載,轉載請註明出處。
出錯之處,敬請交流、雅正!
創作不易,您的 " 推薦 " " 關注 " ,是給我最大的鼓勵!

相關文章