All Notes
Tech Deep-diveApr 20257 min read1,850 words

How FCD Reveals Urban Congestion Patterns

What is FCD

Floating Car Data comes from GPS-equipped vehicles recording position, speed, heading and timestamp. Ride-hailing, taxis and buses are common sources. It offers wide coverage at low cost, but is noisy and unevenly sampled.

From GPS to traffic state

Raw GPS is not "speed"; it takes three steps:

1. Map-matching: snap GPS points to the network. I use an HMM with observation probability (point-to-edge distance) and transition probability (edge reachability). 2. Aggregation: aggregate by 5-min bin and edge, taking the median—not the mean—since the median is robust to outliers. 3. State estimation: map speed to Level-of-Service via the fundamental diagram.

python
def aggregate(df, bin='5min'): df['t'] = df['timestamp'].dt.floor(bin) g = df.groupby(['edge_id', 't'])['speed'] return g.median().reset_index()

A counter-intuitive finding

On one arterial I found low-speed samples even during "free-flow" midnight hours—those were vehicles waiting at red lights. Taking the mean would be dragged down. The fix is to filter stopped vehicles, or use quantiles instead of means.

Data does not lie, but it stays silent. We must supply the context.

Tech Deep-diveTraffic EngineeringResearch