(Fuzzy) Rilevamento della duplicazione dei dati - strategia dei sistemi di punteggio

1

Molti sistemi che memorizzano i dati in modo strutturato (sebbene questo sia contrassegnato come indipendente dal linguaggio, l'origine di questa domanda è un database MS SQL) sono in conflitto con i duplicati. Prendendo come esempio una persona fisica / utente di un sistema, sto cercando di capire come sviluppare una strategia per identificare in modo affidabile la nuova immissione di dati come duplicato di un'entità esistente. Anni fa, la maggior parte delle persone possedeva e gestiva solo un account e-mail, rendendo l'indirizzo e-mail un punto di ingresso quasi perfetto come chiave unica. Questo non è più il caso, e ci sono somiglianze con i numeri di telefono ecc. Anche i nomi non vanno bene, Robert può essere facilmente Bob ad un certo punto e Robert Frank Jr.

Quando un occhio umano guarda 2 insiemi di dati, può quasi sempre identificare una duplicazione, ma come possiamo farlo?

Quasi tutti gli sviluppatori hanno questo problema, ma sembra esserci una letteratura molto limitata su come affrontarlo. Ho consultato altre domande qui (ad es. Deduplicazione di record complessi / Rilevamento di somiglianza ), su SO e attraverso i motori di ricerca, ma riguardano principalmente un'implementazione particolare, non una strategia su come ricavare un punteggio dal confronto dei dati.

Supponendo di avere strumenti illimitati, che si tratti di algoritmi fonetici o di somiglianza e distanza, come si può andare a segnare 2 serie di dati l'uno contro l'altro per ottenere un risultato finito - che, se supera una soglia specifica può quindi essere considerato un duplicato?

Supponiamo di avere un nome e un cognome per una persona, fino a 3 numeri di telefono in ordine non specificato, un indirizzo email, un indirizzo postale composto da 2 righe, un codice postale e una città:

+-----------+-----------------+-------------------+-------------------------+
| Property  |    Person 1     |     Person 2      |        Person 3         |
+-----------+-----------------+-------------------+-------------------------+
| Email     | [email protected] | [email protected] | [email protected] |
| Firstname | Bob             | Robert            | Carl                    |
| Lastname  | Smith           | Smith             | Smith                   |
| Phone 1   | +1234567        | 555-1234          | 234567                  |
| Phone 2   | NULL            | 01234567          | NULL                    |
| Address 1 | 1 Fairway       | E 42nd St         | 42 Another              |
| Address 2 | 42. Street (E)  | 1 Fairway         | App 1                   |
| Postcode  | 12345-1111      | 12345             | 12345-1111              |
| City      | Sin City        | Sincity           | Sin-City                |
+-----------+-----------------+-------------------+-------------------------+

Questo è un insieme molto limitato di dati da esaminare; per favore non dire "bene, basta confrontare il cognome e capire se i numeri di telefono sono simili" - questa domanda riguarda un approccio più generico su come ottenere un punteggio totale su un numero di confronti.

Un essere umano apparirebbe Persona 1 e 2 e li identificherà quasi sempre come duplicati, ma non identificherà Persona 3 come tale, anche se alcune proprietà sono ugualmente "simili".

È molto probabile che una persona con lo stesso cognome e codice postale possa essere un duplicato, ma potrebbe essere genitore e figlio, ad esempio. I numeri di telefono identici sono un indicatore, ma non necessariamente uno decisivo. Se tutto corrisponde ma l'indirizzo, il nostro contatto registrato in precedenza potrebbe essersi spostato di recente, quindi ancora una volta queste proprietà possono essere solo un indicatore, non un decisivo sì o no.

Il risultato finale di questo algoritmo dovrebbe essere davvero un livello di confidenza tra basso (altamente improbabile che i due record rappresentino un'entità duplicata), medio (non probabile un duplicato) e alto (ci sono buone probabilità che questi siano duplicati) .

Se hai letto fino a questo punto, probabilmente prenderai in considerazione il down-voting della domanda perché è improbabile che ci possa essere un'altra risposta che "dipende". Ti preghiamo di prendere in considerazione invece di aiutarmi con un commento per migliorare questa domanda in una risposta alla quale puoi rispondere.

    
posta ExternalUse 06.12.2018 - 18:37
fonte

1 risposta

2

È improbabile che tu possa costruire un sistema automatizzato affidabile, ma puoi applicare tecniche statistiche ("machine learning") per rilevare possibili duplicati e segnalarli per la revisione umana.

Ad esempio, potresti scrivere una raccolta di varie euristiche, ognuna delle quali emette un punteggio di similarità in cui due voci sono equivalenti. Potresti avere un'euristica che confronta i nomi di due voci, in cui l'euristica conosce diversi modi di scrivere, abbreviare e pronunciare nomi. Potresti avere un altro indirizzo per confrontare indirizzi email o indirizzi postali.

Oltre a queste euristiche, si allena un modello statistico che le pesa in modo appropriato e produce una classificazione binaria duplicata / non duplicata, idealmente come un punteggio di probabilità. Queste euristiche sono caratteristiche / variabili di input per la tecnica statistica. Forse un classificatore di Naive Bayes sarebbe appropriato, ma i modelli più complessi potrebbero essere maggiormente in grado di utilizzare le dipendenze e le interazioni tra le funzionalità. In genere, le macchine vettoriali di supporto o le reti neurali vengono utilizzate per attività di classificazione multifunzione con molti punti dati. Questa combinazione di diversi predittori può anche essere intesa come potenziamento .

È importante che le decisioni umane vengano reimmesse nel sistema in modo tale che l'accuratezza del rilevamento duplicato migliori nel tempo (apprendimento supervisionato). Se anche le singole euristiche sono basate su statistiche, potresti voler dare loro delle decisioni.

Tieni presente che il tuo problema presenta somiglianze con i filtri antispam: anche questo avrà un insieme di euristiche che devono essere combinate in un'unica decisione.

Probabilmente non è possibile testare tutte le voci l'una contro l'altra per somiglianza - sarebbe un'operazione di tipo O (n²). Potresti invece voler esaminare la tua euristica e trovare un modo per raggruppare le voci in gruppi in cui potrebbe euristico corrispondere l'un l'altro. Ad esempio, è possibile raggruppare le voci in base al cognome normalizzato ed eseguire il sistema di rilevamento su tali gruppi. Quindi si raggruppa per codice postale normalizzato e si esegue il rilevamento per ogni codice postale. Questa indicizzazione può accelerare il rilevamento di molti ordini di grandezza.

    
risposta data 06.12.2018 - 23:23
fonte

Leggi altre domande sui tag