Recurrent Road Bottleneck Detection via Causal Origin-Victim Attribution
Abstract
Recurring road bottlenecks, locations that jam on a regular daily or weekly schedule, account for most urban congestion, yet identifying the few places that cause it is hard: on a network-wide traffic feed, most slow roads are not bottlenecks but spillback from a jam elsewhere. We present a fully automated, city-general pipeline that turns a coarse ten-minute per-segment traffic feed into a ranked list of recurring bottleneck sites. Its core step classifies every congested road as a causal origin or a bounded downstream spillback victim, applying the onset-ordering principle of congestion propagation on a road graph built from geometry alone. Per-city calibration is self-bootstrapping, requiring no external labels, so the same model transfers across cities. Deployed for Hyderabad over 30 days, the method finds that 83.6% of congested road-segments are spillback and only 16.4% are causal origins, reducing a naive slow-road map by 6.1x to 124 recurring bottleneck sites. The same pipeline runs unchanged on additional cities, and is integrated into a deployed traffic-analytics product.
Key findings
- Most congestion is spillback, not cause. Of 2.6 million congested road-buckets in Hyderabad over 30 days, only 16.4% are causal origins; the other 83.6% are roads that are slow only because a jam downstream backed up into them.
- A 6.1x smaller problem. Isolating causes turns a naive "every slow road" heat-map into a short, ranked list of 124 recurring bottleneck sites, roughly one in six of what a speed-threshold map would flag.
- No new hardware. The only input is one traffic reading per road every ten minutes plus the road network's geometry. No camera feeds, no signal data, no labeled bottleneck inventory.
- City-general by construction. A city is defined entirely by data and a configuration record; onboarding a new city adds no algorithm code. The same pipeline runs unchanged on Delhi and Bengaluru.
The idea in one picture
From a whole network to a short list
Congestion propagates upstream from a bottleneck, so temporal precedence orders cause before spillback. For each congested road the pipeline walks downstream, bounded by travel time, to find the jam it is backing up behind. If it finds one, the road is a victim; if it finds nothing to drain into, the road is a causal origin. Single-day origins are aggregated across a month into recurring sites with a recurrence class and a severity ranking.
Deployment results (Hyderabad, 1-30 June 2026)
| Stage | Count |
|---|---|
| Road-graph edges (directed) | 9,856 |
| Roads congested at least one day | 1,827 |
| Congested road-buckets (origin + victim) | 2,602,865 |
| Of which causal origins | 427,401 (16.4%) |
| Recurring bottleneck sites (final) | 124 |
Source: deployment over a 30-day window. Full method, calibration, and multi-city generality in the PDF.
Why it matters
A congestion heat-map tells a city it is congested, which it already knows. A ranked list of causes tells it where to act, in what order, for the most relief per rupee, because clearing one cause drains the whole tail of victims queued behind it. And it scales like software, not construction: the same pipeline produced every city's list with no city-specific code and no roadside hardware, using data cities already generate through Google's Roads Management Insights feed.
For the plain-language version of this work, read The Real Bottleneck on our blog.
How to cite
See this on your city's roads
We can point the same pipeline at your network and hand back the ranked list of real bottlenecks.
Book a demo