Fan identity resolution
The same fan buys tickets in Archtics, exists in KORE, shops the team store, orders on the concessions app, and opens the newsletter — as five different records. This model matches a simulated fan base across those systems and shows the tradeoff at the heart of entity resolution: merge too eagerly and you combine different people; too cautiously and one fan stays five strangers.
Match threshold
Minimum pair score to merge
0.72
Pairs are scored on weighted agreement: email 0.45, phone 0.30, name similarity 0.35, address 0.20, with a penalty when first names conflict. Records join a profile when a path of pairs clears the threshold.
Source systems
Ticketing
601
CRM
496
Retail
365
Concessions app
326
Email list
587
Simulated with the corruptions real data has: nicknames, typos, secondary emails, missing phones, and spouses sharing an email and address.
Resolution at threshold 0.72
886
resolved fan profiles from 2,375 raw records across five systems
63%
Duplication removed
719
Multi-system profiles
The tradeoff — measured against known truth
The fan base is simulated, so ground truth is known. Move the threshold and watch the two error types trade: precision falls when households over-merge; recall falls when name variants split.
90.0%
Pairwise precision
97.5%
Pairwise recall
precisionrecallDashed line marks the current threshold — click the chart or use the slider to move it.
One fan, 5 systems
| Source | Name on record | Phone | Zip | 12-mo spend | |
|---|---|---|---|---|---|
| Ticketing | Jen Weber | jennifer.weber62+t@example.com | 7165558133 | 14213 | $6,380 |
| CRM | Jen Weber | jennifer.weber62@example.com | 7165558133 | 14213 | — |
| Retail | Jennifer Weber | jennifer.weber62@example.com | 7165558133 | 14213 | $396 |
| Concessions app | Jen Weber | jennifer.weber62@example.com | 7165558133 | 14213 | $794 |
| Email list | Jennifer Weber | jennifer.weber62+e@example.com | — | 14213 | — |
| Unified profile | $7,570 | ||||
Reading the model
- 01
2,375 raw records resolve to 886 fans at the current threshold — a 63% duplication rate. Every count, campaign, and lifetime-value number computed on raw records is inflated by that amount.
- 02
At threshold 0.72, pairwise precision is 90.0% and recall is 97.5%. Lowering the threshold merges more true duplicates but starts combining household members who share an email and address; raising it splits real fans across systems. The threshold is a business decision, not a technical one.
- 03
The example below shows why this precedes lifetime value: one fan's spending looks like 5 unrelated mid-size customers until the records merge — $7,570 of annual spend becomes visible as a single relationship.
Method
Candidate pairs come from blocking — records sharing a normalized email, a phone number, or a last-name prefix within a zip code — so the comparison space stays tractable. Each pair is scored on weighted field agreement with nickname canonicalization (Bob is Robert), edit-distance name similarity, address normalization, and a penalty for conflicting first names, which is what keeps most spouses apart despite a shared email and address. Records cluster by union-find over pairs above the threshold, and metrics are computed on the transitive closure, the honest way: a bad merge poisons the whole cluster it joins.
This is the unglamorous model everything else depends on. Lifetime value, renewal risk, lead scoring, and campaign measurement all assume one row per fan; on raw records they run on inflated denominators. In production this is deterministic-plus-probabilistic matching (a Fellegi–Sunter-style framework or a commercial CDP), with survivorship rules choosing the best field values for the golden record, human review queues for borderline scores, and household modeling as a feature rather than a failure mode.
The fan base is simulated (seeded, stable across visits): 800 households’ worth of fans scattered across five systems with realistic corruptions. Ground truth is retained so precision and recall are exact, not estimated.