Как посчитать «похожесть» номеров в паспортах. И найти одинаковые даже с опечатками

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.


Продукты HFLabs ищут дублированных клиентов в базах федеральных компаний. Очевиднейший способ найти одинаковые клиентские карточки — сравнить паспорта или другие документы, удостоверяющие личность.

Раньше мы сравнивали номера документов строго: одинаковые — отлично, нет — извините. На ручной разбор из-за опечатки в номере уходили даже те карточки, у которых совпадали ФИО и адреса́ проживания. Такой подход излишне нагружал персонал заказчиков.

Поэтому мы с головой залезли в данные, изучили статистику и вывели критерии — когда разные номера действительно разные, а когда дело в опечатках. Рассказываю, как работает алгоритм.

Ввели коэффициент «похожести» номеров


Делить номера паспортов и прочих документов на «совпадают-не совпадают» — слишком грубое решение. Можно действовать тоньше и отлавливать простые ошибки.

Допустим, в компании работают такие правила поиска дубликатов (ДУЛ — документ, удостоверяющий личность):

  • «Полностью совпали ФИО, адрес и ДУЛ» — коэффициент дублирования — 100;
  • «Полностью совпали ФИО и ДУЛ» — 97;
  • «Полностью совпали ФИО и адрес» — 95
  • «Полностью совпали ФИО» — 80.

Автоматика объединяет карточки с коэффициентом выше 97. Остальное когда-нибудь разберут руками специальные люди — дата-стюарды. Если повезет и дойдет очередь.

Итог — в очереди на ручной разбор лежат вполне очевидные дубли. Даже те карточки, у которых ФИО и адреса совпадают, а номера паспортов отличаются распространенной опечаткой. Как в случае с 46 01 859473 и 45 01 859473 (клавиши 6 и 5 находятся рядом, их часто путают.) Дата-стюарды отвлекаются на простые опечатки, а реальные дубли выявляются медленнее.

Посмотрев на происходящее, мы научили свои продукты считать «похожесть» номеров в документах. Заказчики уже используют новый параметр в правилах автоматического объединения дублей.

Считаем «похожесть» по четким правилам


Сравнивая документы, алгоритм первым делом чистит номера от мусора. Оставляет только буквы и цифры: A—Z, А—ЯЁ, 0–9. А дальше начинается магия, ради которой я написал эту статью — расчет коэффициента «похожести».

Важная оговорка: коэффициент — не вероятность. Это число нужно, чтобы поделить дубли на группы с однотипными ошибками. Не важно даже, какова «похожесть» в абсолютном значении — это просто параметр сравнения номеров.

А теперь — к правилам расчета.
Правило Коэффициент «похожести» Пример Комментарий
Полное совпадение 100
  • 46 07 324654;
  • 46 07 324654
Тут и говорить не о чем, все понятно
Трансграфика 100
  • АВ 4358333;
  • AB 4358333
Трансграфика — это когда символы одного алфавита заменяют на такие же из другого.

В первом случае символы кириллические, во втором — латинские.

Типичная безобидная опечатка
Одна распространенная опечатка 95
  • 50 16 631502;
  • 50 16 631602
Распространенная опечатка — это когда символы близко расположены на одном из цифровых блоков клавиатуры или схожи по написанию.

«Фактор» ищет распространенные опечатки по таблице «похожести», которую собрали наши аналитики. (Лучше качать скорее, пока коллеги не заставили убрать ссылку)
Смена раскладки 94
  • AS 98787;
  • ФЫ 98787
Работает, если в одной строке только цифры и кириллица, а в другой — только цифры и латиница. Иначе не похоже, чтобы человек добросовестно ошибся с раскладкой
Замена римских цифр на арабские 93
  • XIX 987987;
  • 19 987987
Работает только в начале строки. Логика такая: «честные» римские цифры могут быть только в серии, а серия — только в начале
Одна нераспространенная опечатка 90
  • 1234 987987;
  • 3234 987987
Нераспространенная опечатка — та, что не входит в таблицу распространенных
Одна перестановка двух символов 90
  • 3554 463678;
  • 3554 466378
Типичная опечатка, тут и добавить нечего
Перепутаны пары символов 89
  • 12 34 987987
  • 34 12 987987
Работает только для серий длиной от четырех символов.

Считаем за опечатку, только если встретилась в начале строки. Это типичная ошибка операторов при вводе серии документа. И немудрено — на бланке серию печатают двумя парами цифр.

В середине и конце строки такие перестановки — ошибка
Один номер целиком входит в другой 88
  • 123456789;
  • 3456789
Этим сравнением мы отлавливаем случаи «потеряли серию».

Работает только для строк длиной от шести символов. Шесть символов — минимальная длина номера в известных нам документах.

За опечатку считаем только в начале или в конце строки. Иначе вместо случайно обрезанного реквизита найдутся фрагментарные вхождения одних последовательностей в другие. Так можно и почтовый индекс внутри ИНН принять за добросовестную опечатку
Две любые опечатки 80
  • 15 02 478643;
  • 15 05 478648

Уже довольно близко к границе, но ошибки все еще походят на «честные» опечатки
Все остальные случаи 0
  • 46 07 987987;
  • 32 34 987987
Объяснять опечатками остальные расхождения опасно. Вероятность ошибиться слишком велика

«Похожесть» берем параметром, когда ищем одинаковых клиентов


Новые правила уже использует банк федерального уровня — с помощью них там ищут дубли среди потенциальных клиентов. Следующей подключим крупную страховую.

При интеграции мы корректируем сценарии поиска дубликатов так, чтобы учитывать «похожесть» номеров в документах.

Вернемся к типичным правилам поиска дубликатов, я описал их в начале:

  • «Полностью совпали ФИО, адрес и ДУЛ» — коэффициент дублирования — 100;
  • «Полностью совпали ФИО и ДУЛ» — 97;
  • «Полностью совпали ФИО и адрес» — 95
  • «Полностью совпали ФИО» — 80.

Встраивая новые правила сравнения номеров, мы меняем сценарии поиска дублей у заказчика:

  • «Полностью совпали ФИО, адрес, ДУЛ» — 100;
  • «Полностью совпали ФИО, адрес, ДУЛ совпали на 90 и выше» — 98;
  • «Полностью совпали ФИО и ДУЛ» — 97;
  • «Полностью совпали ФИО и адрес» — 95;
  • «Полностью совпали ФИО» — 80.

Автоматика по-прежнему «склеит» все карточки с коэффициентом выше 97. Но при новых порядках на ручной разбор не уйдут карточки, которые отличаются лишь опечатками в номерах документов. Явные дубли мгновенно схлопываются, а дата-стюарды разбирают действительно сложные случаи.

Статья впервые вышла в блоге HFLabs.
Источник: https://habr.com/ru/company/hflabs/blog/483348/


Интересные статьи

Интересные статьи

Однажды я получил оффер от Deliveroo, в этой компании я должен был стать Data Science Manager. Пока я готовился к тому, чтобы приступить к выполнению своих обязанностей, оффер отозвали....
Как стать DevOps инженером за полгода или даже быстрее. Часть 1. Введение Как стать DevOps инженером за полгода или даже быстрее. Часть 2. Конфигурирование Как стать DevOps инженер...
Приступая к животрепещущей теме резервного копирования на «Битрикс», прежде всего хотелось бы поблагодарить разработчиков, реализовавших автоматическое резервное копирование в облачное хранилище в вер...
Здравствуйте. Я уже давно не пишу на php, но то и дело натыкаюсь на интернет-магазины на системе управления сайтами Битрикс. И я вспоминаю о своих исследованиях. Битрикс не любят примерно так,...
Я снова про утечки персональных данных, но на этот раз расскажу немного про загробный мир ИТ-проектов на примере двух недавних находок. В процессе аудита безопасности баз данных часто бывает,...