On 2026-05-20, a deep audit of Voidly Atlas surfaced a problem with the Sentinel shutdown forecast that had been hiding in plain sight for at least 30 days: the model was severely miscalibrated — by roughly 15× — in the prediction range where 99% of forecasts actually live.

The bombshell

Voidly's own /v1/sentinel/accuracy endpoint already published the prod_rolling block showing this. Sorted by predicted probability bucket:

The base XGBoost ranks correctly (higher prediction ⇒ higher observed) but says “5% risk” when the actual rate is 60-80%. Brier 0.59, calibration MAE 0.60. The shipped forecasts looked falsely confident in safety.

The fix

The cleanest correction for this kind of systematic underestimation is isotonic regression: fit a monotonic map from predicted probability to observed probability, then apply it after the base model. We refit on 810 live (forecast, outcome) pairs spanning the last ~30 days from the sentinel_outcomes table — every prediction that's had time to settle against a real outcome.

Implementation took ~30 lines of Python (sklearn IsotonicRegression + a lookup table) plus four small edits to forecast_api.py: load the calibrator at startup, apply CALIBRATOR.predict([raw_prob]) after MODEL.predict_proba(), gate by the 30-country watched set (so US/JP/DE/GB don't get extrapolated). Restart the service.

Results

Honest caveats

Reproducibility

Code is at scripts/refit-isotonic-calibration.py in the public repo. Inputs: sentinel_outcomes table. Output: forecast_calibrator_v2_isotonic_prod.pkl. The full refit metrics (before/after Brier, MAE, per-bin breakdown) are at ml-deploy/forecast_calibration_refit.json on the Vultr ML server.