Citi Bike / NYC DOT
Citi Bike's Director of Data Science asked whether a predictive network model could forecast the ridership and rebalancing impact of relocating a station or changing its dock capacity — one of bike-share's biggest operational challenges, since construction-forced moves break network connections and planners today rely on static siting guidelines and intuition rather than rider data. The ask was for a Station Impact Simulator prototype that quantifies the ridership delta of a proposed move or capacity change.
Sponsor: Sujin Lee, Director of Data Science · Citi Bike / NYC DOT
The Station Impact Simulator lets a visitor pick a real NYC Citi Bike station, drag it to a new location and/or edit its dock capacity, and get a forecast: net daily trip delta with a p10/p50/p90 uncertainty band, the top neighbor stations gaining or losing trips, and an inferred change in empty/full rebalancing burden. Scenarios can be saved and shared via a URL. Forecasts come from a trained, published demand model validated two ways: against a temporal holdout of future months the model never saw, and against 132 real station relocations and removals mined from thirteen years of trip history — natural experiments where the network's actual response is known. The validation lab shows every one of those events, and every rejected candidate, with the model's prediction beside the observed outcome.
GBFS feeds and S3 trip-data zips are ETL'd through DuckDB/Parquet into Neon Postgres (`nyc.citibike_simulator_*`, 15 tables). A Python training stage fits an MLP over gravity and neighbor-graph features (exported to ONNX) and publishes runs back into Postgres; the current run beats a seasonal-naive baseline by 11.1% MAE on a 2025-07 to 2026-06 temporal holdout, and beats a naive nearest-station-absorbs-all redistribution rule by 17.1% average MAE across the 132 validated relocation events. Leakage assertions (no post-event data in pre-event training) are checked and logged per run.
Live verification rated this product NEEDS WORK at its snapshot date (scenario-evaluate timeouts against production Postgres); the model run now serving forecasts is published with disclosed limitations — its empty/full-risk correlation gate fails because public status history is a single snapshot, and the model card says so explicitly.