船运到达时间预测比赛–赛题介绍
赛题介绍
在企业全球化业务体系中,海运物流作为其最重要的一项支撑。其中,船运公司会和数据供应公司进行合作,对运输用的船通过GPS进行定位以监控船的位置;在运输管理的过程中,货物到达目的港的时间是非常重要的一项数据,那么需要通过船运的历史数据构建模型,对目的港到达时间进行预测,预测时间简称为ETA(estimated time of arrival),目的港到达时间预测为ARRIVAL_ETA(ATA)。
本次大赛提供历史运单GPS数据、历史运单事件数据、港口坐标数据,预测货物运单的到达时间,对应“历史运单事件”数据中EVENT_CODE字段值为ARRIVAL AT PORT时EVENT_CONVOLUTION_DATE的时间值。
比赛数据
大赛提供脱敏后的训练数据及测试数据,训练数据集包括:
- 历史运单GPS数据
- 历史运单事件数据
- 港口坐标数据
- 测试运单数据为不同运单、运输过程中的不同位置所构成,供选手测试对应的ETA时间。
- 货物运单在船运过程中,会产生大量的GPS运单数据,记录为“历史运单GPS数据”;
- 货物运单在船运过程中离开起运港、到达中转港、到达目的港等关键事件,记录为“历史运单事件数据”;
- “港口的坐标数据“为与运单船运相关的港口坐标信息。
数据表格:
列名 | 类型 | 说明 |
---|---|---|
loadingOrder | VARCHAR2 | 脱敏后的主运单,货物的运单编号,类似快递单号 |
carrierName | VARCHAR2 | 脱敏后的承运商名称,类似快递公司名称 |
timestamp | DATE | 时间,格式为:yyyy-MM-dd’T’HH:mm:ss.SSSZ,如2019-09-05T16:33:17.000Z |
船运到达时间预测比赛–论文调研
关注点
阅读论文需要注意的问题:
- 预测的对象是什么(轨迹,到达时间,目的地)?
- 正在使用哪种方法来估计系统的未来状态?(集体学习、机器学习、深度学习)采用的是什么样的解决方案?是将问题怎么转化的?
- 该方法可以预测多久? (一个小时之内还是更久,按时间片预测还是?)
- 预测准确度是多少? (预测的指标是什么)
- 是否考虑了数据可用性/质量以及如何考虑?(数据的来源以及数据预处理?)
- 这篇论文的创新点是什么?或者对自己有什么启发的地方?
即
- 预测对象
- 创新点
- 解决方案
- 算法
- 预测时间
- 预测准确度
- 指标
- 数据集
论文概述
船运方面的论文
Forecast of Marine Traffic Volume using Time Series Model
- 使用流行的时间序列模型估计未来的海上交通量。一种定量分析[8] arima模型
Vessel Destination and Arrival Time Prediction with Sequence-to-Sequence Models over Spatial Grid.[3]
- 预测对象 :预测船只的目的港和估计的到达时间
- 创新点 :将海域划分为一个空间网格,然后将其最近的运动表示为一系列代码,从中提取出其趋势。这些信息和船只的当前位置使我们可以预测直到到达目的地的未来运动。主要是轨迹预测。
- 解决方案 :一种基于序列到序列的方法,作为轨迹预测问题的扩展,该问题以一系列历史位置作为输入并返回一系列未来位置,用于确定到达港口和估计到达时间。本文的解决方案首先代表覆盖地中海的空间网格上的轨迹。然后训练序列到序列模型,以根据运动趋势和当前位置预测船只的未来运动。最后使用分布式体系结构模型和应用的负载平衡技术构建了解决方案,以实现高性能和可扩展性。
- 算法 :使用seq2seq模型预测将来的位置,系统将根据这些位置确定目标并估计到达时间。
- 预测时间
- 预测准确度
- 指标
- 数据集
Towards an approach for long term AIS-based prediction of vessel arrival times
这是一篇讲述解决方案的论文,无实验。
分为短期预测(一个小时之内)、长期预测(预测提前超过一个小时)
- 通过分析船舶运动模式进行短期预测–主要侧重于避免碰撞,因此重点是在不久的将来估算船舶位置,以支持转向决策,而实际目的地无关紧要
- 使用路由提取进行长期预测–估计轨迹或位置的时间间隔超过1小时需要隔离海道,将其与已知的船只轨迹进行比较,以确定最接近的匹配或异常。
- 组合方法的长期预测–船舶运动模式和海道提取相结合
所有长期预测都依赖于海道提取,然后再尝试估算船舶的目的地。
四个需要解决的不同目标:数据质量问题,数据量和分布式数据挖掘,行为模式的发现和包含以及天气数据的融合。
- 数据的质量问题
- 结合气象数据
- 大数据集的航路点/路线提取
- 通过发现和包含行为模式来提高准确性。
存在的问题
数据不完全可靠:误以为噪声是错误的。
- 解决方案:进行3次的异常检查、数据预处理
- 第一个方法是立即丢弃超出范围的接收数据,例如纬度低于-90°且高于90°且经度低于-180°且高于180°。
- 第二个应该删除范围内的数据,但要指出不可行的轨迹。
- 最后一项检查是为数据源分配可靠性,并在可靠性高于或低于所需阈值时决定是否存储或拒绝数据。
历史数据量比较庞大(这个还有待商议,DBSCAN是发现航路点/“热点区域”的首选算法。随着数据量超过存储容量,必须特别考虑与分布式数据挖掘和群集有关的替代方法。)
查看船只的历史数据以发现行为模式,以及它们对偏离通常航道的可能性的影响。
每个模式都是一组航行属性,例如该区域的平均速度,转弯速率和平均行程持续时间。通过将船只与发现的模式之一相关联,可以构造一条新的预测路线,并将该路线的最终位置用于到达时间预测算法。
思路总结:首先处理获取到的数据的质量问题,然后然后将好的数据和气象数据相融合,接着对现有数据集执行行为模式分析,以发现每个船只在选择使用哪条路线时的偏好。
Real-time Destination and ETA Prediction for Maritime Traffic
预测对象:预测船只的目的港(分类)和估计的到达时间(回归)
创新点
解决方案
算法 :前馈神经网络预测到达时间(回归问题)
预测时间
预测准确度
指标
数据集
特征选取:坐标,时间戳,航向,航向,速度和出发和到达端口的编码值、目标端口名称及其经度和纬度坐标
【轨迹,速度,天气条件和其他外部因素通常会对到达最终目的地所需的实际轨迹和时间产生重大影响。
使用了三个附加功能,例如目标端口名称及其经度和纬度坐标。为了预测剩余的行程时间,我们利用了前馈神经网络。】
- 对于给定的用例,输入层从数据集中接收初始数字特征,例如坐标,时间戳,航向,航向,速度和出发和到达端口的编码值,以及我们发现的对如上所述的回归任务有用的特征。
- 提取每个时间戳记的持续时间,可以实时预测
- 可以思考的点:
- 建议可以使用LSTM进行离线预测。 还可以针对每种特定的船舶类型训练许多单独的LSTM模型,以捕获其独特的行为。 所有这些模型的输出都可以馈送到完全连接的层,以预测将来的n时间戳。
- 可以使用聚类方法来捕获以前看不见的端口并提高准确性。受序列到序列模型的启发,我们还计划通过预测船舶的下一个N时间戳来进一步提高ETA预测,以不仅获得对ETA的了解,而且还可以了解这些N个下一步骤的轨迹行为。
Predicting Destinations by Nearest Neighbor Search on Training Vessel Routes
- 预测对象:预测目的地港口和船只行程的到达时间
- 解决方案:使用最近邻居搜索来查找更接近查询AIS点的训练路线。 还包括特别的改进,例如一种避免在一个查询路由内频繁更改预测端口并通过使用遗传算法自动进行参数调整的方法。
- 【7】
预测对象:估计船只到达港口区域的时间
方法:前馈神经网络预测到达时间
预测时间:
预测准确度:
数据:
陆运方面ETA论文
When Will You Arrive? Estimating Travel Time Based on Deep Neural Networks
- 模型框架:
Learning to Estimate the Travel Time
- 用规则模型计算 ETA 是此前地图行业通用做法之一。即分别计算各段路的行驶时间,全部加起来再根据红绿灯时间做一个偏移修正。
考虑到路段的通行状态每时每刻都在动态变化,一个比较实际的做法是利用最新的历史数据(比如,刚刚过去的 5 分钟)来估计路段的实时通行时间,而把历史平均通行时间作为默认值来填充信息缺失的路段(若一个路段在最近没有滴滴车辆经过,此时它的通行状态是未知的)。
从类型上看,ETA 是一个很典型的回归问题
将 MAPE(mean absolute percentage error)选择为目标函数
在业界比较流行的模型,Tree Based model 和 Factorization Machine
将深度学习应用到 ETA 上。这一 ETA 模型的核心思路是 global model + recurrent model。其中 global model 的作用类似于上一代模型,针对行程的全局信息进行学习;而 recurrent model 则专注于对 link 序列等局部细节的学习。
WD 模型的大体结构: 其 Wide 分支其实和 FM 是源出一脉的,对特征进行二阶交叉,对历史数据拥有一定的记忆功能。而它的 Deep 分支就是传统的多层感知机结构,有较好的泛化能力。
Recurrent model 的选择则比较丰富,不仅仅限于 RNN(包括变种 GRU、LSTM、SRU 等),还可以是一维卷积 CNN,或者是纯粹的 Attention model。 这一模型总共有三类特征: - Dense feature:行程级别的实数特征,比如起终点球面距离、起终点 GPS 坐标等。
- Sparse feature:行程级别的离散特征,比如时间片编号、星期几、天气类型等。
- Sequential feature:link 级别的特征,实数特征直接输入模型,而离散特征先做 embedding 再输入模型。注意,这里不再是每个行程一个特征向量,而是行程中每条 link 都有一个特征向量。比如,link 的长度、车道数、功能等级、实时通行速度等。
其中,Wide 和 Deep 模块对行程的整体信息进行建模,而 Recurrent 模块对行程的轨迹进行细致的建模,可以捕捉到每条 link、每个路口的信息。在最终汇总时,Wide 模块通过仿射变换把输出变到合适维度,Deep 模块直接把顶层 hidden state 作为输出,而 Recurrent 模块将 LSTM 的最后一个 hidden state 作为输出。三个模块的输出向量被拼接起来,进入最终的 Regressor 进行预测,得到 ETA 值。全部参数都基于 MAPE loss 做梯度下降来训练。
整个系统的架构 最底层为数据源,分别是地图信息、GPS 轨迹、订单记录和其它必要的附加信息。然后,原始数据经过特定的处理,变为模型可用的格式,用于训练模型。注意这里有一个小分支,表示在训练完成之后还单独取出了一小批 up-to-date 数据进行 finetune,使得模型更倾向于最新收集的数据。
论文总结表格:
论文 | 算法 |
---|---|
单元格 | 单元格 |
单元格 | 单元格 |
存在的挑战
- 存储和处理大数据,以及处理糟糕的数据质量和丢失的值[5]
- 怎么估计一条路径的旅行时间?一种是整条路径进行总体估计,一种是分段进行估计,然后最后对他们求和来获得总的旅行时间
- 多种复杂因素:交通受到空间的影响相关性,时间依赖性和外部因素。
参考文献
- Jeong, Ranhee, and R. Rilett. “Bus arrival time prediction using artificial neural network model.” Proceedings. The 7th International IEEE Conference on Intelligent Transportation Systems (IEEE Cat. No. 04TH8749). IEEE, 2004.
- 网址:https://cloud.tencent.com/developer/news/321755
- Duc-Duy Nguyen, Chan Le Van, and Muhammad Intizar Ali. 2018. Vessel Destination and Arrival Time Prediction with Sequence-to-Sequence Models over Spatial Grid. In Proceedings of the 12th ACM International Conference on Distributed and Event-based Systems (DEBS ’18). Association for Computing Machinery, New York, NY, USA, 217–220. DOI:https://doi.org/10.1145/3210284.3220507
- Nguyen, D. D., Le Van, C., & Ali, M. I. (2018, June). Vessel destination and arrival time prediction with sequence-to-sequence models over spatial grid. In Proceedings of the 12th ACM International Conference on Distributed and Event-based Systems (pp. 217-220).
- Dobrkovic, A., Iacob, M. E., van Hillegersberg, J., Mes, M. R., & Glandrup, M. (2016). Towards an approach for long term AIS-based prediction of vessel arrival times. In Logistics and Supply Chain Innovation (pp. 281-294). Springer, Cham.
- Bodunov, O., Schmidt, F., Martin, A., Brito, A., & Fetzer, C. (2018, June). Real-time Destination and ETA Prediction for Maritime Traffic. In Proceedings of the 12th ACM International Conference on Distributed and Event-based Systems (pp. 198-201).
- Roşca, V., Onica, E., Diac, P., & Amariei, C. (2018, June). Predicting Destinations by Nearest Neighbor Search on Training Vessel Routes. In Proceedings of the 12th ACM International Conference on Distributed and Event-based Systems (pp. 224-225).
- Forecast of Marine Traffic Volume using Time Series Model
- Travel Time Estimation of a Path using Sparse Trajectories
船运到达时间预测比赛–数据集思考
比赛中数据存在的问题
历史运单GPS数据中可能会有异常的GPS:
- GPS坐标在陆地,或者有些港口是内陆的港口。
- GPS漂移:两点距离过大,超过船的行驶能力。
- GPS在部分地区的比较稀疏(比如南半球、敏感海域)。
- 最后的GPS点可能和港口的距离较远(比如塞港时,或者临近目的港时已无GPS数据)。
- speed字段之后数据可能会有少量缺失(如GPS设备短暂异常)。
历史运单事件数据
- 数据大多手工录入,大多不准确,可以考虑作为辅助数据
港口坐标数据
- 一个港口由于客观原因可能会有多个NAME表示,且不按五位编码表示
- 重点为NAME和经纬度坐标
- 0.831116,-0.386592为不完整数据,如要使用,需要自己补充
清洗数据需要思考的问题
- 出发港与目的港是否正确,到港时间用什么规则?哪类数据可以丢弃?
- 训练数据中有很多缺失值和异常值,而且港口名格式不统一,到港时间不稳定,船速与经纬度的变化有可能不一致,因此需要根据一些合理可靠的信息来判断真正的到港时间。
- 在原始数据集中,数据缺失较多还含有一些不合理的值,所以我们可以考虑是否利用这些数据集(坏样本对模型影响很大),若利用则应该怎么进行填充,以及用多少。
- 删除掉信息缺失较多的数据,以及去掉一切不合理的数据,或者做一些填充
- 数据清洗,比如说速度在走经纬度不走、经纬度在走速度为0、一个港口有多个名字、实际航线和路由不符合等等
- 比赛提供的数据量非常大,但其中夹杂着重复数据以及缺失值、异常值。仅使用了历史运单GPS数据集进行训练,且只保留了运单号、时间戳、经纬度字段的数据
- 对最终船的状态需要做一些具体判断,比如:实际上有部分船速度为0,但仍有记录,具体构建方法可以自己再斟酌一下。
- 清洗数据方面可以从根据运单聚合后的航行平均速度、数据空值等方面进行考虑
- 比如说经纬度变化而速度为0、方向异常,训练集与测试集也可以尽量保留相同清洗处理,同时要保证测试集运单号没有减少。
总结:
数据标签需要考虑的问题
- 需要考虑用哪些数据来打标,还可以尝试不同的打标方式,以及分析数据集中可能存在的情况,比如:测试集给的路由是A到B,但实际上可能有中间港口C,而测试集实际离港时间给的C,打标时需考虑这种问题。
- 目前最优模型使用的就是baseline提供的打标方式;我们也尝试过使用运单最后一条的时间减去当前GPS样本的时间作为标签。最后预测的时候就用当前GPS时间加上预测的值,作为最终结果。但是这种打标方式对于groupBy后的统计特征就很不友好,后边还会提取其它特征试试。
- 标签的方法可以直接参考baseline,但是为了方便计算得分,可以转成以小时为单位的label。
基线选取
baseline:
- lgb
- 一个快速的,分布式的,高性能的基于决策树算法的梯度提升框架。可用于排序,分类,回归以及很多其他的机器学习任务中。梯度增强决策树(Gradient Boosting Decision Tree, GBDT)的一种框架,使用GOSS和EFB将新的GBDT实现称为LightGBM。
- 初赛Baseline
- Baseline只取前1000000行数据作为训练
- 由于采用聚合运算,因此最后测试结果相同订单的预测时间相同
- 选取经纬度、速度、方向做简单特征
- 模型采用lightgbm+kf作为模型训练
- 本Baseline旨在完成一个完整的流程,具体特征、label的选择需要其本人自己改进
- 数据放在’data/‘文件夹下即可
- 经测试得分176495.2554,误差很大
- ann
- 深度学习
特征选取需要思考的问题
- 平均速度、距离等都是可以考虑的重要特征。
- 尝试构建一些距离特征,平均速度,平均加速度等特征。
- 以距离、速度、时间等统计量为主,也需要进行特征选择来调优
- 特征工程部分只是用到了一些基本的特征,比如经纬度、速度之类的特征。这部分比较玄学,有时候增加特征,线下MSE降低,线上反而增加了。建议找一个稳定的验证集,来测试模型性能。
- 主要用的还是原始数据中的特征以及根据经纬度计算位移。
- 构造训练集时数据量不必很大,我们只选择了与测试集到达相同港口的那些订单数据作为训练集。特征选取也不必很多,平均速度、距离等都是可以考虑的重要特征。
总结:
特征选取
- 适当的把所有有用的特征先选出来,然后可以可以通过实验来进行挑选合适的特征,或者加上权重划分?
- 数据中有的特征:距离、速度、时间、经纬度等等
- 需要额外计算的特征:平均速度、平均加速度等等
解决方案的思考
- 对测试集中每条需要预测的运单,找出训练集中与之相似的轨迹的集合,然后在相似轨迹集上训练模型预测结果。寻找相似轨迹算法的好坏对训练结果有很大的影响。
比赛的难点
- 数据问题,数据虽然很大,但是有效数据并不多。数据存在大连数据不准或者缺失、错误等问题。
- 线上线下不一致:这个问题一直困扰了我们,现在都没有找到可靠验证方式,只能继续使用5折交叉。原因可能是测试集的分布序列比较特殊。因为错过比赛,所以无法进行线上验证
注: 如果推理代码中没有写def _inference(self, data) 可以试试尝试重新写这类推理代码,其中建议使用logger.info进行信息查询,这样可以一步步排除问题,花费时间也最多只需要半天时间。原因是推理代码出现问题我遇到过,重写def _inference(self, data)就好了,这类问题还是建议手动排查为好。
可能是推理代码中的测试数据的列顺序和baseline代码中输入的训练数据的列的顺序不一致导致的吧。比如推理代码中的是[‘weekday’,’timeindex’],而baseline中训练时输入是[‘timeindex’,’weekday’]
试试看手动指定一下列的顺序, 可能是输入的特征顺序乱了
baseline中训练集和测试集是随机划分的,应该是这个原因吧。
评估标准
ETA_NUM取的是是测试集的行数34712,预测的ETA数量
ETA为选手评估的时间值
对于未提交的运单ETA,后台统一取timestamp时间计算。
主要是根据运单号、GPS时间戳即timestamp匹配ETA值,与真实的ATA做MSE