Same Business?
Amazon ML Challenge 2026 · Business entity resolution · solo build by Sashank S A

Same business?

Ten million business records from three sources, written three different ways. For each pair, the question is whether they describe the same company. Try the matcher on two records, or read how the full pipeline got from 17 trillion possible pairs to 5.4 million matches.

1.73M businesses to resolve9.97M candidate records4.46 candidates kept per business0.935 leaderboard F0.5

Try the matcher

Source 1 · referenceS1
Source 2 / 3 · noisyS2
Match
Match probability0%
no matchpossible · 40%match · 80%

Step 1

Clean the text

Lower-case, strip accents, transliterate Hindi script, drop legal words (Pvt, Ltd, LLC, SARL…), unify Road/Rd, remove state names. Shared words are highlighted.

Step 2

Shared blocking keys

Two records are only compared if they share at least one rare key. This is how 17 trillion pairs shrink to 50 million.

Step 3

Weigh the evidence

Each bar is one similarity score times its learned weight. The total becomes the probability above.

This in-browser version uses 8 features and a logistic model trained on generated look-alike data, so every step is visible. The competition pipeline used about 50 features and two LightGBM models.

From 17 trillion pairs to 5.4 million matches

Test set, real numbers. The bars use a log scale: each grid step is 10× fewer pairs.

What the leaderboard taught me

Validation said 0.950. The leaderboard said 0.903.

The two-stage model looked best on held-out training data, then dropped on the real test set. The test set had more look-alike decoys per business (5.8 records vs 4.7), so its extra matches were mostly wrong. Keeping only the pairs that two differently built models agreed on brought precision back: 0.935.

What I would do next

Close the recall gap for Indian records with short addresses and non-Latin names (India's recall ceiling was 0.895, vs 0.956 for the US), and try graph clustering over all records of one business. The top team reached 0.991, so a large idea is still missing.

The full pipeline

  1. Normalise. Apache Arrow string kernels clean 12 million rows in about 10 minutes, including transliteration of Hindi, Telugu and Tamil names.
  2. Block. 11 kinds of rare keys (house number + street word, name prefixes, sound codes). Keys shared by too many records are dropped; each business keeps its top 30 by weighted overlap.
  3. Prune. A small LightGBM model cuts 29 candidates to 4.5 per business while keeping 99.5% of the true matches it can still reach.
  4. Match. A second LightGBM model with about 50 features, including "does another business explain this record better?", then each record goes to at most one business.

Constraints

Free Google Colab: 2 CPU cores, 12.7 GB RAM, no GPU. About 1.5 hours per full run. Only permissively licensed libraries: PyArrow, RapidFuzz, LightGBM, indic-transliteration. No external lookups.

France appeared only in the test set, so the model never uses country as a feature.