dispatch-lab

Manhattan EMS: a week of real calls, replayed through a dispatch simulator

Mon 7 Jul 2025 00:00
0—

Calls per hour in each ZIP area, this 4-hour window

How the simulator works

The life of one call

Every call in the replay goes through the same stages. The bar shows how long each stage typically takes in this week's data.

    The ways to place ambulances

    Each policy decides where the 94 ambulances wait between calls. Dispatch is the same for all of them: the nearest free ambulance takes the call. Bars are the median response over the whole week, averaged over five simulation runs; the thin line is the range across runs.

    What the results show

      Why 94 ambulances

      Reading the map

      • ZIP areas are shaded by how many calls per hour the forecast expected in the current 4-hour window. Switch to actual demand under the map to compare.
      • Thin grey circles are firehouses with ambulances based there, larger for more units. For the four forecast and oracle policies they change every 4 hours.
      • White dots are ambulances. A red and blue flash means it is driving to a call; a red ring means it is busy on scene, transporting a patient or handing over at hospital.
      • Coloured rings are calls still waiting for an ambulance; they turn solid when one arrives.
      • The bar along the bottom is the whole week, one bar per hour of calls. Drag it to jump.

      Where the numbers come from

      • Calls: NYC Open Data EMS Incident Dispatch Data, the week of 7 July 2025, Manhattan only. Only the ZIP code of each call is public.
      • Roads and travel times: the OpenStreetMap drive network, calibrated by hour of day against the real travel times in the data.
      • Time on scene, transport and hospital handover: drawn from real calls of the same severity before July 2025.
      • Forecasts: trained only on data before 1 July 2025, so the simulated week is never seen in training.

      How many ambulances does Manhattan need?

      The fleet size was chosen so the static policy reproduces the real median response time for this week. The chart runs every policy with 20% fewer and 20% more units. With too few, queues build and the policies separate; with enough, they converge.

      Median response time, call to arrival on scene, log scale. Bars show the range over five simulation seeds. The selected policy is highlighted.

      Median response time by fleet size for each placement policy

      When the calls come

      Calls in the simulated week by hour of day, against the forecast built only from earlier weeks. Across the week, the quietest hour of the day had — calls and the busiest —. That swing is what the forecast-driven policies try to follow by moving ambulances every four hours.

      Forecast error for Manhattan: MAE —, RMSE — calls per ZIP-hour.

      Calls by hour of day, observed in the simulated week and forecast

      What the simulation assumes

      Each real call from the week of 7 July 2025 is assigned to the nearest free ambulance under the selected policy. Response time runs from the call to arrival on scene and includes any wait for a free unit.

        Road network © OpenStreetMap contributors (ODbL). ZIP areas: NYC Open Data MODZCTA. Calls: NYC Open Data, EMS Incident Dispatch Data. This project makes no claim of affiliation with or endorsement by any agency.