The problem with isochrones: overcoming false precision in drive time maps
tldr: Drive time isochrones poorly communicate uncertainty because they are based on the assumption of average traffic which is highly variable.
Drive time isochrones look so cool on a map with their sprawling and crinkly features. But these complex shapes present a problem. They relay a sense of false precision.
They’re the equivalent of assigning 5 decimals points to a rough forecast. You wouldn’t say the Milwaukee Bucks have a 18.52382% chance of winning the NBA Finals. You’d say they have a 15-20% chance to win.
There are many ways to communicate uncertainty. A statistician might give you confidence intervals or perform bootstrap sampling. An engineer might do sensitivity analysis.
Isochrones involve a tradeoff between shape accuracy and precision.
What are Isochrones?
Isochrones are based on the distance one can reach in a certain period of time via a given mode of transport. In the case of drive time isochrones, the distances are determined under the conditions of average traffic.
Imagine a person getting in a car and driving in one direction for 60 minutes. Her position at 60 minutes represents the outer boundary of the isochrone. She teleports back to the origin and drives in another direction for 60 min. She keeps teleporting back to the origin and driving in another direction until she’s exhausted every possible direction (e.g. all 360° around the origin). It wouldn’t be (computationally) practical for our imaginary driver to exhaust every possible direction, so maybe she departs in 10 different directions around the origin and decides that’s good enough.
How can we improve the accuracy of our isochrone?
More trips: Our imaginary driver could perform more trips per direction throughout different times of day, different days in the year, under different weather conditions, etc.
More angles of departure: Our imaginary driver could depart in more directions around the origin
But even if we made the most perfect single isochrone shape possible by averaging a large number of trips under various conditions and performed it in a large number of directions around the origin, we would still not communicate the range of possible outcomes.
How can we better communicate the uncertainty?
A couple ideas:
Simplifying the shape of the isochrone. I think of this as similar to downsampling a signal. There are a variety of methods for both simplifying and smoothing out geometries:
Explicitly communicating the expected spread. Creating bands by buffering the isochrone shape by a little bit (both outward and inward) and labelling these different bands can show the range of possible outcomes (kind of like a box and whisker plot).
Mapbox’s Isochrone API has built-in parameters for denoising and generalizing the shape of isochrones, which I think is great! Spatial SQL also has commands for simplifying geometries.
Here’s a short demo of me tweaking the tolerance parameter in the SQL command ST_Simplify (which uses the Ramer–Douglas–Peucker algorithm):
The last shape in the video probably goes too far, oversimplifying the original shape and destroying the nuance. I would also like to smooth out the jagged edges more — not because smooth = more true, but smooth conveys a sense that this is an estimate. Jagged edges feel too exact.
I would love to hear from anyone if they have created a hybrid of an isochrone + box plot — that would be very cool and useful!
If you have any thoughts or suggestions, please leave a comment or message me!
P.S. Can anybody guess what the thumbnail/feature image is displaying?