Pooling Manhattan: how shareable are 2.8 million taxi rides?

July 7, 2026

If everyone in Manhattan who hailed a taxi was willing to share their ride with one stranger going the same way, how much driving would the city actually save? I dug into this for a data challenge, using 2.8 million yellow taxi trips from a single week in June 2013, and the answer turns out to be: quite a lot.

2.79M

trips processed

89%

trips matched

23.8%

vehicle miles saved

36s

average delay

The metric: VMT savings

Not all demand is poolable. Trips have to line up in space and time before sharing helps anyone. So the metric I used is Vehicle Miles Traveled (VMT) savings: take the total distance if every trip is served solo (the taxi baseline), compare it to the total distance when trips are optimally paired into shared vehicles, and measure the reduction. VMT is the thing microtransit actually promises to reduce — fuel, driver time, congestion all follow from it.

The catch is quality of service: nobody shares a ride that doubles their journey. Every pairing had to respect a maximum delay of 6 minutes per passenger and a vehicle capacity of 6 — deliberately conservative constraints.

The algorithm: shareability graphs

Fully optimising city-scale ride pooling is a variant of the Dial-a-Ride Problem, which is NP-hard and computationally hopeless at this scale. Instead I built on the shareability network idea from Santi et al. (2014): construct a graph where every trip is a node and an edge connects two trips if they can feasibly share one vehicle (checking all four pickup/dropoff orderings against the delay constraint). Each edge is weighted by the miles saved, then a maximum-weight matching picks the best set of disjoint pairs.

To make this run on millions of trips, I added vectorized pruning (temporal, capacity and geographic filters before feasibility checks), then partitioned the giant graph components with Louvain community detection so the matching solver only ever sees ~10k-node subproblems. Shortest-path distances and travel times on the OSM road network are precomputed once and cached.

Four maps of Manhattan on an H3 hexagonal grid showing request distribution, mean shareability, match rate and VMT savings for Monday morning
Monday 7–10am by trip origin: demand and shareability concentrate in Midtown, while match rate and VMT savings stay high across almost all of Manhattan.

What the week of data says

With those conservative constraints, pairwise pooling alone saves 23.76% of vehicle miles — about 2.8 million km in one week — while matching 89% of trips with an average detour of only 36 seconds. Pooling potential closely follows commuting structure:

  • Weekdays beat weekends: regular commutes are similar to each other, so match rates (~66% hourly) and savings (~24%) peak on workdays.
  • Mornings are the most shareable time of day — everyone travels to work at roughly the same time, but leaves at scattered times in the evening.
  • Central Manhattan corridors have the densest shareability; peripheral and late-night demand is dispersed and much harder to pool.
  • Interestingly, there's a threshold effect: beyond a certain graph connectivity, more shareable options don't add much VMT saving — though for a real-time service that redundancy would make dispatch far more robust.

Caveats

This is an offline analysis with full knowledge of demand, unconstrained fleet size, constant 30km/h travel speed and instant boarding — so it's an upper bound on pairwise pooling, not a service simulation. Dead mileage (taxis cruising empty, which was estimated at over half of NYC taxi hours) is out of scope too. Extending the matching beyond pairs, simulating a fixed fleet, and softening the geographic pruning are the obvious next steps.

The full write-up, with the maths, complexity analysis and the temporal/spatial visualisations, is here: read the full report (PDF).