Where we are
Session 2 produced numbers: this pair of names scores 0.94 on Jaro-Winkler, these addresses share three tokens of four. None of that says whether the pair is a match. A similarity of 0.94 on a surname means something quite different from 0.94 on a phone number, and the difference is measurable rather than a matter of taste.
★ What you walk out with tonight. The two probabilities that turn a similarity into evidence, and why their ratio is the whole model. The arithmetic of a match weight, computed by hand on a real Meridian pair. And the reason a single threshold is not a simplification of Fellegi-Sunter but a departure from it.
LiveWhy the same similarity means different things4 min▶
Two records agree on the surname Smith. Two other records agree on the phone number 0422 909 118. Both are exact agreements, and they are worth wildly different amounts, for a reason that has nothing to do with the strings.
Lots of unrelated people are called Smith, so a surname agreement happens by chance reasonably often. Almost nobody shares a mobile number, so a phone agreement almost never happens by chance. The evidence a field provides depends on how surprising the agreement is, and that is an empirical property of your data rather than a judgement about the field.
In Meridian, two completely unrelated people are called Maria Gonzalez, and a father and son are both James Whitmore. Meanwhile every phone agreement in the file is a genuine link except one, where a father and son share a household landline. That asymmetry is the model in miniature: names agree by chance, phones almost do not, and the exception is instructive.
Self-studyWhere this comes from3 min▶
Fellegi, I.P. and Sunter, A.B., "A Theory for Record Linkage", Journal of the American Statistical Association, volume 64, number 328, 1969, pages 1183 to 1210. It formalises the approach Newcombe and colleagues published in Science ten years earlier, which session 1 covered.
It is worth reading for one reason beyond the model: it treats linkage as a decision problem with costs, not a classification problem with an accuracy score. The paper's central theorem is about minimising the amount of human review needed to hold two error rates below chosen bounds. That framing is what produces the three-way rule in Part 3, and it is the part that gets lost when the model is reimplemented as "score the pairs and pick a cutoff".
Two probabilities per field, and only their ratio matters
8 min liveFor each field you compare, Fellegi-Sunter asks two questions. Both are about frequencies you can count, and the answer to each is a probability between zero and one.
LiveThe counter-intuitive half: u does the work5 min▶
People reach for the field they trust, meaning the field that is usually filled in and usually correct. That instinct optimises m and ignores u, and u is where the discriminating power lives.
Company name in Meridian has an m of 0.95, which is excellent: when two records really are the same person, they almost always agree on the employer. It is also the weakest field in the model, because its u is 0.06 - plenty of unrelated people work at the same company. Agreement is worth only about +4.0. The phone number has a lower m of 0.88, because people change numbers, and yet agreement is worth +8.8, because its u is 0.002.
The practical version: a field is valuable in proportion to how much it would surprise you to see it agree between two strangers. That is why a national identifier is worth more than a name, and why "country" is worth almost nothing even though it is populated on every row and always correct.
LiveDisagreement carries evidence too4 min▶
A field that disagrees is not neutral, it is evidence against the pair, and its size follows the same logic:
- Agreement adds log2(m / u).
- Disagreement adds log2((1 - m) / (1 - u)), which is negative.
Notice what makes a disagreement expensive. Email in Meridian has an m of 0.55, because half of all true pairs have a work address on one record and a personal one on the other, so an email disagreement barely counts against a pair at about -1.2. Company has an m of 0.95, so a company disagreement is a real problem at about -4.2. A field where matches often disagree cannot punish you for disagreeing.
Missing values are a third case, and the honest treatment is to let them carry nothing at all. If one record has no email, that is neither agreement nor disagreement, so the field contributes zero rather than a penalty. The bench does exactly this, which is why Aisha Bello's two records still match on their other fields.
Self-studyWhere m and u come from in real work5 min▶
The table in the bench is a stand-in, and the page says so. In real work you get these numbers three ways:
- Count u directly. It needs no labels at all. Take random pairs from your data, which are overwhelmingly non-matches, and count how often each field agrees. For a surname you can do better and use a frequency table, so that agreeing on Smith is worth less than agreeing on Okonkwo. Splink supports exactly this as term-frequency adjustment.
- Estimate m from your labels. Among the pairs you labelled as matches in session 1, count how often each field agrees. Twenty labelled pairs gives a rough but usable number.
- Estimate both with expectation maximisation. Fit the model without labels by treating match status as a latent variable. This is what Splink does by default, and it is why Splink can get started on unlabelled data. It is also why you should still hold labels back to check the result.
The full weight for a pair includes one more term, a prior for how common matches are at all: log2(lambda / (1 - lambda)). In Meridian 35 of 1,953 pairs match, so that term is about -5.7, and it is why a single agreeing field is not enough to call a match. One name agreement is +5.5 against a prior of -5.7, which lands just below zero. Two strangers agreeing on one field is exactly what you would expect to see.
One pair, five fields, added by hand
6 min liveThe weights sum. That is an assumption, not a fact, and it has a name: conditional independence given match status. It is usually slightly wrong and usually good enough, and knowing where it breaks is part of using the model well.
LiveWhere conditional independence breaks5 min▶
Summing the weights assumes that, once you know whether a pair is a match, the fields agree or disagree independently. Two places that fails, both visible in Meridian:
- Address and postcode. If the street agrees the postcode almost certainly agrees, so counting both double-counts one piece of evidence and inflates the weight. Treat them as one comparison or accept the inflation knowingly.
- Company and email domain. Sarah's email changed because her employer changed. Two disagreements, one underlying cause, counted twice against the pair. Her total of 0.84 is pulled down partly by double-counting a single life event.
The usual remedies are to combine correlated fields into one comparison, or to model the interaction explicitly. Splink lets you do the former easily and the latter with effort. What you should not do is add every column you have and assume more evidence is better; correlated fields make the model overconfident in both directions.
Two thresholds, and a band that belongs to a human
7 min liveHere is the structural point. Fellegi and Sunter do not describe a cutoff. They describe an upper threshold above which a pair is a designated match, a lower threshold below which it is a designated non-match, and the region between them, which is sent for clerical review. Their central theorem is that this partition minimises the volume of human review for chosen error bounds.
LiveWhat one threshold costs you5 min▶
Because those two pairs score the same, a single cut has to get one of them wrong. The bench measures all three options over the whole file:
| Decision rule | Precision | Recall | F1 | Missed | False | To a human |
|---|---|---|---|---|---|---|
| One cut, high (upper 4) | 100% | 94% | 0.971 | 2 | 0 | 0 |
| One cut, low (upper 0.5) | 97% | 97% | 0.971 | 1 | 1 | 0 |
| Two cuts, band 0.5 to 4 | 100% | 94% | 0.971 | 2 | 0 | 2 |
Both single cuts land on the same F1 of 0.971, and neither can do better, because the error is not a tuning failure. Move the cut down and you gain the true pair and buy a false merge. Move it up and you lose the true pair. That is the trade the band refuses to make.
And the band's price is tiny. Two pairs out of 1,953 go to a person. Those two minutes of human attention recover the real match and reject the father and son, taking the result to 100 percent precision and 100 percent recall - which neither single cut can reach at any threshold.
This is the part that gets dropped when a model becomes a pipeline. A review queue needs somebody to own it, an interface, and an agreed turnaround, and none of that fits in a nightly job. So the band gets collapsed to a single cutoff, the pipeline stops asking for help, and the father and son quietly become one customer with two addresses and a doubled lifetime value.
Self-studyChoosing the two thresholds on purpose5 min▶
Fellegi and Sunter derive the thresholds from error bounds rather than taste: you state the false-match rate and the false-non-match rate you are willing to accept, and the thresholds follow. In practice teams work backwards from two constraints instead, which is legitimate as long as it is deliberate:
- The upper threshold is set by the cost of a wrong merge. Un-merging two customers after a year of shared history is expensive and sometimes impossible, so where merges are hard to reverse, set it high.
- The lower threshold is set by review capacity. The band is only useful if somebody actually works it. A band containing 4 percent of a million-record file is 20,000 pairs a night, which nobody reviews, and an unworked queue is worse than a decision because it looks like control.
- Both should be revisited when the data changes. A new source system with a different email convention shifts every email weight in the file.
One honest asymmetry worth stating to stakeholders: a missed match and a false merge are not equal errors. A missed match leaves two customer records where there should be one, which is a known and fixable annoyance. A false merge fuses two real people's data, which may be a privacy incident and is much harder to unpick. Session 6 returns to this.
Find the band, then try to beat it
★ 16 min · everyone buildsThe bench scores every candidate pair with the arithmetic from Part 2 and applies the three-way rule from Part 3. Every figure it shows is computed against the labels as you move a control.
Press A sensible configuration. All five fields on, normalisation on, thresholds at 0.5 and 4.0. Read the board: precision 100 percent, recall 94 percent, and 2 pairs in the clerical band.
Scroll the pair list to the two rows marked review. One is Sarah Whitfield against Sarah Whitfield, one is James Whitmore against James Whitmore. Both weigh 0.84. One is the same person and one is two people.
Now untick Keep the clerical band and drag the upper threshold down to about 0.5 so the band's pairs become matches. Recall goes up and a false match appears. You just merged a father and his son.
Put the upper threshold back to 4.0, still with no band. Precision returns to 100 percent and you are back to missing a real pair. Try every threshold you like: F1 does not beat 0.971 either way.
Turn the band back on. Two pairs go to a human, and a human can read the addresses and see that one Whitmore works at Caldera and the other at Brightmoor. That is two minutes of work for the last three percent of recall.
Now break the model deliberately. Turn every field off except company. Watch what a field with a u of 0.06 does on its own, and note that its m of 0.95 does not save it.
Finally turn on Transitive closure in the Clustering box and watch the cluster count. It reports 33 against 32 real people, which is the wrong answer in the less obvious direction. Session 5 takes that apart.
The one number on that widget that is not measured is the m and u table, which stands in for what expectation maximisation would estimate on your own corpus. Everything computed from it - every weight, every verdict, precision, recall - is real arithmetic over the real labels. Say which is which when you show a tool's output to anyone.
Before session 4
30 min- Take the 20 labelled pairs from session 1 and estimate m by hand for each field: among your true pairs, what share agree on that field?
- Estimate u without labels. Take 100 random pairs from your data, assume they are non-matches, and count agreement per field. Then compute log2(m/u) for each field and rank them.
- Compare that ranking to the field you said you trusted most in session 1's homework. If they disagree, work out why - it is almost always a field with a high m and a high u.
- Write down the two thresholds you would use, with a sentence each: what a wrong merge costs you, and how many pairs a day your team can actually review.
Three questions
Company name in Meridian has m of 0.95 and u of 0.06, and phone has m of 0.88 and u of 0.002. Which field is stronger evidence when it agrees, and why?
The weight is log2(m/u), so u dominates. Phone agreement is worth about +8.8 and company only about +4.0, even though company agrees more reliably among true matches. A field is valuable in proportion to how surprising its agreement would be between strangers.
Two Meridian pairs both score a match weight of 0.84, and exactly one of them is the same person. What does that establish about thresholds?
Identical weights mean any cutoff treats them identically, so one will be wrong whichever value you pick. Both single cuts measure F1 0.971 and neither does better. Re-estimating or adding fields does not help when the underlying data genuinely does not distinguish a father from his son.
Email in Meridian has an m of 0.55. What follows for a pair whose emails disagree?
Disagreement weight is log2((1-m)/(1-u)), so a low m makes disagreement cheap - about -1.2 for email. Nearly half of true pairs have a work address on one record and a personal one on the other, so an email disagreement is weak evidence. Compare company, where m is 0.95 and disagreement costs about -4.2.
What this session teaches, and where it came from
Every fact on this page, and its verification tier, is recorded in the course's source map.
Session 3 cheat sheet · pin this
The model now works and it compares all 1,953 pairs to do it. At a million records that is 500 billion comparisons and 58 days. Session 4 throws most pairs away before scoring them, and measures the one thing that matters about doing so: how many true pairs you destroyed on the way, because those never come back.