Нечеткое сопоставление данных для личной демографической информации - PullRequest
4 голосов
/ 16 июля 2010

Допустим, у меня есть база данных, заполненная людьми со следующими элементами данных:

  • PersonID (бессмысленный суррогатный автономер)
  • FirstName
  • MiddleInitial
  • Фамилия
  • NameSuffix
  • DateOfBirth
  • AlternateID (например, SSN, ID милиции и т. Д.)

Я получаю много данныхпоступает из всех видов форматов со всеми разумными вариациями этих фрагментов информации, о которых вы могли подумать.Вот некоторые примеры:

  • FullName, DOB
  • FullName, Last 4 SSN
  • First, Last, DOB

Когда эти данныеприходит, мне нужно написать что-то, чтобы соответствовать.Мне не нужно, или не ожидаю, чтобы получить более 80% совпадения.После автоматического сопоставления я представлю неопределенные совпадения на веб-странице, чтобы кто-то мог сопоставить вручную.

Некоторые из сложностей:

  1. Некоторые сопоставления данных лучше, чем другиеи я хотел бы назначить вес для тех.Например, если SSN совпадает точно, но имя отключено, потому что кто-то идет по его второму имени, я хотел бы присвоить этому совпадению гораздо более высокое значение достоверности, чем если имена точно совпадают, но SSN отключены.
  2. Сопоставление имени имеет некоторые трудности.Джон Доу-младший такой же, как Джон Доу-II, но не то же самое, что Джон Доу-старший, и если я получу Джона Доу и никакой другой информации, я должен быть уверен, что система не выберет один, потому что нет способа определитького выбрать.
  3. Соответствие имени действительно сложно.У вас есть Боб / Роберт, Джон / Джон / Джонатон, Том / Томас и т. Д.
  4. То, что у меня есть лента с FullName + DOB, не означает, что поле DOB заполняется для каждой записи.Я не хочу пропустить связь только потому, что непревзойденный DOB убивает соответствующий счет.Если поле отсутствует, я хочу исключить его из элементов, доступных для сопоставления.
  5. Если кто-то сопоставляет вручную, я хочу, чтобы его совпадение влияло на все будущие совпадения.Поэтому, если мы когда-нибудь снова получим те же точные данные, нет причин не автоматически сопоставлять их в следующий раз.

Я видел, что в SSIS нечеткое сопоставление, но мы не используем SSISв настоящее время, и я нахожу это довольно глупым и почти невозможным для контроля версий, так что это не мой первый выбор инструмента.Но если это лучшее, скажи мне.Иначе, есть ли какие-либо (желательно бесплатные, предпочтительно .NET или T-SQL ) инструменты / библиотеки / утилиты / методы, которые вы использовали для решения проблемы такого типа?

Ответы [ 4 ]

3 голосов
/ 16 июля 2010

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

Ваши входные данные очень скудны, и, учитывая то, что у вас есть, они не самые уникальные, ЕСЛИ не все значения есть.

Например, с вашим именем, фамилией, DOBВ этом случае, если у вас есть все три части для ВСЕХ записей, то с сопоставлением вам станет намного легче работать.Если нет, то вы подвергаете себя большой потенциальной опасности.

Один из подходов, который вы могли бы использовать для более "грубой" стороны, - это просто создать процесс, используя серию запросов, которые просто идентифицируют и классифицируют совпадающие записи.

Например, первая проверкапри точном совпадении по имени и SSN, если оно есть, отметьте его как 100% и переходите к следующему набору.Затем вы можете явно определить, где вы нечетки, чтобы вы знали потенциальный ответ вашего соответствия.

В конце вы получите список с флагами, указывающими тип соответствия, если таковые имеются для этой записи.

1 голос
/ 24 сентября 2016

Это проблема, называемая связывание записей .

Хотя это и относится к библиотеке Python, документация для dedupe дает хороший обзор того, какподходить к проблеме всесторонне .

1 голос
/ 16 июля 2010

Взгляните на алгоритм Левенштейна, который позволяет получить «расстояние между двумя строками», которое затем можно разделить на длину строки, чтобы получить процентное совпадение.

http://en.wikipedia.org/wiki/Levenshtein_distance

Ранее я реализовал это с большим успехом. Это был портал поставщиков медицинских услуг, и поставщики регистрировались на сайте. Соответствие должно было пройти регистрацию на портале и найти соответствующую запись в основной системе здравоохранения. Процессорам, которые занимались этим, были представлены наиболее вероятные совпадения, упорядоченные по убыванию в процентах, и они могли легко выбрать правильный аккаунт.

0 голосов
/ 17 июля 2010

Если ложные срабатывания вас не вызывают, а ваши языки в основном являются английскими, вы можете попробовать алгоритмы, такие как Soundex . SQL Server имеет встроенную функцию.Soundex не самый лучший, но он делает нечеткое соответствие и популярен.Другой альтернативой является метафон.

...