Comparing CHD, GDACS and ADAM cyclone exposure estimates — and a proposed basis for standardised cross-agency monitoring · OCHA Centre for Humanitarian Data
2026-07-31
We hold three independent estimates of how many people a tropical cyclone exposed: CHD (our NHC wind-radii figure), GDACS (JRC) and ADAM (WFP). A monitoring system eventually has to show responders one number.
Decision 1 Adopt a shared convention for missing data — that a “not computed” value is a gap, never a zero. Without this, every comparison any of us runs is wrong in the same direction.
Decision 2 Accept that for uncertainty purposes there are two independent methodologies here, not three, and treat the GDACS family as one input.
Decision 3 Endorse MAX-of-sources as the operational alert number, on the condition that it always ships with provenance (which source drove it) and spread (how far the others sat).
A common grid: every storm × admin unit × wind threshold.
This is deliberately like-for-like. Where the sources still disagree, it is a real methodological difference — not an artefact of comparing different moments in a storm’s life.
935
storms on the common grid
57
of them carry a GDACS per-country figure we can compare against
36
have a positive figure from all three sources at once
Why those numbers collapse so far is the next slide — and it is the first thing we want agreement on.
For 125 storms GDACS reports no per-country figure at all — it returns the code -1, meaning “not computed”. That is a blank, not a measurement. Hurricane Maria is one of them: GDACS sized it at 11.6M people exposed storm-wide, but never split that figure by country.
Decision 1 Treat a -1 as missing, never as a zero. Score it as “GDACS found nobody” and you invent a disagreement with every source that did find people — across 125 storms, including the largest in the record.
The mechanics of how we separate a genuine zero from a blank are in the appendix.
Where both report a positive figure they agree almost perfectly — log-r 0.94 at country level and 0.91 subnationally, median ratio 0.95 and 1.00, with 86% and 92% of estimates within 2×. 90% of the storms ADAM reports are already in the GDACS positive set.
This is expected, not a criticism: ADAM ingests GDACS upstream. It matters only because two sources agreeing is often read as corroboration — and here it is substantially one methodology reported twice.
CHD spans the full record (608 storms with a positive per-country figure). GDACS switches on in 2015, ADAM in 2023 — and GDACS’s per-country breakdown is -1 for most of its early era. All three have only been simultaneously live since 2023: 62 storms.
So none of what follows is a verdict on any source’s quality over its history. It is what the overlapping window can actually support.
For the 125 “data gap” storms, GDACS has no per-country split but does have a storm-wide total — and for 91 of them CHD has a national sum to set beside it.
These storms are recoverable for comparison at the storm-total grain, even though they can never enter a per-country grid. That is worth knowing before anyone concludes GDACS “has no data” for 2016–2022.
The two axes are not strictly like-for-like — a storm-wide total versus a sum over countries — so read the position, not the distance from the line.
On units where both find people, CHD reports roughly half what the GDACS family does — median 0.63× against GDACS and 0.59× against ADAM. GDACS against ADAM sits at 0.95×. The disagreement is systematic and one-directional, not noise.
Going from country to subnational, CHD-vs-GDACS correlation falls from log-r 0.79 to 0.60 and the median ratio from 0.63× to 0.43×. Only about half of paired estimates (52% adm0, 46% adm1) land within 2× of each other.
Both start from the same NHC/JTWC advisory wind radii. The difference is what each does with the four quadrant values.
GDACS
Keeps only the maximum of the four quadrant radii and sweeps it as a symmetric circle.
“Although the bulletins list wind field information for each of the four cardinal quadrants (describing an asymmetrical wind field), the GDACS system takes only the maximum of the four values, discarding the rest, to build a maximalist symmetrical wind field.” — JRC, GDACS MHEWS guide
CHD
Interpolates all four quadrants into an asymmetric polygon.
The physically realistic shape: a cyclone’s 34 kt extent is routinely two to three times larger on one side of the eye than the other.
A max-radius circle always encloses the quadrant polygon it was built from. So CHD ≤ GDACS is structural, not incidental — and JRC intends it: they take the maximum “to be conservative on the number of people affected”, noting the affected area is thereby overestimated.
Sources: European Commission JRC, GDACS Multi-hazard Early Warning System (JRC141661, 2025; doi 10.2760/1461943) · Vernaccini, De Groeve & Gadenz, Humanitarian Impact of Tropical Cyclones, JRC, EUR 23083 EN, 2007, §2.2.
Every advisory during the crossing carried 34 kt radii of NE 100, SE 100, SW 0, NW 0 nm — no tropical-storm winds to the west, where Haiti is. CHD honours those zeros and places nobody in Haiti; GDACS takes the maximum and sweeps 100 nm in every direction, putting 5.9M people inside. Next door on the Dominican Republic, all three agree within 2%.
We assumed NHC’s own picture would look like the GDACS circle and vindicate the larger number. It does not. NHC’s published advisory wind field for Franklin covers 0% of Haiti — the same as CHD, and it is the shape CHD is reproducing.
Source: NHC GIS archive, al082023_fcst_* initial wind radii, all 20 advisories.
But nobody is verified here. NHC’s post-storm report finds that reliable stations in the Dominican Republic recorded no sustained tropical-storm-force winds (peak gust 45 kt at Barahona), and that no wind or rainfall data are available for Haiti at all.
NHC did issue tropical-storm warnings for Haiti’s south coast — a warning is a statement about risk, not a measurement.
So the honest reading is not “GDACS invented 6M people”. It is that the max-radius rule turns an absence of data in two quadrants into a presence of population — and on this storm nobody, including NHC, can say who was right.
Which number is right. We have no ground-truth exposure count to score any source against. A source reading lower is not thereby better calibrated, and CHD reading lower is not evidence that CHD is correct.
Whether “conservative” is wrong. For an alerting system, deliberately overestimating the footprint is a defensible choice — it is the same instinct behind taking the MAX. It just needs to be a known choice rather than an invisible one.
How ADAM inherits it. WFP states ADAM draws on JRC data, and our figures show near-identity with GDACS — but we have not found public documentation of ADAM’s footprint construction. That step is inference from the correlation, not a cited fact.
For discussion Can WFP confirm whether ADAM reuses the GDACS wind footprint or rebuilds its own? That single answer decides whether the AAC is looking at two independent estimates or three.
Set magnitude aside and just ask whether a unit is exposed at all. At country level the two sources agree 65% of the time (κ = 0.32 — modest but real). Subnationally they agree 48% of the time, κ = −0.10 — no better than chance.
Cohen’s κ corrects for agreement you would get by chance alone; 0 is chance, 1 is perfect. The subnational cell is where an alert actually points a responder.
The alert pipeline currently takes the MAX across available sources: the highest credible estimate is the operationally relevant one.
The case for it
What it costs
Assessed over the all-three-live era only (2023–2025, 62 storms), where a missing value genuinely means “this source found nobody” rather than “this source was not running yet”.
Over the recent era, total exposed is 224M under CHD alone, 492M under the mean of three, and 725M under MAX — 3.2× CHD and 1.5× the mean. Bias to action is a real, large shift, not a rounding adjustment.
Weighted by the people who actually land in the operational figure, ADAM supplies 70% of the country MAX and GDACS most of the rest. CHD contributes 4% — and 10% subnationally. The number OCHA shows is overwhelmingly a GDACS-family number.
The right-hand panel counts cells instead of people: CHD wins 27% of subnational cells but only 10% of the people, because it reaches many small units that carry few residents. That gap is a coverage-breadth signal, not a second opinion on the headline.
Most of the time MAX is near-consensus — the median cell sits 8% above the runner-up. But 13% of country cells and 12% of subnational cells hide a 2× or larger disagreement, and 4–7% hide a 5× one. MAX alone gives an operator no way to tell those cases apart.
Alberto 2024 over Mexico: across 24 states, all three sources win somewhere. The subnational surface a responder reads is a patchwork — Nuevo León is an ADAM number, Veracruz a GDACS one, Tamaulipas a CHD one.
This is inherent to taking a per-unit maximum. It is not wrong, but it means “the exposure map” is not the output of any single methodology.
Summing the subnational numbers and comparing to the national one: the median ratio is 1.00× and the 90th percentile 1.05×. Each source now reconciles across admin levels, so the residual is per-unit source-switching — modest, with a few real exceptions (Alberto/MEX +2.2M, Milton/USA +2.1M).
Decision 1 A shared missing-data convention. A “not computed” value is a gap, not a zero, in any cross-source comparison any of us publishes.
Decision 2 Two methodologies, not three. Treat the GDACS family as a single input when reasoning about agreement or uncertainty — three sources agreeing is really two.
Decision 3 MAX as the action number, never bare. Keep MAX for alerting, but publish it with the contributing values, the provenance of the winner, and the spread — so the 1-in-8 cells with a 2× disagreement are visible rather than buried.
None of this asks any agency to change how it computes exposure. It asks us to agree on how we compare, combine and caveat what we already produce.
JRC / GDACS — a per-country breakdown wherever a storm total exists (the -1 era is the single biggest constraint on comparability), and adm0/adm1 figures that reconcile with each other.
WFP / ADAM — explicit flagging of where a figure is re-derived from GDACS versus computed independently, so downstream users can tell corroboration from duplication.
OCHA / CHD — we publish the harmonised grid, the five-case fills and this comparison in full, and will carry provenance and spread through to the alert product.
The prize is a monitoring product where a number’s origin and uncertainty travel with it — which is what makes it usable by agencies that did not compute it.
Treat this as a carefully worked characterisation of how these sources relate, and a method any of us can re-run — not a verdict on any source’s quality.
Full methodology, code and the underlying chapters: OCHA-DAP/ds-storm-impact-harmonisation — chapters 09 (source comparison) and 10 (MAX methodology).
Detail behind Decision 1 — how a genuine zero is told apart from a blank
Ask GDACS “how many people did this storm expose in Honduras?” and for many storms the answer that comes back is -1.
-1 is not a population. It is a status code meaning we did not compute this. GDACS is being honest — it is telling you it has no answer, not that the answer is nobody.
The trap is what happens next. Anyone tidying that data has to do something with the -1, and the tempting move is to treat it as 0. At that point the record silently changes meaning: “GDACS did not answer” becomes “GDACS said nobody was exposed.”
Why it wrecks a comparison. CHD does have a figure for those storm-countries. So every -1 converted to a 0 manufactures a fake disagreement — CHD says millions, GDACS apparently says none.
Across 125 storms that would produce an enormous, entirely artificial gap between the two sources, and any conclusion drawn from it would be wrong.
GDACS answers the exposure question in two different places, and the difference is what makes the problem solvable:
getimpact — per country
The only source of a country-by-country breakdown. This is the one that returns -1 for GDACS’s ~2016–2022 era.
gettimeline — one storm-wide total
A single number for the whole wind footprint, summed across every area. Available throughout, including where getimpact is -1.
The storm-wide total is the discriminator. If it is 0, the storm exposed nobody anywhere — so a blank per country is a genuine zero. If it is large, people clearly were exposed — so a blank per country is a gap in the breakdown, not an absence of people.
Maria: getimpact = -1 for every country, gettimeline = 11.6M people. The second number is what tells you the first one is a blank rather than a zero.
Each (storm, country, threshold) GDACS cell is filled 0 or missing by five cases — this is the rule Decision 1 asks the cell to adopt:
| situation | fill | |
|---|---|---|
| 1 | positive per-country value | the value |
| 2 | GDACS computed that threshold, this country absent from the footprint | 0 |
| 3 | storm total = 0 — it exposed nobody | 0 |
| 4 | per-country -1, or no per-country value but storm total > 0 |
missing |
| 5 | storm not tracked, or 50 kt (no GDACS buffer) | missing |
Cases 2 and 3 are the defensible zeros — GDACS genuinely placed nobody there. Cases 4 and 5 are blanks and are held out of the comparison entirely rather than counted against any source.
CHD is our own database, so a missing value there is a true 0. GDACS carries no 50 kt buffer, which is why GDACS comparisons run at 34 and 64 kt only.