Analisi di un dataset di perizie assicurative Esercitazione Data Mining
Ricapitoliamo… L’obiettivo dell’analisi che si intende condurre è l’estrapolazione di un modello per il riconoscimento automatico di perizie assicurative che riguardano casi in cui la compagnia può rivalersi sull’assicurato
Struttura del dataset Il dateset sul quale si intende effettuare l’analisi è disponibile sotto forma di file txt suddivisi per cartelle Il dataset è strutturato nelle cartelle yes: rimborsabili no: non rimborsabili Unknown: non ancora classificati
Operazioni sul dataset I dati vengono puliti da possibili errori o da informazioni inutili. Cleaning: eliminazione caratteri non alfanumerici (;,:,?,@,#,,, ecc..) Stemming: individuazione della radice morfologica della parola (reserved -> reserv) Stopwords: parole troppo comuni (the,if,or,I,you, ecc..)
N-grammi Sono insiemi costituiti da n parole consecutive Vengono estratti dal dataset con lo scopo di ottenere una matrice di occorrenze: Ogni riga è un file di testo Ogni colonna è un ngramma
Acquisizione Database Documenti testuali File testo classe 907792215990.txt I am to subro…. yes 908156218234.txt Rec subro file… ……………………….. ……………………… …………………. 100402235301.txt No subro file… no 101940233469.txt Receive subro… ………………………… Subro receive…. unknown Go to place…. …………………………. …………………….. ……………………
Acquisizione I dati sono documenti ripartiti in 3 sottocartelle. In ogni sotto cartella sono presenti una serie di documenti suddivisi in base alla classe assegnatagli o no: yes; no; unknown. ‘unknown’ non è un etichetta di classe, vuol dire che il documento non è stato classificato. Per ridurre i tempi di acquisizione e di generazione degli N-Gramma, nel caso di approcci tradizionali, è possibile evitare l’acquisizione di questi dati semplicemente rimuovendo la cartella unknown dal folder principale!
Acquisizione: Txt Documents Acquisition
Acquisizione Si seleziona il folder con i dati, e si forza a Nominal il terzo attributo. In output sarà creata una tabella con 3 colonne: 1) Nome del file dal quale il testo è stato acquisito; 2) Colonna contenente i termini presenti nel documento (StringAttribute); 3) Colonna di Classe. N.B. L’etichetta della colonna di classe è data dal nome del folder da cui il documento è estratto.
Acquisizione
I dati
Distribuzione sui dati Senza considerare i documenti non etichettati la distribuzione per le classi è la seguente: Valore di classe Numero di righe Percentuale Yes 1766 59,62 % No 1196 40,38 %
Distribuzione sui dati
Bilanciamo i dati Facciamo oversampling Inseriamo nel workflow un filter resample Size: 2.0 Bias: 2:1
Generazione degli N-gramma Per la generazione degli N-Gramma è possibile utilizzare un particolare filtro del tool Il filtro opera su campi di tipo StringAttribute Questo campo sarà sostituito con un nuovo campo di tipo EventCollection
StringToNGramFilter Il filtro ha diversi parametri: L’indice della colonna dal quale vogliamo estrarre gli N-grammi; Il linguaggio con sui scritti i testi; La frequenza minima per gli N-Grammi da estrarre; La lunghezza massima per gli N-Grammi da estrarre;
StringToNGramFilter La lista di caratteri da usare per la suddivisione in token del testo; La lista delle stop word da utilizzare.
EventCollectionAttribute Un EventCollectionAttribute è un particolare attributo che al suo interno contiene insiemi di oggetti. Può avere diversi contesti. I contesti non sono altro che proprietà dell’attributo. I contesti disponibili al momento sono: Frequency: indica la frequenza con cui quel N-gramma (event) compare nel documento acquisito; Length: indica la lunghezza dell’N-gramma.
Statistiche sugli Eventi
Estrazione degli N-gramma: StringToNGramm Filter
Estrazione degli Events più promettenti Non tutti gli eventi rappresentano informazione utile per l’analisi in corso Per eliminare Eventi poco significativi è possibile utilizzare il filtro Remove Events By scoring function Il filtro in esame utilizza un indice di qualità per ordinare gli eventi ed estrarre i primi N più promettenti, ove N è un parametro del filtro.
Estrazione degli N-gramma più promettenti
Rimozione del campo Document Name Come ultimo passo di preprocessing si andrà eliminare l’attributo Document_Name Questo campo si comporta come un ID della tupla quindi ininfluente per l’analisi di mining Tale rimozione sarà effettuata tramite il filtro remove Attributes già disponibile nel tool
Rimozione campo Document Name
Estrazione del modello In questa fase andremo ad estrarre un modello predittivo per i documenti estratti In particolare si vuole ottenere un modello cross validato, per tale ragione invece di utilizzare un simple mining task sarà utilizzato un cross validation mining task
Che algoritmo utilizzare? Per l’esempio in esame si è deciso di utilizzare l’algoritmo Rule Learner Gli algoritmi a regole sono particolarmente accurati in situazioni di sbilanciamento fra le classi
Risultati del modello cross validato
Matrice di Confusione La matrice di confusione per il modello cross-validato sembra molto promettente Real/Predicted no yes 3899 51 89 1886
Il test set Si è deciso a questo punto di verificare l’accuratezza del modello estratto sui dati di test in nostro possesso Come per il training set i dati sono disponibili sotto forma di documenti
Applicazione del modello sul test set
Risultati del modello sul test set
Matrice di Confusione La matrice di confusione risultante dall’applicazione del modello al test set è la seguente Real/Predicted no yes 4108 291 592 1033
Analisi in Weka L’analisi finora condotta e riproducibile anche in Weka trasfomarmando la fonte dati in un formato importabile in Weka A tal fine è possibile adoperare un semplice programma, il cui sorgente è disponibile in rete, TextDirectoryToArff.java http://weka.wikispaces.com/file/view/TextDirectoryToArff.java In questo modo sarà generato un file arff
Analisi in Weka Se importato in Weka il dataset presenta 3 colonne: 1) Etichetta di classe; 2) Testo contenuto nel documento; 3) Nome del file dal quale il testo è stato acquisito. Questa tabella non è direttamente trattabile, è necessario fare del pre-processing!
Filtro StringToWordVector Se si utlizza come tokenizer N-Gramm Tokenizer saranno generati un numero di attributi pari al numero di N-Grammi estratti Il valore della colonna sarà pari ad 1 o 0 in base alla presenza/assenza di quel N-Gramma all’interno del documento Utilizzando il filtro è altresì possibile specificare lo stemmer da usare per la fase di estrazione
Filtro StringToWordVector cleaning Stemming No stoplist
NumericToBinary Filter Gli attributi così estratti si presentano come attributi numerici Per proseguire con l’analisi è necessario trasformarli in attributi del tipo corretto ossia binari Per l’esecuzione di questa trasformazione utilizziamo il filtro NumericToBinary
Estrazione degli attributi più promettenti Anche in questo caso è necessario ridurre il numero di attributi/NGrammi a disposizione, in quanto alcuni poco significativi al fine dell’analisi in corso Per operare questa operazione è possibile utilizzare un particolare filtro di Weka, l’AttributeSelectionFilter
Estrazione degli attributi più promettenti Ha 2 parametri: Indice di qualità da utilizzare per valutare i sotto-insiemi; Metodo di ricerca da utilizzare.
Che algoritmo utilizzare? Le operazioni viste finora sono le operazioni necessarie per poter iniziare l’analisi Da nostre sperimentazioni risultano particolarmente efficaci modelli probabilistici Sta a voi scegliere il modello che riteniate maggiormente indicato per il caso in questione
Meccanismo di sottomissione dei modelli Il meccanismo di sottomissione dei modelli è unico ed indipendente dal tool che lo studente deciderà di usare: Verrà consegnato un dataset NON ETICHETTATO (test set); Lo studente applicherà il modello estratto sul training al test set generando una colonna con la predizione; Il test set così etichettato dovrà essere caricato sul sito del torneo.
Concetti/NGrammi Tra il materiale disponibile è possibile scaricare un file xls di associazione tra gli N-Grammi e dei possibili concetti individuati di esperti di dominio In particolare la presenza in un dato documento di un certo n-gramma indica che quel concetto è presente nel documento Ogni concetto può essere associato ad uno o più N-Grammi L’utilizzo dei concetti potrebbe permettere di migliorare l’accuratezza predittiva
Modelli avanzati E’ possibile aumentare la qualità del modello? Possiamo in qualche modo sfruttare la conoscenza fornita dalle tuple ‘unknown’? Si! Es. Self-training
Self training Self training Sfruttare le tuple ‘unknown’ per migliorare la qualità del nostro modello Da cosa partiamo? modello addestrato sul training set Classifichiamo con il modello generato le tuple ‘unknown’ Scegliamo una politica di selezione delle nuove tuple classificate e quindi le uniamo a quelle già presenti nel train Creiamo un nuovo modello in base al nuovo training set così generato Ripetiamo questi passi fino al punto fisso Self training
Self training: algoritmo generale Input: L è il training set dei dati etichettati, U è l’istanza dei dati non etichettati, C è il classificatore istruito, t è il numero delle iterazioni, Θ è il numero delle istanze non etichettate selezionate nella prossima iterazione, M è la metrica di selezione, S(Ut ,Θ ,C , M) è la funzione di selezione, e maxIteration è il numero massimo di iterazioni Inizialmente: t=0, Lt=L , Ut =U , dove Lt e Ut rappresentano le istanze etichettate e non etichettate alla iterazione t. Passi dell’algoritmo: istruisci C su Lt; St= S(Ut ,Θ ,C , M) , dove St è l’istanza dei dati non etichettati selezionati al passo t Ut+1=Ut-St ; Lt+1=Lt+St ; Finché Ut è vuota, oppure abbiamo raggiunto il numero massimo di iterazioni. Politica di selezione
Self training: come selezioniamo le tuple unknown Non tutte le istanze Unknown sono utili! Pericolo “rumore” Un approccio possibile: ad ogni passo vogliamo le tuple più “vicine al train set” Es. Concetto di vicinanza: % di matching del numero di ngrammi in un documento