registry-resolve, cross-register entity resolution
- Year
- 2026
- Role
- Solo
- Status
- Real Irish government data, built in one week
What it is
Entity resolution across three real Irish open-data registers: CRO company records, the Register of Charities, and public procurement award data. Deterministic ID join wherever a real identifier exists (a charity’s CRO Number maps straight onto a company number), Splink probabilistic matching for the one register with no supplier identifier at all, free-text names, sometimes with a trading-as inline.
Proving the gold standard is trustworthy
- —Evaluated against 330 blind human-labelled pairs, judged without ever seeing the model’s score. A planted 10% of pairs were secretly re-shown under a different ID to measure self-consistency: first run, Cohen’s kappa came back 0.608, which the textbook Landis and Koch convention calls “substantial” but a self-imposed stricter bar (built for exactly this reason) called “borderline, re-check before citing.”
- —Went back to the flagged disagreements, judged each one against the real record, re-ran the check. Kappa is genuinely 1.000, arrived at, not rounded there.
- —Assembled the final entity spine with best-match-per-record resolution rather than naive graph clustering, after measuring that the real data has enough crossing ties (245 charities, 683 procurement rows scoring above threshold against more than one company) that connected-components clustering would merge distinct real companies together.
Why it matters
The match threshold, 0.95, was chosen from the real precision/recall tradeoff measured on the gold labels (88.4% precision / 54.2% recall at 0.95 versus 69.5% / 57.7% at 0.90), stated with its Wilson confidence interval rather than as a bare point estimate. Every number in the project’s methods writeup cites the exact artifact and command that produced it.