Skip to content

Latest commit

 

History

History
64 lines (48 loc) · 3.33 KB

File metadata and controls

64 lines (48 loc) · 3.33 KB

Eval report

Dataset: large-corpus. Generated by reconcile eval. This file is committed and regenerated on release. Numbers come from running the matcher on seeded synthetic fixtures with planted ground truth; there is no real personal data in the fixtures.

The counts below describe the code at this file's last regeneration and predate later matcher changes; large-corpus-stage-baseline-2026-08-03.md records what the current code produces over the same seed, and the next release-time make eval-large realigns this file.

Why these metrics

A false merge joins two different people and can corrupt a record irreversibly. A missed match leaves a duplicate, which is recoverable. The two errors are not equal, so the gated metric is the false-merge rate among auto-merged pairs, and it is reported with a Wilson confidence interval because the denominator is small.

Results

Metric Value 95% CI
Records 50066
True duplicate pairs (ground truth) 12438
Candidate pairs after blocking 2204992
Auto-merged pairs 11728
Pairs sent to review 838
False-merge rate (gated) 0.6% (74/11728) [0.5%, 0.8%]
Missed-match rate 0.0% (0/12438) [0.0%, 0.0%]
Precision, auto 99.4%
Recall, auto 93.7%
Precision, auto+review coverage 99.0%
Recall, auto+review coverage 100.0%
Blocking misses (true pairs never scored) 0

Gate

False-merge gate at threshold 1.0%: PASS (observed 0.6%).

Recall at the auto level is intentionally below 100%: pairs the matcher is unsure about are not auto-merged, they are sent to review. The auto+review coverage recall is the share of true duplicates the system surfaces to a human one way or another.

Performance

Wall clock: 42.1s for 50066 records (71,344 records/minute). Peak resident memory: 1,813.2 MiB. Includes corpus generation when regenerated in this process; run with a pre-generated --out-dir to time the pipeline alone.

Recall by name-origin class (R5)

Class True pairs Auto Auto+review Coverage recall (95% CI)
anglo 1717 1608 1717 100.0% [99.8%, 100.0%]
arabic 1793 1739 1793 100.0% [99.8%, 100.0%]
east_asian 1827 1655 1827 100.0% [99.8%, 100.0%]
hispanic 1777 1660 1777 100.0% [99.8%, 100.0%]
slavic 1749 1629 1749 100.0% [99.8%, 100.0%]
south_asian 1780 1740 1780 100.0% [99.8%, 100.0%]
vietnamese 1795 1623 1795 100.0% [99.8%, 100.0%]

Recall by error channel

Class True pairs Auto Auto+review Coverage recall (95% CI)
address_variant 1426 1426 1426 100.0% [99.7%, 100.0%]
compound_surname 561 520 561 100.0% [99.3%, 100.0%]
date_drift 1781 1781 1781 100.0% [99.8%, 100.0%]
dob_typo 1198 1198 1198 100.0% [99.7%, 100.0%]
exact 1731 1731 1731 100.0% [99.8%, 100.0%]
nickname 1537 1097 1537 100.0% [99.8%, 100.0%]
transliteration 966 882 966 100.0% [99.6%, 100.0%]
typo_first 1821 1702 1821 100.0% [99.8%, 100.0%]
typo_last 1417 1317 1417 100.0% [99.7%, 100.0%]

Name-origin classes and error channels are generator labels, not measured demographic data; see tools/corpusgen/__init__.py for what this breakdown does and does not claim.