15

Ho il seguente problema e pensavo che potrei usare l'apprendimento automatico ma non sono completamente sicuro che funzionerà per il mio caso d'uso.Utilizzo dell'apprendimento automatico per deduplicare i dati

Ho un set di dati di circa cento milioni di record contenenti dati dei clienti inclusi nomi, indirizzi, email, telefoni, ecc. E vorrei trovare un modo per pulire i dati di questo cliente e identificare possibili duplicati nel set di dati.

La maggior parte dei dati è stata inserita manualmente utilizzando un sistema esterno senza convalida, quindi molti dei nostri clienti hanno finito con più di un profilo nel nostro DB, a volte con dati diversi in ogni record.

Per istanza Potremmo avere 5 voci diverse per un cliente John Doe, ognuna con diversi dettagli di contatto.

Abbiamo anche il caso in cui più record che rappresentano clienti diversi corrispondono a campi chiave come la posta elettronica. Ad esempio, quando un cliente non ha un indirizzo email ma il sistema di inserimento dati lo richiede, i nostri consulenti useranno un indirizzo email casuale, risultando in molti profili cliente diversi utilizzando lo stesso indirizzo email, lo stesso vale per telefoni, indirizzi ecc.

Tutti i nostri dati sono indicizzati in Elasticsearch e memorizzati in un database SQL Server. Il mio primo pensiero è stato di usare Mahout come piattaforma di machine learning (dato che si tratta di un negozio Java) e forse usare H-base per archiviare i nostri dati (solo perché si adatta all'ecosistema Hadoop, non è sicuro se sarà di valore reale), ma più ne leggo, più sono confuso su come funzionerebbe nel mio caso, per i principianti non sono sicuro di quale tipo di algoritmo potrei usare dal momento che non sono sicuro di dove si trova questo problema, posso usare un algoritmo di Clustering o un algoritmo di classificazione? e naturalmente alcune regole dovranno essere utilizzate per ciò che costituisce l'unicità di un profilo, cioè quali campi.

L'idea è di installarlo inizialmente come un servizio di deduplicazione dei profili cliente che i nostri sistemi di inserimento dati possono utilizzare per convalidare e rilevare possibili duplicati quando si inserisce un nuovo profilo cliente e, in futuro, svilupparlo in un piattaforma di analisi per raccogliere informazioni sui nostri clienti.

Qualsiasi feedback sarà molto apprezzato :)

Grazie.

+1

'a volte con dati diversi in ogni record., Quindi come dovrebbe un algoritmo di apprendimento automatico trovare i duplicati? Inoltre, come fai a sapere se John Doe è la stessa persona se è stato aggiunto con quasi gli stessi dati? IMHO stai gettando buzzwords intorno e tutto ciò che serve è un modello relazionale stretto nel database dei clienti. –

+0

@thomas È vero, sto davvero lanciando parole d'ordine, la verità è che sto cercando di entrare nei big data e ho pensato che sarebbe stata una buona opportunità per imparare, è per questo che ho detto che non sapevo se questo avrebbe funzionato . L'idea è che avrei bisogno di corrispondere su campi chiave come l'e-mail, per esempio, che rappresentano l'unicità per quanto riguarda il business, pensavo che non fosse sempre vero. Grazie per l'input però. –

+0

Non sai quale edizione sia il tuo Sql Server ma potresti essere in grado di sfruttare le trasformazioni di pulizia dei dati in SSIS (raggruppamento fuzzy e ricerca fuzzy): http://msdn.microsoft.com/en-us/magazine/cc163731. aspx –

risposta

14

C'è stato un sacco di ricerche su questo, e le persone hanno usato molti diversi tipi di algoritmi di apprendimento automatico per questo. Ho provato personalmente genetic programming, che ha funzionato abbastanza bene, ma personalmente preferisco ancora sintonizzare manualmente le corrispondenze.

Ho alcuni riferimenti per documenti di ricerca su questo argomento. StackOverflow non vuole troppi link, ma qui è informazioni bibliograpic che dovrebbe essere sufficiente utilizzare Google: Learning

  • Unsupervised apprendimento di Link Discovery Configuration, Andriy Nikolov, Mathieu d'Aquin, Enrico Motta
  • Una Macchina approccio per l'istanza di abbinamento basato sulla somiglianza metrica, Shu Rong1, Xing Niu1, Evan Wei Xiang2, Haofen Wang1, Qiang Yang2, e Yong Yu1
  • Learning Blocco schemi per Record Linkage, Matthew Michelson e Craig A. Knoblock
  • Learning Linkage Regole che utilizzano la programmazione genetica, Robert Isele e Christian Bizer

Questa è tutta ricerca, però.Se stai cercando una soluzione pratica al tuo problema, ho creato un motore open source per questo tipo di deduplicazione, chiamato Duke. Indica i dati con Lucene, quindi cerca le corrispondenze prima di fare un confronto più dettagliato. Richiede l'installazione manuale, anche se esiste uno script che può utilizzare la programmazione genetica (vedi link sopra) per creare una configurazione per te. C'è anche un ragazzo che vuole creare un plugin ElasticSearch per Duke (see thread), ma finora non è stato fatto nulla.

In ogni caso, questo è l'approccio che prenderò nel tuo caso.

8

Mi sono imbattuto in un problema simile, quindi ho fatto un po 'di Google. Trova una libreria denominata "Libreria Dedupe Python" https://dedupe.io/developers/library/en/latest/

Il documento per questa libreria ha dettagli di problemi e soluzioni comuni quando le voci di de-dupe e le carte nel campo de-dupe. Quindi, anche se non lo stai utilizzando, è comunque opportuno leggere il documento.

+0

Sono completamente d'accordo, Dedupe sembra davvero buono e l'articolo scritto dall'autore merita una lettura se vuoi un'introduzione all'argomento: http://www.cs.utexas.edu/~ml/papers/marlin-dissertation-06.pdf –

Problemi correlati