Documentation · Screening API

Matching algorithms

The scoring methods behind every match result, with each feature's effect and the constants of the name comparison.

Every match result explains its score feature by feature. This page lists the scoring methods the matching API offers, what each feature does to the score, and the constants behind the name comparison, so a reviewer can reproduce any decision. The same information is available as JSON from /api/algorithms.

How a score is built

  1. Each word of the query name is compared with each unused word of a record name or alias, using Jaro-Winkler similarity after accents and punctuation are removed. Each query word takes its best partner.
  2. The name score is the weighted average of the word scores (longer words weigh more), reduced for record words the query did not mention and for one-word queries against longer names. The best score across the record's names and aliases is kept.
  3. For the standard method, birth date, country, IMO number and entity type then add to or subtract from the name score.
  4. The result is held between 0 and 1. match is true at or above the request's threshold (default 0.75).

Standard standard Default

Word-by-word name alignment (Jaro-Winkler), then adjusted by birth date, nationality or country, IMO number and entity type.

FeatureEffect on the scoreDescription
name_matchbase scoreBest alignment of the query name with the record name or any alias. Close spellings count at a discount; record words the query does not mention lower the score.
dob_match+0.10 match · 0 same year · −0.25 differentBirth date, compared at the precision the record gives (year, month or day).
country_match+0.05 match · −0.10 differentNationality, country, jurisdiction or flag, as ISO 3166 two-letter codes.
identifier_matchat least 0.98 match · −0.30 differentSeven-digit IMO number (vessels).
type_mismatch−0.20The record is a different entity type from the query schema.

Name only name-only

The name alignment alone. Birth date, country, IMO number and entity type are reported as features but do not change the score.

FeatureEffect on the scoreDescription
name_matchwhole scoreBest alignment of the query name with the record name or any alias.

Name comparison constants

Both methods share these constants.

ConstantValueMeaning
close_spelling0.92A word pair at or above this Jaro-Winkler similarity counts at full value.
fuzzy_floor0.8A word pair between this and 0.92 counts at 85% of its similarity; below it, the word is treated as not found.
fuzzy_discount0.85Multiplier applied to close-but-not-near-exact word pairs.
extra_word_penalty0.1Reduction for each record word the query does not mention, up to the cap below.
extra_word_cap0.3Largest total reduction for extra record words.
single_word_factor0.75Multiplier when a one-word query meets a longer name.
word_weightmax(1, length / 4)Longer query words weigh more in the name score.
threshold0.75Default score at or above which match is true. Change it per request with ?threshold=.

Choosing a method

Use standard unless you have a reason not to: it uses everything you send. Use name-only to see how far the name alone carries a result, or for sources where birth dates and countries are unreliable. Set it per request with ?algorithm=; see Tuning the matcher.

To be provided: Whether we will publish the matcher code or a test set of judged name pairs for independent evaluation.

Last updated 2026-10-03