How matching works
In short
Section titled “In short”Names are messy. The same person is Mamadou Ousmane on a bank form, Muhammad Usman on a UN list and Alhaji M. Usman on a transfer. A check that looks only for identical text misses all three; a check that is too loose flags every Mohammed in the country.
SpeculaPro’s matching engine does three things:
- Tidies both names the same way, so differences that mean nothing disappear.
- Scores how alike the names are, from 0 to 1, word by word.
- Adjusts the score with whatever else is known: date of birth, country, ID number, and whether both are people or both are organisations.
A candidate whose final score reaches your match threshold (0.85 by default) is recorded as a potential match, together with an explanation you can read.
The engine runs inside SpeculaPro. Names are not sent anywhere to be matched against the lists.
Step 1: tidying names
Section titled “Step 1: tidying names”Before two names are compared, each is put through the same steps:
| Step | Example |
|---|---|
| Lower case, accents removed | Société Générale becomes societe generale; N'Diaye becomes ndiaye |
| Other alphabets written in Latin letters | Cyrillic, Greek and Arabic script are converted, so a name in its original script can meet its usual transliteration |
| Titles at the start are dropped | Alhaji Chief Dr. Musa Bello becomes musa bello. The list covers general, French, religious, West African traditional, professional and military titles |
| Suffixes at the end are dropped | John Smith Jr, Ama Mensah (Dr) |
| Joining words are ignored | al, el, bin, ibn, ben, ould, de, van, von and similar, because lists write them inconsistently (al-Baghdadi, Al Baghdadi, Baghdadi) |
| Known spellings of the same name become one | Mohammed, Mohamed, Mamadou, Momodou and Muhammadu are all read as muhammad; Ousmane, Osman and Uthman as usman; Jallow and Jalloh as diallo; Koffi as kofi |
| For organisations, legal forms are dropped instead of titles | Acme Trading Ltd and ACME TRADING LIMITED are the same company |
Titles are removed only from the start and end of a name, never the middle, because Bishop, Major and Chief are also surnames.
The table of known spellings concentrates on Arabic-origin names in their English, French, Hausa, Fula, Wolof and Mandinka forms, and on common West African surnames and day names.
Step 2: scoring the name
Section titled “Step 2: scoring the name”Each word of one name is paired with the best-fitting word of the other. A pair can match in several ways:
| How | Meaning | Example |
|---|---|---|
exact |
The same word after tidying | mensah and mensah |
variant |
Different spellings that tidying made the same | Mamadou read as Muhammad |
jaro_winkler |
Nearly the same letters. Jaro-Winkler is a standard measure of how alike two short words are, generous to a shared beginning | Boateng and Boatang |
phonetic |
They sound alike and are close in spelling, though not close enough to match on letters alone | Two transliterations of one name |
initial |
A single letter against a full word with that letter | K and Kwame |
compound |
Two words on one side written as one on the other | Abdul Rahman and Abdulrahman |
The name score is how much of each name is covered by good pairs. Word order doesn’t matter:
Mensah Ama and Ama Mensah score the same. A list entry is scored on its main name and every
alias, and the best one counts.
Five safeguards keep common names and everyday words from flooding you:
- One matching word is not enough. If only one word of a name with two or more words matches strongly, the name score is capped at 0.70, below any sensible threshold, and the explanation says only one name part matches.
- An initial needs backing.
K. BoatengagainstKwame Boatengis capped at 0.84, just under the default threshold. It becomes a potential match only if a date of birth, country or ID number agrees too. - Short names are treated strictly.
AmaandAhmad, orMusaandMustafa, share letters but are different names, so a near-miss is scored down when the shorter word has four letters or fewer and the other is two or more letters longer. A three-letter name that is one letter short of the other is scored down too, unless the two sound alike:IsaandIsahare the same name,AmaandAmar, orAliandAlim, are two. - Generic words identify nobody. Payment records often carry a word such as
Wallet,Mobile Money,Agent,Bank,CompteorBanquewhere a name should be. If the only words that match strongly are generic ones like these, and the two names are not the very same words, the name score is capped at 0.70 and the explanation says only generic words match (wallet, bank, agent, …). SoWalletis not a match for a listed company calledWallex, andMobile Moneyis not a match forMobile Money Transfer Services. A list entry really namedWalletis still found by that exact name, andBank Mellistill matchesBank Melli: the generic word counts once a distinctive word agrees beside it. - A lone distinctive word must be close, not just similar. When only one distinctive word
matches, and it matches on letters alone (
jaro_winkler), it has to pass a stricter test, because two different short words that share a beginning look alike to Jaro-Winkler (MellatandMellas). The pair stands if the two words sound alike, or if they differ by few enough letters for their length (the table below). Otherwise the name score is capped at 0.70 and the explanation says the only distinctive name part is spelled differently.
| The distinctive word is | One letter different is accepted from | Two letters different from |
|---|---|---|
The whole name (Rosneft) |
7 letters | 12 letters |
Beside other matching words, even generic ones (Bank Melli) |
5 letters | 10 letters |
A letter added, dropped, changed, or two neighbouring letters swapped each count as one. The length is that of the shorter of the two words.
Names that are the same words (in any order), spelling variants and transliterations
(Mamadou and Muhammad), words that sound alike (Hammas and Hamas, Gadafi and Gaddafi),
and typos in names of several words (Kwame Mensa and Kwame Mensah) score as they always did.
Step 3: what else is known
Section titled “Step 3: what else is known”The name score is then moved by other facts, when both sides have them. A fact that is missing on either side changes nothing.
| Fact | Effect on the score |
|---|---|
| ID number matches | Raised to at least 0.95, whatever the name score. If the names are quite different (name score under 0.50), to at least 0.86: still worth a look. With an ID match, the date of birth is shown but not counted, and a different country or kind doesn’t lower the score |
| Date of birth identical | +0.05 |
| Same year, when one side has only a year (or year and month) | +0.02 |
| Same year, different day or month | −0.05 |
| One year apart | −0.04 |
| Further apart | −0.20 |
| Country or nationality matches | +0.02 |
| Country or nationality differs | −0.07 |
| One is a person, the other an organisation, vessel or aircraft | −0.15 |
When a list gives several dates of birth for one entry, the most favourable comparison is used.
The final score is kept between 0 and 1 and rounded to two decimal places.
The threshold
Section titled “The threshold”The match threshold decides which candidates become potential matches.
| Threshold | What you get |
|---|---|
| Lower (towards 0.50) | More spelling variants found, many more false positives |
| 0.85 (the default) | Chosen to favour finding real matches over a quiet queue: a missed sanctioned person is the costly mistake |
| Higher (towards 0.99) | Fewer false positives, and a real risk of missing a listed person whose name is spelled differently in your records |
You can set it anywhere from 0.50 to 0.99. Changing it screens everyone again. See Screening settings.
After an upgrade that changes matching
Section titled “After an upgrade that changes matching”A change to how names are scored applies to people as they are screened from then on. It does not
go back over matches already in your queue. After upgrading to the release that added the
generic-word, lone-word and short-name safeguards, re-screen everyone
once in each workspace: open matches that no longer reach the threshold, such as Wallet
against Wallex, or a customer called Ama against a listed Amar, are closed as No longer matches, and nothing
you already decided is changed.
Reading an explanation
Section titled “Reading an explanation”Every potential match and every on-demand result carries an explanation. Its text is a one-line
summary:
name 0.93 (Jaro-Winkler token set; mamadou≈muhammad variant), DOB year match, nationality/country mismatch (GH vs NG)Read it left to right:
- name 0.93: the name score, before anything else.
- in brackets: the word pairs that did not match letter for letter, and how they matched.
- after the brackets: each fact that was compared.
The full explanation also has:
| Field | Meaning |
|---|---|
score |
The final score |
name_score |
The name score alone |
query_name, matched_name |
The name screened, and the list name or alias it matched best |
tokens |
Each word pair: the two words, how alike (sim) and how |
factors |
Each fact compared, with a code, its effect on the score and a detail |
The factor codes are id_match, dob_exact, dob_year, dob_same_year, dob_near,
dob_mismatch, country_match, country_mismatch, kind_mismatch and weak_name.
weak_name means the name score was capped at 0.70. Its detail says why:
detail |
Meaning |
|---|---|
only one name part matches |
One word of a name with two or more words matched strongly |
only generic words match (wallet, bank, agent, …) |
Nothing distinctive matched |
the only distinctive name part is spelled differently |
The one distinctive word is similar in letters but neither sounds alike nor is close enough for its length |
Why most potential matches are false
Section titled “Why most potential matches are false”Sanctions lists hold many thousands of names, a lot of them common. Any large customer base has people who share a name with someone listed. Screening is designed to bring those to a person, because only a person can weigh the photograph, the address, the occupation and the history.
You reduce false positives by giving the engine more to work with:
- Send dates of birth and nationalities for customers. A wrong decade takes 0.20 off the score; a missing date takes nothing.
- Send the customer type (person or business), so a company isn’t compared as a person.
- Send counterparty names in full where your system has them.
See Sending customers.