2020华为云大数据挑战赛(knn+QuickBundles+LGB、 利用folium可视化、海运ETA预测)
比赛结束,由于复现出现了一些失误(现在想来完全可以避免,也算是踩坑了=。=)没能去决赛,这里还是进行一些简单总结。
数据特点以及难点:
测试集数据采样点紊乱,跟训练集不同,导致很多模型达不到理想效果。
训练集给的路由比较脏,测试集也几乎只有起始和终点的路由,中间路由都不干净。
预处理部分:
(1)将'loadingOrder','carrierName',"longitude","latitude","vesselMMSI"完全相同的重复数据删除,并按照订单号和时间进行排序
(2)去除速度和方向为异常的数据(保留速度在0到60之间的,方向在0到36000之间的)
(3)对训练集数据进行采样,采样间隔为5分钟,减少数据冗余
(4)针对换船的数据,出现换船后就只保留换船后的数据
(5)对Port表进行清洗:只保留训练集出现过的港口名,港口重名消歧,港口位置修正
(6)重构训练集的路由,以便后面可以使用全量数据进行学习
(7) 生成测试集和训练集的路由与订单号对应的两张表,方便后面进行调用
模型思路:
将预测船到达目的港时间的任务转换成3个子任务
1.预测船当前行驶航段(如A-B-C, 当前处于A-B):
该步利用历史航线数据生成标签,采用LGB和KNN两个模型对当前行驶信息进行分类,将test本身作为unknown一起进行训练,以减少数据量小的冷启动问题带来的误差
2.对历史航段聚类并预测船当前航线属于哪一类别(实际应用应提前聚类以达到实时预测效果)
利用QuickBundles对历史航线信息进行聚类,knn判断现在的航线属于哪一类别
可视化可以看到实际的一个聚类效果:
图中为某一相同起始与终止港下的数据,蓝色为测试集,黄色为聚类后与蓝色为同类的, 红色为被分类为其他类别的数据。
3.构建LGB回归模型对船的到港时间进行预测
利用速度,方向,经纬度信息,距离,时间等信息作为特征构建模型,对到港时间进行预测。
贴个代码连接https://github.com/aBadCat/BDC2020, jupyter里面的注释写的比较详细。
总结:
本次比赛复赛存在大量leak泄漏,导致根本无法判断模型好坏还是数据好坏,我们发现的还比较晚,害。
这次高校赛本来初赛rank10, 复赛改了思路以为稳进决赛了,但是确实复赛暴露出大量的问题,赛题本身数据大量泄漏,导致后面,害一言难尽,两个月的比赛还不如写写论文,参加的人心里都懂,也算是比较难受的经历吧。