Nel presente articolo viene illustrato un case-study, finalizzato alla creazione di un indice di previsione di nebbia, del software open source WEKA utilizzato per il pre-processing dei dati, l‘applicazione degli algoritmi di Data Mining, generazione dei modelli e valutazione delle prestazioni. I modelli di classificazione sono stati generati utilizzando algoritmi basati su tecniche per la creazione di Alberi Decisionali Induttivi e per la creazione di Reti Bayesiane disponibili in WEKA.
La metodologia
Nel seguente lavoro è stata applicata la metodologia CRISP-DM [1], che prevede un processo iterativo ed incrementale per la realizzazione del processo di Knowledge Discovery descritto in [2].
Le attività sono schematizzate nella figura 1 e la documentazione dettagliata è disponibile sul sito indicato. Brevemente il flusso principale prevede le fasi di
- Business Understanding: comprensione degli obiettivi di progetto, definizione del problema di Data Mining da affrontare;
- Data Understanding: raccolta dei dati, indagine preliminare sui dati;
- Data Preparation: preparazione dei dati per l’applicazione degli algoritmi;
- Modeling: selezione e applicazione delle tecniche di modellazione;
- Evaluation: valutazione delle prestazioni dei modelli creati;
- Deployment: progettazione dell’utilizzo dei modelli ai fini aziendali.
Figura 1 – CRISP-DM: CRoss Industry Standard Process for Data Mining
Per ciascuna fase sono dettagliate le attività da realizzare e la documentazione da produrre.
Business Understanding
Il caso di cui ci occupiamo prevede la creazione di alcuni indici di previsione locale della nebbia basati sul post-processing di variabili meteorologiche mediante tecniche di Data Mining utilizzando il tool WEKA.
Allo scopo, mediante la collaborazione con esperti del dominio meteorologico, sono state individuate due categorie di obiettivi da realizzare:
- obiettivi di dominio: formulati dagli esperti del dominio e intesi come gli scopi del progetto da un punto di vista meteorologico. Nella fattispecie, l’analisi della nebbia costiera presso la località di Trapani Milo utilizzando tecniche non tradizionali di analisi dei dati e l’opportunità di ideare un sistema di supporto alle decisioni basato su modelli ottenuti mediante l’applicazione di tali tecniche.
- obiettivi tecnici: formulati dai tecnici (data miners) sulla base degli obiettivi di dominio. Nella fattispecie, la creazione di modelli di classificazione dell’evento nebbia addestrati sul dataset meteo disponibile utilizzando il software WEKA e la creazione di un’applicazione software Java-based in grado di classificare eventi di nebbia sulla base dei modelli creati.
Data Understanding
La fase di Data Understanding comincia con la raccolta dei dati e la conseguente analisi delle sorgenti.
Per utilizzare il tool WEKA, i dati meteo disponibili in formato binario sono stati convertiti e trattati per ottenere una tabella in formato CSV che viene convertita automaticamente da WEKA in ARFF (formato descritto in [2]).
Dunque, la tabella in formato CSV, viene caricata in WEKA utilizzando “Open file…” (Open a set of instances from a file) presente nella scheda Preprocess (Open/Edit/Save instances). In questa stessa scheda è possibile prendere visione di alcune statistiche di base concernenti i dati caricati. Nella sezione “Current relation”, infatti, sono visibili il numero di “instances” (record) costituenti il dataset (17396) e il numero di attributi (10) in cui i dati sono organizzati. Nella sezione “Attributes” è presente l’elenco dei nomi degli attributi, mentre in “Selected attribute” vengono riassunte alcune caratteristiche e parametri dell’attributo selezionato.
Ad esempio, relativamente all’attributo HH indicante l’ora di osservazione dell’evento meteorologico, si ha la seguente schermata:
Figura 2 – Esplorazione dell’attributo HH.
L’attributo HH è di tipo nominale e può assumere 5 distinti valori {0,3,6,9,12}. Inoltre, nel dataset sono contati 3484 record con HH=0, 3448 record con HH=3, e così via. L’istogramma bicolore (rosso-blu) esprime come si distribuisce la classe FOG? all’interno dell’attributo HH, dove il blu rappresenta i record con FOG?=YES e il rosso i record con FOG?=NO.
Nella successiva figura sono mostrati caratteristiche ed alcuni valori statistici relativi all’attributo SP che corrisponde alla pressione di superficie. Essendo SP di tipo numerico, vengono esibiti: il valore minimo, il valore massimo, la media e la deviazione standard.
Figura 3 – Esplorazione dell’attributo SP.
Il grafico mostrato raffigura una distribuzione simile a una Gaussiana per l’attributo SP: questa condizione era stata prevista dall’esperto di dominio ed è stata confermata dalle attività di Data Understanding.
Questi grafici sono utili all’esperto del dominio per avere dei mezzi grazie ai quali fare un’analisi del dataset e ricavare delle informazioni utili.
Nella scheda Visualize di WEKA sono presenti altri strumenti di valutazione ed esplorazione del dataset. Ad esempio, è possibile ricavare una connessione tra due distinti attributi. Nella successiva figura è mostrato il grafico delle coppie di punti (2T,ST) dove 2T è la temperatura a 2 metri dal suolo ed ST è la temperatura al suolo.
Figura 4 – Connessione tra gli attributi 2T e ST
Tutti questi grafici sono stati sottoposti al meteorologo: l’esperto di dominio ha validato, in questo modo, il campione dei dati disponibili. Ad esempio, relativamente al grafico appena mostrato, il meteorologo può verificare una relazione tra 2T ed ST approssimativamente lineare, che è stata considerata corretta dall’esperto.
Dalla successiva figura, riguardante la distribuzione dell’attributo FOG?, è evidente il forte sbilanciamento tra i dati relativi ad osservazioni di FOG?=YES e FOG?=NO. Dei 17396 record costituenti il dataset, solo 142 corrispondono ad eventi di nebbia (proporzione YES:NO pari a 1:121), per cui si può considerare il fenomeno della nebbia un evento raro a Trapani. Tale considerazione ha come immediata conseguenza una particolare preparazione dei dati che verrà spiegata nel paragrafo successivo relativo alla fase di Data Preparation.
Figura 5 – Esplorazione dell’attributo FOG?
Data Preparation
Le attività relative alla preparazione dei dati sono finalizzate alla successiva applicazione degli algoritmi ed alla progettazione della fase di test dei modelli.
In questo case-study, il dataset originale è stato trasformato per generare diversi sottoinsiemi applicando una sequenza dei filtri resi disponibili dal tool WEKA nella scheda Preprocess, che permettono di ottenere nuovi file .ARFF e salvarli nel filesystem.
Figura 6 – I filtri di Preprocess di WEKA
Il dataset iniziale era ordinato per data crescente di evento (dal più remoto al più recente); si è ritenuto opportuno far precedere le trasformazioni da un’operazione di “mescolamento dei dati” per ottenere un file .ARFF in cui l’ordinamento dei record di nebbia fosse random. A tale scopo è stato applicato il filtro Randomize catalogato come filtro non supervisionato sulle istanze e dunque corrispondente al percorso: filters.unsupervised.instance.Randomize
Cliccando con il tasto destro del mouse sul nome del filtro selezionato e scegliendo l’opzione “Show properties” compare una finestra riportante la descrizione del filtro, i parametri disponibili ed il loro significato (bottone “More”); è stato scelto il valore 42 per il randomSeed, unico parametro disponibile, e confermato con il bottone “OK”.
Figura 7 – Proprietà del filtro Randomize.
Cliccando il pulsante “Apply” della scheda Preprocess, WEKA genera il dataset richiesto che può essere salvato sul filesystem usando il bottone “Save…”. WEKA aggiunge al nome della relation (dataset), nell’intestazione dei file .ARFF generati, il percorso del filtro ed il valore scelto per i relativi parametri; ad esempio, nell’intestazione del file .ARFF del dataset generato con randomSeed=42 compare @relation fog_data-weka.filters.unsupervised.instance.Randomize-S42.
Per la progettazione della fase di testing dei modelli esistono vari approcci [3], tra i quali è stato adottato Holdout method [3], che prevede la suddivisione del dataset originale in due sottoinsiemi: insieme di training ed insieme di test corrispondenti al 75% ed al 25% del dataset iniziale. Allo scopo di creare tali subset è stato applicato il filtro StratifiedRemoveFolds, che suddivide il dataset in input in un numero indicato di sottoinsiemi e restituisce in output il sottoinsieme indicato. Scegliendo l’opzione “Show properties” compare una finestra riportante i parametri del filtro StratifiedRemoveFolds; nella tabella seguente sono riportati i valori inseriti per i parametri:
Figura 8 – Parametri del filtro StratifiedRemoveFolds
Il filtro è stato applicato due volte per i due possibili valori di invertSelection: False restituisce il primo dei 4 sottoinsiemi, True restituisce il sottoinsieme complementare al precedente.
I dataset così ottenuti contengono rispettivamente 4349 record (Testing), 13047 (Training).
Nell’intestazione delle relazioni di ciascun dataset viene aggiunto il percorso
filters.supervised.instance.StratifiedRemoveFolds-S0-N4-F1 (Testing) filters.supervised.instance.StratifiedRemoveFolds-S0-V-N4-F1 (Training)
Gli insiemi di test e training così ottenuti conservano tutte le caratteristiche del dataset iniziale; in particolare ereditano la proporzione tra il numero di record positivi ed il numero di record negativi (1:121) e dunque la caratteristica di evento raro per la nebbia, emersa durante la fase di Data Understanding del campione di dati originale.
L’insieme di test viene utilizzato nella fase di Evaluation e non deve essere oggetto di alcuna ulteriore trasformazione; al contrario la condizione di distribuzione fortemente sbilanciata tra record positivi e negativi richiede di trattare i dati di training, in modo tale da evitare che gli algoritmi valutino durante la fase di apprendimento, erroneamente, i record positivi di nebbia come rumore presente nel dataset.
In letteratura [4] sono documentati diversi approcci per il problema degli eventi rari (noto come class imbalance [3]), tra i quali abbiamo scelto di applicare l’approccio dell’undersampling, ossia di manipolare il dataset di training allo scopo di ottenere un sottoinsieme che conservi tutti i record positivi di nebbia e che sia bilanciato rispetto ai record negativi (distribuzione 1:1).
Allo scopo abbiamo applicato il filtro SpreadSubsample, che permette di creare un dataset con distribuzione tra record positivi e negativi diversa rispetto al dataset in input. I parametri del filtro SpreadSubsample sono riportati nella tabella di figura 9:
Figura 9 – Parametri del filtro SpreadSubsample.
Applicando il filtro con tali valori dei parametri si ottiene un nuovo insieme di training contenente 214 record dei quali 107 positivi e 107 negativi. Nell’intestazione della relazione viene automaticamente aggiunto il percorso
weka.filters.supervised.instance.SpreadSubsample-M1.0-X0.0-S3796
L’insieme di training ottenuto viene utilizzato come insieme di apprendimento per gli algoritmi durante la successiva fase di modellazione. Allo scopo di predisporre una valutazione preliminare (stima dell’errore di generalizzazione) dei modelli creati (contestualmente alla fase di modellazione e dunque prima della fase di Evaluation), il suddetto insieme viene ulteriormente suddiviso in due sottoinsiemi ancora ricorrendo alla regola 75%-25%. Riapplicando il filtro StratifiedRemoveFolds nella maniera già descritta si ottengono, così, un nuovo insieme di training contenente 160 record (80 record positivi e 80 record negativi) ed un insieme di validation contenente i rimanenti 54 record.
Figura 10 – Distribuzione di FOG? nel dataset bilanciato.
Ricapitolando, l’utilizzo dei filtri disponibili in WEKA ha permesso di concludere la fase di Data Preparation con la creazione di tre dataset principali: insieme di test non bilanciato (4349 record), insieme di training bilanciato (160 record), insieme di validation bilanciato (54 record). L’intestazione dei corrispondenti file ARFF consente di individuare i filtri ed i valori dei rispettivi parametri applicati al dataset iniziale per ottenere ciascuno dei sottoinsiemi finali.
Modeling
La fase di Modeling si concentra sulla selezione di una o più tecniche di Data Mining: è la fase in cui vengono scelte le tecniche algoritmiche, generati i modelli e vengono calibrati i parametri degli algoritmi che li generano.
I modelli di Data Mining scelti per il presente case-study sono modelli di classificazione supervisionata basati su Alberi Decisionali Induttivi (DT) e Reti Bayesiane (BN).
La definizione corretta ci dice che le Reti Bayesiane (Bayesian Networks) sono modelli grafici della conoscenza in un dominio incerto. Si basano sulla regola di Bayes ed esprimono relazioni di dipendenza condizionale (archi) tra le variabili in gioco (nodi). Dal punto di vista matematico, una BN è un grafo aciclico orientato (DAG).
Ad ogni nodo è associata una tabella di probabilità condizionata che quantifica gli effetti che i “genitori” hanno sul nodo, dove per “genitori” si intendono tutti quei nodi che hanno archi che puntano al nodo, come in Figura 11 dove con pa(X) si intende i genitori di X (per approfondimento si può consultare [6]).
Figura 11 – Schema di una BN.
Le BN possono essere utilizzate in ogni settore in cui sia necessario modellare la realtà in situazioni di incertezza, cioè in cui siano coinvolte delle probabilità.
Con WEKA si possono applicare vari algoritmi presenti nella scheda Classify per la classificazione mediante BN. È stato scelto l’algoritmo BayesNet in Bayes (il cui percorso è WEKA.classifiers.bayes.BayesNet), in cui si possono selezionare delle opzioni che permettono la scelta dell’algoritmo per la costruzione della topologia della rete e per il calcolo delle tabelle di probabilità condizionate associate ai nodi della rete.
Per poter applicare l’algoritmo BayesNet, è stato necessario raffinare la preparazione dei dati per ottenere un dataset adeguato allo scopo. Infatti i dati devono essere discretizzati. Dopo che i dati sono stati “randomizzati” con il filtro non supervisionato Randomize (con seed=27), è necessario suddividere i dati in intervalli chiamati anche bin, in modo tale che i dati da tipo numerico diventino di tipo nominale.
Il filtro che WEKA utilizza si chiama Discretize e si può recuperare tra i filtri unsupervized. Tale filtro richiede di introdurre il numero dei bin, che può essere calcolato con la seguente formula:
Inoltre, siccome l’attributo AL, che corrisponde alla grandezza fisica Albedo, ha una distribuzione di valori molto irregolare (e non come gli altri attributi che hanno una distribuzione approssimativamente gaussiana, così come evidenziato nella fase di data understanding), si è scelto di cambiare a True il parametro useEqualFrequency del filtro Discretize.
Dopo aver scelto gli algoritmi (ovvero SimpleEstimator per le stime delle probabilità delle tabelle e K2 per la topologia della rete, che sono tra gli algoritmi maggiormente studiati e referenziati), sono state utilizzate diverse combinazioni dei valori per i parametri A (alpha: valore di soglia per gestire il caso di variabili di valore zero) e P (numero massimo di parenti per ciascun nodo), creati i relativi modelli le cui prestazioni sono state confrontate (ad esempio grazie alle matrici di confusione che WEKA calcola) sul validation set ottenuto con il procedimento descritto nel Data Preparation. Il set di validazione può essere caricato utilizzando il Set di Supplied test set presente in Test options. Con il tasto destro nel riquadro “Result list”, si sceglie Re-evaluete model on current test set per testare i vari modelli ottenuti al variare dei parametri.
Il parametro P è stato inizializzato al valore 3, mentre il parametro A (alpha) è stato inizializzato al valore 0.36. Questo parametro A entra nel calcolo delle probabilità condizionali [7]:
Se X è una variabile ed Y1,…,Yk i suoi parenti, allora la probabilità che X assuma il valore x, assegnato che Y1,…,Yk assumano i valori y1,…,yk, è:
I parametri scelti sono riassunti in figura 12.
Figura 12 – Parametri dell’algoritmo BayesNet.
A partire dal dataset dei dati meteo, con i valori opportunamente discretizzati ed utilizzando i suddetti parametri di BayesNet, si ottiene la seguente rete bayesiana che può essere visualizzata con visualize graph del menu a tendina di Result list:
Figura 13 – Rete Bayesiana e tabelle di probabilità.
Cliccando su ciascun nodo, si possono consultare le tabelle di probabilità delle quali, in figura, sono mostrate quelle relative al nodo 2T (che ha come nodi parenti FOG? e 2D) e al nodo FOG? dove, essendo il dataset di training bilanciato rispetto a quest’ultimo attributo, si ha evidentemente che P(YES) = 0,5 e P(NO) = 0,5. Infatti applicando la formula analizzata, si ottiene:
Come già accennato, l’altra tecnica di classificazione impiegata si basa su modelli costituiti da Alberi Decisionali (DT).
Per definizione, un albero di decisione (Decision Tree) è un albero (radicato e ordinato) in cui i nodi non terminali rappresentano i test di uno o più attributi e i nodi terminali (foglie) riflettono le decisioni risultanti. Dunque, è un albero nel quale ogni ramo rappresenta una scelta tra un numero di alternative, ed ogni nodo foglia rappresenta una classificazione o una decisione.
Nella seguente figura è mostrato un semplice esempio di schema di albero decisionale.
Figura 14 – Schema di un DT.
Gli alberi decisionali offrono numerosi vantaggi: sono facili da capire, possono essere trasformati in regole, e hanno dimostrato di ottenere buoni risultati, se messi a confronto con altre tecniche di gestione della conoscenza.
Il sistema WEKA implementa diversi algoritmi per la classificazione utilizzando DT, come in Figura 15. Tra questi è stato scelto l’algoritmo J48 che contiene opzioni di pruning e che gestisce sia dati a valori numerici che a valori nominali.
Figura 15 – Trees di WEKA.
Per l’utilizzo dell’algoritmo J48 sono stati fatti variare i suoi parametri, ottenendo vari modelli, le cui prestazioni sono state calcolate rispetto al validation set. Ad esempio, utilizzando i parametri impostati come nella seguente Figura 16, si ottiene un albero decisionale potato con 19 foglie e di taglia 25.
Figura 16 – Parametri di J48.
Selezionando Visualize tree, cliccando con il tasto destro nell’area Result list, si può visualizzare il modello grafico di albero creato, così come riportato in figura seguente:
Figura 17 – DT creato con J48.
Inoltre, WEKA, in Classifier output, restituisce anche le regole produttive ricavate dalla lettura dell’albero, e che sono di seguito riportate:
Figura 18 – Regole del J48.
Accanto a ciascuna regola, così come nelle foglie dell’albero, sono riportati anche numeri che indicano le quantità di esempi del dataset di training classificati seguendo quel percorso, e anche il numero (dopo il simbolo “/”) di esempi classificati erroneamente seguendo lo stesso percorso (la somma dei quali equivale alla somma dei falsi positivi e dei falsi negativi).
Di volta in volta, i modelli generati possono essere salvati nel filesystem cliccando con il tasto destro nella sezione Result list della scheda Classify e selezionando Save model. Gli stessi modelli possono essere recuperati all’occorrenza selezionando Load model.
Evaluation
La fase di Evaluation richiede la partecipazione dell’esperto di dominio al fine di valutare le prestazioni dei modelli creati e selezionare quelli ritenuti validi per il problema di dominio.
Nel presente case study è stato eseguito il calcolo delle prestazioni utilizzando le seguenti metriche:
- matrice di confusione,
- curva ROC
- Area Under Curve (AUC).
La matrice di confusione per un modello con classe binaria (matrice 2×2) è:
Figura 19 – Matrice di confusione.
Gli elementi della matrice sono di seguito definiti:
- Veri Positivi: numero di record positivi correttamente classificati come positivi,
- Falsi Negativi: numero di record positivi erroneamente classificati come negativi,
- Veri Negativi: numero di record negativi correttamente classificati come negativi,
- Falsi Positivi: numero di record negativi erroneamente classificati come positivi.
Altra importante misura di prestazione è la curva ROC, che costituisce un metodo grafico di valutazione dei risultati. La curva ha:
- per ascisse il FPr (False Positive rate), ossia la frazione di casi negativi erroneamente classificati come positivi (Falsi Positivi) rispetto al numero totale di casi negativi presenti nel dataset (Falsi Positivi+Veri Negativi);
- per ordinate il TPr (True Positive rate), ossia la frazione di casi positivi correttamente classificati come positivi (Veri Positivi) rispetto al numero totale di casi positivi presenti nel dataset (Veri Positivi+Falsi Negativi).
Quanto più la curva ROC si avvicina all’angolo in alto a sinistra del sistema di riferimento (ossia per alto TPr e basso FPr), migliore è la prestazione del corrispondente modello.
Altra interessante misura di prestazione è l’AUC (Area Under Curve), ossia la superficie sottesa dalla curva ROC.
Le prestazioni dei modelli generati sono state calcolate rispetto al dataset di test contenente 4349 record con distribuzione di classe originale 121:1. A tale scopo, nella scheda Classify di WEKA, è stata selezionata l’opzione Supplied test set del riquadro Test Options e cliccando il bottone Set è stato raggiunto il file di test nel filesystem. Nel riquadro Result List viene caricato il modello da valutare mediante l’opzione Load Model disponibile nel menu tasto-destro. Viene poi selezionata l’opzione Re-evaluate model on current test set. Nel riquadro Classifier Output sono calcolate alcune metriche di prestazione, tra le quali la matrice di confusione.
La curva ROC non è direttamente disponibile in WEKA, ma può essere visualizzata selezionando l’opzione Visualize treshold curve per la classe YES; compare una finestra in cui il grafico ha per ascissa il FPr e per ordinata il TPr: appunto la curva ROC! Nella stessa finestra è riportato anche il valore dell’AUC corrispondente.
I valori delle prestazioni così calcolati sono stati giudicati dagli esperti del dominio sulla base dei seguenti criteri di valutazione:
- Qualitativo: la mancata previsione di un evento di nebbia risulta molto più grave di un falso allarme per nebbia;
- Quantitativo: sono considerati soddisfacenti i modelli di previsione della nebbia con valori dell’AUC maggiori di 0.7.
Ben sei modelli ottenuti con le Reti Bayesiane e soltanto uno dei modelli di Alberi Decisionali soddisfano il criterio quantitativo e le corrispondenti matrici di confusione sono state giudicate soddisfacenti data la buona percentuale di Veri Positivi, nonostante l’elevato numero di Falsi Positivi, sulla base della considerazione espressa dal criterio qualitativo.
Di seguito si riportano le curve ROC per i migliori modelli creati con J48 e con BayesNet.
Figura 20 – ROC di J48 e di BayesNet.
Conclusioni
In questo articolo abbiamo ripercorso il processo di estrazione della conoscenza applicato a dati meteorologici, finalizzato alla creazione di modelli di classificazione per eventi di nebbia basata su tecniche di Data Mining, evidenziando come le fasi previste dalla metodologia CRISP-DM possano essere realizzate con il supporto del software open source WEKA. L’ultima fase di Deployment, prevista dal CRISP-DM, sarà descritta nel secondo articolo della serie, in cui sarà illustrato come la libreria del codice di WEKA viene integrata per la creazione di un’applicazione software Java-based in grado di classificare eventi di nebbia sulla base dei modelli creati.
Riferimenti
[1] CRISP-DM
http://www.crisp-dm.org/
[2] Francesco Saverio Profiti – Claudio Biancalana, “WEKA: l’approccio intelligente all’esplorazione dei dati” (parti I, II, III, IV), MokaByte nn. 116, 117, 118, 119
https://www.mokabyte.it/cms/section.run?name=mb116
[3] Tan P.-N. – Steinbach M. – Kumar V., “Introduction to Data Mining”, Addison-Wesley, 2005
[4] Daskalaki S. – Kopanas I. – Avouris N., “Evaluation of classifiers for an uneven class distribution problem”, in “Applied Artificial Intelligence”, 20 (5), 2006, pp. 381-417
[5] Chapman P. – Clinton J. – Kerber R. – Khabaza T. – Reinartz T. – Shearer C. – Wirth R., “CRISP DM 1.0. Step by step data mining guide”, SPSS, 2000
[6] Finn V.Jensen – Thomas D.Nielsen, “Bayesian Networks and Decision Graphs”, Springer, 2007
https://list.scms.waikato.ac.nz/mailman/htdig/WEKAlist/2004-December/003200.html