(知乎:https://zhuanlan.zhihu.com/p/344821161)
文章目录
BusTr,基于实时交通数据的公交旅行时间预测
BusTr: Predicting Bus Travel Times from Real-Time Traffic
https://dl.acm.org/doi/10.1145/3394486.3403376
KDD’20
1. 概述
本文提出了一个机器学习模型-BusTr,模型基于“实时交通”+“时空上下文”数据,实现对“公交旅行时间”的预测。模型期望通过尽可能易得的数据,以适应不同质量的数据来源,从而可以面向全球尺度提供服务。因此,本文尤其关注模型的泛化能力,并在样本、特征、训练细节等方面做了很多工作。最后,本文通过多组实验论证了方法的有效性和泛化能力,尤其是和SOTA方法DeepTTE做对比。
2. 本文与历史工作的区别
- 模型重点考虑了”泛化“问题。对于训练数据集中没出现过的城市也要有预测能力。
- 模型使用了严格的特征集。很多特征都能发挥作用(如公交专用道),但并不好获取;本文模型可以通过局部和区域特征学习来推断是否存在这些特征。
- 模型使用大量数据训练。要看全球尺度的表现
- 模型从实时交通数据做推断。之前的方法通常用实时交通位置来表示交通信息,限制了泛化能力;或使用交通线圈传感器,这又太稀疏了且通常只覆盖了主要道路。
3. 具体方法
3.1 数据(样本)构造
- 在训练阶段,我们首先有高质量数据。但模型要应用于无GTFS-Realtime数据、仅仅有零散的离线观测数据,且这些数据精度、覆盖率、频率等都可能有问题的情况。
- 因此,数据的构造方式参考了文本挖掘,通过一些启发式的约束和规则,在原始轨迹上截取我们需要的样本段,并按照瓦片结构有重叠的做采样,具体规则如下:
- 不在站点附近打断点。这些地方难以判断是刚到站还是刚离开,这里选择在公交路径上找一个点作为端点。
- 每个采样片段(瓦片、轨迹段)的最小长度限制在[1,5]km的均匀分布。应为太短的话噪声影响严重,可能过拟合。
- 同一条轨迹的采样片段的开始时间间隔要>30s。以限制高密度区域的数据冗余。
- 异常采样片段的处理,包括相邻轨迹点超过语料库限制值(5min或3km),以及超出平均速度的(0.7~140km/h)
- 不对样本做重采样或插值,因为模型的目标是处理非均匀运动的情况,如长距离站点、红灯、交通拥堵等。
- 数据集按照训练、验证、测试分3组,每组7天
- “道路交通预测”取自GoogleMap,包括每个道路片段。道路片段是指每两个邻接的转弯结点的连接。并且注意离线训练时的交通预测是用当时预测系统给出的数值,而推断的时候用则可依赖于当前时间提供未来预测。
3.2 样本示例
- 分段预测求和,每一段可以是“站点”或“路段”。其中 t q t_q tq表示路段或站点 q q q的时长,
-
样本示例,如图1(a),每个样本组成:
-
- A trip interval。一个轨迹段,训练时是采样片段的端点之间的路径;推断时,一般是两个公交站点。
- A sequence of quanta constituting that interval。整个路径拆分为一个路径段和站点的序列,称为“原子”。如图:蓝Stop、红Seg、黄Seg、绿Seg、白Stop、灰Seg的序列。
- Traffic speeds and other per-quantum features。每个原子由一个特征向量表示。
- Full-trip context features。表示整个路径的全局特征。
3.3 特征
3.3.1 全局特征:full-trip上下文特征
- 公交线路ID, d r d_r dr维embedding
- trip开始位置的时间,离散化+embedding处理, d w d_w dw维的曜日, d h d_h dh维的当日时间(半小时切片)。【考虑到当日时间是循环的,我们将embedding的前两维初始化为一个循环值(没具体说怎么做的),其他的高斯噪声初始化。】
3.3.2 原子公共特征:空间特征
- 用位置标示原子。用站点用位置标示,路段用端点位置标示
- 用不同级别的S2 Cell离散化表示原子。其中从15级开始(0.08km²),并向上取到12.5级和4.5级。对每个cell分别做embedding,得到 d s d_s ds维的空间向量,并且对3个级别做求和。这样综合了多尺度空间特征,可以使粗粒度权重更大,且在有局部特征的情况下细粒度发挥作用。
3.3.3 路段的附加特征
- 路段长度
- 路段的预估速度。有个特别处理,即系统预估时间取“估计到达该路段起点的时间”,用预估总时长换算。
3.4 模型结构
- 总的时间预估分为“路段通行时间”+“站点等待时间”,即 T ^ = ∑ q ∈ Q t ^ q \hat{T}=\sum_{q\in Q}\hat{t}_q T^=∑q∈Qt^q
- 站点单元:直接把全局特征和站点位置特征过全连接层
- 路段单元:预估速度特征 s s s和距离 d d d特征分别处理,并按公式 Segment duration = α d s + β d \text{Segment duration}=\alpha \frac{d}{s} +\beta d Segment duration=αsd+βd聚合,该公式表示“实时依赖”和“实时无关”的融合。
- 后处理:对负数用0裁切
【模型结构图】
【模型超参】
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xoV4Llfn-1610804093487)(BusTr.assets/image-20210116145218926.png)](https://img-blog.csdnimg.cn/20210116213633508.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW5iaW56aGVuZw==,size_16,color_FFFFFF,t_70)
4. 模型训练
4.1 Spatial input ablation
为了使模型具有泛化能力,对特征覆盖较差的数据也能有效,针对本文中的空间特征和路径特征做一个消融操作。设置一个消融级别 L L L,按照 p L p_L pL的概率剔除路径ID和S2 Cell。消融作用到整条轨迹,以避免在原子之间泄露信息;不同轨迹之间是独立的,这样使得模型更泛化和倾向于粗粒度cell的embedding,除非确实有细粒度的局部特征。
4.2 Feature selection
为了减弱空间Embedding对粗粒度Cell的偏向,我们分两次训练。
- 第一次,在avgEmbedding部分加L1正则,按照 α b L \alpha b^L αbL加权,其中 L L L为S2的级别。L1正则是为了使大多数没用的细粒度cell的embedding值接近0,最后仅保留范数>0.1的部分
- 第二次,重新训练模型,并忽略上一步剔除的cell。这样可以极大减少模型和词表大小,如L15的cell,平均收缩了2.2倍
4.3 其他
- 训练时用Adam优化器,MSE损失,10wSteps,step_siez=200
- 用10w样本评估,每500Steps评估一次,取MAPE最低的模型。
- 超参调参用的是Google的Vizier
5. 实验
-
每个模型训练20次,并在10w个样本上评估,评估指标了MAPE
-
baseline:①直接用交通预测的结果。②线性回归:站点数、总距离、总预计时间
5.1 和DeepTTE对比
- 和DeepTTE对比,BusTr的得到的MAPE更稳定,效果更好。而DeepTTE很多时候甚至没有收敛。
5.2 特征消融实验
- 特征消融实验分3大组,①删除实时信息;②删除空间信息;③删除时间信息。实验结果看,每个部分都是有用的。其中,如果完全去掉空间特征,模型效果极差;时间特征影响较小
5.3 泛化实验
- 三组数据对比,最近1周的数据、9周后的数据、9周后的新地区的数据
- 模型对比,完整模型、不做特征筛选的、不做空间特征消融的、删除粗粒度S2cell的、不做特征消融,且删除粗粒度S2的。
6. 其他
包括GoogleMap的公共交通APP的交通数据,其中静态数据基于GTFS协议,而实时跟踪的轨迹基于GTFS-Realtime扩展实现。
评述
- 本文提出的BusTr,基于“实时交通”+“时空上下文”,实现公交旅行时长的预估。
- 本文是面向全球尺度的应用,对模型泛化能力尤为关注,在样本构造、特征选择、训练细节上做的比较多,可以借鉴。同时,为了广泛适配实际场景中不同质量的数据源,本文的特征选取也比较克制。
- 样本构造部分,动态的ETA预测可以参考做类似的有重叠的样本
- 时间特征Embedding,考虑了时间是循环的,前两维初始化为循环数值处理
- 多尺度的空间特征均值,用来实现尽可能的泛化,这里是不同Level的S2Cell
- 路段ETA的预测,使用了预定义的公式,来融合“实时依赖”和“非实时依赖”
- 训练时分两步,在第一部加L1正则,实现对细粒度S2Cell的清洗,减小词表大小
- 本文的实验比较完整,包括了Baseline对比、SOTA对比、Ablation实验、泛化实验等。
- 实验对比的设计可以学习下
- 本文的模型主体还是分段求和的ETA方法,Road-Segment的时长计算部分加入了预设的计算公式可以借鉴。
- 个人觉得有问题的点:①虽然说特征选择很少,但是“GoogleMap的交通预估系统”作为入参,实际上还是用了很多历史统计和复杂特征,对于不同地区该系统的表现差异有多大存疑。②trip分段的部分,还是需要借助路网来做分段,对没有路网或路网不完整的区域就不适用了。③具体分段的方式上,是否应该考虑一下交叉口的时长。
- 本文没开放代码和数据。