Transparency
How Paravigil turns public data into a level for each country, how fresh each source is, and every correction we have made — dated.
Levels
Each country gets points from the signals below; the total sets its level. Nothing is learned or weighted in secret: the table on this page is the whole method, and an automated test checks it against the code that runs.
What scores
A signal scores from the value shown. Where there are several steps, the highest one reached counts.
| Signal | From → points | Kind of crisis | Source |
|---|---|---|---|
| Deaths in organised violence, latest 30 days of data | 1 → 1 · 25 → 2 · 100 → 3 | Conflict | UCDP GED Candidate |
| Incidents of organised violence, latest 30 days of data | 50 → 1 | Conflict | UCDP GED Candidate |
| Nuclear power plants within 50 km of organised violence, 90 days | 1 → 1 | Conflict | WRI Global Power Plant Database · UCDP |
| GDACS red alerts, 7 days | 1 → 2 | Natural hazard | GDACS |
| Natural-hazard events, 7 days | 5 → 1 | Natural hazard | GDACS · USGS · NASA EONET |
| Earthquakes M5+, 7 days | 1 → 1 | Natural hazard | USGS · GDACS |
| Extreme warnings from the national weather service | 1 → 1 | Natural hazard | WMO Severe Weather Information Centre |
| Copernicus emergency mapping activations, 30 days | 1 → 1 | Natural hazard | Copernicus Emergency Management Service |
| WHO disease-outbreak notices, 90 days | 1 → 1 | Health | WHO Disease Outbreak News |
| Critical internet-connectivity alerts, 24 hours | 5 → 1 · 20 → 2 | Connectivity | IODA, Georgia Tech |
| People in crisis-level food insecurity (IPC 3+) | 1,000,000 → 1 · 5,000,000 → 2 | Food (context) | FEWS NET |
| Refugees and asylum-seekers who fled the country | 1,000,000 → 1 | Displacement (context) | UNHCR |
| UK FCDO travel advice (2 = essential travel only, 3 = parts, 4 = whole country) | 2 → 1 · 3 → 2 · 4 → 3 | Official advice | UK FCDO travel advice |
Rising
A signal at least twice its baseline, and above a floor, adds one point and a “rising” reason — a change matters even before it crosses a threshold. The baseline is the signal’s own 30-day average (it needs a week of history; one event against a zero average is not counted). Conflict is the exception: UCDP data arrive monthly, so the latest 30 days of data are compared with the 30 days of data before them.
Compound crisis
One more point when at least two crises are happening at once — conflict, natural hazard, health or connectivity — and three kinds are involved once food insecurity and displacement are counted as the ground they land on. Official travel advice is not counted here: it reacts to the same events.
How fresh each source is
Not every source is live. A level is only as current as its slowest signal; the dates are shown with every figure.
- UCDP (Uppsala) — organised violence, published monthly for the month before — about 4–6 weeks behind. Windows are counted back from the last day in the data, not from today.Data now runs to August 31, 2026.
- GDELT (violence in the news) — machine-coded from world news, counted daily (the day before is ready each morning UTC); fills the weeks UCDP has not published yet. A trend, not verified events: shown beside the score, never in it.
- GDACS / USGS — natural hazards, minutes to hours.
- NASA FIRMS — fire detections from satellites, about 3 hours.
- UK FCDO — travel advice, changed when the government changes it.
- WHO Disease Outbreak News — outbreak notices, days to weeks after the event.
- FEWS NET — food-insecurity projections, a few times a year.
- UNHCR — refugee statistics, yearly — context, not news.
- OpenSky Network + adsb.lol — aircraft positions every few minutes; routes come from a published database and are checked before they are counted.
Data checks, now
Tests that the data under the levels is whole, not only present: months of similar size, no missing days, today's levels computed, a plausible share of countries rising. A failed check mails the association. Added after two silent failures in October 2026 (see the corrections below).
- okUCDP: the last six months are all there2026-03: 1848, 2026-04: 1751, 2026-05: 1687, 2026-06: 1784, 2026-07: 1808, 2026-08: 1774
- checkUCDP: age of the datadata until 2026-08-31, 47 days ago
- okNews signal: no missing days (30)30 days held, newest 2026-10-16
- okNews signal: newest day in line with the month2026-10-16: 3323 events, 1.11× the median day
- okLevels computed todaynewest levels 2026-10-17
- okShare of conflict countries “rising” is plausible6 of 49 countries with organised violence rising
- okFire hotspots received44017 hotspots in the last 24 hours
- okHazard feed runningnewest 2026-10-17T13:59Z, 5 h ago
Checked 10/17/26, 6:30 PM UTC
Model estimate of the months UCDP has not published
UCDP's verified events arrive about a month late. Until they do, a model estimates each country's organised violence from the last month UCDP has and from how the country's share of the world's violent news (GDELT, the signal above) moved since. It is a ridge regression on log counts, trained on the Jetson of the association from UCDP GED 1989–2025 and GDELT 2015–2025; its coefficients are below. It was trained on 2015–2022 and scored on 2023–2025, months it had not seen, against the plain rule “same as the last month UCDP has”. It is shown only because it beat that rule. Its figures are always labelled, given as a range, replaced by UCDP's when they arrive, and never enter a level.
| Input | Weight (standardised) |
|---|---|
| UCDP, the last month it has | -0.08 |
| UCDP: the three months before it, minus the last (pull back to normal) | 0.382 |
| the country's share of violent news, this month | 0.047 |
| how that share moved since UCDP's last month | 0.141 |
Tested on 2023-01–2025-12 (one month ahead)
- Typical error per country with violence: model ×2.03, “same as last month” ×2.18
- World total per month: off by 31% on average (“same as last month”: 44%)
- Ranges held the true figure 83% of the time (aimed at 80%)
In use: the same form refitted on every month through 2026-08 (trained 2026-10-16).
Track record: estimate against what UCDP later published
World total, month by month, 2023-01 to 2026-08. Each month's model saw only what was known a month before.
- UCDP published
- Model estimate
- Same as last month
UCDP GED (published figures) · model: ridge regression, rolling backtest (ml/backtest.py)
Score over 43 months
- Average error of the world total
- 29%same as last month: 44%better
- Typical error factor, countries with violence
- 2.02same as last month: 2.17better
- Countries inside the 80% range
- 82%honest
Last 6 months: world total off by 14% on average, against 17% for "same as last month".
Recomputed every week on new data. Where the model loses to "same as last month", the table says so and the site does not hide it.
Escalation risk next month (experimental)
A second model asks a narrower question: will a country's organised violence reach at least 25 deaths next month and at least double its worst month of the last three? A war that stays at war is not an escalation; a quiet country that flares up is. It reads the last UCDP months, the country's share of the world's news about violence, threats, protests and coercion (GDELT), and the violence in neighbouring countries. Its settings were chosen on 2019-2020 and it was scored, month by month, only on months it had not seen.
Most likely to escalate: October 2026
Probability from the model; UCDP data through August 2026. Most countries on the list will not escalate: these are rare events.
- 1Ecuador28%0
- 2Myanmar20%122
- 3Central African Republic18%11
- 4Mozambique17%22
- 5Indonesia17%14
- 6Chad14%16
- 7India13%16
- 8Ethiopia13%311
- 9Afghanistan12%56
- 10Iraq12%2
- 11Brazil9%24
- 12Philippines8%10
- 13Yemen8%1,380
- 14Tanzania8%0
- 15Mexico8%214
- 16Venezuela8%8
- 17Cameroon8%32
- 18Saudi Arabia7%0
- 19South Africa7%40
- 20Haiti7%47
UCDP GED · GDELT · model ml/escalation.py, refitted weekly. Each month's full list is registered the first time it is computed (this one: 2026-10-16) and checked against UCDP once that month is published.
Backtest 2021-01 to 2026-07
- Escalations caught by the month's top 20
- 59%history alone: 46%
- Average precision (higher is better)
- 0.126history alone: 0.053
- Ranking quality, ROC AUC (1 = perfect, 0.5 = chance)
- 0.85history alone: 0.74
"History alone" is the rate at which countries with the same recent level of violence escalated before. Base rate: 2% of country-months escalate.
Other rules
- A level goes up the day the score crosses a threshold and comes down only after two days below it — a score sitting on a threshold would otherwise flip the level, and send an alert, every day (since 2026-10-09).
- Rates per million people are shown only for countries of at least 500 000 inhabitants: in very small populations one event produces a misleading rate.
- A flight counts towards a destination only if its route is plausible now: closed airspace is never counted (Ukraine, including Crimea, since 24 February 2022); more than 300 km out the aircraft must be heading towards the destination (within 100°), and it may not be more than 400 km off the direct route. Flights that fail are listed separately with the reason. A possible diversion is a landing or low approach more than 150 km from the planned destination at another airport — evidence, not its cause.
- Places are named as the United Nations names them: a territory the UN does not recognise as a state carries its UN status or the state it belongs to (Kosovo (UNSCR 1244), State of Palestine, Taiwan, Province of China…).
- Positions of infrastructure in Ukraine (power plants, grid) are counted in country figures but never mapped or listed.
- No machine-learning model sets a level or labels a person. One published model estimates the months UCDP has not released yet; it is labelled as a model, tested on past years and kept out of every level (see the model section).
Corrections
When a figure we published was wrong, it is corrected and recorded here with what went wrong.
October 17, 2026
A country's level and its own page counted “deaths in the last 30 days” two different ways. The page spreads an event UCDP codes over several weeks across its days; the level took such an event whole if it began inside the window and dropped it if it began before. For Ukraine, where much is coded as weeks-long totals, the two figures were about nine times apart. Both now count the same way, the days inside the window, with tests. Found by an outside review.
October 17, 2026
The space page's “active satellites per owner, without Starlink” counted craft around the Moon and beyond, which the main count leaves out, so some owners showed more satellites without Starlink than with it. It is now counted in the same pass, with the same Earth-orbit filter. Found by an outside review.
October 16, 2026
Earthquakes of magnitude 5 and above were not counted. Magnitudes are stored as “M5.6”, and five places read them stripping only a lower-case “m”, so every value came out empty: the homepage showed no M5+ quakes, the signal “earthquakes M5+, 7 days” never added a point to any country, M6+ quakes raised no alert in the feed, and the infrastructure-risk layer left them out. Found by an outside review that compared the homepage with the map. One reader serves all of them now, with a test; levels were recomputed with the next run.
October 10, 2026
Conflict data covered one month, not 90 days. UCDP publishes each month's candidate events in its own file and earlier months in a consolidated one; only the newest file was read, so every “last 90 days” (conflict layer, infrastructure near fighting, chokepoints, area reports) held about one month, and the month before looked almost empty — which made organised violence read as “rising” in most conflict countries. All of the year's files are now read and merged (13 659 events instead of 1 806). Levels were recomputed the same night.
October 9, 2026
The “Unusual for the country” card listed conflict deaths as jumps “from zero” (Myanmar, Burkina Faso, Ethiopia): the daily norm was built from September readings the window error had emptied. Signals from UCDP, which publishes monthly, are no longer compared day by day; this card now shows only signals that change daily.
October 9, 2026
After the empty-window fix, almost every country at war showed conflict as “rising”. The comparison was with the signal’s average over the previous 30 daily readings — and those readings were wrong too: through September the window had been sliding off the end of the data, so they shrank day by day. Conflict is now compared month on month within UCDP’s own data; the daily average is kept only for signals that change daily.
October 7, 2026
Conflict signals had been empty for every country since early October: the 30-day window was counted back from today, but UCDP's latest monthly file ended on 31 August, so the window fell after the end of the data. Windows now end at the last day in the data; conflict levels return with the next six-hourly recomputation.
October 7, 2026
The compound-crisis point was given to countries where nothing was happening now: yearly food and refugee statistics plus travel advice counted as three crises (Afghanistan, Sudan, Somalia, South Sudan and Syria on 7 October). It now needs two crises happening at the same time.
October 7, 2026
The domain, link and IP tools refused private addresses, but an IPv4 address written in IPv6 form (::ffff:127.0.0.1) slipped through the check. Found by our own tests and closed before any misuse was seen.
October 4, 2026
The air page showed two flights “to Ukraine” (THY5KX to Kyiv, SDM6153 to Simferopol). Both came from route records older than the closure of Ukrainian airspace. Closed airspace, heading and detour checks were added; flights that fail are listed with the reason.
October 3, 2026
The wanted directory showed missing people and victims among wanted persons, and an age at death as a current age. Victims are no longer searched against INTERPOL notices, the reason for each listing is shown next to the name, and ages at death are labelled as such.
Found an error? Write to [email protected] — corrections are published here.