Censorship is contagious. When one government shows that a shutdown “works” during an election or a protest, its neighbours often follow within days, and a regional crisis can light up several countries at once. So an obvious way to sharpen Voidly’s honest 7-day forecaster is to let it see its neighbourhood: if the countries around you are spiking, maybe you are next. This finding tests that idea the only way worth testing it — leakage-free, against the same temporal cross-validation the production model is held to — and reports the result whether or not it flatters us. It does not. We did not ship it.
The production model (honest_forecast) is a HistGradientBoosting
classifier over 24 within-country features — anomaly-rate
lags and rolling means, the escalation gap and z-score versus the country’s
own trailing 28-day baseline, recent event counts, data volume, calendar terms. Its
label is a country-relative anomaly spike in the next 7 days, built on independent
OONI ground truth, and it is scored by strict rolling-origin temporal
cross-validation: each of 9 folds trains only on data strictly before its
120-day test window. Headline: AUC 0.8154, PR-AUC 0.2934, a large
honest lift over the persistence baseline (AUC 0.594). We reproduced those numbers
to four decimals before changing anything, so the comparison is apples to apples.
We grouped the 60 forecast countries into continental regions (MENA, Central Asia, South Asia, East/SE Asia, Sub-Saharan Africa, Western Europe, Eurasia, the Americas, Oceania) and added three regional signals, each computed excluding the country itself so the model can never just read its own value back:
We then ran a second, stronger variant using the contemporaneous regional value (the region’s state at time T, excluding self) — legitimately available at prediction time, since you observe other countries’ data up to T without touching the target’s future. Both variants are leakage-safe: the label lives in [T+1, T+7]; every feature is ≤ T and never uses the target country’s own forward window.
| variant | mean-fold AUC | mean-fold PR-AUC | ΔAUC | ΔPR-AUC |
|---|---|---|---|---|
| base (24 features) | 0.8154 | 0.2934 | — | — |
| + lagged contagion (27) | 0.8140 | 0.2893 | −0.0015 | −0.0041 |
| + contemporaneous contagion (27) | 0.8153 | 0.2900 | −0.0001 | −0.0033 |
Neither variant beats the base on any metric, and the per-fold AUCs show no consistent lift — some folds tick up a thousandth, most tick down. The contemporaneous version is essentially neutral on ranking (−0.0001 AUC) but still loses a little precision-recall area. Adding regional context made the forecaster slightly worse.
The honest read is that for a 7-day, country-relative anomaly-spike forecast, a country’s own recent dynamics already carry essentially all the forward signal there is. The model knows when a country is escalating versus its own baseline; the regional average is either redundant with that (correlated neighbours move together, and the country’s own lags already encode the local onset) or too coarse to add anything (a continental average pools free and censored countries and washes out).
This is not a claim that contagion isn’t real. It is a claim
about this feature, this target, this granularity. Two doors stay open:
finer political or regime-similarity neighbourhoods (rather than crude continents),
and a different target — the country-day classifier, where regime-weighted
contagion did earn its place in v3.3. But we will not ship a feature that
loses on the test that matters just because the story is appealing. The forecaster
stays at its validated AUC 0.815, and this negative is on the record so the next
person doesn’t have to rediscover it. Reproduce with the rolling-origin harness
scripts/honest-forecast-backtest.py.