15

Ich habe das folgende Problem und dachte, ich könnte maschinelles Lernen verwenden, aber ich bin mir nicht ganz sicher, ob es für meinen Anwendungsfall funktioniert.Verwenden von maschinellem Lernen zum Duplizieren von Daten

Ich habe einen Datensatz von etwa hundert Millionen Datensätzen mit Kundendaten einschließlich Namen, Adressen, E-Mails, Telefone usw. und möchte einen Weg finden, diese Kundendaten zu bereinigen und mögliche Dubletten im Datensatz zu identifizieren.

Die meisten Daten wurden manuell mit einem externen System ohne Validierung eingegeben, so dass viele unserer Kunden mehr als ein Profil in unserer Datenbank hatten, manchmal mit unterschiedlichen Daten in jedem Datensatz.

Zum Beispiel Wir könnten 5 verschiedene Einträge für einen Kunden John Doe haben, jeder mit anderen Kontaktdaten.

Wir haben auch den Fall, in dem mehrere Datensätze, die verschiedene Kunden repräsentieren, in Schlüsselfeldern wie E-Mail übereinstimmen. Zum Beispiel, wenn ein Kunde keine E-Mail-Adresse hat, aber das Datenerfassungssystem es erfordert, verwenden unsere Berater eine zufällige E-Mail-Adresse, was zu vielen verschiedenen Kundenprofilen führt, die dieselbe E-Mail-Adresse verwenden, das gleiche gilt für Telefone, Adressen usw.

Alle unsere Daten werden in Elasticsearch indiziert und in einer SQL Server-Datenbank gespeichert. Mein erster Gedanke war, Mahout als Machine-Learning-Plattform (da dies ein Java-Shop ist) zu verwenden und vielleicht H-Base zu verwenden, um unsere Daten zu speichern (nur weil es mit dem Hadoop Ecosystem zusammenpasst, nicht sicher, ob es wirklich wertvoll ist)), aber je mehr ich darüber lese, desto verwirrter bin ich, wie es in meinem Fall funktionieren würde. Für den Anfang bin ich mir nicht sicher, welche Art von Algorithmus ich verwenden könnte, da ich nicht sicher bin, wo dieses Problem liegt. kann ich einen Clustering-Algorithmus oder einen Klassifizierungsalgorithmus verwenden? und natürlich müssen bestimmte Regeln verwendet werden, was die Einzigartigkeit eines Profils ausmacht, d. h. welche Felder.

Die Idee ist, dies zunächst als Customer Profile De-Duplicator Service der Art zu implementieren, dass unsere Dateneingabesysteme verwenden können, um mögliche Duplikate bei der Eingabe eines neuen Kundenprofils zu validieren und zu erkennen und in Zukunft vielleicht zu einem Analyseplattform, um Einblicke in unsere Kunden zu gewinnen.

Jede Rückmeldung wird sehr geschätzt werden :)

Vielen Dank.

+1

'manchmal mit unterschiedlichen Daten in jedem Datensatz.', wie sollte also ein maschineller Lernalgorithmus Duplikate finden? Woher weißt du auch, ob John Doe die gleiche Person ist, wenn er mit fast den gleichen Daten hinzugefügt wurde? IMHO Sie werfen Schlagworte und alles, was Sie brauchen, ist eine enge relationale Modell in Ihrer Kundendatenbank. –

+0

@thomas Es stimmt, dass ich wirklich Schlagworte schreibe, die Wahrheit ist, dass ich versuche, in große Daten zu kommen und dachte, dies wäre eine gute Gelegenheit zu lernen, deshalb sagte ich, ich wüsste nicht, ob das überhaupt funktionieren würde . Die Idee ist, dass ich auf Schlüsselfeldern wie E-Mail zum Beispiel passen müsste, die Einzigartigkeit darstellen, so weit das Geschäft geht, dachte, dass es nicht immer wahr ist. Danke für Ihre Eingabe. –

+0

Nicht sicher, welche Edition Ihr Sql-Server ist, aber möglicherweise können Sie die Datenbereinigungsumwandlungen in SSIS (unscharfe Gruppierung und unscharfe Suche) nutzen: http://msdn.microsoft.com/en-us/magazine/cc163731. aspx –

Antwort

14

Es gab tatsächlich eine Menge Forschung darüber, und die Menschen haben dafür viele verschiedene Arten von Algorithmen zum maschinellen Lernen benutzt. Ich habe persönlich versucht, genetic programming, die einigermaßen gut funktioniert, aber persönlich bevorzuge ich immer noch manuell abstimmen.

Ich habe ein paar Referenzen für Forschungsarbeiten zu diesem Thema. Stackoverflow will nicht zu viele Links, aber hier ist bibliograpic Informationen, die ausreichend mit Google sein sollte:

  • nicht überwachtes Lernen von Link-Discovery-Konfiguration, Andriy Nikolov, Mathieu d'Aquin, Enrico Motta
  • A Machine Learning Ansatz für die Instanz auf Ähnlichkeit Metrics, Shu Rong1, Xing NIU1, Evan Wei Xiang2, Haofen Wang1, Qiang Yang2 und Yong YU1
  • Learning Blocking Schemes für Record Linkage, Matthew Elson und Craig A. Knoblock
  • Learning Linkage basiertes Matching Regeln mit Genetic Programming, Robert Isele und Christian Bizer

Das ist alles Forschung, obwohl.Wenn Sie nach einer praktischen Lösung für Ihr Problem suchen, habe ich für diese Art der Deduplizierung eine Open-Source-Engine namens Duke entwickelt. Es indiziert die Daten mit Lucene und sucht dann nach Übereinstimmungen, bevor ein detaillierterer Vergleich durchgeführt wird. Es erfordert eine manuelle Einrichtung, obwohl es ein Skript gibt, das genetische Programmierung verwenden kann (siehe Link oben), um ein Setup für Sie zu erstellen. Es gibt auch einen Typen, der ein ElasticSearch-Plugin für Duke (see thread) erstellen möchte, aber bisher ist nichts getan.

Wie auch immer, das ist der Ansatz, den ich in Ihrem Fall anwenden würde.

8

Gerade stieß ähnliches Problem so auch ein bisschen Google. Finden Sie eine Bibliothek mit dem Namen „Deduplizierung Python Library“ https://dedupe.io/developers/library/en/latest/

Das Dokument für diese Bibliothek hat Detail häufig auftretende Probleme und Lösungen beim Entfernen von Duplikaten Einträge sowie Papiere in de-dupe Feld. Selbst wenn Sie es nicht benutzen, ist es immer noch gut, das Dokument zu lesen.

+0

Ich stimme völlig zu, Dedupe sieht wirklich gut aus und der Artikel vom Autor geschrieben ist eine Lektüre wert, wenn Sie wollen eine Einführung in das Thema: http://www.cs.utexas.edu/~ml/papers/marlin-dissertation-06.pdf –

Verwandte Themen