Repository navigation
docs: catalog the UCDP events concentrated by measurement (#533) - #534
Merged
Polichinel merged 1 commit intoNov 4, 2026
Merged
Conversation
views-hydranet reported one cell-month holding 62% of a scored horizon's truth mass, collapsing that score's effective sample size to 2.58 cells. This catalogs the whole class. 21,766 events (5.8%) carry 21.95% of all fatality mass into a cell-month their own UCDP precision fields disown. 457 of them — 0.12% of the dataset — carry 11.22%. Ten cell-months hold 12.4% of every fatality recorded 1989-2026, and one 0.5-degree cell at 13.25N 39.25E holds 7.79% of it across eight months. Two mechanisms, not one. The first pass found only the temporal one: date_end_only assigns an annual-source event to its date_end month whatever its span, so a year-long aggregate lands on one month. The spatial one is nearly as large and was missed: passthrough returns an event unchanged whatever its where_prec, and production_parity excludes only where_prec 4 and 6, so 5 (country-level) and 7 (unclear) are pinned to whatever single cell their coordinates happen to name. The operationally important figure is temporal: in 2020-2024, 48.8% of all fatality mass is concentrated by measurement. That is the window training and evaluation splits draw on. It is 5.5% in 2010-2014. Two shapes need different remedies, which is why the catalog is tiered rather than a top-N list. Ethiopia is few enormous events (142 events, 7.96% of all mass); Ukraine is 1,893 small ones; Nagorno-Karabakh is 159 events across 78 months of persistent low-grade concentration. A magnitude threshold catches the first and misses the other two — which is independent support for views-hydranet's decision not to winsorise. Recorded and not acted on: mass over rows exceeds mass over events by 31,672 (0.91%), because ceil_split rounds up per month. Totals are not conserved today, which matters for any remedy that claims to conserve them. even_split already exists, is tested, and does conserve. No code, configuration or data changed. The distribution policy is the production-parity contract and is not mine to move; this measures its consequence and recommends nothing. Corrects one inference in #533 along the way: the anchor event is Ethiopia/Tigray, not Darfur — #484's cell is separately confirmed and is genuinely North Darfur. The two CSVs the script writes are gitignored. They are 6.7 MB of derived data regenerated by one command from a viewpoint build that is superseded every refresh; a committed snapshot would only be a stale one nobody could tell was stale. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EfeuULbPTqrx4qtNki5dy9
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes nothing. Documents the measurement behind #533 and #484; both stay open pending a policy
decision that is not this PR's to take.
What this is
views-hydranet reported that one cell-month held 62% of a scored horizon's truth mass, collapsing
that score's effective sample size to 2.58 cells out of 842,634 — deleting a single data point
moved the score by 83×. This PR catalogs the whole class that cell belongs to.
Measurement only. No code, configuration or data changed.
Headline figures
148759, 13.25N 39.25E, Tigray/Amhara)Two mechanisms, not one
The first pass at #533 found only the temporal one. The spatial one is nearly as large and was
missed:
date_end_onlyassigns an annual-source event to itsdate_endmonth "regardlessof whether the event spans multiple months" (its own docstring). A year-long aggregate lands on
one month. 3,315 events, 17.79% of mass.
passthroughreturns an event unchanged whatever itswhere_prec, andproduction_parityexcludes onlywhere_prec4 and 6. So 5 (country-level) and 7 (unclear) arepinned to whatever single cell their coordinates happen to name. 18,908 events, 15.37% of mass.
Only 181 events in the entire dataset are ever spread across months.
The figure with the largest operational consequence
Concentrated share of total fatality mass:
2020–2024 is the window training and evaluation splits draw on. Nearly half its fatality mass is in
the wrong place, the wrong month, or both.
Why the catalog is tiered rather than a top-N list
Two shapes need different remedies. Ethiopia is few enormous events (142 events, 7.96% of all
mass). Ukraine is 1,893 small ones. Nagorno-Karabakh is 159 events across 78 months of persistent
low-grade concentration. A magnitude threshold catches the first and misses the other two —
independent support for views-hydranet's decision not to winsorise.
Also found
463137, 121,848 fatalities,Aug–Oct 2022,
date_prec 5,where_prec 5, on one cell in October 2022 — 94.7% of allstate-based fatalities recorded on earth that month. It is 8% larger than the event in Summary/aggregate events are concentrated by measurement, not by reality — and one of them is ~63% of our primary evaluation score #533,
which could not see it because the scored window ends at month 504.
463131,the Tigray War's whole-year total (
2021-01-01→2021-12-31, "Tigray, Afar, Amhara") on one cell,beside three cell-mates totalling 27. The Darfur inference came by analogy with Check two very large lr_os_best values in priogrid 149451 (Darfur, 2025-10 and 2025-12) — possible summary/aggregate assignment #484. Check two very large lr_os_best values in priogrid 149451 (Darfur, 2025-10 and 2025-12) — possible summary/aggregate assignment #484's cell
is separately confirmed and is genuinely North Darfur.
31,672 (0.91%) —
ceil_splitrounds up per month, as its docstring documents. Totals are notconserved today, which matters for any remedy claiming to conserve them.
even_splitalreadyexists, is tested, and does conserve.
Negative results
date_prec == 5withspan_months == 1: zero events. Had any existed they would have beeninvisible to a span-based test.
where_prec4 and 6 are correctly excluded, as configured.through the builder. The information needed to handle these correctly is already in the store.
What is deliberately not here
source_distribution_map={"annual": "date_end_only"}is the production-parity contract and sitsformally with Håvard; changing it would move every published fatality figure. This PR proposes no
policy and changes no behaviour. It records what already exists so the decision is cheap when it
is taken.
Files
reports/investigation_summary_event_concentration/findings.md— the catalogscripts/investigate_summary_event_concentration.py— prints every figure in it and writes thetwo CSVs;
ruffandmypy --strictclean.gitignore— the two CSVs are not committed: 6.7 MB of derived data regenerated by onecommand from a viewpoint build superseded every refresh. A committed snapshot would only be a
stale one nobody could tell was stale.
Caveats carried in the document
is newer; re-run the script before citing any figure as current.
best, not measured on model scores. Sound for a count-unit CRPS, andviews-hydranet reports the direct figure is the same order — but it is a proxy, and the effective
sample sizes are computed on truth.
that is not the same as saying a particular reading was wrong.
🤖 Generated with Claude Code
https://claude.ai/code/session_01EfeuULbPTqrx4qtNki5dy9