Demand Forecast Map
The demand forecast map lives at Dashboard > Analytics > Heat Maps. It replaces the old "rides last N days" heat-map skeleton with a real predicted-demand surface driven by the AI Ops model.
Page layout
The page has four control regions:
- Horizon picker — choose the forecast window: 1 hour, 4 hours, or 24 hours ahead.
- History window picker — when looking backward at actuals, choose 24h, 7d, or 30d.
- Layer toggles — independently turn on Predicted demand, Actual history, and Unmet demand.
- Time slider — a horizontal slider that spans -7 days to +24 hours. The map redraws as you drag.
Below the map are summary tiles: total predicted rides for the current horizon, the hex with the highest predicted demand, and a count of unmet-demand events in the visible window.
H3 hexes
The map is tiled with H3 hexagons. For dense markets we use resolution 9 (about 0.1 km² per hex, roughly 150-meter edges). For sparse markets we use resolution 8 (about 0.7 km² per hex). The resolution is chosen automatically based on subaccount density.
Each hex is colored by the active layer:
- Predicted demand — green (low) to red (high) by predicted rides for the selected horizon.
- Actual history — same gradient but based on observed rides in the history window.
- Unmet demand — red intensity by count of unmet-demand events. See Understanding unmet demand.
Hex tooltip
Click any hex to open its tooltip. You'll see:
| Field | Meaning |
|---|---|
| Predicted rides | Model output for the current horizon |
| Confidence interval | 90% CI — ci_low to ci_high |
| Current supply | Available vehicles inside the hex right now |
| Gap | Predicted demand minus current supply |
| Last forecast | When this hex's forecast was last refreshed |
If the gap is positive, this hex is under-supplied for the horizon — a candidate for incoming rebalancing. If the gap is negative, it's over-supplied.
Horizons explained
Three separate model heads are trained, one per horizon:
- 1 hour — best for "what's about to happen." Highest accuracy because lag features dominate.
- 4 hours — best for "where should I move vehicles before lunch / dinner / commute." Used by the recommender.
- 24 hours — best for "where should the fleet be tomorrow morning." Accuracy is lower but the signal is enough for overnight planning.
The recommender always uses the 4-hour horizon. The dashboard lets you flip between all three.
Reading the time slider
The slider's 0 position is now. To its left is observed history (up to 7 days back); to its right is forecast (up to 24 hours ahead).
- Left of 0 — the active layer is forced to Actual history. The map shows rides that actually started in each hex during the slider's hour.
- Right of 0 — the active layer is forced to Predicted demand. The map shows the model's forecast for that hour.
Dragging across the 0 boundary transitions cleanly between observation and prediction.
Stale forecast banner
Forecasts refresh hourly. If the most recent forecast is more than 90 minutes old, a yellow banner appears above the map: "Forecast may be stale — last refresh was X minutes ago." When the banner is showing:
- The map still renders the last good forecast.
- The recommender hides projected lift dollars (it doesn't trust stale numbers).
- Check the cron status (see Troubleshooting).
Confidence
The 90% confidence interval (ci_low and ci_high) tells you how certain the model is. Wide intervals mean the model has high uncertainty about that hex × hour — usually because of low historical ride volume in that hex, or because weather or events are pushing the inputs into a region the model hasn't seen much.
The rebalance recommender weights its confidence score by CI width, so the cards you see in /dashboard/operations/rebalance already account for forecast uncertainty.
What's not on the map
- Multi-modal demand. The forecast is rides total, not split by scooter vs. bike vs. moped.
- Real-time (sub-hour) predictions. The smallest bucket is one hour.
- Cross-subaccount roll-ups. Each subaccount has its own forecast surface; AI Ops respects RLS.
Related
- Understanding unmet demand — what the red unmet hexes mean.
- Rebalance recommendations — turning forecast into action.
- Data sources: weather and events — what feeds the model.