Нечеткие совпадающие имена: когда два написания относятся к одной и той же компании
ООО "Акме", АКМЕ ЛИМИТЕД, ACME LTD. и ООО "Акме", торгующие как Акме. Четыре строки, один клиент, четыре отдельных итоговых показателя и отчет о доходах, который ставит вашего крупнейшего клиента на четвертое место.
Что вы делаете: работаете по лестнице в порядке. Стандартизируйте, затем точное совпадение, затем заблокируйте, затем забейте. Большинство людей начинают с подсчета очков, который является дорогостоящим и приводит к наибольшему количеству ложных слияний.
Краткая версия. Очистка превращает большинство нечетких задач в точные, а точное сопоставление не может привести к ошибке.
Этап 1: стандартизировать
Один проход по полю, применяющий одни и те же преобразования к обеим сторонам:
| Шаг | До | после |
|---|---|---|
| Верхний регистр | ООО "Акме" | ACME LTD |
| Удалить пунктуацию | ACME LTD. | ACME LTD |
| Свернуть пространства | ACME LTD | ACME LTD |
| Нормализовать юридические суффиксы | ACME LIMITED | ACME LTD |
| Полностью удалить суффикс | ACME LTD | ACME |
| Полосатые акценты | КРАСНЫЙ КОФЕ | CAFE ROUGE |
-- SQL, one expression at a time so each step is visible
UPPER(TRIM(REPLACE(REPLACE(name, '.', ''), ',', '')))
# pandas
s = (df['name'].str.upper()
.str.replace(r'[^\w\s]', '', regex=True)
.str.replace(r'\b(LIMITED|LTD|PLC|INC|LLC)\b', '', regex=True)
.str.replace(r'\s+', ' ', regex=True)
.str.strip())
Сохраняйте стандартизированное значение в новый столбец. Никогда не перезаписывайте оригинал: оригинал — это то, что вы показываете человеку во время просмотра, и это единственный способ впоследствии объяснить слияние.
Этап 2: точное соответствие стандартизованному значению
Присоединяйтесь к очищенной колонке и посмотрите, сколько осталось. В названиях компаний это обычно решает подавляющее большинство вопросов, поскольку большая часть различий связана с пунктуацией, регистром и юридическим суффиксом, а не с настоящей орфографической ошибкой. Все, что здесь совпадает, является достоверным, и это причина сделать это, прежде чем что-то умное.
Этап 3: блокируйте, чтобы подсчет очков был доступен
Сравнение 10 000 имен друг с другом составит 49 995 000 пар. Блокировка означает сравнение только строк с общим дешевым ключом, поэтому вы никогда не формируете большую часть этих пар:
- Первые три символа очищенного имени
- Почтовый индекс или его внешняя часть
- Цифры номера телефона, последние шесть
- Домен электронной почты
Блокировка первых трех символов разбивает список на сотни небольших групп, и количество сравнений падает на порядки. Цена состоит в том, что пара, первые три символа которой различаются, никогда не сравнивается, поэтому используйте два разных блокирующих ключа и объединяйте результаты.
Этап 4: забить то, что осталось
| Мера | Хорошо в | Слабый в |
|---|---|---|
| Расстояние Левенштейна | Опечатки и односимвольные опечатки | Порядок слов, сокращения |
| Яро-Винклер | Имена, которые согласуются в начале | Длинные строки, изменение порядка |
| Коэффициент набора токенов | Переупорядоченные слова, дополнительные слова | Разные слова означают одно и то же |
| Саундекс, Метафон | Звукоподобное написание имен людей | Все нефонетические и неанглийские имена. |
| Сходство триграмм | Общий текст, встроенный в Постгрес | Очень короткие струны |
В Постгресе pg_trgm дает тебе similarity(a, b) и индекс, который делает его пригодным для использования. В Python, rapidfuzz является текущим стандартом и достаточно быстр, чтобы просмотреть заблокированный список на ноутбуке. В Excel нет встроенной функции нечеткого сопоставления, но в Power Query есть опция нечеткого сопоставления при слиянии с настраиваемым порогом сходства, что является практическим путем для одноразового сопоставления.
Ложные слияния, которых следует ожидать
Нечеткое сопоставление заведомо неверно именно в тех случаях, когда это имеет значение:
- Филиалы. ACME LONDON и ACME LEEDS имеют высокие оценки и являются разными сайтами, а иногда и разными юридическими лицами.
- Нумерованные сущности. PROJECT CO 3 LTD и PROJECT CO 8 LTD различаются одним символом и не являются родственными компаниями.
- Общие фамилии. Дж. СМИТ и Дж. СМИТ по разным адресам.
- Действительно похожие имена. Две реальные фирмы, занимающиеся одной и той же деятельностью, с почти идентичными названиями, что встречается чаще, чем кажется.
Защита – это второе поле. Никогда не объединяйтесь только по имени: требуйте соглашения по почтовому индексу, регистрационному номеру, домену или номеру телефона. Одно дополнительное поле резко снижает частоту ложных слияний, поскольку две записи, случайно согласующиеся в двух полях, встречаются редко.
Запись того, что вы сделали
Для каждого слияния требуется строка в таблице перекрестных переходов: идентификатор источника, идентификатор цели, оценка, метод, дата и кто его утвердил. Без этого слияние будет необратимым и необъяснимым, и когда кто-то впервые спросит, почему два клиента стали одним, вы будете реконструировать его по памяти.
Как применить это в своей работе
- Стандартизируйте новый столбец и измерьте, сколько дубликатов разрешается в одиночку. Сообщите об этом числе; обычно это большинство.
- Не забивайте ничего, пока не заблокируете. Это разница между секундами и часами.
- Выберите второе поле, по которому требуется соглашение перед слиянием.
- Пометьте 100 пар вручную, чтобы установить пороговые значения. Это занимает час, и это единственный способ узнать, что ваши цифры что-то значат.
- Держите пешеходный переход. В этом разница между решением и несчастным случаем.
Единственная привычка, которую нужно сохранить
Просмотрите образец автоматического слияния, а не только неопределенную полосу. Слияния с высокой степенью достоверности — это те, на которые никто не смотрит, и именно поэтому ошибки там сохраняются дольше всего.
Как бы вы отменили последнее автоматическое слияние в таблице клиентов?
SQL для аналитиков — это 458 страниц, которые считывают запросы построчно в повседневных словах, поэтому ошибочный результат нужно где-то отслеживать, а не перепечатывать, пока он не станет выглядеть лучше.
SQL для аналитиков, 19 $ →Разрешение объекта это полный метод, дедупликация списка клиентов это прикладная версия, и Согласование количества строк проверяет результат.
Прочитать разрешение объекта →