An algorithmic hypothesis-generation system that cross-references missing-person and unidentified-remains records to surface candidate matches years before a human volunteer would stumble onto them — if ever.
A record is only as good as whoever typed it in, sometimes decades ago. "Lakin" became "Larkin." An exact date became a first-of-month placeholder. The matching engine expects this — fuzzy names, month-precision dates — rather than trusting the record as typed.
Official systems compare missing-person and unidentified-remains records against each other at entry time — but an old case is rarely re-checked against everything added since. This system re-runs every old case against every new one, indefinitely, so nothing goes stale just because it's old.
Experienced volunteer sleuths are genuinely good at spotting these connections — one found this case in an afternoon, once she happened to look. This system doesn't replace that skill; it aims to make the next match take an hour of triage instead of a lucky afternoon of browsing.
Every output is handed back to that same community, through the same channel — NamUs submission — that resolved this case in the first place.
NamUs auto-compares its own missing-person and unidentified-remains records on dates, geography, and demographics — and still missed this pair for over four decades. Names on Doe records are sometimes wrong by a letter. Dates like "April 1" are often placeholders for "sometime in April." Neither of those gets fixed by more forensic work. They get fixed by better matching.
The system below treats every candidate pair as a lead for human review, never a conclusion — every output is meant to be verified and submitted through NamUs by a person, the same way this case was.
Name known, person not found. Matched against Doe records on fuzzy name similarity, date windows, geography, and demographics — weighted, never veto'd on a single field.
Person found, name not known. Name hints, when present, are treated as possibly misspelled — exactly the detail that solved this case.
Identity confirmed, no next-of-kin located. A simpler, stricter problem: near-exact name matching against missing-person records — often resolvable with one phone call.
Every score is decomposed into the evidence behind it — no black-box confidence number. This is the actual validation output from the current matching engine, run against four missing-person and five unidentified-remains records.
| Missing Person | Candidate | Score | Notes |
|---|---|---|---|
| MP-D02 Linda Castellanos |
UP-D11 | 0.934 | Age, geography, and demographics all align within tight tolerances. |
| MP24043 Douglas Lakin |
UP4342 hint: "Douglas Larkin" |
0.851 | The real, FBI-confirmed match.
Military + prints → NGI resubmission
|
| MP-D03 Harold Jensen |
UP-D12 hint: "H. Jansen?" |
0.710 | Name and geography strong; temporal gap (5 years) pulls the score down. |
| MP-D01 Raymond Okafor |
UP-D10 | 0.694 | Recorded race differs — flagged, not excluded: anthropological estimates on remains are error-prone. |
Every output is scored evidence for a human to review and submit through official channels — never a public claim or a family notification.
A missed true match can cost years. A false candidate costs a reviewer ten minutes. Thresholds are tuned to surface generously and filter with people.
Match confidence and "how cheaply can this be confirmed" (e.g. a fingerprint resubmission for a veteran) are deliberately independent scores.
The core goal is measurable — the gap between recovery and confirmed ID — and every resolved case in the sweep feeds that number back in.
A second, separate technique looks for structure among Doe cases directly — not against missing persons, but against each other. Two bounded methods, chosen deliberately over "AI reads the news," which mistakes media attention for signal:
Flags places where more Does turn up, closer together in time, than case density alone would predict — the same class of method behind the Murder Accountability Project's homicide-data clustering. Every output carries an explicit caveat: a density anomaly is not evidence of a common cause until checked against population, waterway proximity, and seasonal base rates.
Fuzzy-matches specific, stated details in case narratives — a distinctive restraint method, a disposal detail — across jurisdictions that have no reason to compare notes. Deliberately narrow: matches only fire on specific terms, not generic case language, to avoid mistaking shared report-writing templates for a real signal.
Illustrative example (synthetic data, fictional region labels — not real cases): four synthetic Doe records placed within 15 miles and 11 months of each other correctly triggered a cluster flag in validation testing; two synthetic records 900 miles apart both mentioning the same distinctive disposal detail correctly triggered a narrative match. Both outputs are analyst leads for a human researcher to pursue against real case files — never a claim that a pattern exists.
Resolved cases don't update everywhere at once. Douglas Lakin's case was FBI-confirmed in February 2026 — but volunteer-run case-tracking sites can lag by months. A courtesy-notification step drafts a short, factual, sourced message for exactly this situation:
| Field | Value |
|---|---|
| Case | Douglas David Lakin |
| Resolved via | FBI, confirmed February 16, 2026 |
| Drafted message | "I believe this case may have been resolved… could you confirm and update if accurate?" |
| Status | Drafted — awaiting human review |
Every notification is drafted, never sent automatically. A person verifies the resolution against a primary source and sends it manually — the slowest, most deliberate step in the entire pipeline, by design.