Use for cross-country RISK RANKING, not precise within-country day-of-shutdown timing.
This forecast scores the ONSET of a new recorded incident, not how censored a country already is. A permanently and stably blocked network generates no new anomaly, so it scores LOW. Measured 2026-07-31: China 0.015 and India 0.023 both rank BELOW Denmark 0.062 — China is probed 30/30 days across 836 domains and has logged nothing for 71 days, while Denmark is probed 2/30 days. A low score here means 'no CHANGE expected', never 'this country is free'. For standing severity use /v1/atlas/score-v2 or the censorship index instead.
Training ROC AUC 0.954 came from a RANDOM stratified split (consecutive country-days in an incident window are near-duplicates, inflating it). No target leakage: features use [date-7,date], label uses [date+1,date+7].
ML_LEAKAGE_AUDIT.md (forecast v1/7day row).
Complete returned record
{
"aci": {
"active": true,
"alpha": 0.048,
"empirical_coverage": 0.8979,
"last_updated": "2026-09-08T03:45:02.132824+00:00",
"n_observations": 2518,
"q_applied": 0.35,
"q_raw": 0.9762
},
"aci_alpha": 0.048,
"confidence": 0.85,
"country": "DK",
"country_name": "Denmark",
"covered": true,
"forecast": [
{
"date": "2026-09-08",
"day": 0,
"drivers": [],
"risk": 0.01
},
{
"date": "2026-09-09",
"day": 1,
"drivers": [],
"risk": 0.01
},
{
"date": "2026-09-10",
"day": 2,
"drivers": [],
"risk": 0.01
},
{
"date": "2026-09-11",
"day": 3,
"drivers": [],
"risk": 0.029
},
{
"date": "2026-09-12",
"day": 4,
"drivers": [],
"risk": 0.01
},
{
"date": "2026-09-13",
"day": 5,
"drivers": [],
"risk": 0.01
},
{
"date": "2026-09-14",
"day": 6,
"drivers": [],
"risk": 0.049
},
{
"date": "2026-09-15",
"day": 7,
"drivers": [],
"risk": 0.02
}
],
"forecast_trajectory_note": "summary.max_risk is now the independently-validated honest 7-day event probability. The per-day forecast[] trajectory is the legacy v1 illustrative shape (NOT independently validated) — use honest_forecast for the headline; the v1 value is kept as max_risk_v1_leaky.",
"generated_at": "2026-09-08T20:06:08.435644",
"honest_caveat": {
"confidence_is": "fixed in-sample model confidence, NOT a per-forecast calibrated probability",
"correct_use": "Use for cross-country RISK RANKING, not precise within-country day-of-shutdown timing.",
"detects_change_not_state": "This forecast scores the ONSET of a new recorded incident, not how censored a country already is. A permanently and stably blocked network generates no new anomaly, so it scores LOW. Measured 2026-07-31: China 0.015 and India 0.023 both rank BELOW Denmark 0.062 — China is probed 30/30 days across 836 domains and has logged nothing for 71 days, while Denmark is probed 2/30 days. A low score here means 'no CHANGE expected', never 'this country is free'. For standing severity use /v1/atlas/score-v2 or the censorship index instead.",
"headline_auc_note": "Training ROC AUC 0.954 came from a RANDOM stratified split (consecutive country-days in an incident window are near-duplicates, inflating it). No target leakage: features use [date-7,date], label uses [date+1,date+7].",
"honest_temporal_holdout_auc": "~0.85-0.90 (dual-holdout temporal gate)",
"live_forward_accountability": [
"GET /v1/sentinel/accuracy (rolling 30-day precision/recall; currently self-reported degraded)",
"GET /v1/forecast/onset-skill (honest onset / forward skill)"
],
"source": "ML_LEAKAGE_AUDIT.md (forecast v1/7day row)."
},
"honest_forecast": {
"as_of": "2026-09-07",
"flag": false,
"is_headline_source": true,
"probability": 0.2408,
"recommended_threshold": 0.625,
"risk_band": "low",
"semantics": "probability of a censorship/connectivity EVENT in the next 7 days (country-relative z-score label)",
"validation": "Independent OONI-grounded + leakage-free. Rolling-origin AUC ~0.815, PR-AUC ~0.29; beats persistence/climatology in all 9 temporal folds; LOCO beats persistence 49/51 countries. See /v1/forecast/honest/info."
},
"interval_90": [
0,
0.39899999999999997
],
"model_version": "honest_forecast_v1",
"summary": {
"avg_risk": 0.018,
"key_drivers": [],
"max_risk": 0.2408,
"max_risk_day": 6,
"max_risk_v1_leaky": 0.049
},
"top_features": [
{
"contribution": -0.0245,
"direction": "down",
"name": "week_of_year",
"source": "model"
},
{
"contribution": -0.0174,
"direction": "down",
"name": "block_rate_roll7_mean",
"source": "model"
},
{
"contribution": 0.0162,
"direction": "up",
"name": "block_rate_roll7_std",
"source": "model"
}
],
"top_features_per_day": [
{
"base_prob": 0.0038,
"date": "2026-09-08",
"day": 0,
"risk": 0.01,
"top_features": [
{
"contribution": -0.0245,
"direction": "down",
"name": "week_of_year",
"source": "model"
},
{
"contribution": -0.0174,
"direction": "down",
"name": "block_rate_roll7_mean",
"source": "model"
},
{
"contribution": 0.0162,
"direction": "up",
"name": "block_rate_roll7_std",
"source": "model"
}
]
},
{
"base_prob": 0.0038,
"date": "2026-09-09",
"day": 1,
"risk": 0.01,
"top_features": [
{
"contribution": -0.0245,
"direction": "down",
"name": "week_of_year",
"source": "model"
},
{
"contribution": -0.0174,
"direction": "down",
"name": "block_rate_roll7_mean",
"source": "model"
},
{
"contribution": 0.0162,
"direction": "up",
"name": "block_rate_roll7_std",
"source": "model"
}
]
},
{
"base_prob": 0.0038,
"date": "2026-09-10",
"day": 2,
"risk": 0.01,
"top_features": [
{
"contribution": -0.0245,
"direction": "down",
"name": "week_of_year",
"source": "model"
},
{
"contribution": -0.0174,
"direction": "down",
"name": "block_rate_roll7_mean",
"source": "model"
},
{
"contribution": 0.0162,
"direction": "up",
"name": "block_rate_roll7_std",
"source": "model"
}
]
},
{
"base_prob": 0.0038,
"date": "2026-09-11",
"day": 3,
"risk": 0.029,
"top_features": [
{
"contribution": -0.0245,
"direction": "down",
"name": "week_of_year",
"source": "model"
},
{
"contribution": -0.0174,
"direction": "down",
"name": "block_rate_roll7_mean",
"source": "model"
},
{
"contribution": 0.0162,
"direction": "up",
"name": "block_rate_roll7_std",
"source": "model"
}
]
},
{
"base_prob": 0.0038,
"date": "2026-09-12",
"day": 4,
"risk": 0.01,
"top_features": [
{
"contribution": -0.0245,
"direction": "down",
"name": "week_of_year",
"source": "model"
},
{
"contribution": 0.02,
"direction": "up",
"name": "day_decay_t+4",
"source": "overlay"
},
{
"contribution": -0.0174,
"direction": "down",
"name": "block_rate_roll7_mean",
"source": "model"
}
]
},
{
"base_prob": 0.0038,
"date": "2026-09-13",
"day": 5,
"risk": 0.01,
"top_features": [
{
"contribution": 0.025,
"direction": "up",
"name": "day_decay_t+5",
"source": "overlay"
},
{
"contribution": -0.0245,
"direction": "down",
"name": "week_of_year",
"source": "model"
},
{
"contribution": -0.0174,
"direction": "down",
"name": "block_rate_roll7_mean",
"source": "model"
}
]
},
{
"base_prob": 0.0038,
"date": "2026-09-14",
"day": 6,
"risk": 0.049,
"top_features": [
{
"contribution": 0.03,
"direction": "up",
"name": "day_decay_t+6",
"source": "overlay"
},
{
"contribution": -0.0245,
"direction": "down",
"name": "week_of_year",
"source": "model"
},
{
"contribution": -0.0174,
"direction": "down",
"name": "block_rate_roll7_mean",
"source": "model"
}
]
},
{
"base_prob": 0.0038,
"date": "2026-09-15",
"day": 7,
"risk": 0.02,
"top_features": [
{
"contribution": 0.035,
"direction": "up",
"name": "day_decay_t+7",
"source": "overlay"
},
{
"contribution": -0.0245,
"direction": "down",
"name": "week_of_year",
"source": "model"
},
{
"contribution": -0.0174,
"direction": "down",
"name": "block_rate_roll7_mean",
"source": "model"
}
]
}
]
}