Case study
commercially launched, operating
Aeolus
A 26-station temperature-forecasting API. Statistical calibration cut forecast error 45% (CRPS 2.25 to 1.23), and it runs unattended at 99.8% daily reliability.
- forecast-skill improvement, verified before live deployment
- 45%
- calibrated forecasts issued
- 20,000+
- automated daily success rate, unattended operation
- 99.8%+
- stations covered by the forecasting API
- 26
Aeolus is a probabilistic weather forecasting API covering 26 stations. It takes GEFS ensemble output, the raw spread of a physics model run many times, and applies EMOS statistical calibration station by station to turn that spread into probabilities you can actually bet on. It has issued more than 20,000 calibrated forecasts, and I built and commercially launched it in Python.
The hard problem here is that raw ensemble weather is not honest about its own uncertainty. The spread of the members is usually too narrow, so if you read it as a probability it is overconfident, and overconfident forecasts are worse than useless when someone is pricing risk against them. EMOS fixes this by learning, per station, how to widen and shift the distribution so that when the model says seventy percent it is right about seventy percent of the time. Getting there meant iterative recalibration, and it moved forecast skill 45 percent, cutting CRPS from 2.25 to 1.23. CRPS is the error score for a full probability distribution, and lower is better.
The bug I am proudest of catching is one that never reached a customer. As I recalibrated, the in-sample numbers looked great, better than I trusted. So I stood up a shadow-mode diagnostic borrowed from betting: closing-line value, comparing each forecast against the eventual observed truth the way you would compare a bet against the closing odds. The shadow numbers disagreed with the in-sample skill, and that gap was the tell. I traced it to a lead-hour observation bug in how the calibration was being fed its data, the kind of error that quietly makes in-sample skill look better than the forecasts really are. I fixed it, recalibrated, and only then trusted the skill numbers. Because it surfaced in shadow mode, it was caught before any live deployment rather than after a customer had priced against it.
What shipped is a daily pipeline that runs itself. It has sustained better than 99.8 percent success across more than 9,100 ensemble runs at roughly sixteen seconds each, fully unattended. On top of the forecast core I conducted B2B outreach to parametric insurance firms, including Swiss Re ART and Descartes, where calibrated station-level weather probabilities are the raw material for pricing. The honest status is that it is commercially launched and operating, with the forecast engine running unattended every day.

