What caused this shutdown?
Synthetic difference-in-differences attribution. For any country + date, we build a counterfactual block-rate from a weighted combination of stable-democracy donors that fit the treated country's pre-period trend, then measure the post-period gap. The gap is the causal-effect estimate. Permutation p-value gauges significance.
Method: Arkhangelsky et al. arXiv:1812.09970 · Internet Society NetLoss (ACM JCSS 2024) · Raw JSON
Try: IR 2026-05-13 · VE 2026-05-10 · RU 2026-05-15
Iran on 2026-05-13
Candidate trigger event
upstream_anomaly_signalNo political event found in window; attribution rests on OONI anomaly signal preceding T.Synthetic-control donor weights
The synthetic counterfactual is a weighted combination of these donor countries. Weights are non-negative and sum to 1, fit on the 9 pre-period observations by constrained least-squares.
| Donor | Weight | Share |
|---|---|---|
| NL | 0.952 | |
| CA | 0.042 |
Method — how this works
- Pull daily block_rate for the treated country from T−14 through T+6 using the OONI + IODA + CensoredPlanet aggregates in
evidence. - Pull the same window for 15 candidate donors (stable democracies). Filter to those with ≥5 observations per period.
- Fit synthetic-control weights via scipy SLSQP with constraints: w ≥ 0, Σw = 1. Minimize sum-of-squares between treated's and weighted-donors' pre-period series.
- Compute post-period treated mean and synthetic mean. The gap is the causal effect.
- Run an in-space placebo: pretend each donor was the treated, refit, compute their effect. Permutation p-value = fraction of placebos with |effect| ≥ observed.
- Cross-reference
events.dbfor political events within ±7 days. Prefer hard events (election/protest/coup) over auto-mined signals.
Honest caveats: if pre_rmse > 0.10 the pre-period donor match is poor — don't cite the effect. If the treated country is already at a ceiling block_rate before T (like Iran usually is at ~95%), SDiD will produce a small or negative effect because there's no “room above” the trigger to lift things. The script reports low_confidence: true + a reason in those cases.
References
- Arkhangelsky et al. — Synthetic Difference-in-Differences (arXiv:1812.09970)
- Internet Society NetLoss — econometric shutdown impact (ACM JCSS 2024)
- Doubly-robust DiD + SC extension (arXiv 2025)
- /sentinel/backtest — reliability diagram for the forecast model
- /atlas/models — full ML model registry