跳到正文

利用图感知 Transformer 扩展实时交通预测

了解 Uber 如何部署带有图数据管道的深度 Transformer 模型来解决实时交通预测问题,从而改善全球数百万客户的路线质量和到达时间,并释放出 1 亿美元的年化长期价值。

本文目录文章开头

简介

当你请求一次 Uber 行程时,应用会立即做两件事:选择前往目的地的路线,并估算你的到达时间。两者都依赖于对行程每一段路段准确、最新的交通预测。

Uber 的交通预测技术栈十多年来一直在大规模场景下可靠地支撑着路线选择和到达时间估算。为了进一步提升质量,交通预测团队和应用 AI 团队启动了一项为期多年的努力,以重建这一系统。

其成果是 DeepETT(深度预估行程时间),一个由深度学习驱动的实时交通预测系统,它将长途行程的到达时间准确率提升了 6%,将预测方差解释度提高了 19%,并带来了估计 1 亿美元的年度增量收入。如今,它也是 Uber 吞吐量最高的深度学习部署之一,每秒提供超过 200 万次实时预测。

在这篇博文中,我们将分享 DeepETT 背后的关键工程决策、使其取得成功的建模选择,以及我们在过程中遇到的一些令人意外的挑战。

Uber 的交通

Uber 的交通预测系统将司机手机传来的原始 GPS 信号转化为实时预测,预测全球每条道路的行驶速度,以及未来几小时内这种速度将如何变化。

Uber 大约每 4 秒从每次行程接收一次 GPS 信号,每天累计产生数百亿次位置更新。这些信号被映射到一个包含约 1 亿个路段的全球道路图上。每次通过一个路段都会产生一个精确的测量值,记录行驶该路段所花费的时间。

基于这些数据,Uber 持续预测每个路段的预估通行时间(ETT),每隔几分钟更新一次,并覆盖多个未来时间窗口。当乘客请求行程时,路由引擎会使用最新的 ETT 来找到最快路线,而该路线上各路段 ETT 的总和构成了初始的到达时间估算。

这一交通预测层位于几乎所有其他功能的上游:路线规划、定价、到达时间以及给司机的导航指令。这里的改进会在下游产生复利效应。更好的交通预测带来更好的路线、更准确的到达时间,并最终为乘客和司机带来更好的体验。

在 Uber 的规模下,即使路段级别的准确率有微小提升,也能转化为每天数百万次行程中的显著收益。

Flowchart detailing Uber's route and ETA calculation process: starts with the Uber Driver App sending GPS pings for driver location updates, proceeds to Map Matching, then Traffic Forecasting using observed traversal times (streaks) and estimated traversal times (ETT forecasts) per road segment, followed by Route Finding for fastest routes and unrefined ETAs, and ends with Refinement/Calibration to produce fastest routes, refined ETAs, and fares.

图 1:Uber 交通、路线规划和到达时间估算技术栈概览

新系统的设计目标

Uber 先前的交通预测方法旨在做到简单、稳定和可扩展。它将近期观测与历史模式相结合,这在计算上非常高效,也是一个非常强大的基线。

随着 Uber 在全球范围内的扩张,我们越来越关注在以下三种场景中改进交通预测:

  • 快速变化的状况,例如事故、天气和重大活动,交通状况可能迅速变化。
  • 密集城市核心区之外的稀疏道路,那里的观测频率较低,预测受益于更强的泛化能力。
  • 更长的行程,其中路段级别的微小差异可能在多个路段上累积,并影响最终的到达时间估算。

满足这些要求需要一个能够快速适应、在截然不同的地理区域间泛化,并能从 Uber 规模的全部可用数据中学习的预测系统。这使得交通预测成为基于深度学习进行重建的有力候选。

降低项目风险的范围界定决策

在开始建模之前,我们做出了两项范围界定决策,使 DeepETT 得以顺利发布。这两项决策都以牺牲理论上的优雅为代价,换取了我们能够在全球范围内可靠部署的方案。

决策 1:不在训练循环中进行“端到端”路由训练

交通预测为路由提供支持,因此一种选择是将路径查找放入训练循环中,并直接针对行程结果进行优化。理论上,这很有吸引力。

实际上,Uber 的路由栈已经非常成熟且经过了大量优化。重建(或对路由进行求导)将极大地扩大项目范围和风险。因此,我们选择了一个更简单的边界:DeepETT 预测路段级 ETT,由路由来消费这些数据。

Two workflow diagrams compare decoupled and joint training for route prediction. The top workflow (Option B) shows historical and real-time traffic features feeding into a traffic-forecast model, then segment-time predictions, and finally a route-finding engine. The bottom workflow (Option A) adds a feedback loop: after the route-finding engine, predicted and actual route-level times are compared, and training loss is fed back to improve the model.

图 2:两种可能的问题表述方式。

这一决策带来了一个重要后果:我们仍然可以离线测量行程级指标,但无法在训练期间直接对其进行优化。正如我们稍后将看到的,这带来了其自身的挑战。

决策 2:使用固定大小的输入而非动态图

我们还必须选择模型如何消费交通观测数据。像 GNN 或序列模型这样的动态计算图需要为每个样本实例化数量高度可变的 原始观测数据。在我们的规模下,这通常会迫使我们在训练和推理时进行激进的降采样。

Flowchart comparing dynamic compute graphs (GNNs/Sequence Transformers) and fixed-size compute graphs (pre-aggregated observations) for DeepETT. Dynamic graphs: pros—learns from raw observations, high expressiveness; cons—must load raw data, memory/latency heavy, requires down sampling, variable batch sizes. Fixed-size graphs: pros—use all data, predictable latency/throughput, scales to production; cons—limited expressiveness by aggregation, extra offline feature engineering.

图 3:固定计算图与动态计算图的考量。

考虑到我们的数据量和延迟要求,我们选择了另一种方式:基于预聚合观测构建的固定大小计算图(图 3)。这使推理保持可预测性,同时让我们能够使用所有可用的观测数据。

定义契约

交通预测位于路由、ETA、定价和司机导航的上游,因此在编写模型代码之前,我们必须明确我们所承诺的内容。我们将 DeepETT 定义为一个具有两项契约的系统:

  • 路段级预测。 每 5 分钟,预测每个路段的平均估计通行时间(ETT),时间范围延伸至三小时。我们使用均方误差(MSE)在路段级衡量准确性。
  • 行程级预测。 当路由引擎沿最快路线对路段 ETT 求和时,由此产生的未经修正的行程到达时间的误差应低于旧系统。我们使用平均绝对误差(MAE)在行程级衡量准确性。

第一项契约是模型直接服务的对象:调用方提供路段 ID、时间戳和时间范围,返回以毫秒为单位的 ETT。在这里优化 MSE 是有意为之,因为路由需要一个期望的路段通行时间,以便做出一致的最快路径决策。

第二个契约更为棘手,因为我们不在路由循环内进行训练。我们可以离线评估行程级别的到达时间,但在训练过程中无法直接优化它们。而且存在一个更深层的不匹配:即使每个路段预测在 MSE 下都有所改善,这些预测的总和在行程级别的 MAE 下也不保证会改善。事实上,完全可能出现路段 MSE 下降而行程 MAE 变差的情况,这是一个重要的悖论,影响了系统其余部分的设计。

校准与分辨率的关键作用

为了理解路段级与行程级之间的悖论,我们发现将指标分解为两个独立的组成部分很有用:分辨率和校准。

分辨率是信息。它衡量预测所解释的真实世界变异的比例。我们以解释方差(%)来报告这一指标。

校准是系统性误差。它捕捉诸如预测持续偏高或偏低之类的影响。校准误差可能任意大,但只需对模型进行校准即可轻松修正。

图 4 展示了 DeepETT 的情况。在路段级别,我们的模型起始解释方差约为 30%,并且如预期的那样,随着预测时间向未来延伸,分辨率逐渐衰减。

A blue line graph with data points marked and labeled, showing a slight downward trend from approximately 0.3 to 0.28 as the x-axis increases from 0 to 60.

图 4:按预测区间划分的路段级解释方差(1.0 为最佳)。

接下来,我们通过沿真实司机路线对预测求和来查看行程级 MAE 分解,所见令我们惊讶:

  • 分辨率从约 30%(路段)跃升至约 85%(行程)
  • 路段级分辨率上毫秒级的增益,在行程级分辨率上累积成了个位数百分比的增益
  • 行程级校准误差并非微不足道,但我们假设下游的校准系统会自动纠正这一问题。

这些结果让我们有信心在模型迭代中优先考虑分辨率。如果我们能在路段级持续增加分辨率,一旦经过校准,这将转化为更好的路由选择和更准确的到达时间。

模型设计

模型契约

DeepETT 被设计为传统交通预测器的即插即用替代品:给定一个路段、一个时间戳和一个预测时长(0–180 分钟),它会返回该路段的预期通行时间。这个简单的契约使 DeepETT 与路由及下游 ETA 模型解耦,并使推理过程可预测。

数据管道设计

DeepETT 的数据管道设计基于一个核心假设:给定路段上及周边足够的本地交通信息,通行时间在条件上独立于更远的路段。这意味着预测旧金山某个路段的情况不需要知道纽约或洛杉矶正在发生什么——本地观测就足够了。

每个路段都有一个局部感受野,用于在一组固定的时空视图上聚合观测。这些视图特意覆盖多个回退层级,以便在观测稀疏时模型仍能获得信号:

  • 空间视图:路段本身、邻近的路网邻域以及更广泛的地理区域
  • 时间视图:最新的实时聚合(例如最近一小时)、历史模式(天 → 周)以及长期基线
  • 上下文特征:一周中的时间、节假日/活动,以及其他已知的周期性流量变化驱动因素

对于车流量大、通行频繁的道路,模型可以高度依赖最近的路段级观测数据。对于稀疏道路(大城市以外很常见),它可以将注意力转向图邻域或区域聚合数据。关键思想是,模型始终接收相同形状的输入,但可以学习在任何给定情况下哪些视图最有用。

Matrix diagram with three columns labeled 'Road Segments,' 'Graph Neighborhoods,' and 'Geographical Regions,' and three rows labeled 'Static Embeddings,' 'Historical Aggregations,' and 'Real-time Aggregations.' Each cell is shaded to indicate intersections between these categories.

图 5:一个展示交通数据时空视图的矩阵,其中每个网格单元代表汇总交通观测数据的一种独特方式。

Four quadrants labeled Historical, Geographical, Real-time, and Road Graph, each containing abstract representations: bar charts for time periods in Historical and Real-time, a grid of squares for Geographical, and a network of connected nodes for Road Graph.

图 6:不同空间和时间粒度的聚合。

模型架构

在固定的多视图输入下,模型的任务是将路段的多个视图结合起来,做出尽可能准确的预测,并在推理时以低成本完成。

DeepETT 使用一种 Transformer 架构,将每个时空视图视为一个 token:我们对每个视图的聚合特征进行量化和嵌入,将它们拼接起来,并通过多个 Transformer 式的块进行处理。这使得模型能够学习诸如以下的交互关系:

  • 该路段的实时减速比当前通常的每周模式更重要,或者
  • 该路段数据稀疏——转而依赖邻域和区域交通数据。

然后,单个预测头会生成一个以请求的预测时间范围为条件的 ETT。我们通过将时间范围和时间上下文作为模型输入进行嵌入来实现这一点,因此同一个模型可以回答“现在”和“三小时后”的查询。

Flowchart illustrating a machine learning model for spatiotemporal feature inputs, including static road attributes, historical traversal stats, real-time segment stats, graph neighborhood, timeline, holiday/event countdowns, and forecast horizon embedding. Features are processed through quantization, hashing, and embedding lookup, concatenated, then passed through a stack of transformers and fully connected layers, ending with an ETT prediction head using mean squared error.

图 7:DeepETT 模型架构图。

在底层,我们依赖于几种易于扩展的嵌入策略:

  • 高基数 ID(路段 ID、S2 单元)使用特征哈希和模型内嵌入
  • 每个路段的图嵌入是在单独的消息传递步骤中预先计算的
  • 图特征是在每个路段周围的多跳邻域上预先计算的
  • 时间使用本地时间的一周分钟数嵌入来表示
  • 节假日/特殊活动通过事件嵌入加上“距今/至今天数”特征来捕捉

总体效果是,该模型获得了人们使用 GNN 时所追求的许多好处,同时保持了恒定时间的推理和生产友好性。

稳健的生产管道

为了在全球范围内实施 DeepETT,我们将离线原型转化为能够在 Uber 广泛规模下运行的生产数据管道。

我们使用 Apache Spark™ 管道来预计算历史和每周的特征聚合。Apache Flink® 管道每隔几分钟提供实时数据更新,从而实现动态预测。

Flowchart showing two main sections: Batch pipelines (yellow background) and Realtime Pipelines (green background). Batch pipelines combine Static, Graph, Geo, and Segment data through a batch feature joiner, producing Batch features. These are sent to an MA server, which receives a response join key and outputs a batch of predictions to RTTrafficMAPPredictionClient. Realtime Pipelines combine Graph, Geo, and Segment data through a realtime feature joiner, outputting to Hive storage for offline training. RTTrafficMAPPredictionClient sends a batch of palette join keys, basis features, and realtime features to Hive storage.

图 8:DeepETT 的生产数据管道。

我们的预测服务基础设施经过扩展,能够管理每天数十亿次预测且无需任何停机,实现了:

  • 实时摄取每秒超过 160,000 行特征数据。
  • 全球每秒提供约 200 万次路段级预测,是 Uber 吞吐量最高的模型。

实时校准实践

在 DeepETT 的下游,行程级到达时间模型会从路径规划引擎接收一个未校准的到达时间,并将其与其他信息结合,生成最终面向乘客的到达时间。当我们使用新的交通预测重新训练这些下游模型时,观察到最终到达时间的准确性有所下降。考虑到我们交通预测和未校准到达时间的分辨率都提高了,这非常出乎意料。

根本原因是校准漂移。每次 DeepETT 每周重新训练后,聚合校准误差立即很低,但在接下来的一周内,校准曲线(预测行程时间与实际行程时间)持续偏移,且偏移的方向和幅度因城市和一天中的时段而异。路段级的小幅校准偏差会滚雪球般演变成行程级的大得多的误差,这意味着模型的预测契约并未得到始终如一的遵守。

Two line graphs compare three datasets. The left graph shows three colored lines (yellow, red, purple) with significant upward and downward trends, indicating notable changes over time. The right graph displays the same three lines, but all remain nearly flat, suggesting minimal variation.

图 9:校准前后不同周的路段级残差示意图。

Two side-by-side line graphs with five colored lines each. The left graph shows lines diverging upward and downward from the center, while the right graph shows lines closely clustered around the center, indicating less variation.

图 10:路段级校准前后的行程级残差示意图。

一个完美校准的模型,其残差是平坦的并紧贴 y=0 线。当曲线逐周漂移时,下游模型会将相同的数值预测在不同日期解读为不同的含义,从而导致性能下降。如果你只在训练时校准一次模型,那么预测在部署后很容易以不可预测的方式漂移出服务水平协议(SLA)的范围,因此我们需要一个能持续校准预测的解决方案。  

我们的解决方案:实时校准

我们构建了一个 Flink 流水线,它:

  1. 将每个城市的预测按 10 分钟行程时间分桶。
  2. 将这些分桶与最近观测到的通行时间进行关联。
  3. 学习并应用实时修正,使路段级校准误差趋近于零。 

Flowchart showing the process of generating corrected forecasts. Segment forecasts lead to bucket forecasts (10 ms bins), which are joined with observed traversal times. The joined data is used to learn and apply real-time correction, resulting in corrected forecasts.

图 11:实时校准数据流图。

这条实时流水线将校准曲线固定下来,即使在纽约市跨年夜(NYE)这样的高流量事件期间,也能保持行程级残差平坦且恒定,同时仍然保留了 DeepETT 交通预测带来的所有分辨率增益。

影响:1 亿美元的年化价值

在一次全面的全球 A/B 测试中,DeepETT 显著改善了全球范围内的乘客体验,尤其是在关键的长途行程上:

  • 长途行程到达时间准确性提高了 6%
  • 预测方差解释度提高了 19%
  • 导航缺陷减少了 2.73%
  • 整体出行总预订额每年提升 1 亿美元

Two side-by-side maps display routes through São Paulo, Brazil, with highlighted paths connecting Jardim América in the southwest to the Campo de Marte Airport in the north. Blue markers indicate points of interest or stops along each route, with the left map showing a slightly different path and more clustered markers near the airport compared to the right map.

图 12:A/B 测试期间使用基线交通预测(左)和 DeepETT 预测(右)选择的示例路线。

图 12 展示了两个同向的行程,均在 A/B 测试期间于早上 8:10 从圣保罗机场出发。使用 DeepETT 时,交通预测更准确地捕捉了市中心周边的减速模式,从而引导路径规划系统选择了不同的路线。在基线预测下,所选路线经过了较慢的路段,到达时间误差为 1.2 分钟。在 DeepETT 下,路线避开了减速路段,到达时间误差仅为 2 秒。  

结论

作为本篇博客的总结,以下是开发 DeepETT 过程中的一些经验教训。

预先定义范围与契约

在软件工程和预测领域,契约至关重要。提前明确我们打算用深度学习做什么、不做什么,可以降低技术风险并防止无休止的范围蔓延。在编写第一行代码之前就定义两个硬性指标——路段级 MSE 和行程级 MAE——使工程、科学和产品团队保持完全一致。

关注分辨率

校准-分辨率分解帮助我们的团队及早估算出模型在下游系统上能带来的提升。分辨率严格量化了我们的预测在每个预测区间内的信息含量。路段级分辨率即使只有毫秒级的微小提升,累积起来也能带来行程级数秒的分辨率收益。

始终进行校准

按定义来说,未校准的预测没有履行其契约。仅在训练时校准一次是不够的,训练后的校准漂移会降低系统性能,尤其是在一个模型馈入另一个模型的情况下。不可避免的校准误差可以通过持续的实时校准在训练后得到确定性的解决。

系统设计驱动模型架构

我们选择将原始观测数据预先聚合为一组全面的时空视图(路段、图、区域、小时、周、事件),以便在不进行降采样的情况下保留相关信息,同时在全球范围内提供快速的常数时间推理。如果我们选择经典的 GNN 模型架构,可能会获得不错的离线提升,但后来在产品化时会面临挑战。

展望未来,DeepETT 是一段不断完善交通预测、每天改善数百万次行程的持续旅程。

致谢

作者谨向以下为本项目做出不可估量贡献的个人表示感谢:

交通工程:Sibi AR、Saandeep Depatla 和 Scott Sum。

应用 AI:Reza Asadi 和 Himaanshu Gupta。

应用科学:Zhounan Li 和 Helin Zhu。

产品:Sang Park 和 Achal Gupta。

AI 平台:Rush Tehrani、Haarith Devarajan、Divya Nagar 和 Nicholas Marcott。

特别感谢 Tanmay Binaykiya、Michael Mallory、Chao-lin Cho 和 Harshit Dubey。

封面图片出处: “New York City”,由 NASA 约翰逊航天中心地球科学与遥感部门提供。

Apache®、Apache Spark™、Flink® 和星形标志是 Apache 软件基金会在美国和/或其他国家的注册商标或商标。使用这些标志并不意味着 Apache 软件基金会的认可。

及时了解 Uber Engineering 的最新动态——在 LinkedIn 上关注我们,获取我们最新的博客文章和见解。

阅读显示设置

调整正文排版

当前浏览器记住选择,应用于文章正文。手机上正文宽度以屏幕可用空间为限。

图表完整性提示

普通文章遇到图表保存问题时显示提示。