What the model is, what it was trained on, how it was evaluated, what it cannot see, and what would be different inside Lyft's firewall.
Every source used to build this model, with its refresh cadence, latest verification, and row count. A “verified” status means the source responded and returned rows above the minimum threshold.
| Source | Agency | Access | Cadence | Rows loaded | Latest verified | Status |
|---|---|---|---|---|---|---|
citibikedata.nyc status archive citibikedata.nyc endpoints available at REQUIREMENTS time returned trip aggregates rather than station inventory; ingest disabled until a matching schema is confirmed. | Tom MacWright | api_json | conditional stale after 720h | — | never | unknown Stale beyond cadence |
GBFS station_information Snapshotted daily from Lyft's GBFS station_information endpoint; live-status attributes (bikes/docks available) come from station_status. | Lyft | https_json | daily stale after 48h | 2,459 | 28 days ago 2026-07-16 21:26 EDT | verified Stale beyond cadence |
GBFS station_status Live station availability polled every 5 minutes. Individual snapshots are aggregated to daily rates and compacted after 7 days. | Lyft | https_json | every_5_min stale after 1h | 2,251 filtered 208 | 28 days ago 2026-07-16 21:26 EDT | verified Stale beyond cadence |
GBFS system_regions Region roster; NYC-only stations are filtered on region_id='71'. | Lyft | https_json | on_source_change stale after 720h | 7 | 28 days ago 2026-07-16 21:25 EDT | verified |
Live GBFS status daily compaction Live GBFS status is polled every 5 minutes; a daily compaction step summarizes the last 24 hours into station_events. | derived | derived | daily stale after 30h | — | never | unknown Stale beyond cadence |
Model station features rebuild Precomputed per-station features consumed by the scenario evaluate route. | derived | derived | training_only stale after 168h | 2,251 | 26 days ago 2026-07-19 00:17 EDT | verified Stale beyond cadence |
Model training run Model training pipeline (gravity + GNN + inventory-flow). Details on the model card. | training | training | training_only stale after 720h | 2,251 | 24 days ago 2026-07-20 13:08 EDT | verified |
OpenBus 2015-2019 status archive Third-party archive of GBFS station_status snapshots for 2015-03..2019-04. Provenance recorded per file. This ingest is BEST-EFFORT: the Drive manifest must be populated before real rows can land; if the manifest is empty this source contributes zero rows and the model card labels the 2015-2019 window as unavailable. | The Open Bus Project | drive_folder | one_time stale after 999999h | — | never | unknown Stale beyond cadence |
Relocation events detector Scans the reconciled station history for candidate relocation/temporary-removal/capacity-change events used to validate the model. | derived | derived | on_source_change stale after 720h | 1,466 | 24 days ago 2026-07-20 12:32 EDT | verified |
Daily source reachability probe Daily HEAD/GET probes against every external source URL to drive stale banners. | derived | derived | daily stale after 30h | 6 | 28 days ago 2026-07-16 22:27 EDT | verified Stale beyond cadence |
Stations master reconcile Reconciles the pre-/post-Feb-2021 Citi Bike station-ID scheme change by merging historical station IDs into a canonical row per physical station. | derived | derived | on_source_change stale after 168h | 2,251 | 24 days ago 2026-07-20 12:22 EDT | verified Stale beyond cadence |
Citi Bike tripdata S3 listing Discovers the set of trip archive files; per-file aggregation runs separately. | Lyft | s3_listing | monthly stale after 720h | 41 filtered 131 | 28 days ago 2026-07-16 21:27 EDT | verified |
Citi Bike trip zip (per month) Per-month trip archives streamed via ETL to OD aggregates. Raw CSVs deleted after aggregation. | Lyft | https_bulk | monthly stale after 720h | 2,665,732 | 24 days ago 2026-07-20 12:16 EDT | verified |
NYC-region filter (region 71): kept 2,459 stations, discarded 0.
Serving mode: in_process_onnx. Uncertainty method: bootstrap. The runtime scenario evaluator combines precomputed model station features (production/attraction rates, neighbor graph, time-slice features) with a distance-decayed reallocation of pairwise trips across the neighbors on the fly, so a scenario evaluation completes in under 5 seconds.
Trip data may have advanced beyond the training-window end month via public S3 releases since this model was trained. Retraining to incorporate newer months is listed in the “Inside the firewall” roadmap.
Evaluated against 132 accepted validation events. See the Validation lab for per-event residuals and rejection reasons.
Three assertions this model run enforces at training time:
For every accepted validation event, the training set contains no rows with start_date >= event.pre_end. Preserves temporal honesty.
For every accepted validation event, X_train does not contain the post-event station identity. The model cannot see the answer.
For every station with < 90 days of covered status history, risk_confidence is inflated to 'insufficient_status_history'. The forecast is not shown as if it were reliable.
The product infers rebalancing burden from inventory dynamics, not from observed truck routes. Rebalancing truck movements are not observed and would attenuate these effects in practice.
App searches that do not result in a completed trip are not in the public data. Suppressed demand is not observed here.
No public station-status archive covers 2019-05 to 2023-06. Empty/full risk is trained on the OpenBus 2015-2019 window and live GBFS polling from ingest go-live forward. No continuity claim is made across the gap.
Pricing and promotions history is not observed. It is a confounder that may explain some observed demand shifts.
What would materially improve if this workspace were connected to internal Citi Bike / Lyft operations feeds.
| Public signal | Internal signal | Expected improvement |
|---|---|---|
| Inventory jump inference from GBFS status polling | Rebalancing truck routes and dwell logs | Direct attribution of empty/full recovery to rebalancing intervention; separates operations effort from network topology effect. |
| Completed trip counts only (S3 tripdata) | App searches / suppressed demand events | Detects latent demand that never converts to a trip because of missing bikes or docks; a station's true attractive potential. |
| OpenBus 2015-2019 + live GBFS poll | Continuous station-status archive with no gap | Full-window empty/full training data; eliminates the 2019-05 to 2023-06 coverage gap and the accompanying claim-language downgrade. |
| No pricing signal | Pricing and promotion event stream | Controls for pricing-driven demand shifts; disentangles siting effects from marketing effects. |
955 stations of the historical set could not be tied to a current canonical identity with ≥ 85% confidence (29.8% of all stations ever observed). They are excluded from training and simulation.
| Canonical ID | Name | Legacy IDs | Match conf. | Last seen |
|---|---|---|---|---|
| qjlgu2v5n672 | W 42 St & 6 Ave | 60% | 2026-06-28 | |
| f5dpzdftwxg2 | Morgan HCT Charging | 60% | 2026-06-28 | |
| zz4tzrxqaxw4 | W 94 St & Central Park W | 60% | 2026-06-28 | |
| clyy3xnrjx3t | Bay St & Washington St | 60% | 2026-05-28 | |
| 3yx2s4xwfkz7 | Washington St & W 10 St | 60% | 2026-04-28 | |
| qv2bu6vypez4 | MTL-LAB-BKN | 60% | 2026-04-28 | |
| v4ltotpiyxlu | Monroe St & 11 St | 60% | 2026-03-28 | |
| s3hw34uybxde | LA Metro Demo 3 | 60% | 2025-12-28 | |
| xr2mcvgydeu5 | LA Metro Demo 2 | 60% | 2025-12-28 | |
| 6vfcqwtyau67 | Communipaw Ave & Pacific Ave | 60% | 2025-09-28 | |
| nkgmqycydhkl | Kent Ave & N 3 St | 60% | 2025-09-28 | |
| fqpk2vybydhi | Court St & State St | 60% | 2025-05-28 | |
| qvtid6h2xq2h | Broadway & W 56 St | 60% | 2025-05-28 | |
| rvdzemrdc3vz | Pier 40 X2 | 60% | 2025-05-28 | |
| uhb2nb2btuib | W 35 St & Dyer Ave | 60% | 2025-05-28 | |
| pgk6pwcdtoi5 | West St & Chambers St | 60% | 2025-05-28 | |
| k5dkwof4fpsu | 29 St & 40 Ave | 60% | 2025-05-28 | |
| 55zn2dwjlwuh | W 35 St & 9 Ave | 60% | 2025-05-28 | |
| g3lq2sm3633t | 2 Ave & 37 St | 60% | 2025-05-28 | |
| w5du2u6psgfm | Seneca Ave & Irvine St | 60% | 2025-05-28 | |
| jhplfjg2jft6 | E 9 St & 5 Ave | 60% | 2025-05-28 | |
| qcdzhtznn3ey | Humboldt St & Varet St | 60% | 2025-05-28 | |
| vgzydilzy2rp | 6 Ave & Canal St | 60% | 2025-05-28 | |
| rymrc554ffff | W 25 St & 8 Ave | 60% | 2025-05-28 | |
| 2s75oircg34k | Carlton Ave & St Marks Ave | 60% | 2025-05-28 | |
| beuhnxgheise | Sterling Pl & Franklin Ave | 60% | 2025-05-28 | |
| 7iqf6qwlrfyh | 31 St & Broadway | 60% | 2025-05-28 | |
| 672kxovpk2e4 | E 149 St & Jackson Ave | 60% | 2025-05-28 | |
| fat43pvwe5kw | Broadway & W 36 St | 60% | 2025-05-28 | |
| ciesy3hxqp4u | E 116 St & 2 Ave | 60% | 2025-05-28 | |
| xiyrqx2dtcg4 | Harborside | 60% | 2025-05-28 | |
| qsmijvxcgatu | E 68 St & Madison Ave | 60% | 2025-05-28 | |
| jkjbalfimtq7 | 190 Morgan | 60% | 2025-05-28 | |
| duwefqynyph3 | Stuyvesant Walk & 1 Ave Loop | 60% | 2025-05-28 | |
| 5toxk2wlltiq | Shop Morgan | 60% | 2025-05-28 | |
| 7pyi4lttiepk | Morgan Loading Docks | 60% | 2025-05-28 | |
| 5vcdynyluk4q | Bailey Ave & W 238 St | 60% | 2025-05-28 | |
| xbctejx5wcdr | 9 Ave & W 39 St | 60% | 2025-05-28 | |
| er5wgv72lq25 | President St & 4 Ave | 60% | 2025-05-28 | |
| m7quiswnxjwe | Soissons Landing | 60% | 2025-05-28 | |
| z6d47mdptk2y | E 167 St & Bryant Ave | 60% | 2025-05-28 | |
| mqm75byu24tx | Melrose St & Broadway | 60% | 2025-05-28 | |
| ce3tvq4dhsoi | Wythe Ave & Metropolitan Ave | 60% | 2025-05-28 | |
| gsjs6b4vxjxb | Grand Concourse & E 196 St | 60% | 2025-05-28 | |
| 4fo26ukmy3cf | W 30 St & 8 Ave | 60% | 2025-05-28 | |
| ub2on2ectyk6 | W 181 St & Riverside Dr | 60% | 2025-05-28 | |
| 3c2fhw67bcbm | Clarkson Ave & Troy Ave | 60% | 2025-05-28 | |
| z3odg57vzg4u | Morgan Bike Mechanics | 60% | 2025-05-28 | |
| imq2kqea66fi | Broadway & Hancock St | 60% | 2025-05-28 | |
| r6peoczg5ww4 | Court St & Nelson St | 60% | 2025-05-28 |