machine-learning duplicates mahout recommendation-engine record-linkage

machine learning - Uso de aprendizaje automático para desduplicar datos



machine-learning duplicates (2)

Tengo el siguiente problema y pensé que podría usar el aprendizaje automático, pero no estoy completamente seguro de que funcione para mi caso de uso.

Tengo un conjunto de datos de alrededor de cien millones de registros que contienen datos de clientes, incluidos nombres, direcciones, correos electrónicos, teléfonos, etc. y me gustaría encontrar una forma de limpiar estos datos de clientes e identificar posibles duplicados en el conjunto de datos.

La mayoría de los datos se ingresaron manualmente utilizando un sistema externo sin validación, por lo que muchos de nuestros clientes terminaron con más de un perfil en nuestra base de datos, a veces con datos diferentes en cada registro.

Para la instancia Podríamos tener 5 entradas diferentes para un cliente John Doe, cada uno con detalles de contacto diferentes.

También tenemos el caso de que varios registros que representan diferentes clientes coinciden en campos clave como el correo electrónico. Por ejemplo, cuando un cliente no tiene una dirección de correo electrónico, pero el sistema de ingreso de datos lo requiere, nuestros consultores usarán una dirección de correo electrónico aleatoria, lo que resultará en muchos perfiles de clientes diferentes que usarán la misma dirección de correo electrónico, lo mismo se aplica a teléfonos, direcciones, etc.

Todos nuestros datos se indexan en Elasticsearch y se almacenan en una base de datos de SQL Server. Mi primer pensamiento fue utilizar Mahout como una plataforma de aprendizaje automático (ya que se trata de una tienda Java) y tal vez usar H-base para almacenar nuestros datos (solo porque se ajusta al ecosistema Hadoop, no estoy seguro de que tenga algún valor real). ), pero cuanto más leo sobre esto, más confuso estoy sobre cómo funcionaría en mi caso, para empezar, no estoy seguro de qué tipo de algoritmo podría usar ya que no estoy seguro de dónde se encuentra este problema, ¿Puedo usar un algoritmo de Clustering o un algoritmo de Clasificación? y, por supuesto, ciertas reglas deberán usarse para determinar qué constituye la singularidad de un perfil, es decir, qué campos.

La idea es implementar esto inicialmente como un servicio de desduplicación de perfiles de clientes que nuestros sistemas de ingreso de datos pueden usar para validar y detectar posibles duplicados al ingresar un nuevo perfil de cliente y, en el futuro, tal vez desarrollarlo en una plataforma de análisis para reunir visión sobre nuestros clientes.

Cualquier comentario será muy apreciado :)

Gracias.


Acabo de encontrar un problema similar, también lo hizo un poco Google. Encuentre una biblioteca llamada "Dedupe Python Library" https://dedupe.io/developers/library/en/latest/

El documento para esta biblioteca tiene detalles de problemas comunes y soluciones cuando se eliminan las entradas y los documentos en el campo de la duplicidad. Entonces, incluso si no lo está utilizando, es bueno leer el documento.


En realidad, ha habido mucha investigación sobre esto, y la gente ha usado muchos tipos diferentes de algoritmos de aprendizaje automático para esto. Personalmente, he probado la programación genética , que funcionó razonablemente bien, pero personalmente prefiero sintonizar el emparejamiento manualmente.

Tengo algunas referencias para trabajos de investigación sobre este tema. no quiere demasiados enlaces, pero aquí hay información bibliográfica que debería ser suficiente con Google:

  • Aprendizaje no supervisado de la configuración de descubrimiento de enlace, Andriy Nikolov, Mathieu d''Aquin, Enrico Motta
  • Un enfoque de aprendizaje automático para la coincidencia de instancias basado en métricas de similitud, Shu Rong1, Xing Niu1, Evan Wei Xiang2, Haofen Wang1, Qiang Yang2 y Yong Yu1
  • Aprendizaje de esquemas de bloqueo para vinculación de registros, Matthew Michelson y Craig A. Knoblock
  • Aprendiendo reglas de vinculación usando la programación genética, Robert Isele y Christian Bizer

Eso es todo investigación, sin embargo. Si está buscando una solución práctica para su problema, he creado un motor de código abierto para este tipo de deduplicación, llamado Duke . Indexa los datos con Lucene y luego busca coincidencias antes de hacer una comparación más detallada. Requiere una configuración manual, aunque hay un script que puede usar la programación genética (vea el enlace anterior) para crear una configuración para usted. También hay un tipo que quiere hacer un complemento ElasticSearch para Duke ( ver hilo ), pero hasta ahora no se ha hecho nada.

De todos modos, ese es el enfoque que tomaría en tu caso.