The portfolio

Projects

Things I've built — and the results they produced. Each project is the technical end of a thread; the approachable first pass lives over in Writing.

Forecast evaluation · Models & their fudges

Which forecast should you trust?

A granularity-and-horizon audit of ten demand-model families on 110M Citi Bike trips: the daily champion is the worst annual accountant, nothing honest beats "same day last year" at 90 days, and equal information makes a zero-shot foundation model tie a tuned tree. Final champion: the arithmetic mean.

20 models × 6 horizons  ·  Python · XGBoost · statsforecast · Chronos
Read the case study →
20 models × 6 horizons
Headline result
Python · XGBoost · statsforecast · Chronos
Preview of the Citi Bike weather station explorer map
Preview · Interactive map

Citi Bike weather station explorer

A MapLibre station explorer for 2023 Citi Bike demand: filter by temperature band, rain, time of day, and day type to see which parts of the network move with the weather.

1,110 stations  ·  MapLibre GL · Python · station-hour data
Open the live map →
All projects
79.5% coverage
Probabilistic forecasting · Models & their fudges

Forecasting Citi Bike demand

A decision layer for one-day Citi Bike demand: conformalized quantile forecasts that restore 80% interval coverage, a 90th-percentile newsvendor rule for rebalancing, and an ops memo that turns uncertainty into a truck plan.

Python · LightGBM · scikit-learn
View →
6.4× efficiency
Causal ML · Models & their fudges

Who should get the ad?

A/B testing done properly on a real 14M-user randomized experiment: randomization audit, doubly-robust ATE (the naive estimate was 13–25% inflated), T-learner uplift models validated on held-out randomization, and a targeting policy keeping 77% of the lift at 30% of the cost.

Python · LightGBM · scikit-learn
View →
Interactive
Interactive · Models & their fudges

Orbit Lab

An interactive applet that lays a perfect-circle model over a planet's true orbit and scores the fit live — R² and RMS update as you switch planets and toggle a heliocentric/geocentric origin.

Astro · p5.js
View →