Использование машинного обучения для дедупликации данных
У меня есть следующая проблема и я думал, что могу использовать машинное обучение, но я не совсем уверен, что он будет работать для моего использования.
У меня есть набор данных, насчитывающий около ста миллионов записей, содержащих данные о клиентах, включая имена, адреса, электронные письма, телефоны и т.д. и хотел бы найти способ очистки данных клиентов и определения возможных дубликатов в наборе данных.
Большая часть данных была введена вручную с использованием внешней системы без проверки, поэтому многие наши клиенты получили более одного профиля в нашей БД, иногда с разными данными в каждой записи.
Для экземпляра У нас может быть 5 разных записей для клиента John Doe, каждый из которых имеет разные контактные данные.
Мы также имеем случай, когда несколько записей, которые представляют разные клиенты, соответствуют ключевым полям, таким как электронная почта. Например, если у клиента нет адреса электронной почты, но система ввода данных требует, чтобы наши консультанты использовали случайный адрес электронной почты, в результате чего многие разные профили клиентов использовали один и тот же адрес электронной почты, то же самое относится к телефонам, адресам и т.д.
Все наши данные индексируются в Elasticsearch и хранятся в базе данных SQL Server. Моя первая мысль заключалась в том, чтобы использовать Mahout как платформу для машинного обучения (так как это магазин Java) и, возможно, использовать H-базу для хранения наших данных (только потому, что она соответствует Hadoop Ecosystem, не уверена, что она будет иметь какую-либо реальную ценность), но чем больше я читаю об этом, тем больше я смущен, насколько это будет работать в моем случае, для начала я не уверен, какой алгоритм я мог бы использовать, так как я не уверен, где эта проблема, могу ли я использовать алгоритм кластеризации или алгоритм классификации? и, конечно, некоторые правила должны быть использованы в отношении того, что представляет собой уникальность профиля, то есть какие поля.
Идея состоит в том, что это первоначально было развернуто как служба де-дубликатора профиля клиента, которую наши системы ввода данных могут использовать для проверки и обнаружения возможных дубликатов при вводе нового профиля клиента, а в будущем, возможно, развить это в аналитике платформу для сбора информации о наших клиентах.
Любая обратная связь будет принята с благодарностью:)
Спасибо.
Ответы
Ответ 1
На самом деле было много исследований по этому вопросу, и для этого люди использовали множество различных алгоритмов машинного обучения. Я лично пробовал генетическое программирование, который работал достаточно хорошо, но лично я по-прежнему предпочитаю настраивать соответствие вручную.
У меня есть несколько ссылок на научные статьи по этому вопросу. StackOverflow не хочет слишком много ссылок, но здесь есть библиографическая информация, которая должна быть достаточной с помощью Google:
- Неконтролируемое обучение настройке обнаружения ссылок, Андрей Николов, Матье Дакин, Энрико Мотта
- Подход машинного обучения для сопоставления экземпляров на основе метрик сходства, Shu Rong1, Xing Niu1, Evan Wei Xiang2, Haofen Wang1, Qiang Yang2 и Yong Yu1
- Схемы блокировки обучения для привязки к записи, Мэтью Майкельсон и Крейг А. Кноблок
- Правила обучения с использованием генетического программирования, Роберт Иселе и Кристиан Бизер
Это все исследование. Если вы ищете практическое решение своей проблемы, я создал механизм с открытым исходным кодом для этого типа дедупликации, называемый Duke. Он индексирует данные с помощью Lucene, а затем выполняет поиск совпадений, прежде чем выполнять более подробное сравнение. Он требует ручной настройки, хотя есть script, который может использовать генетическое программирование (см. Ссылку выше), чтобы создать для вас настройку. Там также парень, который хочет создать плагин ElasticSearch для Duke (см. Раздел), но ничего не сделано до сих пор.
Во всяком случае, этот подход я приму в вашем случае.
Ответ 2
Просто столкнулась с подобной проблемой, так что немного Google. Найдите библиотеку под названием "Библиотека Dedupe Python"
https://dedupe.io/developers/library/en/latest/
В документе для этой библиотеки есть подробные сведения об общих проблемах и решениях, когда записи об отмене, а также документы в поле для устранения дубликатов. Поэтому, даже если вы не используете его, все еще хорошо читать документ.