Every other censorship-prediction system we know of forecasts a single horizon. Per Agent 2 of our research stack, the SoTA literature (Temporal Fusion Transformer, IJ Forecasting 2021; Sun et al. spatio-temporal conformal 2024) says multi-horizon jointly modeled gives better calibration + per-horizon interpretability.

We shipped it today.

LOCO metrics — all three horizons honest

HorizonPositive rateLOCO AUCLOCO F1LOCO Brier
1d3.56%0.90740.4480.028
7d10.35%0.88280.6600.055
30d22.40%0.84490.7010.108

All three cleared their promote thresholds (1d ≥0.85, 7d baseline, 30d ≥0.75). The cross-horizon consistency check passes (LOCO AUCs follow expected ordering 1d ≥ 7d ≥ 30d as the longer horizon's label noise dominates).

Drivers DIFFER per horizon

The most interesting finding: the model learns different top features for different horizons, matching the SoTA literature.

Per-country LOCO breakdown

Country1d AUC7d AUC30d AUC
Iran (IR)0.9220.650 ⚠0.796
Venezuela (VE)0.9770.9750.924
Russia (RU)0.8130.8330.807
China (CN)0.8790.9470.814
Egypt (EG)0.9700.9580.845

Venezuela + Egypt are exceptionally clean across all horizons. Iran struggles at 7d (AUC 0.65) — the 7-day window is the worst zone for IR's discrete-event shutdown pattern (elections, protests). The 1d and 30d horizons pin down IR's signal better than the 7d window does. Russia is symmetric the opposite way: weakest at 1d (false-positive prone), best at 7d.

API

GET /v1/forecast/{cc}/multi-horizon — returns 1d/7d/30d probabilities + 90% conformal intervals + per-horizon top-5 SHAP + monotonicity consistency check.

GET /v1/forecast/multi-horizon/info — model metadata and LOCO metrics per horizon.

The legacy /v1/forecast/{cc}/7day endpoint is UNCHANGED. Backwards-compatible deployment.

Honest caveats

Reproducibility

scripts/build-forecast-multi-horizon-labels.py derives target_1day / target_7day / target_30day from the incidents table with monotonicity verification.

scripts/train-forecast-multi-horizon.py trains three independent XGBoost + isotonic models. LOCO predictions persisted for conformal interval estimation.

scripts/patch-multi-horizon-endpoint.py idempotent Flask route patcher with ast-validate-and-rollback safety.