分析航空公司现状
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) 对结果进行可视化表示, 可选择多种图形进行表示
雷达图:
1设置各个变量的取值范围, 即最大值和最小值
2设置准备绘图指标类型的数据
3把变量取值范围和数据组合成为新的数据集
4进行绘图
- # 绘制雷达图
- # 导入数据包
- 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/
来源: https://www.cnblogs.com/p1ng/p/12886773.html