文/纽约数据科学学院
大数据的应用无处不在,从“文化娱乐”到“职业发展”,再到今天的“交通运输”,大数据的分析与洞察总能带来商业社会巨大价值。本期数据侠KathrynBryant爬取了专业航旅点评网站的数据,通过特定的算法和分析,她惊奇地发现美国人可不会因为飞机准时起飞而给航空公司点赞,而且全美最舒适的飞机座位居然是一家廉价航空公司提供的。这就和DT君一探究竟吧~
“居安思危”的研究动机
航空业经济规模巨大,整个行业的好坏,不仅关乎从业者(飞行员、飞机工程师、地勤及空乘等),也与整个经济形势息息相关。据国际航空运输协会(IATA)年12月的统计显示,航空公司平均能从每位乘客处获得7.54美元(约合50元)的利润。
(注:图表数据来源IATA年12月发布的最新行业经济展望,原文数据为此前IATA发布的旧数据,故存一定差异)
IATA的数据展望显示,虽然航空业的利润在年达到亿美元左右的周期性高峰,但在年可能出现软着陆,净利润获将回落到亿美元左右,另预计将是航空业连续获盈的第八年,这表明航空业已具备抵抗产业结构性调整的能力。最大亮点则是,每位乘客为航空公司贡献7.54美元的利润。
作为美国的居民、飞行员的女儿和半个“空中飞人”,我对美国航空业特别感兴趣。IATA在上述同一篇文章中对各航空公司进行了分析,得出结论:“北美洲的航空公司目前财务业绩强劲。税后净利润将在明年达到历史新高的亿美元。该地区航空公司的净利润率也有望达到8.5%,平均利润为19.58美元/乘客。
虽然北美航空业表现强劲,但我们要学会“居安思危”。在保持追赶乘客需求、确保持续增长和在各行业中保持领先水平之时,北美航空业一定存在一些不足之处,或者是一些警示。延续行业增长和领先的第一步就是慢速乘客的需求,所以,对于我的项目而言,核心点就是发现航空乘客到底喜欢什么或是不喜欢什么。
数据准备
首先,我通过Skytrax这个网站来更好的研究哪些方面对乘客选择航空公司存在明确的影响。Skytrax网站专门收集乘客对航班运行中的几乎每一个航空公司的评论。大体对航空公司的态度结构如下:
为了将这些数据收集下来并转化为可用于分析的格式,我用Selenium写了一个Python脚本,相关代码可以在Github页面上找到。
Skytrax网站上有几百个航空公司的评论数据,我从中选取了北美最大的11家航空公司数据:阿拉斯加航空(AlaskaAirlines)、Allegiant航空、美国航空(AmericanAirlines),达美航空(DeltaAirlines)、Frontier航空,夏威夷航空(HawaiianAirlines)、捷蓝航空(JetBlueAirways)、西南航空(SouthwestAirlines)、Spirit航空、美国联合航空(UnitedAirlines),维珍美国航空(VirginAmerica)。
我总共抓取了约条评论数据,数据中包含的变量具体如下:
航空公司:乘客点评的航空公司
总体得分:总体评价打分,满分10分
作者:评论者姓名
日期:评论日期
评价:乘客的评论内容
飞机:机型
出行类型:商务/情侣/休闲/家庭休闲/个人休闲
客舱类型:公务舱、经济舱、头等舱、高级经济舱
航程:出发地和目的地(例如:芝加哥至波士顿)
出行年月:对于存在问题的航行所记录的年月日期
座位舒适度:5分为满分
客舱服务:5分为满分
机上食物:飞机上食品和饮料的质量,5分为满分
机上娱乐:飞机上的电影、wifi等质量,5分为满分
地面服务:飞行前的地面服务体验,5分为满分
性价比:是否觉得值回票价,5分为满分
推荐:是否会向其他人推荐该航空公司(是或否)
一个值得注意的细节是,以上不同方面的评分并非必填项,所以,乘客进行评分时,未必每项都填。这意味着,每一个总评分包含的分项可能是不同的。这对项目在工程和分析两方面都会造成影响,在工程方面,由于每条评分包含不同分项,因此,选用了Selenium工具而非速度更快的PythonScrapy;在分析方面,如果乘客没有对每方面都进行评分,则该分项记录中会出现缺失值(NAs),这对寻找问题的答案会产生影响。
怎样读懂乘客的心?
在座位舒适度、客舱服务、食物和饮料、娱乐以及地面服务这些方面,哪些在乘客对航空公司的评分中占最重要的分量呢?
这是一个经典的机器学习问题——易问难答。困难在于预测变量之间潜在微妙的相互作用。
为了在我的项目中解决这个难题,我决定使用随机森林(RandomForests)的方法;这种方法无需变量满足正态分布假设,而其他很多机器学习方法(例如线性回归)都需要变量满足正态分布假设。
由于评论数据的偏态性,这里所涉及的几乎所有预测变量(座椅舒适度、客舱服务、食品和饮料、娱乐、地面服务)都不是正态分布的,而是呈现双峰型分布,峰值分别在分值1和5附近。
我使用R语言“随机森林包”中的Randomforest()函数,该函数采用非参数Breiman随机森林算法来产生回归模型。
这个模型通过自变量之间的比较,来预测每个自变量对于应变量的不同重要程度。通过这个算法,我挑出了对于总体航行评分最重要的五个自变量,具体算法的相关细节点击此处。
下图是根据randomforest()函数算出来的各个自变量重要性图。
需要注意的是:以上的数据结果是基于我自己设定的一个数据集,在该数据集中,我将所有的缺失值都设置为3分。这样赋值所基于的假设是:如果乘客没有对某项进行评分,那或许是因为他对该项目的好坏持犹豫态度,基于此,我们赋予一个居中值3(分值范围为1-5)。但这仅仅只是一个假设,可能会与真实结果存在差异,因此,我又做了以下两件事情:
1.用同样的算法,对三个不同版本的数据集进行运算:第一个是将缺失值赋值为3分;第二个是将缺失值赋值为该分项评分的平均值;第三个是只选择所有分项都有评分的数据。上图的结果来自第一个版本的数据集计算结果,但通过计算发现,不同版本数据集的计算结果是一样的。由此可以认为,根据Breiman算法的计算结果,地面服务在总体评分中占据最重要的分量,位列其后的分别是座位舒适度、客舱服务、食物和饮料以及娱乐。
2.分析所有评论中包含的不同变量比例。人为输入缺失值难免使结果产生偏差,但如果不将这些评论包含在内,可能会遗漏一些潜在且富有价值的信息。在这个案例中,缺失趋向于陷入非随机缺失(MissingnotatRandom,MNAR),随机缺失值并非呈随机分布,也就是说变量缺失情况与该变量的重要程度是有关联的。那些有大量缺失值的变量的重要性似乎比那些缺失值较少的变量重要性要低。为了证明这一点,我对评论中各变量的缺失值进行了统计。
根据分析发现:几乎在每个总体评分中,每位乘客都会对客舱服务和座位舒适度两个方面进行打分,而对地面服务这一项目进行评分的人数大概只有55%左右。
数据洞察发现:客舱服务和座位舒适性这两方面是每位乘客评分时都会打分的,因此,这两个方面是乘客最为重视的。通过Breiman随机森林算法可知,这两方面在总体评分中的重要性分列二、三位;所以,我们可以认为,这两方面对乘客总体评分的影响是最大的。
此外,虽然地面服务似乎是最常被忽略的方面之一(可能对一般客户来说最不重要),但在总体评分中,我们可以发现,只要乘客对此项进行了打分,那其对总分的影响往往很高。也就是说,绝大多数人并不关心地面服务好坏,但如果有