2016“数据引领 飞粤云端”广东航空大数据创新大赛极客奖: linxx熊团队
广东航空大数据创新大赛中,林谢雄同学分享了比赛成果。首先从数据理解开始谈起,接着介绍了特征,重点对模型进行了说明,最后对算法应用点进行了解释。让我们一起来了解下。
以广州白云机场真实的客流数据为基础,每天数万离港旅客在机场留下百万级的数据记录,通过数据算法来构建客流量预测模型。
数据理解
赛题提供了6个数据表,WiFi人数表、排班表、WiFi坐标表、登机口区域表、案件表、行程表。我将几个表的重要性由图中的星星表示,可以根据数据表提供的信息把数据表分为历史信息数据,当天信息数据,以及固定信息三部分。
- 历史信息表:WiFi人数表,安检表,旅客进入-离开机场的行程表;
- 当天信息表:排班表;
- 固定信息表:登机口区域表,WiFi坐标表。
对Wifi人数表的数据进行分析,查看数据在预测日期之前的变化趋势情况,以便于对需要预测的结果有比较直观上的理解。通过大数据可视化,可以得到类似下面两幅图这样各个区域内WiFi的连接人数随时间变化的情况。
图中给出了E1-1A区域WiFi连接人数的平均数、方差随日期的变化趋势,这样一来,对WiFi连接人数随日期变化有了直观理解,其次对哪些WiFi点的波动大小也很容易定位,这是以日期为单位。
上图是以E1-1A区域作为示例提供了对WiFi人数随小时变化趋势,每个区域可以生成类似趋势图,这样对一天中人数的高峰情况,以及每天不同的变化有比较直观的理解,可以知道每一天在差不多的时段内,变化趋势是相对一致的,那么历史的均值信息将会很有用。
特征介绍
通过对历史数据的分析,可以知道WiFi连接人数每天随时间段的变化趋势很相似,因此,选取当前时段历史的均值作为模型的特征。最后的模型中基于历史信息的窗口特征包括两类:
(1)WiFi时刻窗口特征:前1~10天,14天,21天,28天WiFi在各10分钟均值,极差信息;
(2)WiFi累计窗口特征:前1~10天,14天,21天,28天WiFi一整天的均值信息。
比赛过程中提取了几百个关于历史信息的特征,但大部分对预测效果作用不大,而上述两个对预测结果的准确性起到了比较大的作用。
对当天信息进行特征的提取是基于航班排班信息进行提取的,其中包括:
(1)登机口时间段特征:当前10分钟段前半个小时,前一个小时,后半个小时,后一个小时,两个小时的航班数;
(2)登机口类one-hot编码特征:当前时段登机口的后一个小时、两个小时的航班数,这两类特征对于登机口附近的WiFi预测结果的准确性起到了重要的作用。
由于数据表并没有直接给出WiFi对应的登机口,只是给出了登机口和区域对应信息,这样便需要做WiFi和登机口的关联。开始以为这样引入场外因素,属于不合理的,但是看到前面有质的提升,猜到应该使用了场外因素,因此比赛的最后几天开始进行该方面的工作,使用了两种方式:
1)对照高德地图,通过工程制图坐标与经纬度对应找到WiFi在地图上的位置,并以登机口为圆心,寻找半径为20米范围内WiFi,认为这两者有关联;
2)以10分钟为单位,生成144维向量,其中登机口的向量元素表示登机口对应时间段的航班数,WiFi的向量元素表示对应时间段的连接人数,两个向量求余弦相似度,排序取最相关的。
其中第一种做法就是前面提到引入场外因素,因为用到了地图数据信息,不过该做法得到的效果并不好,因此最后一天想出了第二种做法,该做法是利用历史信息做关联,并没有使用到赛题外的数据信息,这下可以放心用了,同时,该方法效果也比较好,真正找到了登机口有影响的WiFi。
找到登机口与WiFi对应关系,提取WiFi点对应时刻前后半小时这一个小时的航班信息特征。
模型介绍
流程
比赛过程中使用了三个算法模型:
1. 按最优叶子分裂的GBDT模型。大部分开源的GBDT实现一般是按层分裂,因此在分裂方式上对普通的GBDT模型进行改进,该模型在初赛阶段效果优于sklearn的GBDT模型1W多,不过在复赛用Map-Reduce实现的效果不如平台上面的,就没有使用。
2. 线性回归(平台),使用机器学习平台上的线性回归模型。
3. GBDT(平台),使用机器学习平台上的GBDT回归模型。
上图为平台11月11号预测模型流程,其中,线性回归取不同少量特征,GBRT使用不同的种子、参数、特征集经过训练得到的特征的初步融合,GBRT这么操作的目的是省去调参的苦力活,一般模型不同种子或者特征集合预测的结果融合后往往会逼近与效果最好的那个。最后,将GBRT结果和LR进行加权平均作为结果提交。
WiFi与登机口关联关系
官方给出登机口与区域的对应关系,必须对应到特定的WiFi,所以必须将WiFi与登机口关联起来,具体有以下想法:
- 基于位置寻找关联关系;
- 基于历史数据记录,生成余弦相似度,寻找关联关系;
- 找到登机口与WiFi对应关系,提取WiFi点对应时刻前后半小时一个小时的航班信息特征。
分区训练
由于航班信息的特征对于登机口关联的WiFi有影响,但对大部分非关联的WiFi作用是不大的,因此需要进行分区训练和预测,最后再进行合并,该方法在训练集测试成功,比结果提升了5W,但是由于平台资源有点卡,该方法比较结构比较庞大,需要的资源没提交成功分区的结果,有点遗憾。
上图是分区模型中3楼有登机口关联WiFi的模型流程。
分区的流程和整体的大部分类似,不过不同的分区快使用不同的训练方式和特征:
(1)没有登机口区域使用时间窗口特征;
(2)一楼使用目标值-历史均值做label,一楼WiFi-登机口航班特征训练;
(3)三楼使用时间窗口特征和三楼WiFil-登机口航班特征。
模型误差
对比模型预测结果与真实值如图所示,图中圈的大小表示误差的大小,可以发现有登机口的区域预测比较差,这就是模型分区那块提到的问题,整体训练,均值特征把航班特征覆盖了,使得航班信息影响变小,因此,分区训练是对该问题很好的解决。
此外,还有其他问题诸如:
(1)提交的结果里面有空值,这导致没必要的误差到一万左右,提交之前忘记检查了。
(2)T1区域预测的不太好,主要是因为T1的相关数据信息相对少,没有提到和T1很相关的特征,时间允许的话,可以多改进下T1的预测结果。
(3)一楼误差登机口区域偏大,合在一起训练,导致航班信息特征弱化,而一楼登机口区域受航班信息影响较大,因而导致误差偏大,分区域出来训练效果变好;
(4)三楼登机口WiFi受航班信息影响不大,三楼登机口附近的WiFi比较多,因此航班对每个WiFi的影响弱化,同时三楼登机口的结构和一楼差别很大。
算法应用点
排班优化
根据排班表可以给出当前各个时段的预测值,排班人员查看到可视化的图表,调整排班信息,预测值随即发生变化,排班人员可以选择一个合适的排班计划。
排班人员可以得到每个WiFi每个具体时刻的分布情况,点开某个WiFi即可看来该WiFi详细信息。
也可以查看小时段内一个小区域各个WiFi的连接情况。
得到整体人群分布随时刻变化情况,可以变成动图变化,也可以任意勾选时刻查看详细信息。可以根据右侧勾选时刻来选看某个时刻人流分布,也可以拖动滑动窗口,查看时序分布情况。
优化服务
根据上时段的安检表和旅客check_in信息表,配合航班信息表,实时计算下一时段人群流动情况,给机场服务提供实时信息。
广告位精准投放
根据人群分布,安排广告位,并根据人群分布情况进行广告排序。