Demand forecasting

Flowcast

Lower Manhattan and the Brooklyn Bridge at night, lit in electric blue.

A machine-learning platform that forecasts hourly taxi demand across all 262 New York City taxi zones, one, six, and 24 hours ahead.

Client
Higgins Digital
Industry
Urban mobility
Build type
Machine-learning forecasting platform on AWS
Status
Live, forecasting from published data
Capabilities
AI, Automation, and Data Systems, Digital Products and Platforms, Custom Website Builds
Stack
Python, XGBoost, Amazon SageMaker, AWS Lambda, Next.js, Vercel
Scope
Data pipeline, model training, AWS deployment, web development

The problem

Knowing where demand will be is worth more than knowing where it was.

New York publishes every yellow-taxi trip, but as monthly files of raw records. Turning that into a forward view of how many pickups each zone should expect takes a modelling pipeline, not a spreadsheet.

A forecast is only useful if it can be checked. That means honest evaluation against a simple baseline, stated uncertainty, and a clear line between what the model predicts and what actually happened.

The direction

Build the whole system, from raw public data to a map anyone can read, and trace every number on the site to the model run that produced it.

Flowcast ingests NYC TLC trip records and NOAA hourly weather into Amazon S3, builds time-series features that only look backward from the forecast hour, and trains one XGBoost model for every zone and horizon in an Amazon SageMaker Pipeline. A quality gate has to pass before a model is registered.

The approved model is served from a serverless endpoint behind AWS Lambda and API Gateway. The Next.js site maps all 262 zones with prediction intervals and the drivers behind each forecast, and falls back to the same model's precomputed forecasts if the endpoint is offline.

What was built

  1. Citywide forecast map for a chosen hour and a 1, 6, or 24-hour horizon, with zone detail, intervals, and drivers
  2. Backtest mode comparing predicted, actual, and baseline demand for past hours
  3. Performance dashboard with error by horizon and borough, a replay timeline, and a sortable zone table
  4. Public model card and architecture pages covering data, features, evaluation, the quality gate, and limitations
  5. Data pipeline, model training, evaluation, and serverless deployment on AWS

Details

  • Trained on 31 months of NYC TLC yellow-taxi trips, 116.3 million in total, joined with hourly NOAA weather from Central Park.
  • On a held-out test from March to July 2026, weighted error was 0.186 against 0.247 for a same-hour-last-week baseline, ahead of it in every borough.
  • Prediction intervals are calibrated on validation data only, never on the test period they are reported against.
  • A quality gate checks for leakage, a minimum improvement over the baseline, and an error ceiling before a model can be registered.
  • Forecast mode predicts the hours after the latest published TLC data, which lags about two months. It is not live, present-day demand.
  • The browser never calls SageMaker. Requests go through a throttled, origin-restricted API that scores all 262 zones in one call.
  • TLC records identify taxi zones rather than GPS points, so the map draws official zone boundaries.