高友谊

记录科研、技术与思考

交通流量预测这几年在研究什么:从“堆模型”到“做鲁棒性”

最近这段时间,我比较集中的精力都放在交通流量预测这个方向上。

一开始看这条线的时候,很容易有一种错觉:好像大家都在不停换新模型名,今天 GNN,明天 Transformer,后天再加几个注意力模块,论文就又多了一批。

但看多了以后会发现,这个方向其实有一条挺清楚的主线:大家一直在想办法更好地刻画时空依赖,并且让模型更贴近真实交通系统的复杂性。

这篇不打算写成严格综述,更像是我现阶段的理解整理。对我自己来说,写下来比单纯把论文名字记在脑子里更有用。

1. 这个问题到底难在哪

交通流量预测表面上看只是时间序列预测,但真做起来,麻烦比普通单变量序列多得多。

主要难在几个地方:

  • 空间相关性:一个路段不独立,周边路网会传导影响;
  • 时间依赖性:短期波动、周期规律、节假日效应会叠在一起;
  • 动态变化:早晚高峰、事故、天气、施工,都会让分布发生偏移;
  • 数据不完美:传感器缺失、噪声、节点宕机,这些在真实场景里非常常见。

所以这个方向不是简单把“预测未来 12 个点”做出来就行,更关键的是:

你对真实交通系统的不确定性,考虑得够不够。

2. 早期方法:先把时序建起来

比较早期的工作,很多还是统计学习和传统机器学习路线,比如:

  • ARIMA
  • SVR
  • 历史平均法

这些方法的优点是解释性强、实现简单,但对复杂时空关系的表达能力明显不够。尤其当路网规模一大、交通状态变化更复杂时,效果就比较吃力了。

但我觉得这些方法也不是完全过时。它们有两个价值:

  1. 让你更清楚问题的基本结构;
  2. 作为 baseline 时,能提醒你别把一个本来就不难的问题包装得太玄。

3. 深度学习阶段:先解决“时间”,再补“空间”

后来比较自然的一步,就是把 RNN、LSTM 这些序列模型引进来。

这一阶段的核心贡献,是让模型更好地去拟合长短期时间依赖。

但很快大家就发现,仅仅把每个监测点当成一条独立序列来建模,还是不够。因为交通不是孤立的点,而是有路网拓扑关系的系统。

于是后面就进入了一个非常关键的阶段:

4. GNN 时代:把路网结构显式建模

这一阶段基本奠定了后续很多工作的框架。

比较典型的思路,就是把传感器或路段看成图上的节点,然后:

  • 用图卷积或图传播建模空间依赖;
  • 用时序模块建模时间变化;
  • 再把两者结合起来做预测。

这类工作为什么影响大?

因为它第一次比较系统地把“空间关系”这件事纳入到了模型主干里,而不是只靠人工特征去补。

我自己看这类工作时,会特别关注两点:

(1)图是怎么构造的

  • 按物理距离构图?
  • 按道路连接关系构图?
  • 按数据相关性动态构图?

不同构图方式对应的是不同假设。

(2)时间和空间是怎么融合的

有些是先时序后空间,有些是交替堆叠,有些是并行建模。这个地方其实很能体现一个模型到底是在“拼模块”,还是对问题真的有理解。

5. Attention / Transformer 进来以后,重点变成了“长距离依赖”和“全局关系”

GNN 路线跑起来以后,后面的一个明显趋势就是 attention 机制越来越多。

这也不难理解。因为交通系统里确实存在一些:

  • 远距离但强关联的点;
  • 不固定的动态依赖;
  • 不同时间尺度上的全局模式。

Transformer 类方法在这里的吸引力很大,原因主要有两个:

  1. 更擅长建模长程依赖;
  2. 不需要像 RNN 那样顺序递推,训练并行性更好。

但我自己的感受是,这一类方法也带来一个很常见的问题:

模型越来越大,结构越来越复杂,但不一定更贴近真实部署场景。

尤其交通预测这个方向,很多时候不只是拼一个 leaderboard 数字,还要考虑推理效率、显存占用、部署成本。这个问题往后会越来越重要。

6. 这两年我觉得真正值得重视的方向,不只是“效果更高”,而是“问题更真”

如果让我说这几年我最感兴趣的一条变化,那不是单纯谁又把 MAE 压低了一点,而是很多工作开始更认真地面对真实世界的数据问题。

比如:

1. 缺失值与异常值

真实传感器数据经常有:

  • 随机缺失
  • 连续缺失
  • 噪声污染
  • 采集异常

如果模型只在非常干净的数据上表现好,那它的实用价值其实有限。

2. 鲁棒性

这也是我自己现在比较关心的点。

交通流量预测不是“静态 benchmark 游戏”。传感器长时间宕机、局部区域观测失真、不同扰动同时出现,这些情况在现实中太正常了。

所以我越来越觉得,一个模型值不值得做,不只是看正常测试集表现,还要看:

  • 噪声下稳不稳;
  • 缺失下崩不崩;
  • 参数量是不是太夸张;
  • 是否真的有推广价值。

这也是为什么我现在看论文时,会特别在意是否有系统的鲁棒性评测,而不是只放一个标准测试集结果就结束。

3. 泛化能力

同一个模型在 PeMS04、PeMS07、PeMS08 上好,不代表换一个城市、换一个采样条件还能好。

如何提升跨区域、跨分布、跨采样条件的泛化能力,我觉得后面会一直是重点。

7. 另一个很容易被忽视的问题:评价方式本身

做交通流量预测,大家最熟悉的指标通常就是 MAE、RMSE、MAPE 这些。

这些指标当然重要,但有时候也会掩盖一些问题。

比如:

  • 平均指标看着不错,但高峰时段预测很差;
  • 模型在大多数节点上正常,但在关键节点崩得厉害;
  • 模型只在某类数据分布下有效。

所以我现在会更关注一个问题:

这个模型到底在哪些场景下强,在哪些场景下弱?

如果只盯着平均分数,很容易忽略真正值得优化的地方。

8. 我自己目前更认同的一条研究思路

如果只说我个人偏好,我现在更认可下面这种路线:

  • 主干结构尽量别太臃肿;
  • 时空依赖建模要明确,不要纯堆模块;
  • 对噪声、缺失、节点异常要有明确考虑;
  • 评测不能只看单一干净场景;
  • 最终最好还能兼顾参数量、速度和显存。

说白了,就是我不太想把交通流量预测做成“谁把结构堆得更复杂”的比赛,而更想做成:

在真实扰动条件下,模型还能不能稳稳地给出可用预测。

9. 对刚入门这个方向的同学,我的建议

如果你刚开始看交通流量预测,我很建议按下面顺序走:

第一步:先搞清楚问题定义和数据集

别一上来就看模型细节。

第二步:从经典模型一路往后看

这样你会知道每一代方法到底在解决什么痛点。

第三步:自己动手复现几个代表模型

不复现,很容易停留在“看懂摘要”的阶段。

第四步:找到你真正想解决的问题

是长程依赖?是动态图?是多尺度?还是鲁棒性?

只有问题意识立住了,后面做研究才不会一直被论文名带着跑。

最后

交通流量预测这个方向表面上卷模型,实际上卷的是你对真实问题的理解深度。

至少对我自己来说,我现在越来越不想只追一个更花的结构名字了。相比之下,我更关心的是:

  • 这个问题是不是现实中真会遇到;
  • 这个改进是不是有明确逻辑;
  • 这个模型是不是足够稳、足够省、足够能落地。

如果后面真能沿着这条线继续往下做,我觉得这件事会比单纯刷一个更高分数更有意思。