Università degli Studi Mediterranea di Reggio Calabria Dipartimento di Ingegneria dell’Informazione, delle Infrastrutture e dell’Energia Sostenibile Corso di Laurea in Ingegneria dell’Informazione Tesi di Laurea Big Data e Predizione: Teoria, Modelli, Tool e Case Study Relatore Candidato Prof. Domenico Ursino Rosario Laface Anno Accademico 2014-2015 A chi mi vuole bene, a colei che ha reso possibile tutto ciò, e a colui che avrebbe voluto esserci, e che sarà sempre nel mio cuore. Indice Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 Predictive Analytics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1 Cos’è la Predictive Analytics? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Le Data Science dietro la Predictive Analytics . . . . . . . . . . . . . . . . . . . . 1.2.1 Statistica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2 Data Mining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3 Machine Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Applicazioni Pratiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4 I Dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5 Il processo di analisi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.1 Identificazione dei dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.2 Strutturazione dei dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.3 Preparazione dei dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.4 Scelta del modello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.5 Implementazione del modello . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.6 Valutazione del modello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6 Critiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 7 7 7 8 9 12 14 15 15 16 17 18 19 19 2 Big 2.1 2.2 2.3 2.4 Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cosa sono i Big Data? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Big Data e Predictive Analytics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hardware e Calcolo distribuito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Strumenti di Analisi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.1 MapReduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.2 Apache Hadoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.3 Ecosistema Hadoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 21 24 26 28 29 32 35 3 I Modelli di Previsione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 I Modelli come Strumento di Previsione . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Data Clustering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 K-Means . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 K-nearest neighbors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 39 42 44 47 VI Indice 3.2.3 DBSCAN clustering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Data Classification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1 Reti Neurali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.2 Support Vector Machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.3 Alberi di decisione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4 Metodi Probabilistici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.1 Naive Bayes Classification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.2 Il Modello di Markov . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5 Recommendation Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 50 51 56 59 61 61 63 65 4 Analisi della Regressione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1 I Modelli di Regressione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Regressione Lineare Semplice e Multipla . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Regressione Logistica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 69 70 76 5 Tool di Analisi Predittiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1 Caratteristiche Generali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Weka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4 Orange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5 Analisi Predittiva Basata sul Cloud Computing . . . . . . . . . . . . . . . . . . 79 79 80 86 90 92 6 Case study: Utilizzo di R per Predire i Ritardi dei Voli . . . . . . . . . 95 6.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 6.2 Definizione degli Obiettivi ed Acquisizione dei Dati . . . . . . . . . . . . . . . 96 6.3 Analisi e Preparazione dei Dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 6.4 Estrazione di Nuove Variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 6.5 Suddivisione dei Dati ed Implementazione del Modello . . . . . . . . . . . . 102 6.6 Analisi della Regressione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 7 Conclusioni e uno Sguardo al Futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Ringraziamenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Riferimenti bibliografici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Elenco delle figure 1.1 Predictive Analytics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1 2.2 Big Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Andamento della quantità di ricerche Google riguardo il termine “Big Data” negli ultimi anni, a testimonianza del crescere della popolarità del tema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dati su un generico prodotto X raccolti da varie fonti . . . . . . . . . . . . . . Aumento della capacità degli hard disk nel corso del tempo . . . . . . . . . Processo diviso in più sottoparti (task ). . . . . . . . . . . . . . . . . . . . . . . . . . . Flusso dei dati lavorati tramite MapReduce . . . . . . . . . . . . . . . . . . . . . . . L’ecosistema di Hadoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Il logo di Apache Mahout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.3 2.4 2.5 2.6 2.7 2.8 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 Algoritmo di clustering che individua gruppi di appartenenza esaminando gli attributi dei dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Collezione di documenti in formato tabulare; gli attributi, in questo caso, rappresentano le parole più frequenti all’interno del testo. Le lettere da A a F indicano le istanze dei documenti . . . . . . . . . . . . . . . . . Un dataset relativo a dei clienti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Risultato dell’algoritmo K-means . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Densità del dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sottoinsieme di elementi che identificano un cluster . . . . . . . . . . . . . . . . Definizione di density-reachability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Struttura di un neurone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Struttura di un neurone artificiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funzione sigmoidea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Classificatore lineare (a sinistra) e non lineare (a destra) . . . . . . . . . . . Due diversi margini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vettore delle caratteristiche in uno spazio a 2 dimensioni . . . . . . . . . . . Calcolo dell’iperpiano che fornisce il margine migliore . . . . . . . . . . . . . . Albero di decisione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Albero di decisione per la previsione dell’esito di un investimento . . . . Catena di Markov a tre stati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 25 27 29 32 35 37 43 45 45 46 48 48 49 52 53 54 55 56 57 58 59 60 64 VIII Elenco delle figure 4.1 4.2 4.3 Modello di regressione lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Retta di regressione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Punti campione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 Il logo di R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . L’esempio di un dataset utilizzato da R . . . . . . . . . . . . . . . . . . . . . . . . . . Risultati della funzione predict() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Albero di decisione realizzato tramite R . . . . . . . . . . . . . . . . . . . . . . . . . . Il logo di Weka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . L’interfaccia Explorer di Weka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alcuni dei modelli di classificazione disponibili in Weka . . . . . . . . . . . . Il logo di Orange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . L’interfaccia grafica di Orange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . L’interfaccia grafica di Azure Machine Learning . . . . . . . . . . . . . . . . . . . Il logo di Google Cloud Platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Metodo richiamato dall’interfaccia di Google Prediction API . . . . . . . . 6.1 6.2 6.3 6.4 6.5 6.6 6.7 Dataset prelevato all’interno dell’ambiente di sviluppo di R . . . . . . . . . 97 Matrice delle correlazioni tra gli attributi del dataset . . . . . . . . . . . . . . 102 Risultati della Previsione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Residual vs Fitted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Q-Q plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Scale-Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Residual vs Leverage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 80 84 86 87 87 88 89 90 91 93 94 94 Elenco delle tabelle 4.1 Dati campione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 6.1 Attributi relativi alle osservazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Introduzione È risaputo come il possesso di informazioni determini notevoli vantaggi all’interno di qualsiasi settore. Nell’era digitale le informazioni vengono trasmesse attraverso flussi di dati dovuti al sempre maggiore utilizzo di strumenti elettronici connessi tra di loro. Tali informazioni rappresentano l’oggetto del desiderio di molte compagnie, le quali tentano di utilizzarle al fine di conoscere meglio i propri clienti ed incrementare le richieste dei propri servizi. Una tendenza in continuo aumento è quella di tentare di estrarre il maggior numero possibile di informazioni da un insieme scelto di dati. Quest’ultimi possono trovarsi, senza alcuna semantica particolare, all’interno di pagine web o email, oppure (in maniera ben definita) all’interno di strutture dati, database; gli stessi possono essere, ancora, prelevati da sensori. Oltre alle informazioni intrinseche, estraibili da ciascuna sorgente di dati, integrando le varie sorgenti è possibile far emergere ulteriori significati ed informazioni non ben evidenti. Questo è lo scopo dell’analisi dei dati (data analysis). Quest’ultimo è un processo di ispezione, pulizia, trasformazione e modellazione di dati con il fine di evidenziare nuove informazioni. Tale analisi viene realizzata mediante molti approcci e molte tecniche diverse, le quale variano in funzione dello scopo che ci si prefigge di ottenere. Con il passare del tempo sono emerse numerose potenzialità di un simile approccio. Oltre ad uno scopo descrittivo di semplice estrazione di nuove informazioni, infatti, spesso si ricorre all’analisi dei dati per ottenere risultati particolarmente convenienti, ossia, la previsione di eventi futuri. Molte tecniche di analisi permettono di descrivere una rappresentazione di uno o più particolari eventi e, quindi, di riproporre tali rappresentazioni al fine di prevedere, con una ben determinata precisione, simili comportamenti durante il futuro. Il Data Mining è quel particolare settore di analisi dei dati il quale si focalizza sulla modellazione e sulla scoperta di conoscenza per scopi predittivi. A quest’ultimo si affianca la disciplina dell’apprendimento automatico (machine learning) che rappresenta una delle aree fondamentali dell’intelligenza artificiale; essa si occupa della realizzazione di sistemi ed algoritmi i quali catturano caratteristiche di interesse all’interno dei dati, in maniera automatica, al fine di analizzarle e valutare le relazioni tra le variabili osservate. Entrambi sfruttano, in molti casi, tecniche di analisi statistica al fine di descrivere l’affidabilità dei modelli che rappresentano le informazioni a venire. 2 Introduzione L’analisi predittiva è una scienza, relativamente recente, che integra tecniche di data mining e machine learning per determinare particolari informazioni ancora sconosciute a partire da dati attuali. L’analisi dei dati, necessaria all’ottenimento di simili risultati, prevede fasi ben precise. Le prime cominciano con la raccolta dei dati e, successivamente, portano alla manipolazione di questi ultimi al fine di eliminare valori mancanti, oppure non coerenti con la particolare tecnica di analisi adottata. Dopo essere stati adeguatamente preparati, i dati vengono impiegati da determinati algoritmi al fine di sviluppare una rappresentazione del loro comportamento chiamata modello di previsione. A partire da quest’ultima vengono individuate le informazioni che riguardano eventi non ancora trascorsi. Poichè, dunque, la spinta necessaria a realizzare previsioni è data proprio dalle informazioni, nessuna fonte risulta essere efficace tanto quanto la fonte dei Big Data. Questo termine viene utilizzato per rappresentare enormi raccolte di dati i quali sono caratterizzati, oltre che dall’elevato volume di informazioni contenute, da un’elevata velocità di aggiornamento e da un’estrema varietà. Simili collezioni di dati, pur essendo determinanti ai fini dell’analisi predittiva, non possono essere analizzati mediante tradizionali algoritmi. Le caratteristiche dei Big Data impongono l’utilizzo di strumenti che possiedono capacità di elaborazione molto elevata o, in alternativa, di reti di calcolatori che permettono di suddividere le diverse operazioni svolte sui dati su più macchine. Proprio su quest’ultimo tipo di sistema si basa la piattaforma Apache Hadoop la quale consente l’elaborazione distribuita degli algoritmi di predizione. Tali algoritmi permettono di realizzare diversi modelli in base alle diverse esigenze. In alcune applicazioni pratiche, è necessario analizzare i dati allo scopo di individuare particolari somiglianze tra gli oggetti e, dunque, associare ciascuno di essi ad una particolare categoria. È questo il caso degli algoritmi di clustering i quali consentono di individuare diversi possibili gruppi di appartenenza dei dati. A tali categorie è spesso necessario ricondurre le diverse osservazioni raccolte (ad esempio, al fine di concedere un prestito, dopo aver ottenuto i dati di un particolare cliente, si vuole stabilire se quest’ultimo può essere etichettato come affidabile o no). Il compito di individuare le caratteristiche di appartenenza di un oggetto ad un gruppo, piuttosto che ad un altro, è svolto dai modelli di classificazione. Esistono diversi altri tipi di modelli di previsione quali, ad esempio, i modelli probabilistici, i quali affrontano la problematica della previsione mediante metodi statistici. Particolare interesse pratico possiede una determinata categoria di modelli denominati modelli di regressione. Questi ultimi consentono di prevedere quantità numeriche, basando le proprie assunzioni su metodi geometrici e matematici. Allo scopo di semplificare l’uso dei modelli appena citati, sono stati implementati tool specifici per l’analisi dei dati. Alcuni di essi servono come strumenti per svolgere compiti semplici che coinvolgono quantità relativamente piccole di dati. Altri servono, invece, per analizzare situazioni complesse. Quest’ultimi vengono implementati sulle piattaforme software per l’analisi dei Big Data, citate in precedenza, e permettono dunque di suddividere gli obiettivi dell’analisi in più task secondari. Nella presente tesi, verrà utilizzato uno di questi tool al fine di mettere in atto le procedure appena citate in un case study. In particolare, si cercherà di prevedere i ritardi negli arrivi in aeroporto durante i viaggi aerei. Verranno impiegati dati corrispondenti ai precedenti voli, i quali comprendono, al loro interno, anche i ritardi Introduzione 3 osservati in passato, al fine di costruire un modello capace di utilizzare dati più recenti per prevedere periodi di ritardo non ancora noti. Tutte le tematiche appena affrontate verranno riproposte, con maggiore dettaglio, all’interno della presente tesi. In particolare, essa è strutturata come di seguito specificato: • Nel Capitolo 1 viene esposta una descrizione generale dei processi di analisi predittiva, facendo riferimento alle discipline che ne stanno alla base ed alle applicazioni di uso comune. • Nel Capitolo 2 vengono descritte le caratteristiche dei Big Data, le problematiche legate alla loro analisi e gli strumenti realizzati a tale scopo. • Nel Capitolo 3 vengono mostrati i principali modelli di predizione citando, per ciascuno di essi, i principali impieghi, i vantaggi e gli svantaggi. • Nel Capitolo 4 viene dato spazio alla particolare tipologia dei modelli di regressione. • Nel Capitolo 5 vengono esaminati alcuni dei principali tool di analisi predittiva, facendo riferimento ai motivi che spingono all’utilizzo di ciascuno di essi. • Nel Capitolo 6 viene esposto il case study, partendo dalla raccolta dei dati fino all’analisi dei risultati finali. • Nel Capitolo 7, infine, viene proposto un riassunto dell’evoluzione moderna dell’analisi predittiva e delle possibili applicazioni future. 1 Predictive Analytics In questo capitolo vengono presentate le caratteristiche generali della Predictive Analytics o analisi predittiva, vengono mostrate le discipline dalle quali ha avuto origine, i principali obiettivi e gli utilizzi più promettenti; viene inoltre fatto un breve resoconto sulle tipologie di dati utilizzati dagli strumenti di analisi e di predizione. Viene quindi illustrato in dettaglio il processo generale di analisi predittiva, infine, viene fatto un accenno alle critiche mosse contro questa nuova disciplina. Figura 1.1. Predictive Analytics 1.1 Cos’è la Predictive Analytics? La Predictive Analytics è un insieme di tecniche e discipline che ha lo scopo di prevedere il comportamento di un qualunque sistema o di una qualsiasi variabile o insieme di variabili[17]. È ovvio che i vantaggi di tutto questo sono praticamente illimitati se non fosse che l’analisi predittiva non riesce a prevedere perfettamente il futuro ma riesce comunque a fare delle previsioni con un livello di precisione più che accettabile. Un po come gli scienziati usano modelli fisici e matematici per determinare il comportamento di un sistema, con l’analisi predittiva, che invece si basa su dati empirici ottenuti dalle stesse entità sulle quali si vogliono fare previsioni, 6 1 Predictive Analytics in particolare dati storici e attuali, è possibile estrarre nuove informazioni, il che significa, sostanzialmente, vedere ciò che agli altri è invisibile. Ad esempio, applicando l’analisi al mondo del marketing, che rappresenta circa un terzo delle reali applicazioni di questa disciplina, si possono ottenere principalmente tre vantaggi. Il primo consiste nella lungimiranza, anticipare il comportamento dei clienti, dei quali possiamo conoscere, ad esempio, gli articoli che sono interessati ad acquistare o sapere in anticipo quando e perchè non sono più interessati a un determinato servizio. Il secondo consiste nel poter categorizzare tali clienti in base alle loro necessità, comprendere meglio i loro bisogni migliorando la cosidetta “customer experience”, migliorare i prodotti, identificare potenziali rischi e opportunità per la compagnia. Come terzo e ultimo vantaggio, scavare a fondo nel passato dei clienti permette di associare i dati già in possesso alla compagnia a dati che potrebbero esserlo; conoscere tali informazioni permette di affinare le strategie e massimizzare i profitti. Un’altra possibilità offerta è quella di prevedere in anticipo i possibili sviluppi di una malattia, analizzando i possibili fattori determinanti. Inoltre, molte organizzazioni, attualmente, utilizzano determinate regole guidate dai dati in loro possesso per prevedere l’esito delle decisioni prese. Un tipico esempio di utilizzo di analisi predittiva è dato dall’uso che ne fanno le compagnie bancarie che, analizzando dati provenienti dai movimenti nelle carte di credito dei clienti, prevedono in modo efficiente l’esito della decisione di concedere o meno un prestito, spesso in tempo reale tramite dei tool di predizione. Analogamente, nel mondo delle assicurazioni, l’analisi predittiva permette di accelerare i meccanismi di valutazione delle richieste di indennizzo e, allo stesso tempo, di prevenire possibili frodi; queste categorie rappresentano un altro terzo delle applicazioni. Infatti, per estensione, l’analisi predittiva può essere utilizzata per calcolare qualsiasi tipo di incognita riguardante sia il futuro che il presente, in quanto il processo di predizione consiste nell’individuare degli schemi tra i dati che vengono analizzati ed estrapolare da essi innumerevoli informazioni nascoste che, altrimenti, non verrebbero mai evidenziate nei dati grezzi. Oltre ai vantaggi insiti nella previsione degli eventi futuri, infatti, non bisogna dimenticare che dalla preventiva azione di estrazione dei dati (data mining), caratteristica del processo di analisi predittiva, derivano altri vantaggi; possiamo immaginare, infatti, quante risorse e quanto tempo possono essere risparmiati analizzando grandi quantità di dati in maniera automatica tramite dei tool specializzati, senza contare di quanto viene ridotta la possibilità di errore umano e di quanto aumenta la precisione. I dati che vengono considerati sono di diverso genere e vengono forniti dagli esperti del settore; in genere, però, si tratta di dati caratteristici dell’elemento sul quale si sta cercando di fare previsioni e che provengono dal passato dello stesso; tramite questi dati viene istruito un modello che simula il comportamento del soggetto che si sta osservando, e da questi comportamenti vengono dedotti degli schemi che sono, poi, le previsioni vere e proprie. Tutto questo determina un’elevata affidabilità per quanto riguarda sia dati deterministici che casuali. I vari modelli sono scelti in base alle varie situazioni e sono descritti dalle varie discipline che stanno alla base della predictive analytics. 1.2 Le Data Science dietro la Predictive Analytics 7 1.2 Le Data Science dietro la Predictive Analytics La predictive analytics fa ampiamente uso di tre discipline che sono strettamente legate a essa: statistica, data mining e machine learning. Il legame tra queste discipline è cosı̀ forte che, spesso, si indica una per fare riferimento a un’altra, questo perchè l’analisi predittiva combina molte tecniche, strumenti e algoritmi caratteristici delle altre. La differenza fondamentale è l’obiettivo: mentre statistica, data mining e machine learning cercano di comprendere i dati, analizzarli, estrapolare informazioni e imparare da essi, la predictive analytics ha come scopo quello di utilizzare queste informazioni e i modelli ricavati per fare previsioni utili. Fra i comuni denominatori delle tre discipline c’è sicuramente, la matematica, che fornisce strumenti a ciascuna di esse, come anche la preventiva analisi dei dati, necessaria per fornire i dati più adatti per prendere le decisioni più accurate. Nelle prossime sottosezioni verranno analizzate in dettaglio ciascuna delle tre discipline di cui sopra: 1.2.1 Statistica Comprende metodi per la raccolta e l’analisi dei dati relativi a determinati fenomeni al fine di studiarli quando non è possibile avere una completa conoscenza di essi. Utilizza formule matematiche per studiare tali fenomeni quando è presente una incertezza, cioè quando non è possibile osservare in modo deterministico la quantità o la qualità degli attributi del fenomeno. Essa quinti strettamente legata alle teoria delle probabilità. Tramite la statistica è possibile identificare relazioni tra i dati, cosa molto utile nella fase di comprensione degli stessi. Al contrario del data mining, tuttavia, la statistica non prevede il filtraggio e la preparazione dei dati. La statistica si può suddividere in due branchie principali: statistica descrittiva e statistica inferenziale. La prima ha come obiettivo quello di descrivere gli aspetti più rilevanti dei dati osservati e sintetizzarli attraverso strumenti grafici e indicatori come media, varianza, etc. La seconda cerca di stabilire dei comportamenti e delle caratteristiche delle variabili ottenute con un certo grado di precisione predeterminato e, quindi, spesso descrivendoli in termini di densità di distribuzione di probabilità. Usando solo un campione dei dati in nostro possesso è possibile, tramite la statistica, avere una base per avanzare ipotesi su ciò che potrà avvenire. 1.2.2 Data Mining Con questo termine si intende l’insieme di tecniche analitiche che mirano a trovare schemi (pattern) utili o nuove relazioni nei dati al fine di estrarre informazioni nascoste, cioè non direttamente esplicitate dai dati stessi. A differenza della statistica, che analizza informazioni generali nel dominio di interesse, il data mining analizza possibili correlazioni tra più variabili come, ad esempio, gli acquisti che vengono fatti da un determinato cliente o gli oggetti di interesse comuni a più clienti. Il data miner utilizza una serie di metodi specializzati nello scoprire particolari significati che assumono certe combinazioni di variabili, metodi ereditati dalla statistica e dal machine learning (che possiamo definire come una sorta di intelligenza artificiale). 8 1 Predictive Analytics Gli algoritmi esistenti prendono spunto da queste discipline; esistono molte tecniche come la regressione, gli alberi di decisione, il clustering etc., ciascuna delle quali restituisce un modello che descrive in che modo certe variabili si collegano ad altre. La maggior parte delle attività di data mining può essere portata a termine grazie a poche tecniche che si basano sulla regola 80\20 [13, pag.4], che ci suggerisce che la maggior parte dei problemi, in genere proprio l’80%, può essere risolto con l’uso di una piccola parte degli strumenti a disposizione, cioè il 20%; in questo caso, infatti, è possibile modellare la maggior parte delle situazioni con le tecniche più comuni; tuttavia, è importante anche considerare ulteriori strategie che possono fare emergere schemi ancora più nascosti. Uno degli aspetti chiave del data mining è la generalizzazione degli schemi, cioè l’estensione delle relazioni trovate per uno o più particolari valori del dataset, sui quali si applicano i metodi per la creazione dei modelli, a nuove e sconosciute istanze dei dati. Nell’ottica della predictive analytics i modelli creati hanno due obiettivi principali: stabilire una relazione tra i dati di input osservati e la tipologia di dati di output desiderata e, tramite questa relazione, prevedere l’output dato da valori non ancora conosciuti. Al fine di ottenere un processo di estrazione delle informazioni soddisfacente è necessario possedere una conoscenza preliminare sui dati e sui processi che li hanno generati (subject matter expertise). In questo modo si può rendere il processo di estrazione un processo iterativo e capace di modificare i vari modelli una volta ottenute le prime informazioni per identificare nuovi schemi. Il data mining opera frequentemente su grandi quantità di dati strutturati, affiancandosi, spesso, a tecniche (come la computazione parallela e distribuita) che giocano spesso un ruolo fondamentale nell’elaborazione. 1.2.3 Machine Learning Questo termine fu coniato nel 1959 da Arthur Samuel, pioniere dell’Intelligenza Artificiale, per indicare quel campo che studia l’abilità dei computer a imparare senza essere stati esplicitamente programmati a farlo. In altre parole, il Machine Learning cerca nuovi modi con i quali il computer può acquisire conoscenza direttamente dai dati e da essi imparare a risolvere i problemi [15, pag.12]. James N. Morgan e John A. Sonquist nel 1963 proposero un metodo per trovare schemi e relazioni nei dati. Tale metodo si chiamava AID (Automatic Interaction Detection) e consisteva in un algoritmo che cerca automaticamente un modo per categorizzare i dati in due gruppi detti cluster e ricorsivamente analizza ogni gruppo per cercare un modo per dividerlo ulteriormente, creando un albero di cluster. Tuttavia questo metodo utilizza, per le proprie scelte, dei metodi puramente statistici; perciò, indipendentemente dal lavoro di Morgan e Sonquist, i ricercatori sono stati capaci di introdurre degli algoritmi che rendono il computer capace di imparare mimando il modo di pensare umano; questi algoritmi costituiscono le tecniche di Machine Learning. Il Machine Learning è un’altra disciplina che ha come obiettivo l’analisi dei dati e la scoperta di nuove informazioni provenienti da essi, ma questo scopo è raggiunto in 1.3 Applicazioni Pratiche 9 maniera automatica, tramite degli algoritmi implementati. Anche in questo caso si tratta di un meccanismo iterativo in quanto più la macchina apprende dai dati e più è capace di apprendere in un continuo ciclo in cui il sistema, ad ogni analisi, riceve un feedback e migliora se stesso. Utilizzare il machine learning equivale a insegnare le regole di un gioco a un sistema e poi permettergli di fare pratica giocando a vari livelli, fino a fargli raggiungere un livello avanzato [7, pag.53]. Il machine learning ha innumerevoli applicazioni pratiche [12]; in particolare, sono due le tipologie di algoritmi di apprendimento automatico di nostro interesse, gli algoritmi di apprendimento supervisionato e gli algoritmi di apprendimento non supervisionato. I primi hanno come vantaggio il fatto di agire su dati in input che tra i loro attributi contengono una descrizione che ci permette di conoscere a priori a quale istanza i possibili risultati della previsione si riferiscono (label o target features), quindi hanno già a disposizione, in input, le possibili variabili di output. I restanti attributi saranno quelli utilizzati dall’algoritmo per prendere le decisioni (descriptive features). Quest’ultimi rappresentano gli scenari più frequenti e hanno un vantaggio; infatti, avere già a disposizione i possibili risultati della previsione prima ancora di lanciare l’algoritmo permette di avere, in un certo modo, una sorta di riscontro. La seconda tipologia, ovvero quella degli algoritmi di apprendimento non supervisionato, non permette questa possibilità, e senza label non è possibile rappresentare a priori i dati in output. In questo caso è, quindi, necessario individuare delle similitudini tra le varie istanze; questo processo è noto come clustering. Gli algoritmi di machine learning operano cercando il migliore, tra una serie di possibili modelli, cioè quello che meglio rappresenta le relazioni tra descriptive feature e target feature in un dataset e che riesce a far si che tali modelli siano validi per ogni possibile istanza del dataset. In questo caso si dice che il modello è consistente con il dataset. Tra i metodi supervisionati e quelli non supervisionati esistono altre due categorie importanti ai fini della predictive analytics, cioè le categorie di algoritmi di apprendimento semi-supervisionato e quelli di apprendimento rinforzato. La prima opera su dati una parte dei quali contiene un attributo label mentre l’altra parte è completamente senza etichetta. In genere questi algoritmi utilizzano prima i dati con etichetta per istruire il modello e trovare le relazioni che legano ogni istanza a un tipo di label; in seguito, adottano quelli senza etichetta proiettando le proprietà che hanno determinato le relazioni già trovate su questi ultimi. In un algoritmo di apprendimento rinforzato, invece, non esistono target feature, ma sono fornite ulteriori informazioni per dirottare i dati di output verso un determinato risultato. Un tipico esempio si ha quando si cerca di prevedere la prossima mossa utile in una partita di scacchi partendo da dati inerenti le precedenti partite. Per ogni singola mossa fornita in input non esiste una relazione diretta con la prossima mossa più conveniente che si sta cercando di prevedere, ma l’algoritmo ha a disposizione le sequenze di mosse che hanno portato alla vittoria nei precedenti incontri, il che aiuta nella scelta. 1.3 Applicazioni Pratiche Dalle innumerevoli strategie accennate finora emerge come la predictive analytics sia una disciplina molto versatile; questo perchè è applicata in innumerevoli campi, 10 1 Predictive Analytics cosa ovvia se si pensa alla possibilità di ottenere in anticipo informazioni sul proprio futuro. Le varie compagnie e organizzazioni hanno bisogno di una certa esperienza nel proprio lavoro, o possibilmente anche di consulenze esterne, per avere la conoscenza adatta (business knowledge) a selezionare i dati sui quali applicare i vari modelli in modo da dare i risultati migliori in termini di schemi utili e, di conseguenza, di nuove informazioni estrapolate. Tramite queste conoscenze, e in congiunzione con le tecniche di data mining e machine learning, ogni organizzazione ha l’opportunità di possedere un formidabile strumento costituito dalle informazioni. Il successo che questa nuova opportunità ha riscosso ha portato a un incremento delle richieste di analisi predittiva. Fra le innumerevoli richieste, nel seguito si elencano [18, pag.14] quelle per le quali ha avuto un impatto maggiore: • • CRM : il CRM, cioè Content Managment System, è una strategia vincente di mercato che pone al centro del business il cliente, invece che il prodotto. Essa mira ad individuare i profili dei clienti, attuali o potenziali, cosı̀ da mettere a punto nuove attività o strategie che, da un lato, aiutino a catturare nuovi clienti e, dallaltro, consentano di massimizzare i profitti sui clienti fedeli, cercando di comprenderne esigenze e aspettative [4]. Il CRM è un’applicazione commerciale di analisi predittiva. Infatti, i suoi metodi ed i suoi strumenti possono essere applicati ai dati dei clienti per conseguire obiettivi che includono la creazione di efficienti campagne di marketing e di servizi al cliente. Le compagnie devono riuscire ad analizzare e comprendere i dati dei loro prodotti, individuando quelli di maggior successo, reale o potenziale, ed utilizzandoli per conoscere in anticipo le abitudini di acquisto dei clienti e, di conseguenza, per dare maggiore promozione a quei prodotti che si prevede verranno acquistati più frequentemente o per individuare nei prodotti potenziali problemi che possono portare alla perdita di fiducia da parte del cliente. Supporto alle decisioni in ambito clinico: gli esperti usano l’analisi predittiva in ambito medico principalmente per individuare i pazienti che potrebbero correre il rischio di contrarre particolari patologie: diabete, asma, problemi cardiaci, e altre. Molti sistemi di supporto incorporano strumenti di analisi predittiva come mezzo di rinforzo alle decisioni; si tratta, in questi casi di trovare un collegamento tra conoscenze e osservazioni mediche e le scelte che dovranno essere fatte per meglio affrontare o prevenire i disturbi. I dati raccolti provengono spesso da visite in ospedale, sintomi mostrati dai pazienti, esiti di trattamenti a cui essi vengono sottoposti; questi dati possono essere utilizzati in particolare per prevenire la diffusione di malattie epidemiche. Un caso di studio interessante è rappresentato dal possibile utilizzo dei dati derivanti dalle ricerche fatte sul motore di ricerca di Google come strumento di predizione per le epidemie [7, pag.81]. Le persone usano Google per cercare praticamente qualsiasi cosa, tra cui anche la prossima località che visiteranno, le persone che hanno incontrato o i sintomi dei disturbi che pensano di avere. Tali ricerche hanno assunto una certa importanza dal punto di vista medico; infatti, come mostrato nel recente articolo di ricerca “Detecting Influenza Epidemics Using Search Engine Query Data” pubblicato sulla rivista “Nature” da Jeremy Ginsberg, i ricercatori di Google hanno scoperto 1.3 Applicazioni Pratiche 11 che queste ricerche sono un buon indicatore della diffusione, corrente o futura, di una determinata malattia. Ginsberg con il suo team di ricerca ha scoperto una forte correlazione tra il numero di individui che ricercano termini collegati all’influenza e il numero di persone che hanno contratto realmente l’influenza. Come Google stesso ha dichiarato: “c’è un incremento nel numero di ricerche correlate alle allergie durante le stagioni in cui esse colpiscono, o un incremento di ricerche sulle bruciature della pelle durante i mesi estivi”; questo ci può far capire come sia plausibile pensare di trovare un collegamento tra le ricerche su una determinata malattia e i casi di malattia stessa. Google riesce a vedere questi schemi e utilizza i dati estratti dalle ricerche per costruire modelli che permettono di prevedere eventi reali, quali, per l’appunto, la diffusione di una malattia in una determinata regione. Basandosi su un dataset costituito da dati raccolti dal motore di ricerca e da altre fonti, in più di cinque anni, Google è riuscito a costruire un modello che funge da strumento di sorveglianza internazionale per la prevenzione delle epidemie. Gli impieghi dell’analisi predittiva in ambito medico non finiscono qui: il professor Abdelghani Bellaachia e il suo team all’università di Washington, nel loro articolo “Predicting Breast Cancer Survivability Using Data Mining Techniques”, mostrano come l’analisi predittiva possa essere usata per minimizzare i rischi di contrarre il cancro al seno. Utilizzando dati storici raccolti, disponibili al pubblico, sui vari tipi di cancro, dati contenenti svariati attributi, come tempi di sopravvivenza, cause di morte, parametri vitali, etc., e implementando, tramite questi dati, degli algoritmi basati su modelli di classificazione come classificatori bayesiani, reti neurali e alberi di decisione, i ricercatori sono riusciti a creare due classi di pazienti, sopravvissuti e non, trovando le relazioni che legano gli attributi osservati a una di queste due categorie e quindi riuscendo a individuare le principali cause che determinano l’insorgere del cancro, almeno per quanto riguarda i pazienti contenuti nel dataset per la creazione del modello. Gli algoritmi ottenuti usando le varie tecniche sono stati confrontati e i risultati migliori in termini di conformità del modello sono stati raggiunti dal modello ad albero di decisione. • Analisi per le riscossioni dei crediti: un gran numero di risorse finanziarie vengono spesso sprecate su clienti fraudolenti; l’analisi predittiva può aiutare a ottimizzare la cessione dei crediti, identificando le strategie e le azioni legali più efficienti per ogni cliente, incrementando significativamente le entrate e riducendo le perdite. • Cross-Selling: è una strategia di marketing che consiste nel mettere a disposizione dell’utente beni o servizi in qualche modo collegati a un prodotto già esistente; per un’azienda usare l’analisi predittiva per analizzare le abitudini dei clienti può essere utile per offrire prodotti di interesse, per aumentare il profitto sul singolo cliente e incrementare la fedeltà. • Fidelizzare i clienti: per affrontare la concorrenza le aziende devono concentrare i loro sforzi nel mantenere alta la “customer satisfaction”, premiando la lealtà del clienti e minimizzando ciò che può farli allontanare. Tuttavia, quando un cliente ha deciso di allontanarsi da un certo servizio, è praticamente già impossibile fargli cambiare idea; l’analisi predittiva può far si che non si arrivi a questo pun- 12 • 1 Predictive Analytics to; analizzando i precedenti utilizzi del servizio è, infatti, possibile individuare schemi che permettono di riconoscere i fattori che determinano l’allontanamento da parte dei clienti. Rilevamento delle frodi: le frodi rappresentano un grosso problema per ogni genere di attività, si va dalle transazioni finanziarie fraudolente alle false richieste di indennizzo. L’analisi predittiva può ridurre le esposizioni a tali rischi. Il governo statunitense usa da molti anni questa analisi per identificare eventuali evasioni fiscali. 1.4 I Dati Nell’era dell’informazione i dati vengono raccolti con grande rapidità e varietà e vengono accumulati in database, documenti, e-mail, file audiovisivi, e molti altri supporti. Conoscere le varie tipologie di dati con cui si ha a che fare è essenziale per comprenderli al meglio e per categorizzarli in modo da poterli utilizzare durante il processo di previsione. Le compagnie, spesso, negli anni accumulano grandi quantità di “dati grezzi”; più cose si sanno su questi dati e più si è in grado di analizzarli e usarli. Per questi motivi è utile descrivere i dati secondo delle importanti caratteristiche distintive: • Dati strutturati e non strutturati: tutte le tipologie di dati finora elencati possono essere distinti in dati strutturati e non; i primi sono sempre ben organizzati; essi appaiono come formalmente ben definiti; su di essi è semplice fare ricerche o modifiche; essi sono efficienti da analizzare. In definitiva sono facilmente accessibili da persone o macchine, ma non sono disponibili spesso; l’esempio più tipico è costituito dai dati contenuti nei database relazionali che mettono bene in evidenza i vari attributi di ogni dato nelle varie colonne con una visualizzazione tabulare. La seconda tipologia, ovvero quella dei dati non strutturati, è costituita da tutti quei dati non rappresentati in tabelle, non ben organizzati, non ben definiti, non facilmente accessibili per ricerche o modifiche, poco efficienti da analizzare, come e-mail, pagine web, documenti vari, file di vario genere, sparsi senza una ben precisa disposizione logica. Essi richiedono molto più tempo e molte più risorse per essere elaborati, inoltre, tra tutti i tipi di dati, sono quelli che si trovano in quantità maggiore; per questo motivo uno dei punti di forza più apprezzati dell’analisi predittiva è proprio il fatto che i suoi strumenti sono capaci di processare tali dati, dando loro un significato e uno scopo. Ovviamente, è molto più efficiente avere a che fare con dati strutturati in quanto quelli non strutturati devono essere preventivamente analizzati e organizzati in modo che gli algoritmi e gli strumenti utilizzati possano estrarre facilmente informazioni da essi. Allo stesso tempo, poichè si tratta di una grande e variegata quantità di dati contenenti sicuramente un’enorme quantità di informazioni inutili, essi devono essere filtrati in modo da individuare solo le informazioni utili alla previsione che si intende fare e buttare via tutto il resto. La disciplina del data mining contiene una moltitudine di approcci per processare i dati non strutturati, strumenti e algoritmi utili per trovare schemi nei contenuti, per 1.4 I Dati 13 raggrupparli e per dare ad essi un senso. Inoltre, i motori di ricerca forniscono ulteriori strumenti per indicizzare i dati e per strutturarli. Non bisogna farsi spaventare dalla complessità dei dati non strutturati, in quanto è sempre possibile trovare un modo per formalizzare i loro contenuti e dare, quindi, loro una struttura, ad esempio, utilizzando i metadati dei documenti, i titoli, le date di creazione e di modifica, le date di spedizione delle e-mail, i destinatari e gli allegati. Tutte queste caratteristiche possono essere usate come attributi per dare un senso alla moltitudine di informazioni contenute nei dati non strutturati, in pratica è sempre presente una struttura ma bisogna saperla trovare. Non sempre i dati a nostra disposizione si trovano in una forma o nell’altra: spesso, infatti, essi si trovano in forme miste. Possiamo trovare dati strutturati che contengono al loro interno, ad esempio nelle loro tabelle, dati non strutturati; allo stesso modo, esistono dati strutturati all’interno di quelli non strutturati, o perchè si cerca di dare loro uno scopo ben preciso o perchè tali dati ne riflettono il contenuto. Prendiamo in considerazione una pagina web dove all’interno troviamo un form tramite il quale i visitatori possono fornire un feedback per valutare un prodotto o un servizio tramite dei pulsanti; questi rappresentano un insieme di dati strutturati all’interno di una serie di informazioni non strutturate rappresentate proprio dalla pagina web. In definitiva, possiamo concludere che nel flusso di informazioni al giorno d’oggi è quasi impossibile trovare dei dati che si trovano in una forma o nell’altra in maniera indistinta; al contrario, ci troviamo quasi sempre di fronte a situazioni miste. Resta, comunque, di grande utilità fare una distinzione tra le due categorie per sapere come gestire ogni evenienza. • Dati statici e dinamici: i dati statici sono quei dati che non cambiano mai nel tempo; essi possono essere analizzati allo stesso modo in qualsiasi momento. I problemi che riguardano questo tipo di dati consistono nel fatto che essi contengono spesso lacune, errori, valori anomali o incompleti, e tali resteranno. Questi dati richiedono, quindi, una certa preparazione e una pulizia preventiva prima di essere utilizzati per un’analisi. I dati dinamici, al contrario, vengono aggiornati continuamente, spesso a grande velocità. Ad esempio, possiamo considerare dinamiche le pagine web di Facebook o Twitter che vengono aggiornate continuamente. Anche questo tipo di dati presenta dei problemi. Infatti, il costante flusso di informazioni determina un enorme volume di dati; inoltre le continue modifiche rendono difficile l’analisi. Esistono due tipi di approcci per analizzare questo tipo di dati, che rappresentano la tipologia più utile per chi vuole utilizzare l’analisi predittiva. Il primo approccio consiste nell’esaminare solo le ultime istanze dei dati, ovvero quelle più recenti, e aggiornare lo stato del modello solo in base ad essi questo permette di creare uno schema che riflette solo gli aggiornamenti più recenti. Il secondo approccio consiste nel realizzare il modello utilizzando l’intero dataset, compresi i dati passati oltre a quelli più recenti, e aggiornarne lo stato solo in base a questi ultimi. I due approcci vengono scelti in base alla natura del settore al quale interessa l’analisi: in molti casi è preferibile concentrarsi sui dati appena raccolti e analizzarli in tempo reale riplasmando, di volta in volta, il modello per rappresentare 14 1 Predictive Analytics la situazione corrente. Un tipico esempio è dato dal prezzo dei prodotti che si vuole far variare in base alle condizioni del mercato. A queste categorie appartengono tutti i dati che vengono raccolti, in maniera automatica o meno, e che fanno parte della cosidetta Business Intelligence. Questi dati possono, ad esempio, riguardare acquisti effettuati, metodi di pagamento, oggetti acquistati insieme ad altri, dati sui clienti stessi che forniscono informazioni sulle loro abitudini, dati raccolti nei sondaggi, cronologie di navigazione web, e molto altro ancora. Se correttamente interpretati e preparati essi servono per la realizzazione di un modello efficiente. 1.5 Il processo di analisi Prima di illustrare i vari passi nella realizzazione di un processo di analisi predittiva è utile fare una distinzione tra due possibili tipi di analisi, ciascuno dei quali è caratterizzato da una serie di vantaggi e svantaggi: • • Data-Driven Analytics: è un’analisi che non richiede la definizione di un particolare obiettivo per essere realizzata. Parte dai dati utilizzando strumenti di data mining e cercando di estrapolare quante più informazioni possibili, siano essi dati interni al settore interessato o esterni, provenienti da altre fonti. Questo processo appare fondamentale se si ha a che fare con grosse collezioni di dati che, altrimenti, sarebbero impossibili da interpretare a causa delle elevate dimensioni e complessità; inoltre, più i dati sono completi e ridondanti e più risultati questo tipo di analisi riesce a fornire. Il vantaggio principale della data-driven analytics è che non è necessario possedere una conoscenza preliminare del settore per individuare i dati più utili all’analisi, ma si parte da tutti i dati in possesso e si cerca di ottenere il maggior numero di informazioni; se continuano a emergerne di nuove si continua fino a quando è possibile, procedendo, sempre, con l’osservazione dei risultati durante il procedimento. User-Driven Analytics: in questo caso si parte da un obiettivo ben preciso e non dai dati, anzi si ricercano i dati più adatti a supportare tale scopo. Al contrario dell’analisi basata sui semplici dati, in questo caso è necessaria una profonda conoscenza del settore interessato alle previsioni, per capire quali risorse possono andare a favore dell’obiettivo. Parte dei dati vengono usati per la realizzazione del modello; un’altra parte viene usata per effettuare dei test su di esso; quindi si valutano i risultati, sempre in base a conoscenze specifiche. Lo svantaggio di questo tipo di analisi è che, concentrandosi su un’idea ben precisa, e utilizzando solo una parte ben definita dei dati a favore di essa, si rischia di perdere di vista molte possibili informazioni che sarebbero potute emergere da un esame più approfondito dell’intero dataset a disposizione. Conviene, quindi, se il tempo e le risorse lo permettono provare a farsi un’idea su ciò che può emergere da un’analisi più approfondita. Una volta scelto il tipo di analisi più adatta a supportare gli obiettivi del settore il processo può iniziare. Esso prevede vari passi che vanno dalla scelta e dalla preparazione dei dati alla visualizzazione del risultato finale. 1.5 Il processo di analisi 15 1.5.1 Identificazione dei dati I dati che vengono utilizzati provengono da tantissime fonti e in formati molto diversi tra loro, ma non tutti sono adatte a costruire il modello. Per avere un’idea chiara di ciò che può essere utile bisogna avere bene in mente quali sono gli obiettivi da raggiungere e capire quali sono le informazioni necessarie al loro raggiungimento di tale scopo. A tal fine può essere utile interrogare gli esperti del settore; ad esempio, nel mondo del marketing, una tipica richiesta è quella di voler individuare preventivamente i clienti che nell’immediato futuro non saranno più interessati a una determinata offerta o ad uno specifico servizio; in questo caso potrebbe essere utile interrogare gli esperti del settore clienti. Le risorse raccolte devono essere capaci di soddisfare il modello che si vuole costruire e, infine, il progetto stesso. Importantissimo, quindi, conoscere come reperire i “dati grezzi”, come potervi accedere (spesso tramite l’uso di strumenti adatti) e la qualità di questi dati. Inoltre, è possibile doverli integrare a dati già provenienti da altri dataset esterni al settore interessato per riuscire a ottenere quante più informazioni possibili. Il dataset che si viene a creare deve contenere tutte quelle informazioni che si stima possano essere rilevanti ai fini del calcolo predittivo, per rispondere al problema che ci si è posti. Per riprendere l’esempio già citato, se si sta cercando di prevedere quali clienti avranno un calo di interesse nei confronti di un determinato servizio, il dataset che dovranno creare dovrà contenere sicuramente informazioni sui clienti che hanno già rinunciato a tale servizio e quelli che, invece, non lo hanno ancora fatto. In genere, i dati più rilevanti sono quelli che riguardano gli eventi passati e che coincolgono l’entità, o l’insieme di entità sulle quali si sta cercando di fare previsioni. Infine, una volta in possesso di una certa quantità di dati, è necessario individuare tra questi quali variabili sono utili e quali, invece, non forniscono alcuna informazione utile. Un tipico approccio consiste nel prendere in considerazione, inizialmente, una grossa quantità di variabili e, quindi, procedendo con la realizzazione e con il collaudo del progetto, una volta acquistite alcune informazioni chiave, eliminare quelle che non hanno nessun valore ai fini della predizione. Questi dati verranno dati “in pasto” al modello che si sta cercando di realizzare, cercando di ottenere i risultati desiderati con la maggiore precisione e affidabilità possibili. 1.5.2 Strutturazione dei dati Una volta individuati i dati che si considerano essere più rilevanti ai fini del progetto di analisi predittiva, è necessario, per poterli utilizzare, estrarli dalle sorgenti nelle quali sono stati individuati e inserirli in strutture organizzate, realizzate appositamente. In questo modo l’insieme di dati grezzi non strutturati, provenienti da fonti eterogenee, diventa un insieme di dati strutturati, inseriti in tabelle e con gli attributi in evidenza. Questo è utile non solo per organizzare i dati in modo da poter essere utilizzabili dai vari algoritmi, ma anche per esaminarne le proprietà. In base a tali caratteristiche, infatti, viene scelto l’algoritmo usato per realizzare il modello di previsione. Per alcuni tipi di dati, infatti, è necessario implementare un determinato tipo di algoritmo. 16 1 Predictive Analytics A volte è possibile che le fonti che vengono usate per l’estrazione dei dati contengano dati già strutturati, in tal caso, ma anche nel caso in cui ci troviamo di fronte a dati non strutturati, è consigliabile realizzare separatamente un database che contenga quelli estratti, in questo modo anche nel caso in cui si dovranno modificare o eliminare i dati, ad esempio durante la fase di filtraggio dei dati errati, la sorgente dei dati verrà conservata intatta e sarà possibile recuperarli in un secondo momento. 1.5.3 Preparazione dei dati Questo passo consiste nell’individuare, all’interno del dataset, valori errati, valori mancanti o valori ripetuti, allo scopo di poter realizzare una previsione il più possibile basata su dati reali e integri. I valori mancanti devono essere inseriti nei limiti del possibile; dove è facile intuirne il significato è possibile inserire valori ben precisi (ad esempio, se manca il valore di un codice postale esso può essere ricavato a partire dall’indirizzo); dove, invece, non è possibile individuarne il valore è possibile adottare valori di default. Indicare esplicitamente un valore è preferibile rispetto a lasciare un campo vuoto, in quanto un valore mancante può avere più possibili significati e, quindi, può portare a sviluppi imprevisti durante l’implementazione dell’algoritmo. I valori anomali, cioè non coerenti con le informazioni che dovrebbero contenere, nella maggior parte dei casi devono essere identificati e rimossi. Esistono, però, alcuni casi in cui essi possono essere addirittura utili, ad esempio quando si cerca di identificare e prevenire azioni illegali; in tal caso i valori anomali sono necessari in quanto la loro presenza è indice di qualcosa che non dovrebbe avvenire. Ultima categoria di dati da tenere sotto osservazione in questa fase è rappresentata dai dati ridondanti; anch’essi, a volte, possono essere necessari ai fini dell’analisi. Tuttavia quando non contribuiscono al processo di analisi, ma anzi appesantiscono inutilmente il dataset, è opportuno eliminarli. È, spesso, necessario usare l’intuizione per individuare quali tra questi dati conservare e quali eliminare, senza dimenticare che in qualsiasi momento è possibile recuperare nuovamente le informazioni escluse e riproporle al modello per verificare se è possibile che la loro presenza determini nuovi risultati utili. Questo dimostra come il processo di analisi predittiva sia un processo dinamico in continua evoluzione. La fase di pulizia e filtraggio dei dati dovrebbe essere eseguita più volte durante il processo di analisi per evitare che eventuali nuovi valori contengano errori o incoerenze. Una volta identificate le variabili più utili per la costruzione del modello, prima di procedere ulteriormente, conviene effettuare alcuni controlli che garantiscano maggiore efficacia ed efficienza al modello stesso durante la sua esecuzione. Un aspetto al quale prestare particolare attenzione è quello rappresentato dai dati che vengono derivati da altri dati; è utile, infatti soffermarsi su alcuni dati ed estrarre da essi ulteriori informazioni che possono fornire un ulteriore incentivo alla precisione del modello finale. Un esempio banale è quello dell’età di una persona che viene derivata dalla propria data di nascita; questa operazione fa parte del processo di data mining. Spesso questi dati sono molto importanti per la costruzione del modello; possono essere presi in considerazione anche durante una o più fasi di esecuzione successive alla prima, ma, probabilmente, forniranno potere di previsione aggiuntivo al modello finale. 1.5 Il processo di analisi 17 Un’ulteriore strategia utile per garantire l’efficienza del modello consiste nel ridurre il più possibile le dimensioni del dataset o, dove ciò non fosse possibile, nel cercare di ottimizzare l’accesso ai dati. Questo si traduce in operazioni di ristrutturazione e normalizzazione del dataset; in particolare, una strategia spesso utilizzata per ridurre la quantità di dati in presenza di relazioni “uno a molti” tra di essi, che causano un eccessivo ingrandimento del dataset, è l’operazione di appiattimento. Tale operazione consiste nell’inserire i dati ripetuti relativi ad una stessa istanza di un’entità come attributi aggiuntivi di essa; ciò permette di eliminare le relazioni “uno a molti” che non fanno alto che rallentare il modello ma che in genere non portano alcun vantaggio alla costruzione di un modello valido. 1.5.4 Scelta del modello Un modello è una rappresentazione statistica o matematica di un fenomeno; esso rappresenta una descrizione del comportamento di un’entità e può essere usato per prevedere alcune azioni. Costruire un modello consiste nell’individuare una relazione matematica tra le variabili in ingresso e quelle di uscita. Analizzando i dati in possesso e utilizzando dei modelli già a disposizione coerenti con determinate tipologie di dati, si può stabilire una relazione tra le più diffuse categorie di dati utilizzati attualmente e alcune azioni, quindi valutare la percentuale di occorrenza di quelle azioni e stabilire una previsione statistica. Tutto questo diventa essenziale quando, per una compagnia, non prevedere una determinata azione, o l’esito di una decisione, o una possibile frode può determinare ingenti perdite. La costruzione del modello rappresenta il cuore dell’analisi predittiva; essa parte dalla scelta di un algoritmo matematico che permetta di indiduare schemi e relazioni nell’insieme dei dati; in particolare, ci si interessa alla scoperta delle relazioni tra le varibili in ingresso e ciò che si desidera ottenere come variabile di uscita. Durante la creazione del modello è bene tenere a mente qual’è l’obiettivo della sua realizzazione; un modello non è che una semplice rappresentazione matematica a meno che non ci si domandi a cosa può essere utile. Dare una precisa definizione all’obiettivo che si vuole raggiungere aiuta a costruire un modello efficace e a dare ad esso uno scopo, inoltre è bene tenere a mente tutte le risorse che possono aiutare la realizzazione e le varie caratteristiche. Come già detto, infatti, la scelta dell’algoritmo più adatto dipende dalle caratteristiche dei dati con cui si ha a che fare; per fare degli esempi, quando i dati si presentano in successione temporale continua e si vuole prevedere il prossimo valore che la serie assumerà è bene usare un algoritmo di regressione lineare; quando, al contrario, si ha a che fare con dati che non presentano alcun legame con il tempo, ma si vuole semplicemente individuare alcune caratteristiche o relazioni che potrebbero avere, allora si usano algoritmi di classificazione; infine, quando si usano dati con molti attributi è bene usare algoritmi di clustering. Da questi esempi emerge come avere bene in mente l’obiettivo e avere una profonda conoscenza dei dati è fondamentale per scegliere l’algoritmo che darà i risultati più completi; alcuni algoritmi sono perfetti per affrontare problemi specifici. Oltre a questo è utile, anche, considerare come verrà usato il modello, chi lo userà, cosa succederebbe se la previsione fosse errata e, infine, come verranno utilizzati i dati; tutto questo sempre per ottimizzare il processo di analisi predittiva. 18 1 Predictive Analytics 1.5.5 Implementazione del modello Una volta scelto l’algoritmo adatto a realizzare il modello un passo fondamentale nel processo di analisi predittiva è quello di dividere i dati in possesso in due gruppi, il dataset sarà quindi diviso in training data e test data. I primi vengono forniti al modello per meglio definirlo; ogni dato che viene fornito serve a delineare una rappresentazione più chiara del funzionamento dell’algoritmo, a trovare nuovi schemi nei dati e a capire che relazione hanno tali dati con i risultati. La seconda categoria serve a provare il modello cosı̀ ottenuto e a osservare se i risultati che emergono soddisfano l’obiettivo della previsione. L’implementazione del modello prevede una tecnica iterativa; conviene, infatti, ripetere più volte l’esecuzione dell’algoritmo cambiando ogni volta i dati in input. Ogni tentativo permetterà di avvicinarsi sempre di più a quella che sarà la realtà, in quanto permetterà di scavare più a fondo nei dati per dare alla luce nuovi schemi e relazioni. Inoltre, se il tempo e le risorse lo permettono, sarebbe una buona prassi quella di applicare più di un algoritmo sempre con lo scopo di far emergere nuove scoperte; è anche possibile, per un analisi ancor più approfondita, evidenziare nuovi schemi all’interno del dataset applicando un algoritmo di clustering che ha come scopo quello di trovare nuove relazioni tra dati. Per non perdere traccia di ogni esperimento conviene documentare ogni implementazione, riportando i dati e gli algoritmi utilizzati. Una tecnica particolare per testare il modello e far emergere più risultati possibili è la tecnica chiamata cross-validation; essa consiste nel dividere i dati in n gruppi, quindi scegliere uno di questi gruppi che rappresenterà i test data mentre tutti gli altri gruppi saranno training data. Dopo aver fatto passare tutti i training data dal modello si valuta la previsione sui test data; dopo di ciò, i test data diventano training data e viene scelto un altro tra gli n gruppi per fungere da test data. Si continua cosı̀ finchè ognuno degli n gruppi è stato usato come test dataset ; in questo modo si riesce ad avere una visione più ampia di ciò che può emergere dal dataset senza trascurare nessuna risorsa e avendo contemporaneamente un quadro completo di ogni possibile risultato. I risultati delle varie implementazioni vanno valutati consultandosi con gli esperti del settore per identificare quali tra le variabili in output hanno un valore maggiore come possibile rappresentazione di ciò che potrà avvenire in futuro. Infine, verrà scelto l’algoritmo più soddisfacente. In aggiunta, con il procedere delle varie prove che vengono effettuate l’esperienza gioca un ruolo fondamentale in quanto, a lungo andare, aiuta a scegliere algoritmi sempre più convenienti. Tra i problemi più comuni che possono sorgere durante ogni implementazione ve ne sono, in particolare, due che si incontrano molto spesso osservando i risultati forniti da ogni modello creato dai vari algoritmi. Il primo problema insorge dal momento in cui il modello non riesce a trovare abbastanza relazioni nei dati e, quindi, non riesce a fornire risultati significanti, questo è indice del fatto che i dati con cui si ha a che fare non hanno niente a che vedere con l’obiettivo che si cerca di raggiungere; pertanto i risultati ottenuti non hanno niente a che vedere con la previsione che ci si aspettava. Il secondo problema sussiste quando al modello sono forniti troppi dati inutili che possiamo definire come una sorta di rumore per il processo, questi dati determinano un calo nell’efficienza ma, soprattutto, nella precisione dei risultati che rischiano di non rispecchiare più la realtà a venire. 1.6 Critiche 19 1.5.6 Valutazione del modello I vari risultati ottenuti vanno esaminati da esperti del settore; a questi verranno mostrate le variabili che emergono da tutte le implementazioni di tutti i modelli usati. Gli esperti dovranno verificare se ciò che è emerso dall’analisi va a favore della ragione per la quale è stato necessario cercare di fare delle previsioni; inoltre, sarà necessario verificare l’efficienza dell’algoritmo anche quando si ha a che fare con grossi dataset. Per determinare quali misure adottare per migliorare la qualità del modello e per vedere se esso incontra gli obiettivi prefissati, è utile osservare i risultati di tutte le implementazioni tramite l’utilizzo di grafici. Il modo in cui vengono visualizzati i risultati è importante perchè, se non viene scelto un metodo semplice e immediato per la visualizzazione, a causa dell’enorme mole di dati da includere nella rappresentazione di ciò che è emerso, sarebbe molto difficile fare delle valutazioni sui risultati. Ogni algoritmo prevede una rappresentazione diversa, ma tutte devono avere delle caratteristiche comuni; in particolare, essi devono essere facili e immediati da capire e devono semplificare la complessità dell’analisi svolta. Se costruiti in questo modo i grafici finali saranno un ottimo punto di partenza dal quale prendere decisioni. 1.6 Critiche Dopo tutte le possibilità finora illustrate costruire un modello predittivo sembra un’operazione conveniente in qualsiasi campo in cui venga applicato. Tuttavia, sono state mosse alcune critiche dalle quali emerge un certo scetticismo per quanto riguarda l’abilità di un calcolatore di prevedere gli eventi futuri. Il professor Gary King, docente all’università di Harvard e direttore dell’Institute for Quantitative Social Science afferma [18, pag.19] come sia impossibile determinare con adeguata precisione le variabili che determineranno il comportamento futuro di una persona, in quanto ciascuno di noi può essere influenzato da innumerevoli fattori in modo cosı̀ veloce che neanche noi stessi ce ne rendiamo conto. In pratica, il modo in cui ognuno pensa e agisce può essere modificato da qualsiasi evento, dalle relazioni personali alle condizioni atmosferiche; questo renderebbe impossibile prevedere in maniera accettabile qualsiasi comportamento e renderebbe l’analisi predittiva solo una tecnica valida a livello teorico, durante le prove in laboratorio, ma che non potrebbe mai avere alcun riscontro nel mondo pratico. 2 Big Data Questo capitolo illustra brevemente il concetto sempre più diffuso di “Big Data”: enormi quantià di dati sempre più diffusi sul web ma anche su altri sistemi utilizzati al giorno d’oggi. Ne vengono illustrate le principali caratteristiche e gli scopi per cui vengono raccolti e analizzati. Tra questi troviamo l’analisi predittiva, per la quale lo sfruttamento dei Big Data rappresenta un vantaggio formidabile. Vengono infine illustrati i principali strumenti hardware e software per il trattamento di una tale mole di dati, in particolare al fine di fornire il maggior numero di informazioni possibili ai modelli di previsione. Figura 2.1. Big Data 2.1 Cosa sono i Big Data? Negli ultimi venti anni lo sviluppo di nuove tecnologie, e servizi, insieme alla diffusione capillare della rete internet hanno determinato un consistente aumento della quantità di dati raccolti e, conseguentemente, della potenziale conoscenza che si può introdurre da essi. Si tratta di dati provenienti dalle interazioni con i clienti, dati dei social network, dati prelevati dai siti web, in particolare dai motori di ricerca o provenienti da vari sensori; tutti questi dati sono “non strutturati”, oppure 22 2 Big Data contengono cosı̀ tante informazioni da non poter essere gestiti da normali DBMS relazionali. Nonostante molte organizzazioni governative, bancarie o di ricerca già da moltissimi anni abbiano a che fare con queste ingenti quantità di dati, solo da poco più di un decennio è stato coniato il termine “Big Data”, per sottolineare quanto al giorno d’oggi si è sempre più sommersi da un mare di dati di diverso genere. La Figura 2.2 mostra una testimonianza di ciò. Figura 2.2. Andamento della quantità di ricerche Google riguardo il termine “Big Data” negli ultimi anni, a testimonianza del crescere della popolarità del tema. Gli eventi degli ultimi venti anni[8, pag.8], a partire dal 1991 con l’introduzione del protocollo HTTP, hanno profondamente cambiato il modo in cui i dati vengono creati e trattati. Solo per citare alcuni esempi, consideriamo l’introduzione di tecnologie come il GPS, il motore di ricerca Google, l’uso della rete denominato internet of things, le pagine del sito web Wikipedia, la diffusione dei social network, l’enorme incremento dei dispositivi connessi alla rete (causato dalla diffusione degli smartphone e della tecnologia Wi-Fi). Tutti questi fattori hanno contribuito a creare un flusso di dati immenso. Tali dati non sono prodotti di scarto ma rappresentano un tesoro nascosto ricco di informazioni che possono essere scoperte ed utilizzate per affrontare molte sfide attuali. Nonostante non esista una definizione universale di big data, il termine si usa per indicare tutte quelle situazioni in cui le tradizionali tecniche di memorizzazione ed elaborazione dei dati (come, ad esempio, i tradizionali RDBMS, cioè i sistemi di gestione di database relazionali) non sono sufficienti. Talvolta, infatti, tale difficoltà è data non solo dal volume ma anche da altre caratteristiche che rendono i dati coinvolti particolarmente complessi da poter essere trattati; ad esempio, l’altissima velocità con la quale questi dati vengono aggiornati e l’estrema varietà degli stessi, possono essere alcune delle cause di tale ostacolo. In dettaglio, le principali grandezze che caratterizzano i Big Data sono: • Volume: per dare un idea dell’incremento che la quantità di dati ha visto negli ultimi anni basti pensare che, secondo alcuni studi, la quantità di dati che sono stati creati nel 2003 ha superato la quantità di dati digitali creati durante tutta la storia precedente a quel momento. Nel 2011, inoltre, la stessa quantità di dati è stata creata nel giro di soli due giorni. Ogni database troppo grande per essere gestito da un normale PC o server può essere considerato un insieme di big data. Negli ultimi anni si è passato da 2.1 Cosa sono i Big Data? 23 database dell’ordine dei terabyte a collezioni di dati dell’ordine dei petabyte (un petabyte corrisponde a 1.000 terabyte). L’eccessiva quantità di dati rappresenta un problema per molte compagnie che, spesso, sono costrette a scartare i dati in eccesso non avendo le capacità e le risorse adeguate per contenerli. Ad esempio un provider di telecomunicazioni con 100.000.000 di clienti raccoglie, ogni giorno, circa 50 terabyte di dati; ciò significa raccogliere 5 petabyte di dati ogni 100 giorni[16, pag.2]. Analizzare una tale quantità di dati porta, sicuramente, a un gran numero di scoperte, ma per farlo è necessario possedere le risorse adeguate in termini di capacità di memorizzazione ed elaborazione dei dati. • Velocità: alcuni tipi di dati sono relativamente statici, come, ad esempio, la data di nascita o il genere di una persona. Altri tipi di dati cambiano occasionalmente, cioè vengono aggiornati con poca frequenza, come, ad esempio, l’indirizzo di residenza di una persona, il numero di telefono e il numero dei componenti familiari. Alcuni tipi di dati, tuttavia, cambiano in modo cosı̀ rapido da non essere sempre percepibile dagli strumenti di analisi (ad esempio, la musica che si sta ascoltando, la velocità di guida, e i dati biologici). Con il termine “velocità” si vogliono rappresentare due aspetti utili allo studio dei Big Data. Il primo è il throughtput cioè la quantità di dati che passa da un determinato canale nell’unità di tempo. Il secondo aspetto da prendere in considerazione è la latenza, ossia il tempo massimo durante il quale i dati restano immutati. Creare dei tool che riescano ad usare i dati nel minor tempo possibile ed ottenere i dati in tempo reale, nonostante la complessità di questi ultimi, rappresenta una grande sfida per gli analisti che si pongono l’obiettivo di “scavare” dentro i big data. • Varietà: i big data comprendono molti differenti tipi di dati, strutturati e non. Inoltre, essi racchiudono un numero elevatissimo di possibili formati diversi in cui si possono presentare i dati: testi, suoni, video e molti altri. Ulteriore compito degli analisti è quello di formalizzare questa enorme varietà di informazioni in modo da poter essere compresi anche in maniera automatica. Ulteriore aspetto da prendere in considerazione è la sincerità dei dati. Molti di essi, infatti, provengono da fonti interne all’organizzazione che sta realizzando il processo di analisi; ciò significa che essa ha il completo controllo sulla loro struttura e sul loro formato. Molti altri dati (tra cui informazioni finanziarie, pagine web, dati di navigazione dei GPS), provenendo da innumerevoli fonti esterne, sono spesso completamente fuori dal controllo di chi li raccoglie. Risulta, quindi, indispensabile verificare la credibilità di queste fonti e valutare se tali informazioni raccolte rappresentano uno strumento utile ai fini della previsione che si vuole realizzare o, semplicemente, un prodotto di scarto. Tutte queste caratteristiche definiscono in maniera precisa ciò che al giorno d’oggi si intende quando si cerca di descrivere i Big Data. Senza prendere in considerazione aspetti quali la quantità e la qualità dei dati, il termine Big Data può essere visto come una filosofia che prevede un modo particolare di reperire, memorizzare e analizzare i dati, agendo in conseguenza a ciò che è emerso da tale analisi. Questa filosofia spinge ad esplorare, in maniera più completa possibile, tutte le risorse che si hanno a disposizione (nonostante tali risorse consistano in quantità di dati dell’ordine dei petabyte, provengano da innumerevoli fonti e si presentino in formati eterogenei). Tutto ciò si sposa perfettamente con gli obiettivi dell’analisi 24 2 Big Data predittiva in quanto maggiori quantità di informazioni significano risultati migliori e più precisi risultati. Tuttavia, non bisogna dimenticare che le grandi collezioni di dati sono intrinsecamente più difficili da analizzare rispetto ai dataset più piccoli. Ad esempio, se durante l’implementazione di un modello di analisi fosse necessaria la lettura di una serie di valori, trovandosi di fronte a grandi quantità di dati, i costi computazionali aumenterebbero notevolmente; ciò può portare all’incapacità di produrre risultati utili. Sia che si tratti di dati strutturati o non strutturati, la sfida principale consiste nel riuscire ad analizzare tutti i dati per individuare schemi per permettano di ottenere sempre più informazioni utili. Resta, comunque, impensabile cercare di gestire una tale mole di dati con metodi tradizionali; a tale scopo sono stati ideati nuovi metodi per affrontare lo studio dei big data, come, ad esempio, alcuni tool, basati sul linguaggio naturale, che vengono utilizzati per ottenere le informazioni desiderate a partire dalla tipologia dei dati non strutturati. I big data, visti come enormi collezioni di dati, oppure in senso esteso come termine che indica un approccio per raccogliere più informazioni possibili, costituiscono uno strumento molto importante per avere un quadro completo degli eventi che si cerca di prevedere. Se i vari settori sono capaci di analizzare petabyte di dati in modo molto efficiente saranno capaci di individuare schemi o anomalie e tali scoperte potranno essere usate per la costruzione di modelli validi. 2.2 Big Data e Predictive Analytics Molte delle tecniche e dei metodı̀ accennati nel precedente capitolo possono essere usati con ottimi risultati sui big data per l’analisi predittiva. Il successo di queste tecniche nell’ambito dei big data è dovuto al fatto che maggiore è la quantità di dati forniti agli algoritmi e più questi ultimi diventano raffinati e precisi. Ciò significa che grandi quantità di dati implicano un migliore e più affidabile esito nelle previsioni, grazie anche ai moderni sistemi di computazione che garantiscono l’elaborazione di dati molto voluminosi e complessi. Una tendenza in continuo aumento è quella che prevede lo svolgimento dell’analisi predittiva tramite dati raccolti da fonti molto diverse. L’implementazione dell’analisi predittiva in questo “ambiente distribuito” richiede la raccolta di informazioni, (preferibilmente e se le risorse a disposizione lo permettono, dai Big Data, o, comunque, da più fonti possibili). Ovviamente i dati, una volta raccolti devono essere sempre pre-processati e controllati prima di poter essere considerati utilizzabili per processi di previsione. Gli analisti devono essere in grado di affrontare il problema della raccolta e della preparazione dei dati quando essi provengono da più di una fonte. Un tipico esempio[7, pag.297] consiste nella situazione che vede una compagnia tentare di prevedere il successo di una decisione riguardo uno dei suoi prodotti, decisione che può avere tre esiti diversi: investire molte risorse in tale prodotto per cercare di incrementarne le vendite, terminare la produzione di tale prodotto o, infine, modificarne l’attuale strategia di vendita. Si può facilmente intuire come una previsione sull’esito di tali opzioni possa influire significativamente sulla rendita della compagnia. 2.2 Big Data e Predictive Analytics 25 Al fine di costruire un modello che aiuti a prevedere l’esito di ciascuna di queste decisioni, potrebbe essere di aiuto prelevare le informazioni necessarie da una moltitudine di fonti diverse, come mostrato in Figura 2.3: è qui che entra in gioco il concetto di Big Data. Tra le varie fonti dalle quali converrà cercare le informazioni utili possono esserci: il reparto ingegneristico, dal quale sarà possibile ottenere dati tecnici quali le specifiche del prodotto, il suo tempo di vita, i tempi di produzione, e molto altro ancora; il reparto vendite, dal quale sarà possibile ottenere dati che riguardano i precedenti clienti che hanno acquistato il prodotto, il numero di vendite per regione geografica, i profitti fino ad ora ottenuti; infine da fonti quali recensioni sul prodotto, sondaggi, post sui social network o sui forum specializzati, dalle quali sarà possibile raccogliere gli indici di gradimento dei clienti nei confronti del prodotto e vari attributi riguardo ai clienti stessi, anche in maniera automatica, tramite dei tool specializzati (opinion mining). Le varie fonti possono essere suddivise in “interne” (come, ad esempio, i reparti ingegneristici e delle vendite), ed “esterne” (come i siti web). La fase di aggregazione necessaria per l’analisi di tali dati può essere completata tramite l’uso di alcuni strumenti specifici tra i quali uno dei più utilizzati è Apache Hadoop: un framework che supporta applicazioni distribuite in grado di lavorare con migliaia di nodi e petabyte di dati. Figura 2.3. Dati su un generico prodotto X raccolti da varie fonti Raccogliere tutti i dati da tutte le varie fonti disponibili può essere un procedimento lungo e complesso. Una volta portato a termine, inoltre, una parte delle informazioni emerse risulterà essere inutile. Infatti, anche nel caso dei Big Data, è necessario individuare quella porzione di informazioni che vanno realmente a favore 26 2 Big Data del progetto di analisi predittiva (smart data). Tutto ciò ha ancora una volta lo scopo di aumentare la precisione e l’affidabilità del modello di previsione. Un’esperienza analoga allo studio dei big data è quella che si trovano ad affrontare le industrie minerarie durante la ricerca dei siti di estrazione dell’oro[9, pag.14]. Si stima, infatti, che esistono molti giacimenti auriferi sommersi dagli oceani, contenenti migliaia di tonnellate di pepite di oro sepolte al loro interno: una quantità di gran lunga superiore rispetto a quella estratta fino ad oggi. Allo stesso modo ci sarà sicuramente una grande quantità di informazioni non ancora estratte dai big data, ma ricavare tali informazioni può essere molto costoso. Alcune volte i benefici che l’analisi predittiva ottiene esaminando i big data valgono lo sforzo e le risorse impiegate durante il processo di estrazione delle informazioni, altre volte no. In base al settore in cui si effettua l’analisi, utilizzare fonti esterne quali i big data può essere più o meno conveniente, ma, in molti casi, utilizzare tali fonti fornisce una sorgente di informazioni estremamente redditizia. Estendere le proprie conoscenze tramite fonti esterne quali i Big Data richiede, quindi, un compromesso. Da un lato c’è il chiaro vantaggio di ottenere moltissime informazioni aggiuntive che possono rendere il modello di previsione molto più utile; il rovescio della medaglia è costituito dal fatto che, come già detto, tutto ciò ha un costo. È, quindi, necessario valutare preventivamente se concentrare i propri sforzi nel provare a districare la matassa di informazioni contenute nei big data in base alle proprie esigenze. Le risorse richieste consistono sia in nuove teorie, algoritmi e metodi e di data mining, sia in un hardware migliore, capace di gestire una grossa quantità di dati. In entrambi gli ambiti gli strumenti devono evolversi di pari passo: complessi software per l’estrazione delle informazioni richiedono grosse quantità di memoria ed elevate capacità computazionali. 2.3 Hardware e Calcolo distribuito Come è emerso da ciò che è stato detto finora la scelta di come sfruttare le potenzialità offerte dai big data è strettamente legata alle necessità individuali. Di conseguenza, le configurazioni hardware necessarie variano in base alle quantità di dati che si vogliono passare in rassegna per sfruttare i principi di data mining su di essi. In generale, grosse quantità di dati richiedono grosse capacità di memorizzazione: riuscire a conservare molti dati sulla storia passata significa realizzare previsioni molto più verosimili sul futuro. I tradizionali hard disk che utilizzano dischi magnetizzati sono molto affidabili ma hanno lo svantaggio di accedere ai dati in maniera molto più lenta rispetto alle altri componenti del computer. Per questo motivo, dovendo analizzare in breve tempo dati volatili, che cambiano molto velocemente, vengono spesse adottate soluzioni quali gli array di dischi, i quali sono costituiti da diversi gruppi di hard disk con un’architettura tale da incrementare la velocità di trasferimento dei dati e la sicurezza in caso di guasti. Essi permettono di ottenere un throughput fino a 6 gigabyte al secondo, un incremento fino a 50 volte maggiore rispetto ai sistemi a singolo hard disk [10, pag.28]. Col tempo, inoltre, la quantità di dati che possono contenere questi dispositivi di memorizzazione è aumentata in media dal 50% al 100% ogni anno negli ultimi 2.3 Hardware e Calcolo distribuito 27 10 anni, come mostrato in Figura 2.4, mantenendo prezzi relativamente costanti. Questi fattori hanno permesso la diffusione dell’utilizzo dei big data come strumento determinante per il successo dell’analisi predittiva. Figura 2.4. Aumento della capacità degli hard disk nel corso del tempo Un’ulteriore soluzione è rappresentata dalla tecnologia degli SSD (dispositivi di memoria di massa costituiti da memorie flash), che non contengono dischi magnetizzati o parti meccaniche per la lettura e la scrittura. Essi hanno una velocità che può superare i 450 MB/sec, e sono più resistenti ai guasti, non contenendo parti meccaniche. Questi ultimi costituiscono una buona soluzione in quei settori in cui vengono utilizzate quantità di dati moderate, non troppo grandi, i quali cambiano occasionalmente. Sono, inoltre, disponibili anche array di SSD, ma il problema maggiore, in questo caso, è costituito dal costo. Infatti, ogni unità di memoria SSD è molto più costosa rispetto alle singole unità di memoria a dischi magnetizzati. Un buon compromesso è costuito da una strategia ibrida, che usa differenti tecnologie per andare incontro alle varie necessità. Per poter processare grandi quantià di dati è, inoltre, necessaria un’adeguata capacità di calcolo. L’evoluzione di cui le moderne CPU sono state oggetto negli ultimi anni gioca a favore di un possibile intenso utilizzo dei big data. Fino al 2000 l’evoluzione dei microprocessori è stata descritta dalla legge di Moore, cofondatore di Intel, secondo cui “la complessità di un microcircuito raddoppia ogni 18 mesi”. Non potendo incrementare ulteriormente la capacità di calcolo, in termini di frequenza, sono quindi stati aggiunti nuovi core, ossia componenti indipendenti che elaborano i dati parallelamente tra loro e condividono delle risorse comuni. Tra le componenti che rivestono un ruolo fondamentale nell’analisi dei Big Data è, infine, utile citare quei meccanismi che consentono a più macchine di comunicare tra loro, creando una rete di calcolatori. Essi sono rappresentati dai vari protocolli di 28 2 Big Data rete e dalle molteplici infrastrutture che mettono in comunicazione le diverse unità di calcolo. Avendo a che fare con enormi flussi di informazione, infatti, può essere utile distribuire i compiti dei vari algoritmi su più macchine per alleggerire il carico sulle singole unità. Tuttavia, il trasferimento di dati attraverso una rete risulta avvenire a una velocità molto inferiore rispetto a quella delle varie componenti finora analizzate. Per questo motivo la rete rappresenta un collo di bottiglia per i vari algoritmi; è necessario, quindi, minimizzare l’utilizzo del “calcolo distribuito” trasferendo informazioni solo quando effettivamente ve ne è bisogno. Con l’incremento della quantità e della velocità dei dati che si ottengono (nei casi in cui una singola macchina non è più sufficiente ad elaborare le informazioni in un tempo utile prima che esse vengano aggiornate o, comunque, in un tempo ragionevole) non è più sufficiente assicurare i risultati di un algoritmo di analisi[11, pag.42]. In tali situazioni è necessario ricorrere a componenti distribuite su più macchine e dividere le operazioni di calcolo su più nodi. Il calcolo distribuito fu inizialmente utilizzato per svolgere calcoli molto complessi, che non potevano essere portati a termine da un solo calcolatore. Allo stesso modo, dovendo analizzare grosse quantità di dati in maniera sufficientemente rapida, suddividere questo compito su diversi nodi appare essere la strategia migliore per affrontare una cosı̀ grande sfida. Ogni nodo include una propria CPU, una propria memoria centrale e di massa, e può operare in maniera indipendente. Inoltre, le architetture distribuite devono garantire l’apertura, cioè deve essere sempre possibile aggiungere un nuovo nodo al sistema (ad esempio quando si vuole affidare a tale nodo il compito di elaborare i dati provenienti da una nuova fonte). Un algoritmo può essere suddiviso in più attività (task ), come mostrato in Figura 2.5; a ciascuna di esse verrà fornita una frazione di dati ed essa restituirà un risultato che dovrà essere ricomposto con i risultati forniti dalle altre attività. In alternativa, nelle situazioni più complesse, ad ogni macchina può essere affidato un algoritmo di calcolo diverso. È, inoltre, possibile distribuire i vari algoritmi su più di una rete, sfruttando le capacità offerte da diversi sistemi distribuiti; questo, però, va a svantaggio della velocità di comunicazione: più le reti sono distribuite in un’area geografica ampia e più lo scambio di messaggi tra esse risulterà lento e richiederà più cicli di trasferimento per la comunicazione. Un tipico esempio di implementazione di calcolo distribuito nell’ambito dei big data è rappresentato dal framework MapReduce introdotto da Google (sul quale si basa Apache Hadoop), che supporta la computazione distribuita su grandi quantità di dati ed è, quindi, capace di implementare le strategie esposte fino ad ora. Combinando insieme architetture di calcolo distribuito, sistemi con hardware avanzato, strumenti come MapReduce e Hadoop è possibile affrontare la sfida dell’analisi di vaste e complesse quantità di dati per venire incontro ad ogni tipo di esigenza. 2.4 Strumenti di Analisi I big data, essendo spesso dati non strutturati, richiedono particolari strumenti per essere memorizzati e gestiti. Con la diffusione di strumenti open-source, quali MapReduce, Hadoop ed alti ancora, i costi per la gestione di tali dati si sono abbassati 2.4 Strumenti di Analisi 29 Figura 2.5. Processo diviso in più sottoparti (task ). significativamente. Nel seguito daremo uno sguardo ai principali tra questi strumenti di analisi. 2.4.1 MapReduce MapReduce è un framework che permette agli sviluppatori di scrivere programmi in grado di lavorare su enormi quantità di dati non strutturati in parallelo su un sistema distribuito. Tale piattaforma fu sviluppata dai ricercatori di Google intorno al 2000, quando questi notarono che gli strumenti in loro possesso presto non sarebbero stati capaci di gestire i dati provenienti dal numero sempre crescenti di visitatori che il Web stava incontrando. Tali ricercatori si resero conto che sarebbe stato possibile gestire quantità di dati praticamente illimitate sfruttando le potenzialità offerte dalla computazione parallela. Essi presentarono MapReduce come un modello di programmazione generico e ne mostrarono un’implementazione per evidenziare la praticità e l’efficienza di tale modello. Durante gli anni, poi, furono create molte altre implementazioni, disponibili per i più svariati settori. Tale modello di programmazione prevede l’utilizzo di due funzioni: la funzione Map() e la funzione Reduce(). Per capire il motivo per cui tali funzioni sono molto utili se utilizzate con i Big Data è opportuno richiamare il paradigma con cui sono state create, ovvero il paradigma della programmazione funzionale. Seguendo questo tipo di programmazione, gli operatori delle funzioni non modificano il valore e la struttura dei dati ma creano nuovi dati in output. Si tratta di un paradigma usato quando è necessario ripetere uno stesso schema sugli stessi dati più e più volte senza modificare gli stessi. Con la programmazione funzionale, inoltre, non esiste un ordine definito con il quale vengono eseguite le operazioni e non è necessario definire esplicitamente dove i dati di output verranno salvati. Tali caratteristiche 30 2 Big Data rappresentano vantaggi fondamentali nel contesto dei Big Data in quanto viene garantita la possibilità di conservare i dati immutati e di proporre più volte gli stessi schemi su di essi. Inoltre, la programmazione funzionale si sposa perfettamente con i sistemi distribuiti in quanto non è necessario definire dove verranno memorizzati gli output di ciascun nodo. Le funzione Map() e Reduce() sono implementate seguendo il modello della programmazione funzionale. Nel seguito esaminiamo più in dettaglio le due attività di Map() e Reduce(). • Map(): un sistema distribuito che opera utilizzando il framework MapReduce è composto da un’architettura centralizzata in cui un nodo particolare (identificato come nodo centrale o nodo master) ha più importanza rispetto agli altri. In tale nodo risiede la funzione Map(). Essa riceve in ingresso una query o una procedura che deve essere eseguita su una lista, anche molto grande, di valori in ingresso e la divide in più processi, ciascuno dei quali svolge un compito differente. Questi compiti più piccoli vengono assegnati ad ogni nodo secondario, o slave, il quale eseguirà la procedura ottenuta in parallelo, restituendo un risultato. Per fare un esempio[10, pag.103] di un programma che può essere implementato tramite la funzione Map(), supponiamo di voler esaminare una lista di città che hanno partecipato a una recente elezione. Ogni dato prelevato dalla lista e fornito alla funzione Map() è costituito da una coppia di valori: una chiave che ne identifica la particolare istanza ed il valore vero e proprio. In tal modo nella lista delle città ogni elemento sarà costituito da una chiave che rappresenta il nome della città e da un valore che rappresenta il numero di abitanti. Tramite l’uso della funzione Map() si avrà il seguente codice: • map howManyPeople (mylist) = [ howManyPeople county 1; howManyPeople county 2; howManyPeople county 3; howManyPeople county 4; . . . ] Tale funzione riceve tra i propri parametri la stessa funzione howManyPeople; in questo caso, ciascun parametro corrisponde ad un’implementazione della funzione stessa (ulteriore caratteristica della programmazione funzionale è quella di poter fornire ai parametri delle proprie funzioni altre funzioni). Ognuna di queste funzioni conta il numero di abitanti di ogni città e viene distribuita in un nodo del sistema distribuito, essa dovraà restituire un valore positivo se tale città possiede più di 50.000 abitanti. In questo modo viene distribuita un’implementazione di howManyPeople in ogni nodo, il quale restituirà il risultato indipendentemente dagli altri nodi. Da notare come anche la lista dei dati in input è stata suddivisa ed ogni frazione del dataset viene distribuita alle varie funzioni durante l’implementazione della funzione Map(). Tale programma, pur effettuando solo una semplice lettura, spiega in maniera chiara come avviene la procedura di suddivisione di Map() e come essa possa essere applicata a grandi collezioni di dati per semplificare il lavoro da svolgere sull’intero dataset. Reduce(): analogamente alla funzione Map(), anche la funzione Reduce() è realizzata secondo il paradigma della programmazione funzionale e riceve in ingresso una lista di elementi. Tramite Reduce() è possibile implementare una funzione che riceve in input tale lista, opera su di essa alcune istruzioni che vengono decise dal programmatore, e quindi restituisce il risultato finale. Per riprendere 2.4 Strumenti di Analisi 31 l’esempio precedente, dove era stata mostrata l’implemetazione di una funzione tramite Map() la quale restituiva una lista di elementi, viene adesso mostrata l’implementazione di una funzione tramite Reduce(). Il risultato della funzione howManyPeople è una lista di città le quali possiedono più di 50.000 abitanti. Ogni elemento di tale lista è stato ricavato da un nodo del sistema distribuito: (no, county 1; yes, county 2; no, county 3; yes, county 4; ?, county nnn) Ogni risultato è una coppia in cui viene indicato il nome della città stessa ed un valore positivo che specifica se quella città possiede o no più di 50.000 abitanti. La funzione che verrà implementata tramite Reduce() si chiama isDemocrat; essa esamina ogni elemento della lista e restituisce solo quelle città dove gli elettori hanno votato per il Partito Democratico: reduce isDemocrat (no, county 1; yes, county 2; no, county 3; yes, county 4; ?, county nnn) Tutto questo viene svolto senza apportare alcuna modifica alla lista di partenza. In questo modo è possibile ripetere il processo implementando ulteriori funzioni tramite Reduce() senza, cosı̀, alterare le informazioni contenute nei dati utili. In alcune situazioni una lista di risultati prodotti, a partire dai dati in input, tramite la funzione implementata con Map() è sufficiente. In altri casi (soprattutto quando si ha a che fare con grosse collezioni di dati) si vuole esaminare tali dati, selezionare alcuni elementi di maggiore interesse e, infine, implementare un’operazione sulla lista dei dati selezionati. Questo appena descritto è il metodo adottato per affrontare il problema della complessità dei Big Data. In tal modo si sfruttano le potenzialità di entrambe le funzioni Map() e Reduce() che, insieme, compongono il “pattern” MapReduce, il cui nome deriva proprio dalle due funzioni che lo costituiscono. Questo genere di tecniche vengono definite tecniche “divide et impera”. Partendo da una grossa raccolta di dati, si usa la funzione Map() per implementare diverse procedure che esaminano porzioni definite dei dati ed estraggono le informazioni di maggiore interesse; si crea, quindi, una lista che viene, infine, esaminata da una procedura implementata tramite la funzione Reduce() producendo l’output desiderato, come mostrato in Figura 2.6. I programmatori possono implementare qualsiasi funzione tramite tale approccio; anche dovendo esaminare quantità di dati dell’ordine dei petabyte, esso risulta particolarmente efficace ed efficiente in quanto sfrutta tutte le potenzialità della programmazione distribuita già illustrate. Inoltre, grazie al paradigma della programmazione funzionale, l’ordine con il quale vengono eseguite le varie funzioni implementate tramite Map() è ininfluente. Con questo tipo di programmazione è prevista infatti una sorta di proprietà commutativa per le istruzioni, le quali possono essere eseguite in qualsiasi ordine. Il risultato finale sarà visto come se fosse stato eseguito da una singola macchina. MapReduce funziona, infatti, in maniera trasparente: in tal modo chiunque voglia implementare le funzioni non si dovrà preoccupare di come esse verranno distribuite all’interno del sistema (basterà semplicemente fornire delle istruzioni da un livello superiore, anche tramite degli strumenti 32 2 Big Data Figura 2.6. Flusso dei dati lavorati tramite MapReduce quali Apache Hadoop). Il resto del lavoro verrà svolto da MapReduce che risiede in un livello inferiore secondo un’architettura a strati in cui l’utente, o lo strumento, di livello più alto non vuole conoscere il funzionamento delle applicazioni di livello inferiore ma è interessato semplicemente al risultato che esse forniranno. MapReduce include, anche, altre caratteristiche per la gestione dei vari processi che vengono generati. È presente uno scheduler che fa sı̀ che tali processi abbiano maggiore priorità e vengano eseguiti prima che la funzione implementata tramite Reduce() venga mandata in esecuzione. In questo modo essa non potrà essere lanciata prendendo risultati parziali. La sincronizzazione dei sottoprocessi Map() avviene tenendo traccia della loro esecuzione e, solo quando ciascuno di essi ha fornito il proprio risultato, verrà mandata in esecuzione la funzione Reduce(). Se, inoltre, il numero di sottoprocessi è maggiore rispetto al numero di nodi presenti nel sistema allora lo scheduler si occuperà di far sı̀ che ognuno di essi venga servito. È presente, anche, un meccanismo di gestione degli errori tale che, se uno dei nodi non riesce a portare a termine l’esecuzione di un processo ad esso assegnato, il sistema riconosce in maniera automatica l’insorgere di tale problema e reagisce (talvolta anche assegnando tale processo a un altro nodo). Per sfruttare al massimo le potenzialità degli strumenti offerti da MapReduce sono necessari ulteriori tecnologie che, partendo dai meccanismi che tale piattaforma offre, permettono di affrontare tutte le sfide che l’analisi dei Big Data propone. Uno di questi strumenti (forse il più utilizzato) è Apache Hadoop. 2.4.2 Apache Hadoop Il progetto di Hadoop nasce dall’esigenza di avere un mezzo per gestire grosse quantità di dati in modo semplice e pratico. Prima della nascita di tali strumenti i 2.4 Strumenti di Analisi 33 maggiori motori di ricerca, quali Yahoo! e Google, erano alla ricerca di un modo per trarre profitto dal continuo flusso di informazioni che ricevevano ogni giorno. Per fare ciò si dovette trovare, prima di tutto, un modo per gestire questi dati in maniera automatica. Fu proprio il motore di ricerca Yahoo! a dare vita al progetto Hadoop per venire incontro a tali esigenze. Il creatore di questa nuova piattaforma, l’ingegnere Doug Cutting, terminò il progetto nel 2004 utilizzando come punto di partenza il framework MapReduce di Google. Proprio come MapReduce, infatti, l’approccio di Hadoop per affrontare la complessità dei Big Data consiste nel dividere il problema in più passi minori e nel risolverli parallelamente. Le componenti principali di Hadoop sono due: • Hadoop Distributed File System. Un file system distribuito è un particolare tipo di file system che permette la memorizzazione di file e risorse su dispositivi di archiviazione distribuiti in una rete informatica, anzichè archiviati su un dispositivo locale. L’Hadoop Distribuited File System, o HDFS, è stato ideato per soddisfare alcuni requisiti, quali la scalabilità e l’affidabilità. Esso è in grado di gestire un numero elevatissimo di file (anche dell’ordine dei petabyte). Analogamente ad altri file system, esso presenta i file in una struttura gerarchica di cartelle e li distribuisce attraverso i vari nodi. I file system di tipo distribuito operano attraverso un meccanismo client-server; come tutti, anche HDFS lavora a partire da un nodo centrale che contiene un’applicazione chiamata namenode. Tale applicazione gestisce l’intero file system, controlla l’accesso ai file (per operazioni di lettura, scrittura, etc.) e determina come essi verranno suddivisi, nei vari nodi, all’interno di blocchi da 64/128MB. La responsabilità del namenode è quella di tenere traccia della posizione nella quale i vari blocchi, che compongono ogni file, vengono distribuiti. Inoltre, il namenode offre una strategia di replica e di controllo degli errori che garantiscono l’affidabilità del sistema. Tale applicazione comunica in maniera continua con le componenti del file system distribuite sui vari nodi secondari: tali componenti sono chiamati datanode. Attraverso questa comunicazione il nodo principale è a conoscenza di tutto ciò che avviene sugli altri nodi; quindi, nel momento in cui un nodo non riuscirà più a gestire il flusso delle informazioni dirotterà il traffico dei dati verso un altro nodo. I datanode sono delle applicazioni che si trovano su tutti i nodi della rete diversi da quello principale; generalmente è presente un datanode per ciascun nodo. Tali applicazioni gestiscono fisicamente la memorizzazione dei dati in ciascun nodo, occupandosi delle operazioni di lettura e scrittura richieste. L’accesso a ogni datanode è sempre gestito dal namenode il quale, interpretando i messaggi ricevuti, determina se il nodo secondario sia in grado, oppure no, di gestire le informazioni che dovrebbero essere affidate ad esso. In tal modo, quando un datanode non fornisce alcuna risposta viene escluso fino a quando non sarà di nuovo capace di accettare nuovi dati in ingresso. Questo meccanismo permette al sistema di essere sempre bilanciato ed è completamente trasparente all’utente, il quale vede l’intero sistema come se fosse una macchina singola. Al fine di garantire l’integrità dei dati, durante il processo di divisione dei file in vari blocchi, ogni movimento viene registrato in un file di log. Grazie a questa strategia HDFS risulta essere un file system affidabile. Ogni dato, inoltre, viene replicato più volte sui vari nodi; questa funzionalità, oltre a rappresentare un 34 • 2 Big Data ulteriore punto di forza per l’affidabilità del sistema, garantisce una riduzione dei tempi di accesso per rendere più efficiente il recupero dei dati. Ulteriore punto di forza di Hadoop è la possibilità di interagire con diversi tipi di dati. L’HDFS accetta qualsiasi formato, strutturato e non strutturato, proveniente da qualsiasi tipo di fonte. È possibile memorizzare file di testo, email, foto, video, post provenienti da social network, nonchè qualsiasi altro tipo di dato. HDFS risulta, pertanto, sempre vantaggioso con dati di grandi dimensioni. I vantaggi diminuiscono quando, al contrario, si ha a che fare con file di dimensioni più piccole. In particolare, quando troppi file hanno una dimensione molto inferiore al singolo blocco di memoria del file system, questo determinerebbe un incremento nello spazio dei nomi del namenode, associati a ogni singolo blocco. Tale problema viene risolto dagli archivi Hadoop che compattano molti piccoli file in raccolte più grandi. Hadoop MapReduce: è un’implementazione del framework MapReduce di Google. Tale versione prevede una serie di funzioni precostruite per affrontare il problema della complessità dei Big Data. Quando, tramite il client di Hadoop, viene fatta una richiesta di implementazione del pattern di MapReduce, i dati grezzi vengono per prima cosa individuati all’interno del sistema distribuito e prelevati tramite HDFS. Prima che i dati possano essere forniti alla funzione implementata utilizzando Map(), come visto precedentemente, è necessario adattarli in modo che rispettino i parametri accettati da tale funzione. Ogni parametro fornito alla funzione Map() deve essere, infatti, costituito da una coppia chiave-valore. A tale scopo vengono proposte una serie di funzioni utili per convertire i dati da un qualsiasi formato generico (con il quale vengono estratti dalle fonti esterne) ad un formato in cui possono essere processati. Ogni istanza di Map(), quindi, elaborerà i dati cosı̀ convertiti e fornirà un output. In alcune applicazioni i dati in uscita devono essere raccolti prima di essere passati alla funzione Reduce(). Anche questa funzione si trova distribuita in ogni nodo; per questo motivo Hadoop prevede un’applicazione chiamata collettore che permette di raccogliere i risultati di tutti i nodi, nel caso in cui questi ultimi dovessero essere tutti richiesti dalla funzione Reduce(). I risultati delle elaborazioni delle varie istanze di Map() sono raccolti da un’applicazione reporter la quale tiene traccia di ogni esecuzione sui vari nodi e permette alla funzione Reduce() di sapere quando tutti i risultati sono pronti per l’elaborazione finale. Ciascuno di questi meccanismi è presente su ogni singolo nodo: quando i risultati vengono resi disponibili essi convergono nel nodo che dovrà eseguire la funzione Reduce(); i trasferimenti vengono effettuati in maniera efficiente tramite HDFS. Una volta che i risultati intermedi sono pronti la funzione Reduce() li elabora e fornisce il risultato finale. Anche questi risultati saranno composti da una coppia chiave-valore; per questo motivo saranno necessarie ulteriori funzioni che tradurranno, ancora una volta, questi elementi nel formato desiderato. Infine, i dati cosı̀ ottenuti verranno memorizzati per ulteriori future elaborazioni tramite HDFS. Come è emerso finora, Hadoop fornisce una serie di strumenti per rendere estremamente semplice il lavoro con i Big Data. Al contrario dei normali database relazionali, i quali prima di poter ricevere i dati devono essere preventivamente adattati 2.4 Strumenti di Analisi 35 alla loro struttura, Hadoop permette di memorizzare le informazioni ed estrarle in qualsiasi momento e senza un’opportuna preparazione. In aggiunta, esso porta una serie di vantaggi già esaminati, quali l’affidabilità, la gestione degli errori, la velocità di estrazione dei dati, e le varie funzioni che permettono di lavorare con qualsiasi tipologia di dato. Nel corso degli anni alla tecnologia vista finora si sono aggiunti ulteriori strumenti per incrementare la versatilità di Hadoop. Tali strumenti formano un ecosistema di applicazioni che ruotano intorno al framework principale e che permettono di adattarsi a ogni situazione con cui si può avere a che fare nel contesto Big Data. Questo bagaglio di tecnologie appare indispensabile quando si vogliono estrarre informazioni da un mondo di dati cosı̀ vasto: cercare di comprendere i Big Data senza tali strumenti è come cercare di svuotare l’oceano usando un cucchiaio[11, pag.121]. 2.4.3 Ecosistema Hadoop Intorno alle basi di Hadoop, costituite da MapReduce e HDFS, ruotano una serie di strumenti indispensabili alla scrittura di applicazioni utili per obiettivi pratici, quali l’analisi predittiva (come illustrato in Figura 2.7). Figura 2.7. L’ecosistema di Hadoop In assenza di tali tecnologie il compito degli esperti del settore sarebbe molto più complesso in quanto si dovrebbero implementare da zero le tecnologie che permettono di realizzare un modello efficace. La loro esistenza quindi rappresenta un opportunità per tutti coloro che vogliono includere l’universo dei Big Data alla loro analisi. • Yarn: Yarn (acronimo di: Yet Another Resource Negotiator) è una piattaforma che contiene uno scheduler il cui compito è quello di allocare le risorse di sistema alle varie applicazioni implementate dall’utente. Lo scheduling dei processi, nonostante sia gestito da MapReduce, non garantisce la flessibilità e l’efficienza che vengono fornite dal servizio Yarn. Quest’ultimo si prende carico della gestione delle risorse (quali la memoria, la CPU e la rete) e controlla l’esecuzione delle applicazioni. Se queste ultime dovessero richiedere un numero maggiore di 36 • • • 2 Big Data risorse a supporto dell’esecuzione, Yarn le fornirà loro aumentando l’efficienza complessiva del sistema. Di conseguenza, tale framework è un ulteriore strumento che consente di creare applicazioni o infrastrutture di calcolo distribuito di qualsiasi tipo. Hbase: si tratta di una base di dati distribuita, non relazionale che utilizza HDFS per le proprie operazioni. Come i tradizionali RDBMS esso è composto da righe e colonne, ma non esiste alcuna relazione tra i dati contenuti all’interno del database. Ogni colonna rappresenta una famiglia di informazioni mentre ogni riga è identificata da una chiave che può essere una stringa, un valore numerico o, perfino, un dato strutturato: ciò rende l’accesso ai vari dati molto flessibile. Lo schema della base di dati Hbase non è predefinito; quindi, in ogni momento, è possibile aggiungere righe e colonne: questa caratteristica si sposa perfettamente con i Big Data i quali si evolvono molto in fretta nella loro varietà. Inoltre, i dati contenuti in Hbase vengono replicati, secondo le specifiche di HDFS ; in questo modo l’accesso ai vari dati risulta essere più rapido. Hive: è un’infrastruttura che implementa un linguaggio simile a SQL, chiamato HiveQL, il quale permette di realizzare interrogazioni sui dati contenuti in HDFS. Diventa, cosı̀, possibile analizzare i dati senza dover ricorrere ad applicazioni implementate esplicitamente tramite Map() e Reduce(); ciò viene fatto in maniera automatica e trasparente per l’utente. Hive non è progettato per ottimizzare i tempi di risposta: i risultati di una query possono essere restituiti anche dopo moltissimo tempo a causa della complessità dei dati. Per questo motivo Hive è utilizzato per le operazioni di data mining che non richiedono risultati in tempo reale. Le primitive di HiveQL includono alcuni costrutti tipici di SQL quali select, join, union e molti altri. Mahout : questo strumento (Figura 2.8) ha un utilizzo specifico per l’analisi predittiva. Esso contiene librerie di algoritmi di data mining per implementare metodi quali clustering, classificazione, e molti altri, direttamente su grandi quantità di dati. Ciò avviene grazie alla possibilità di implementare Mahout su reti distribuite che vengono già gestite da Hadoop. In tal modo non è necessario possedere le conoscenze informatiche per la costruzione del modello utile all’analisi predittiva: le conoscenze del settore saranno sufficienti per la scelta delle fonti e dell’algoritmo più adatto ad analizzare i dati provenienti da esse e per poter ottenere un modello di previsione. Gli algoritmi messi a disposizione da Mahout sfruttano le capacità del paradigma MapReduce; anche in questo caso l’architettura usata è quella a livelli in cui applicazioni di livello superiore (in questo caso, gli algoritmi forniti da Mahout ) utilizzano per i loro scopi infrastrutture già messe a disposizione, quali il framework MapReduce offerto da Hadoop. Mahout è un progetto relativamente giovane e, quindi, aperto allo sviluppo di nuove funzionalità e nuovi algoritmi per includere l’implementazione di tutte le tecniche e i modelli che l’analisi predittiva richiede. Gli strumenti finora esaminati rappresentano solo una piccola parte di tutti quelli disponibili agli utenti che utilizzano Hadoop per la gestione dei Big Data. Tali strumenti richiedono un certo grado di conoscenza da parte degli utilizzatori. Con la diffusione dei casi d’uso dei Big Data, e con l’aumentare, negli ultimi anni, delle richieste di metodi sempre più accessibili per sfruttare tali risorse, è sorta la neces- 2.4 Strumenti di Analisi 37 Figura 2.8. Il logo di Apache Mahout sità di sviluppare nuove tecnologie sempre più aperte. Per tale ragione una parte dell’ecosistema di Hadoop è dedicata sempre più ad applicazioni che non richiedono conoscenze informatiche o specifiche del particolare settore. Tra questi strumenti, citiamo Pig, Sqoop e Zookeeper : essi rappresentano l’evoluzione del concetto di gestione dei Big Data, sempre più accessibili e meno costosi da analizzare. Tutti questi strumenti, inoltre, sono open-source e quindi sono utilizzabili da chiunque voglia usufruire delle potenzialità dei grossi flussi informativi per i propri scopi. 3 I Modelli di Previsione In questo capitolo vengono illustrati, dal punto di vista teorico, i più comuni modelli i quali rappresentano il cuore dell’analisi predittiva. Questi ultimi sono ereditati da discipline quali data mining e machine learning. Dopo una breve panoramica sul concetto di “modello”, vengono illustrati, con maggior dettaglio, i procedimenti matematici e statistici con i quali essi riescono a rappresentare la realtà (e, in seguito, a prevederla) apprendendo dall’esperienza. 3.1 I Modelli come Strumento di Previsione I modelli rappresentano il cuore dell’analisi predittiva. Per questo motivo è necessario analizzare tali strumenti, al fine di apprendere a pieno come realizzare un processo di previsione, e quale tra questi meglio si adatta alle varie situazioni. Dal punto di vista più generale possibile, un modello è la rappresentazione di uno stato, un processo, o un sistema che si intende comprendere o del quale si vuole conoscere il comportamento. Nel caso dell’analisi predittiva i modelli si rivelano interessanti in quanto consentono di trarre delle conclusioni sugli eventi osservati, a partire dai comportamenti studiati, e di fare delle previsioni sulle prossime evoluzioni degli eventi stessi. Esiste una moltitudine di modelli diversi, e in diversi formati. Tale varietà garantisce la possibilità di descrivere qualsiasi fenomeno e, allo stesso tempo, di adattarsi a qualsiasi tipologia di variabili che si intende mettere in relazione. Un modello può essere costituito da un’equazione matematica, la quale mette in relazione due o più variabili che possono essere osservate e misurate; esso può, inoltre, essere composto da un insieme di regole. L’esempio di un tipico modello è rappresentato dalla seconda legge di Newton. Essa mostra come l’accelerazione di un corpo sia direttamente proporzionale alle forze agenti su di esso e inversamente proporzionale alla sua massa. Tale legge viene cosı̀ rappresentata: X− → → F = m− a (3.1) In questo caso il modello è rappresentato da un’equazione. Quest’ultima mette → − in relazione la somma delle forze F che agiscono su un oggetto di massa m con 40 3 I Modelli di Previsione → l’accelerazione − a che tale oggetto subisce in risposta. Questo semplice modello ci permette di compiere delle previsioni riguardo la realtà circostante. In questo caso, applicando una forza a un oggetto (di cui conosciamo già la massa) è possibile prevedere l’accelerazione che esso subirà. Dopo diverse osservazioni dei risultati prodotti da tale modello, ottenuti a partire da una serie di campioni di forze in ingresso, sarà possibile prevedere con certezza le conseguenze di una qualsiasi forza che verrà applicata all’oggetto di interesse. L’esempio appena illustrato mette, inoltre, in evidenza quanto sia importante effettuare una preventiva preparazione dei dati prima di che essi vengano utilizzati. L’oggetto osservato, oltre la massa indicata con m, possiede diverse altre caratteristiche (o attributi) che possono essere più o meno interessanti ai fini del risultato che si vuole ottenere. Specifiche come: il colore, la temperatura, la posizione nello spazio, e molte altre che caratterizzano tale oggetto, risultano essere irrilevanti per tale del modello ai fini di calcolare la massa dell’oggetto stesso. Per questo motivo molti dettagli dovranno essere rimossi prima dell’elaborazione dei dati, concentrando cosı̀ la propria attenzione solo sulle proprietà realmente indispensabili. La seconda legge di Newton è stata descritta con un modello molto semplice, nel quale entravano in gioco solo tre attributi dell’oggetto (che può essere considerato come l’istanza di un particolare tipo di dato). Ogni istanza possiede i propri attributi che la caratterizzano: la forza e la massa rappresentano le variabili indipendenti, o di ingresso, ossia valori noti che vengono osservati direttamente dalle fonti da cui provengono i dati; l’accelerazione rappresenta, al contrario, la variabile dipendente, o di uscita, ossia un valore incognito che può essere derivato attraverso il modello partendo dalle variabili di ingresso. Quest’ultimo consiste in una funzione che mette in relazione tali caratteristiche. In particolare, nell’esempio illustrato, la funzione matematica è una relazione lineare tra le variabili in ingresso e quelle in uscita. Questo tipo di modello è estremamente semplice in quanto utilizza poche variabili e gode della proprietà di linearità. In generale i modelli più complessi sono quelli che richiedono il maggior numero di variabili e che rappresentano una relazione non lineare tra le variabili dipendenti ed indipendenti. Uno stesso fenomeno può, a volte, essere rappresentato da più modelli matematici. La scelta del metodo più conveniente, al fine di ottenere i risultati che meglio rispecchiano la realtà, non è semplice e spesso richiede diversi tentativi e l’uso dell’esperienza. Nella maggioranza dei casi, i modelli che richiedono più attributi sono anche quelli che descrivono con maggiore accuratezza gli eventi. Non sempre, tuttavia, un modello più complesso, come ad esempio un modello non lineare con molte variabili in ingresso, conviene più di un modello lineare. Alcune fonti di dati (ossia, ad esempio, gli strumenti per la misura della forza e della massa) possono rilevare, oltre al valore richiesto, una certa quantità di rumore tale da rendere imprecisa la misurazione. In questi casi fornire molte variabili al modello non farà che incrementare il grado di imprecisione. Talvolta, invece, potrebbe essere impossibile ottenere le variabili necessarie all’implementazione di un modello molto dispendioso. Conviene, nella maggior parte dei casi, valutare la risposta di diversi modelli che descrivono lo stesso fenomeno: in tal modo sarà possibile avere un quadro più ampio dei possibili sviluppi dei fenomeni presi in esame. Costruire un modello di previsione, in modo corretto, significa derivare le regole che descrivono il comportamento delle variabili delle quali si vuole intuire i valori 3.1 I Modelli come Strumento di Previsione 41 che assumeranno in futuro. Tali regole, contrariamente a quanto mostrato tramite l’esempio della seconda legge di Newton, non possono essere ricavate attraverso considerazioni di ordine logico, da dimostrazioni matematiche o da regole specifiche di settore, ma devono essere ricavate osservando direttamente il comportamento dei dati. Prevedere il comportamento di questi ultimi significa, infatti, osservare ciò che si è verificato durante le precedenti istanze di tali dati e, necessariamente, ricavare schemi e associazioni che permettono di costruire un modello valido anche per le future occorrenze. Se, ad esempio, fosse necessario costruire un modello per la previsione delle precipitazioni annuali in varie zone geografiche, sarebbe necessario raccogliere dati sulle precedenti precipitazioni. Per ciascuno di essi bisognerebbe evidenziare tutti quegli attributi che possono essere di potenziale interesse quali la latitudine, la longitudine e la quantità di pioggia. Tramite tali informazioni, osservandone le variazioni attraverso una serie di dati campione, è possibile ricavare un modello che potrà essere utilizzato con dati raccolti in futuro. Sarà, quindi, possibile, ad esempio, prevedere il comportamento delle precipitazioni in posti nei quali non è stata fatta alcuna misurazione. Esistono varie categorie di modelli costruiti in questo modo. Questi ultimi possono essere suddivisi in base al compito che svolgono; alcuni permettono di ottenere una variabile dipendente che rappresenta un determinato gruppo di dati, altri restituiscono valori ben precisi. In senso ancor più generale è possibile individuare due grandi gruppi di modelli: i modelli deterministici e quelli non deterministici o stocastici. I primi si basano su dati derivanti da osservazioni effettuate tramite misurazioni. A questa categoria appartiene il modello già illustrato del secondo principio di Newton, implementato attraverso valori misurati in maniera ben precisa. La seconda categoria è costituita da tutti quei modelli che, nel descrivere i vari fenomeni, contengono particolari che non possono essere determinati con precisione, ma sono spesso processi casuali. Spesso la forma di incertezza deriva dall’impossibilità di misurare con precisione quelle variabili che hanno un maggiore impatto sull’implementazione del processo. Un tipico esempio di processo stocastico è il modello che tenta di prevedere, con probabilità ben definita, il risultato del lancio di un dado. Tale modello può essere cosı̀ definito: 1 , y ∈ {1, 2, 3, 4, 5, 6} (3.2) 6 tali simboli indicano che la variabile di uscita Y può assumere uno tra sei possibili valori; ciascuno di essi ha una probabilità su sei di essere quello corretto. In questo modo è possibile conoscere tutti i possibili risultati e con quale percentuale ci si può aspettare di ottenere ognuno di essi. Esistono diverse altre caratteristiche per suddividere ulteriormente i vari modelli in più categorie. Individuare differenti gruppi a cui appartengono questi ultimi è indispensabile al fine di associare ciascuno di essi ad una ben precisa categoria di situazioni da rappresentare. Si identificano modelli che vengono realizzati attraverso algoritmi di apprendimento supervisionato, le cui variabili di uscita sono valori ben definiti e conosciuti a priori. Su collezioni di dati non ben definiti, in cui per ciascuno di essi conosciamo solo alcuni attributi (ma che non ci permettono di ricondurli ad una determinata categoria) si utilizzano algoritmi di apprendimento non supervisionato. I modelli realizzati attraverso tali algoritmi permettono di individuare P (Y = y) = 42 3 I Modelli di Previsione alcuni gruppi di osservazione delle variabili in ingresso. Attraverso tecniche di data mining, vengono individuate diverse similitudini e caratteristiche in comune tra gli attributi dei dati; tali similitudini vengono impiegate per associare, in uscita, ogni istanza ad un gruppo ben preciso. Questo processo è caratteristico dei modelli di clustering. Il vantaggio di questi ultimi è quello di poter gestire collezioni di dati non etichettati, scoprendo gruppi di appartenenza nascosti tra di essi; in questo modo sarà possibile prevedere a quali, tra tali gruppi, apparterranno i dati in arrivo nel futuro. In un modello supervisionato i risultati possono differire da quelli che ci si aspetta di ottenere. Tale discrepanza è, spesso, dovuta ad un errore nella scelta del modello che viene usato con il dataset a disposizione. Su una stessa collezione di dati, infatti, è possibile agire tramite un numero praticamente illimitato di algoritmi differenti; ognuno di essi può, talvolta, comportare un errore che allontana i risultati ottenuti da quelli reali. Questo concetto è facilmente comprensibile quando si usano particolari modelli lineari detti modelli parametrici. Questi ultimi sono rappresentati da una funzione lineare, a parametri X1 , X2 , ..., Xn : Y = f (X1 , X2 , ..., Xn ) (3.3) Modificando tali parametri è possibile individuare la funzione che meglio si adatta a rappresentare la realtà. In questo caso l’errore si definisce “riducibile” in quanto è possibile eliminarlo scegliendo opportunamente un modello (al contrario di un errore irriducibile che può sorgere, ad esempio, quando non si possiede un numero sufficiente di parametri). Per contro, un modello non parametrico non fa alcun riferimento ad una possibile forma delle variabili di restituzione; in situazioni del genere individuare un errore risulta essere più complesso. Il campo di interesse della maggior parte dei modelli di uso comune si restringe a due categorie, ovvero i modelli di regressione e quelli di classificazione. La distinzione tra queste due tipologie si basa sui dati di output. I primi mirano a predire una quantità numerica (come, ad esempio, il livello di precipitazioni o il costo di un progetto); i secondi tentano di ottenere un valore preso da un insieme di possibili risultati (ad esempio il genere di una persona o la possibile patologia da cui è affetta, ottenuti i sintomi in ingresso). La scelta tra queste due categorie è, ovviamente, dettata dalle necessità richieste dall’implementazione dei modelli. Nelle prossime sezioni verranno approfondite queste due specifiche categorie, con uno sguardo particolare rivolto ai modelli che esse includono. 3.2 Data Clustering Nell’illustrazione di alcuni degli innumerevoli modelli a disposizione per lo sviluppo dell’analisi predittiva su ogni possibile dataset è bene iniziare da quelli implementati tramite algoritmi di data clustering. Essi rappresentano un primo passo nella creazione di un modello di previsione efficace. Nella maggior parte delle applicazioni reali i dati utili sono di tipo non etichettato; ciò significa che non è disponibile, tra i loro attributi, una variabile di output. Quest’ultima permette di ricondurre il valore della previsione ad un ben preciso valore tra quelli esistenti e, quindi, prevedere le future manifestazioni di questi ultimi. In tali casi non è semplice modellare una 3.2 Data Clustering 43 realtà a venire, in quanto i dati che la descrivono sono delle semplici raccolte di attributi che non possono essere associati a uno dei possibili esiti che si intende individuare (alcuni particolari attributi possono, infatti, essere caratteristici di più gruppi di dati contemporaneamente, non possono, perciò, essere usati per determinare univocamente una data istanza). Per affrontare il problema appena esposto esiste una categoria di modelli implementati tramite gli algoritmi di clustering. Una delle caratteristiche di tali processi è che essi riescono a scoprire gruppi e categorie nascoste tra i dati in analisi, quindi a ricondurre ogni istanza di essi a una ben determinata tipologia. In questo modo, è possibile dare un significato ad un flusso di informazioni che, altrimenti, non avrebbe alcuna utilità pratica. Come mostrato nella Figura ??, per ricondurre ogni oggetto ad una determinata categoria, l’algoritmo studia gli attributi degli stessi. Figura 3.1. Algoritmo di clustering che individua gruppi di appartenenza esaminando gli attributi dei dati Il concetto alla base degli algoritmi di clustering viene comunemente utilizzato, ed essi fanno spesso parte delle attività quotidiane. Allo stesso modo in cui ogni giorno si suddividono gli oggetti di uso comune in base alle loro caratteristiche, infatti, gli algoritmi di clustering separano, in modo intelligente, milioni di dati in diversi gruppi formati da istanze con caratteristiche simili tra loro. Gli algoritmi che svolgono tale compito sono applicati in molteplici ambiti quali: biologia, marketing, reperimento di informazioni di vario genere ed analisi dei social network [7, pag.90]. Ogni dataset è composto da una collezione di oggetti (ossia, istanze di determinati dati) i quali derivano, spesso, da misure ed osservazioni e che vengono rappresentati in formato tabulare. Tali tabelle possono contenere dati di diverso genere e, in ognuna di esse, vengono riportate, in riga, le varie istanze e, in colonna, gli attributi di ciascuna di esse. Applicando un algoritmo di clustering, tali oggetti vengono suddivisi in gruppi chiamati cluster, cioè collezioni di istanze aventi caratteristiche in comune. Ciascun gruppo possiede un particolare valore che rappresenta, meglio di qualsiasi altro oggetto all’interno di esso, la categoria stessa. Tale istanza è detta cluster representative. Tutti gli algoritmi di clustering, riassumendo, hanno la capacità di esaminare intere raccolte di dati (anche di grandi dimensioni), individuare 44 3 I Modelli di Previsione gruppi caratteristici all’interno di essi e, infine, associare ciascun gruppo gruppi a un particolare valore, il quale avrà tutte le caratteristiche della categoria di appartenenza. La similitudine tra due o più oggetti è tanto più forte quanto più elevato sarà un indice di verosimiglianza. Ogni istanza viene confrontata con il cluster representative e, tramite una funzione matematica, viene restituito un valore numerico indice del grado di verosimiglianza tra l’oggetto e la categoria alla quale appartiene. La scoperta dei gruppi di appartenenza è essenziale per formulare idee ed ipotesi sulla struttura dei dati e per meglio comprenderli. Essa può essere utile per suddividere le informazioni al fine di esaminarle al meglio. Allo stesso tempo può essere direttamente usata come strumento di previsione in quei determinati ambiti in cui è utile individuare una categoria di appartenenza delle variabili di output. Per citare un possibile utilizzo, nell’ambito del marketing ad esempio, potrebbe essere necessario individuare gruppi di clienti i quali condividono gli stessi interessi o necessità, quindi, prevedere quale sarà il loro comportamento e adattare meglio la propria strategia di vendita. Utilizzare algoritmi di clustering rappresenta un vantaggio fondamentale per identificare i nuovi dati in arrivo, prelevati dalle varie sorgenti, e mostrare come essi sono collegati ai dati già in possesso. Con tale strategia è possibile prevedere il comportamento di questi ultimi non appena vengono prelevati. È possibile individuare un tipico esempio di quest’ultimo vantaggio nelle applicazioni in cui è necessario categorizzare una e-mail, appena ricevuta, come messaggio desiderato o come messaggio di spam. Un simile strumento di predizione ha la necessità, tramite un algoritmo di clustering, di definire due cluster ben precisi: uno contenente e-mail di spam e l’altro contenente e-mail da leggere. Attraverso il confronto con le caratteristiche di queste due categorie, l’algoritmo sarà capace di prevedere, con buona approssimazione, a quale dei due insiemi associare ogni nuova e-mail in arrivo, esaminando gli attributi messi in evidenza che quest’ultima possiede. É bene ricordare come non sia possibile applicare un algoritmo di clustering a un dataset che non sia strutturato in tabelle. Nel caso di dati non strutturati, infatti, non sarebbe possibile individuare quelle caratteristiche che permettono di suddividere ogni istanza in un particolare gruppo. Prima di effettuare tale tipo di analisi, quindi, è necessario evidenziare gli attributi più interessanti per tutti i tipi di dati con cui si ha a che fare. Per un documento, ad esempio, mettere in risalto alcune particolari caratteristiche può voler dire mostrare il numero di volte in cui un determinato termine appare all’interno del testo, come mostrato in Figura 3.2. Allo stesso modo, è possibile scegliere qualsiasi attributo che caratterizza un utente di un social network. È possibile scegliere le proprietà dei dati a disposizione e, successivamente, suddividere (in diversi e appropriati cluster) le istanze di tali dati in funzione delle proprietà prescelte. 3.2.1 K-Means Il più semplice algoritmo di clustering è l’algoritmo K-means. Esso rappresenta il metodo più semplice tra quelli usati nell’apprendimento automatico (machine learning). Si tratta di un algoritmo che permette di suddividere un insieme di oggetti in K gruppi sulla base dei loro attributi. Esso prende il nome dalle proprie caratteristiche di input e output; K rappresenta l’input dell’algoritmo ed è, inoltre, il numero 3.2 Data Clustering 45 Figura 3.2. Collezione di documenti in formato tabulare; gli attributi, in questo caso, rappresentano le parole più frequenti all’interno del testo. Le lettere da A a F indicano le istanze dei documenti di cluster che verranno determinati all’interno del dataset. La parola means indica l’output dell’algoritmo; si riferisce al significato di ognuno dei K cluster individuati dall’algoritmo. L’algoritmo opera nel seguente modo: esso seleziona K oggetti in maniera casuale e li etichetta come cluster representative. In seguito, tutti gli altri elementi del dataset vengono esaminati e associati a ciascun cluster representative usando un valore di similitudine. Tale valore è dato da una funzione la quale calcola la distanza euclidea tra due oggetti con caratteristiche ben definite (come se tali caratteristiche fossero gli elementi di un vettore); ogni istanza viene associata al cluster representative verso il quale possiede la distanza minore. A questo punto vengono scelti dei nuovi cluster representative, esaminando le caratteristiche degli oggetti appena aggiunti e verificando quali tra questi ultimi meglio rappresenta la propria categoria di appartenenza. Tale procedura viene ripetuta fino a quando i cluster representative non cambiano con l’aggiunta di nuovi dati, quindi, rappresentato la scelta migliore all’interno del cluster. Per mostrare un esempio [7, pag.97] del funzionamento dell’algoritmo K-means, in Figura 3.3 appare un dataset contenente alcuni dati osservati. Essi sono relativi ad un insieme di clienti di una compagnia; tra questi è presente l’indice di gradimento che ciascuno di essi ha mostrato nei confronti di due particolari prodotti. Figura 3.3. Un dataset relativo a dei clienti 46 3 I Modelli di Previsione Inizialmente, per ogni cluster che si intende definire, viene scelto un elemento in maniera casuale, tra quelli disponibili nel dataset; esso sarà costituito da una tupla, ossia un insieme di attributi relativi ad una stessa istanza. In tal modo l’algoritmo costruisce due cluster e assegna, a ciascuno di essi, il cluster representative appena determinato. Per ogni elemento all’interno del dataset viene calcolata, spesso attraverso una funzione matematica, la distanza euclidea tra tale elemento e il cluster representative designato per ogni gruppo (in fase iniziale) in maniera casuale. Per distanza euclidea si intende la distanza geometrica tra due vettori, definita come segue: qX d(x1 , x2 ) = (x1 , x2 )2 (3.4) In questa formula x1 , x2 rappresentano i valori degli attributi di un oggetto. Se, ad esempio, in fase iniziale, gli elementi scelti casualmente sono i clienti con ID numero 3 e 4 (i quali rappresentano, rispettivamente, il primo ed il secondo cluster) e, successivamente, viene preso in esame l’oggetto con ID cliente pari a 2, la distanza tra tale elemento e il primo cluster sarà: p (3.5) d(x1 , x2 ) = (3 − 2)2 + (4 − 2)2 = 2, 23 mentre la distanza tra l’elemento con ID cliente pari a 2 e il secondo cluster sarà: p d(x1 , x2 ) = (3 − 10)2 +)(4 − 14)2 = 12, 20 (3.6) Questo elemento verrà, quindi, collocato nel secondo cluster, essendo la distanza tra esso ed il cluster representative con ID pari a 4 la minore tra le due. È bene precisare che il calcolo della distanza euclidea non è l’unico strumento utile alla scoperta della somiglianza tra due elementi; ne esistono molti altri, impiegati a seconda delle evenienze (nel caso di stringhe, ad esempio, è possibile utilizzare la distanza di Hamming). A questo punto, una volta ripetuto il suddetto confronto per ogni elemento del dataset, e quindi aver distribuito ogni istanza al cluster che meglio la rappresenta, è necessario ricalcolare i K cluster representative secondo le specifiche fornite. Al contrario della fase iniziale, in tal caso, quest’ultimi verranno scelti separatamente all’interno di ogni cluster anzichè all’interno dell’intero dataset. Il risultato sarà quello illustrato nella Figura 3.4. Figura 3.4. Risultato dell’algoritmo K-means In tale risultato le varie istanze sono state distribuite ai rispettivi cluster ed i nuovi representative sono stati scelti. L’algoritmo K-means è un algoritmo di tipo iterativo; ciò significa che il processo va ripetuto ogni volta che un nuovo elemento viene aggiunto al dataset. Per tale ragione, nell’esempio appena illustrato, con l’aggiunta di una nuova istanza al dataset, 3.2 Data Clustering 47 ed una volta associata quest’ultima al gruppo più consono, è necessario aggiornare la scelta del representative. In questo modo la suddivisione dei vari oggetti risulta sempre più precisa. Gli algoritmi basati sul partizionamento sono stati a lungo gli algoritmi più diffusi prima dell’avvento del data mining. Essi consentono il vantaggio della scelta arbitraria dei K cluster. Tuttavia tale tipo di algoritmi risulta inadatto alla gestione di dataset di grandi dimensioni. Pur contenendo il numero di iterazioni (indicato con t), l’algoritmo K-means presenta una complessità temporale pari a O(nKt) (dove n è il numero di elementi e K il numero indicato di cluster desiderati). Per tale motivo non è consigliabile utilizzare un simile approccio in presenza di grossi database, in cui l’elevato valore di n renderebbe troppo costoso (dal punto di vista computazionale) l’esecuzione del metodo. 3.2.2 K-nearest neighbors L’algoritmo K-Nearest Neighbors (K-NN) confronta ognuno gli n elementi di un dataset con tutti gli altri. Viene creata una matrice delle distanze n × n nella quale, per ogni coppia di elementi, viene riportata la corrispettiva distanza. Questo valore è usato come soglia per decidere se un elemento sia più o meno somigliante ad un altro. In tal modo, una volta esaminati tutti gli elementi, è possibile associare quelli simili tra di loro a uno tra i K gruppi, cioè cluster, disponibili. Si tratta di un algoritmo molto simile all’algoritmo K-means. Anch’esso prevede il calcolo della distanza tramite strumenti come la definizione di distanza euclidea. La fase iniziale della procedura prevede la definizione dei K gruppi usando le caratteristiche dei dati a disposizione. Tale fase viene spesso realizzata mediante un training dataset; in seguito, con l’aggiunta di nuovi elementi, viene creata la matrice delle distanze, la quale deve essere aggiornata ogni volta che un nuovo elemento entra a far parte del dataset. 3.2.3 DBSCAN clustering Un cluster può essere visto come un’area, in uno spazio n-dimensionale, caratterizzata da una maggiore densità di oggetti [13, pag.234]. Tali oggetti (ossia i dati) saranno visti, secondo quest’ottica, come dei vettori a n dimensioni. Secondo tale descrizione, la densità può essere definita come il numero di elementi in rapporto ad una porzione unitaria dello spazio a n dimensioni. La quantità n viene definita dal numero di attributi che caratterizzano ogni elemento. Nella Figura 3.5, ad esempio, viene rappresentata la distribuzione degli elementi di un dataset in funzione di due attributi. Alcune zone (High Density Region) sono maggiormente “popolate” dai vari oggetti. Altre zone (Low Density Region) contengono un minor numero di elementi. Ogniqualvolta una zona ad alta densità si trova vicina ad altre zone a densità minore, tale zona può essere identificata come un cluster. È anche possibile evidenziare le aree definite come cluster come un sottoinsieme dell’area alla quale appartengono i diversi punti che rappresentano le varie osservazioni. Partendo da un elemento A, il quale possiede attributi che si avvicinano molto a quelle caratteristiche del cluster che si vuole mettere in evidenza, è possibile tracciare un intorno di raggio ε, come mostrato in Figura 3.6. Qualsiasi elemento 48 3 I Modelli di Previsione Figura 3.5. Densità del dataset (la cui posizione, anche in questo caso, è funzione di due attributi) ricada all’interno dell’intorno del punto A fa parte del cluster. Questo tipo di misura è chiamata “center-based density”. Figura 3.6. Sottoinsieme di elementi che identificano un cluster Alcuni algoritmi si basano sul calcolo della densità per individuare i cluster dentro i quali ricadono i vari elementi. Al contrario dei metodi basati sulla ricerca del cluster representative, tali algoritmi non necessitano della conoscenza, a priori, del parametro K usato come numero massimo di cluster da definire. Essi esplorano i dati e ricercano, in maniera automatica, il numero massimo di cluster di elementi dello stesso genere all’interno del dataset. Uno dei più comuni algoritmi di tale genere è DBSCAN (Density-Based Spatial Clustering of Applications with Noise). Quest’ultimo crea dei cluster identificando le 3.2 Data Clustering 49 zone con alta e con bassa densità all’interno dello spazio a n dimensioni che contiene tutti i punti. Non è possibile fornire a priori il numero di gruppi da identificare; l’algoritmo troverà in modo automatico tutte le zone in cui vi è un’alta presenza di elementi con caratteristiche simili. DBSCAN accetta in ingresso due parametri: il primo è il raggio ε che ogni intorno (il quale identifica un cluster) deve avere. Il secondo è un valore che indica il numero minimo di elementi che ogni cluster deve possedere per essere identificato come tale. L’algoritmo esamina un punto scelto in maniera casuale ed osserva tutti gli elementi contenuti nel proprio intorno. Per fare ciò deve individuare quali punti ricadono, o meno, nella circonferenza delimitata dal raggio di ampiezza ε calcolando la distanza tra tali punti ed il centro della circonferenza. Analogamente al caso degli algoritmi di partizionamento, tale compito viene svolto sfruttando le funzioni per il calcolo delle distanze come, ad esempio, la distanza euclidea. Dopo aver esaminato le vicinanze del punto scelto, se in tale intorno ricade un numero sufficiente di punti da superare la soglia data dal relativo valore fornito in input, viene creato un nuovo cluster. Se ciò non dovesse avvenire, cioè nel caso in cui nell’intorno di raggio ε del punto scelto non dovesse ricadere un numero sufficiente di elementi, il punto viene etichettato come “rumore”. Un rumore è definito come un punto, o un insieme di punti, sparsi nell’area con pochi altri oggetti intorno ad essi. Ciò significa che esistono pochi altri elementi che possiedono attributi di valore paragonabile ai punti di rumore; essi hanno, quindi, poco in comune con la maggior parte degli elementi del dataset e non entrano a far parte di nessuna categoria particolare. È bene osservare, tuttavia, che un punto etichettato come rumore potrebbe essere successivamente incluso nell’intorno di un altro punto, e quindi entrare a fare parte di un cluster. Dopo aver esaminato il primo punto, viene scelto un secondo elemento del dataset. Si procede come visto finora fino a quando tutti i punti vengono etichettati come facenti parte di un cluster o come rumore. L’algoritmo si avvale del concetto di density-reachability per la definizione dei vari cluster. Secondo tale definizione, un punto q si dice direttamente raggiungibile da un punto p (directly density-reachable) se tra i due non vi è una distanza di valore superiore a ε. Se esiste una sequenza di punti p1 , p2 , ..., pn , direttamente raggiungibili tra di loro, dei quali p1 = p e pn = q, allora si dice che q è density-reachable da p (Figura 3.7). Figura 3.7. Definizione di density-reachability Se, inoltre, esiste un punto o tale che p e q sono entrambi density-reachable da o, allora p e q si dicono “density-connected ”. Tutti gli elementi inclusi all’interno 50 3 I Modelli di Previsione degli intorni di raggio ε dei punti p1 , p2 , ..., pn , se sono density-connected tra di loro, appartengono allo stesso cluster. Molti punti intorno a tale cluster resteranno non associati ad esso, e quindi ogni cluster sarà circondato da un certo numero di elementi definiti come rumore. Il motivo per cui si utilizza un algoritmo di clustering basato sulla densità consiste, spesso, nel fatto che l’utilizzatore non ha la necessità o la possibilità di indicare a priori il numero K di gruppi da individuare. La complessità temporale dell’algoritmo è pari a O(n2 ) in quanto, per ogni elemento, è necessario esaminare tutti gli altri allo scopo di trovare quelli a distanza ε da esso. Tale operazione, nel caso in cui fosse possibile eseguire una ricerca indicizzata dei vari oggetti del dataset, può essere svolta in un tempo logaritmico; in tal caso il tempo complessivo dell’operazione di ricerca, svolta su tutti gli n elementi, diventa pari a O(n × lg n). Nonostante quest’ultimo costo temporale appaia essere molto conveniente, l’algoritmo DBSCAN presenta alcuni limiti. Esso non può essere impiegato per analizzare insiemi di dati con grandi differenze nelle varie densità. Ciò è causato dal fatto che non è possibile scegliere con accuratezza un raggio ε per ogni cluster esistente; quello che potrebbe essere un raggio ottimale, per includere tutti gli elementi di un determinato cluster, potrebbe essere troppo piccolo per un altro, rendendo la densità di quest’ultimo insufficiente per essere riconosciuto come gruppo. Per ogni algoritmo di clustering la scelta dei parametri in ingresso, come il raggio ε in DBSCAN, è molto importante per la riuscita dell’algoritmo stesso. Esistono, a tale scopo, particolari regole atte a stimare i vari parametri in base al dataset a disposizione. Una scelta ottimale dei parametri in ingresso determina risultati dell’algoritmo più verosimili, dunque modelli più affidabili. 3.3 Data Classification Il data clustering, come visto finora, viene utilizzato per descrivere i dati attraverso l’estrazione di gruppi o categorie a cui è possibile ricondurre ogni osservazione, sfruttando le similitudini tra queste ultime. Un simile processo può essere indispensabile per diverse applicazioni, mentre per altre può essere utile a definire le categorie che verranno usate da altri algoritmi per la giusta definizione dei dati, e di conseguenza, per strutturare modelli di previsione. Nell’ambito del data mining, viene definito data classification l’insieme dei processi che hanno il compito di etichettare gli oggetti (cioè le istanze dei dati) come membri di una ben determinata categoria. Lo scopo di questa categorizzazione è quello di creare un modello che permetta di prevedere in quale gruppo collocare un’entità composta da un insieme di attributi e, quindi, un’istanza. Tale definizione generale copre un gran numero di campi di applicazione; è possibile, individuando gruppi costituiti da elementi che avranno determinati comportamenti, prevedere, tramite tali modelli, le decisioni di una persona o lo svolgersi di particolari eventi. In ambito finanziario, ad esempio, specifici modelli permettono di etichettare un cliente come “pagante” o come “fraudolento” (risk modeling); tali modelli vengono realizzati attraverso l’uso di algoritmi di classificazione. In sostanza, in tale ambito, un classificatore è un insieme di procedimenti in grado di analizzare le informazioni in modo da determinare, in maniera automatica, i possibili rischi ai quali si andrà incontro concedendo un prestito ad un cliente con cui l’organizzazione non ha 3.3 Data Classification 51 mai avuto rapporti precedentemente. Un’ulteriore possibile applicazione, in ambito commerciale, prevede l’uso dei classificatori per individuare le aree geografiche all’interno delle quali un particolare prodotto potrà riscuotere maggiore interesse. Le potenzialità di tali strumenti sono quasi illimitate; avendo a che fare con molteplici applicazioni, appare naturale l’esistenza di molti algoritmi per lo studio di tali fenomeni. Si può affermare che i modelli creati tramite le tecniche di data classification possono essere usati per prevedere le caratteristiche di nuovi elementi, sulla base dei gruppi di appartenenza ottenuti tramite le tecniche di data clustering. I modelli di previsione che vengono realizzati attraverso tale tipologia di algoritmi vengono definiti classificatori. Le tecniche con le quali tali modelli vengono realizzati sono costituiti da sofisticati algoritmi di machine learning i quali “apprendono” dall’esperienza (ossia attraverso un set di dati precedentemente ottenuti). Tramite tali dati storici è, infatti, possibile identificare schemi nascosti che permettono di associare i dati ad un ben determinato ambito. Il processo di classificazione si divide principalmente in due fasi, ovver quella di apprendimento e quella di previsione. La prima comporta la creazione del modello di previsione fornendo un determinato training dataset al classificatore. L’obiettivo è quello di “istruire” la macchina riguardo le regole e gli schemi nascosti all’interno dei dati che determineranno il funzionamento del modello. La seconda prevede l’uso dei dati di test al fine di sfruttare il modello, precedentemente ottenuto, per compiere previsioni, e valutare i risultati ottenuti per studiarne l’efficenza. Tale metodologia è molto comune nel processo di analisi predittiva. I dati possono essere raccolti durante transazioni su siti di e-commerce, tramite appositi form su siti web o, in alternativa, attraverso fonti provenienti da terze parti. Esistono, infatti, organizzazioni il cui unico scopo è quello di analizzare le comunità virtuali ed ottenere informazioni quali gli indici di gradimento nonchè informazioni tecniche e statistiche varie relative ad un particolare prodotto. Usando tali informazioni è possibile costruire un training dataset apposito per la realizzazione dei vari modelli. Esistono varie tecniche per la realizzazione di un modello di previsione. Esse vengono scelte in funzione della problematica da affrontare e prevedono vantaggi e svantaggi. In seguito verranno esaminate alcune delle tecniche più comuni. 3.3.1 Reti Neurali Una rete neurale è un modello il cui funzionamento viene ispirato dall’organizzazione dei neuroni nel cervello umano. Il modello prende tale nome poichè è composto da elementi che rappresentano dei “neuroni artificiali”, i quali imitano matematicamente le proprietà delle cellule cerebrali umane. La definizione di tale modello risale al 1940; tuttavia, in passato, tale modello non ebbe particolare successo. La causa di ciò fu da imputare alle limitate capacità computazionali dell’epoca; con lo sviluppo delle risorse di programmazione distribuita si è potuto assistere, negli ultimi anni, ad un rinnovamento di interesse nei confronti di esso. Essendo ideato e costruito per imitare le capacità umane, tale modello rappresenta il principale elemento di studio di una branchia della disciplina del machine learning chiamata apprendimento approfondito. Le reti neurali vengono largamente utilizzate per la classificazione dei dati. Attraverso il loro utilizzo è possibile analizzare dati passati e presenti per stimare il 52 3 I Modelli di Previsione valore futuro di questi ultimi; inoltre, esse vengono usate per trovare complesse correlazioni nascoste all’interno dei dati. Tutto ciò viene svolto con procedure analoghe a quelle utilizzate dalle cellule del cervello, seppur in maniera molto più semplice. Il principale vantaggio dell’utilizzo di modelli basati su reti neurali consiste nel fatto che essi sono capaci di gestire istanze particolarmente ricche di attributi. Inoltre sono intrinsecamente vantaggiosi quando è necessario collocare i dati di output in più di due gruppi di classificazione. Per spiegare il funzionamento delle reti neurali è utile, per prima cosa, mostrare l’analogia con le cellule cerebrali umane. I neuroni possono essere pensati come una rete di unità computazionali i quali ricevono molti segnali in input parallelamente. Attraverso i dendriti (dendrites) ciascuno di essi riceve dei segnali in input e, a sua volta, trasmette un segnale chimico al soma, cioè il centro del neurone. Tale conversione, da segnale esterno a segnale locale, può essere rappresentata matematicamente attraverso un valore detto peso il quale moltiplica il segnale in input. Quest’ultimo può essere positivo, nel caso di segnali chimici attivatori, o negativo, nel caso di inibitori. Il centro della cellula, o soma (cell soma), raccoglie tutti questi segnali (proporzionali a quelli forniti in ingresso) mediante un processo che può essere assimilato a una somma. Il risultato determina un potenziale che, una volta raggiunta una certa soglia (bias), permette il trasferimento dell’informazione attraverso l’assone (axon). Nella Figura 3.8 vengono mostrate le componenti appena citate. Figura 3.8. Struttura di un neurone Analogamente, una rete neurale è un’interconnessione di nodi chiamati neuroni artificiali. Come nel modello biologico, tali neuroni ricevono in ingresso un valore di input, moltiplicato per un peso, e vengono sommati tra di loro. Tutto ciò viene illustrato, dal punto di vista matematico, nella Figura 3.9. Per rappresentare la soglia oltre la quale il segnale viene inviato, è possibile utilizzare una funzione detta funzione di attivazione. Essa può essere, ad esempio, un gradino unitario g(x) cosı̀ definito: 3.3 Data Classification 53 Figura 3.9. Struttura di un neurone artificiale g(x) = −1, x < 0 1, x ≥ 0 (3.7) L’intero processo può essere riassunto, matematicamente, mediante l’equazione: y = g(w0 + p X wi xi ) (3.8) i=1 La funzione di attivazione appena mostrata rappresenta una delle soluzioni più semplici; tuttavia, il modello può essere implementato attraverso l’utilizzo di più funzioni di soglia. La caratteristica comune di tali funzioni è quella di fornire due possibili valori di output in base al superamento, o meno, di un determinato valore, detto valore di soglia. Una di esse, la funzione sigmoidea, è usata per offrire una variante della tradizionale soglia a gradino della rete neurale. Come mostrato nella Figura 3.10, infatti, tale funzione (dalla forma a “S”) viene utilizzata per diminuire la pendenza della funzione gradino e, quindi, per rendere meno drastico il cambiamento dell’output al superamento della soglia. Implementati in tale maniera, i neuroni artificiali possono essere legati per costruire una complessa rete di elaborazione. Attraverso il meccanismo delle funzioni di soglia, una rete neurale può essere usata per individuare schemi complessi all’interno del dataset in input. Essa è organizzata come internconnessione di neuroni artificiali, distribuiti su più livelli. Essa, inoltre, è un sistema adattivo, cioè che cambia la sua struttura ed i suoi parametri, in base alle informazioni che scorrono attraverso la rete in fase di apprendimento. La funzionalità più interessante dei sistemi come le reti neurali è la loro possibilità di apprendere. Ciò significa modificare il modello, durante una fase di costruzione dello stesso preventiva all’utilizzo vero e proprio, impiegando un set di osservazioni al fine di trovare le funzioni di soglia e i pesi tali da risolvere il problema in maniera ottimale, quindi con meno rumore possibile in uscita. Esistono tre possibili strategie per far si che una rete neurale venga opportunamente istruita: • Paradigma di Apprendimento Supervisionato (supervised learning). Questo metodo viene utilizzato quando si ha a disposizione un training dataset in cui ogni dato è etichettato, e contiene, quindi, una label corrispondente ad uno dei 54 3 I Modelli di Previsione Figura 3.10. Funzione sigmoidea • • possibili valori di output. In presenza di tali esempi di ingressi, con le relative uscite, la rete viene addestrata mediante un opportuno algoritmo detto “di backpropagation”. Quest’ultimo usa tali dati allo scopo di modificare i pesi ed altri parametri della rete stessa in modo da minimizzare l’errore di previsione relativo al training set. Se l’addestramento ha successo, la rete impara a riconoscere la relazione incognita che lega le variabili d’ingresso a quelle d’uscita ed è, quindi, in grado di fare previsioni anche laddove l’uscita non è nota a priori. Ciò consente di risolvere problemi classificazione. Paradigma di Apprendimento non Supervisionato (unsupervised learning). Questo metodo è basato su algoritmi d’addestramento che modificano i pesi della rete facendo esclusivamente riferimento ad un insieme di dati che include le sole variabili d’ingresso. Tali algoritmi tentano di raggruppare i dati d’ingresso e di individuare pertanto degli opportuni cluster rappresentativi dei dati stessi. In presenza di nuove istanze, l’algoritmo cerca di ottenere dei risultati simili a quelli precedentemente ottenuti. Paradigma di Apprendimento per Rinforzo (reinforcement learning). Si tratta di un opportuno algoritmo si prefigge di individuare un determinato comportamento, a partire da un processo d’osservazione dell’ambiente esterno. Ogni azione ha un impatto sull’ambiente, il quale produce una retroazione che guida l’algoritmo stesso nel processo d’apprendimento. Tale classe di problemi viene affrontata attraverso un componente detto agente, dotato di capacità di percezione, che esplora un ambiente nel quale intraprende una serie di azioni. L’apprendimento con rinforzo differisce da quello supervisionato poichè non vengono mai presentate delle coppie input-output di esempi noti. Un classificatore, quale la rete neurale, si dice lineare se tutte le osservazioni, all’interno dello spazio a n-dimensioni che le contiene, possono essere separate in due 3.3 Data Classification 55 o più gruppi distinti attraverso l’uso di un vettore. Quest’ultimo deve essere dato da una combinazione lineare degli stessi parametri che individuano i vari oggetti. Nel caso di spazio n-dimensionale con n > 2 tale vettore è definito iperpiano. Un classificatore, inoltre, si dice non lineare se tali osservazioni possono essere separate da una linea curva, come mostrato in Figura 3.11. Figura 3.11. Classificatore lineare (a sinistra) e non lineare (a destra) → Il vettore − x , che definisce le due aree del classificatore lineare, viene definito vettore delle caratteristiche. Ogni osservazione, corrispondente ad un punto del piano n-dimensionale, può essere individuata come combinazione lineare del vettore delle caratteristiche, le cui componenti vengono moltiplicate per opportuni pesi βn . xo = N X βn xn (3.9) n=1 Tramite la fase di apprendimento, fornendo tali coefficienti βn al modello, quest’ultimo è capace (date le sue caratteristiche) di effettuare il prodotto scalare tra il vettore di osservazione ed il vettore dei pesi, fornendo un vettore osservazione. Esso può, attraverso la funzione di soglia, essere ulteriormente associato a un punteggio di uscita (il quale può essere un ulteriore parametro dell’osservazione stessa) che ne determina l’appartenenza a un particolare gruppo e rappresenta, quindi, il parametro di output. In questo modo è possibile realizzare un classificatore lineare attraverso una rete neurale. Per ottenere un classificatore non lineare è necessario implementare una rete lineare a più livelli, ciascuno dei quali definisce un vettore. Questi ultimi formeranno una linea spezzata la quale definirà il percorso che separa le due aree. Le reti neurali sono caratterizzate da un’elevata precisione, perfino nel caso in cui i dati in input presentano molto rumore. Ciò rappresenta un vantaggio molto interessante, soprattutto quando in presenza di valori erronei non sarebbe possibile utilizzare altrimenti determinati dati. Il prezzo da pagare, in cambio di tale affidabilità, consiste nel dover ripetere spesso la fase di apprendimento. La precisione della previsione, infatti, è costante solo in un breve periodo di tempo in seguito all’utilizzo del training dataset. 56 3 I Modelli di Previsione 3.3.2 Support Vector Machine Le Support Vector Machine (SVM), o macchine a vettori di supporto, costituiscono un insieme di metodi di apprendimento supervisionato. Sviluppati negli anni ’90 da Vladimir Vapnik ed il suo team presso i laboratori Bell AT&T, rappresentano una delle tecniche più utilizzate per risolvere problemi di classificazione. In molti casi, le SVM sono dei modelli di classificazione binari, ossia in cui i dati in questione contengono due possibili valori di restituzione. Le reti neurali ad un solo strato hanno un algoritmo di apprendimento efficiente, ma sono utili soltanto nel caso di dati linearmente separabili. Viceversa, le reti neurali multistrato possono rappresentare funzioni non lineari, ma sono difficili da addestrare a causa dell’alto numero di dimensioni dello spazio dei pesi. La tecnica di addestramento SVM risolve entrambi i problemi: presenta un algoritmo efficiente ed è in grado di rappresentare funzioni non lineari complesse. Per illustrare il funzionamento dell’algoritmo SVM è bene introdurre prima il concetto di margine. I margini sono le distanze perpendicolari zn che intercorrono tra un iperpiano e ogni elemento appartenente all’n-esimo gruppo. Come mostrato in Figura 3.12, il margine migliore è quello maggiore tra tali distanze. Figura 3.12. Due diversi margini Scegliendo l’iperpiano in modo da ottenere il margine più grande, infatti, è possibile definire al meglio le aree corrispondenti ad ogni gruppo, anche in presenza di valori marginali. Nell’esempio illustrato, l’iperpiano migliore è costituito dalla linea verde. → L’obiettivo dell’algoritmo, quindi, è quello di individuare il vettore − x migliore che permetta di definire la linea di separazione tra i cluster. Si vuole ottenere l’equazione dell’iperpiano come funzione lineare delle stesse caratteristiche di ingresso: 3.3 Data Classification 57 → → → G(− x) =− ω− x + ω0 (3.10) − → dove x = (x1 , x2 , ..., xn ) è un generico vettore dello spazio n-dimensionale degli → attributi e − ω è il vettore dei pesi (l’incognita del problema). Come ulteriore ipotesi, → si vuole imporre che il valore della funzione G(− x ) sia ≥ 1 se il punto appartiene al primo dei due cluster, e ≤ −1 se esso appartiene al secondo. → Il vettore G(− x ) è mostrato in Figura 3.13. Figura 3.13. Vettore delle caratteristiche in uno spazio a 2 dimensioni Per entrare nel dettaglio del meccanismo dell’algoritmo SVM si considerino due punti dello spazio da classificare: x1 = (1, 1) e x2 = (2, 3). Uno dei possibili metodi per stabilire la soglia tale da garantire il margine migliore tra i due è calcolare la distanza media misurando la differenza tra i coefficienti dei due vettori. Il vettore dei pesi che definirà l’iperpiano avrà coefficienti: − → ω = (2, 3) − (1, 1) = (α, 2α) (3.11) Si osserva, quindi, che la seconda componente dovrà essere doppia rispetto alla prima. In questo modo, le due distanze perpendicolari, tali da congiungere i punti x1 e x2 con l’iperpiano, saranno esattamente uguali. Tale situazione è mostrata in Figura 3.14. → Sostituendo a G(− x ) il punto x1 appartenente al primo cluster si avrà: → G(− x ) = α + 2α + ω0 = 1 (3.12) sostituendo il punto x2 appartenente al secondo cluster si avrà: → G(− x ) = 2α + 6α + ω0 = −1 Considerando w0 come incognita dell’Equazione 3.13, si ha che: (3.13) 58 3 I Modelli di Previsione Figura 3.14. Calcolo dell’iperpiano che fornisce il margine migliore ω0 = 1 − 8α (3.14) Sostituito questo valore nell’Equazione 3.12, si ha: 3α + 1 − 8α = −1 5α = 2 2 α= 5 (3.15) − Tramite α è possibile, finalmente, ottenere il vettore dei pesi → ω , il quale sarà: 2 4 − → ω =( , ) (3.16) 5 5 Tale vettore è detto support vector. Tramite il prodotto scalare del support vector con uno degli elementi del dataset è possibile ottenere un valore che indica l’appartenenza di tale elemento al primo cluster (se il valore ottenuto risulta essere ≥ 1) o al secondo (se il valore ottenuto è ≤ −1). Tale metodologia costituisce l’algoritmo Support Vector Machine. Il metodo appena illustrato si presta a essere usato come tecnica di classificazione in quei casi in cui le possibili classi di uscita sono due (classificazione binaria). Anche in presenza di oggetti con molti attributi, tale metodo resta un’efficace strategia che restituisce risultati affidabili con il minor errore possibile. Come per le reti neurali, le support vector machine devono essere opportunamente impostate in modo da trovare l’iperpiano che presenti la distanza maggiore da ogni elemento dell’area. Tale separatore viene individuato attraverso l’analisi del training dataset. Una possibile applicazione del SVM è la classificazione delle immagini (image recognition). Un’immagine delle dimensioni di 100 × 100 pixel, infatti, può essere 3.3 Data Classification 59 considerata come un elemento di un vettore appartenente al campo ℜ10000 , dove ogni attributo rappresenta il valore di ogni pixel. Supponendo di avere due possibili tipi di immagini in output, questo scenario rappresenta un campo di applicazione ideale per le support vector machine. Dopo aver definito l’iperpiano nello spazio a 10000 dimensioni, sarà possibile realizzare un modello che consenta di categorizzare un’immagine come appartenente a una delle due categorie prima ancora che l’immagine stessa venga osservata. 3.3.3 Alberi di decisione I metodi di classificazione basati sugli alberi rappresentano il metodo più intuitivo per la creazione di un modello predittivo. In particolare, un albero di decisione è un modello con una struttura lineare il quale permette di fare previsioni sul possibile valore di una variabile di output. La scelta del valore di uscita è basata su una serie di regole distribuite su una struttura ad albero. Gli alberi di decisione sono costituiti da una serie di biforcazioni chiamate nodi. Per prendere una decisione utilizzando un albero è necessario partire dal nodo radice (root node), cioè il punto di partenza dell’albero. A partire da quest’ultimo, per ogni nodo interno (inner node) o esterno (outer node), i valori forniti in input vengono sottoposti a varie decisioni. In base all’esito del confronto si procede a sinistra o a destra del nodo, fino a raggiungere i nodi foglia (leaf nodes) che costituiscono i valori di decisione finali. Un esempio di tale processo è illustrato in Figura 3.15. Figura 3.15. Albero di decisione Per ogni nodo viene implementato un costrutto if-else. Il risultato di ogni decisione viene fornito ai nodi successivi, e il processo prosegue fino a quando i dati arrivano ai nodi foglia. Questi ultimi forniscono il risultato vero e proprio. Per illustrare il funzionamento di un albero di decisione è utile mostrare un esempio pratico [7, pag.123]. Si supponga di voler prevedere il successo di tre possibili investimenti finanziari: un ristorante, un’azienda di trasporti, un negozio di libri. In casi come quest’ultimo emerge l’ausilio dei metodi statistici al fine di condurre un processo di previsione. Da un’intervista con un esperto del settore, il quale si avvale proprio di tali metodi, emerge che la possibilità di successo del primo investimento 60 3 I Modelli di Previsione è stimata intorno al 52%, la possibilità di successo del secondo investimento è pari al 60%; infine, la possibilità di successo del terzo investimento è pari al 50%. Per ogni eventualità, inoltre, l’esperto del settore calcola le possibili perdite ed i guadagni. Tale situazione può essere descritta attraverso l’uso di un albero di decisione, come mostrato in Figura 3.16. Figura 3.16. Albero di decisione per la previsione dell’esito di un investimento In questo modo nei nodi foglia apparirà ogni possibile esito. Un albero di decisione può essere utilizzato per avere un quadro completo su tutti i possibili sviluppi di un evento e, quindi, scegliere l’alternativa più vantaggiosa, minimizzando i rischi. A ogni foglia può essere associato un valore detto valore atteso; in generale, il valore atteso di una variabile casuale discreta (che assuma, cioè, solo un numero finito o una infinità numerabile di valori) è dato dalla somma dei possibili valori di tale variabile, ciascuno moltiplicato per la probabilità di essere assunto (ossia di verificarsi). Nell’esempio della scelta del business più remunerativo, esso è dato dalla somma dei possibili guadagni, o perdite, ciascuno moltiplicato per la probabilità che tale evento si realizzi. Si avranno, cioè, i seguenti valori: valore atteso dell’investimento nel ristorante: 52% · 40, 000$ + 48% · (−21, 000$) = 10, 720$ (3.17) valore atteso dell’investimento nell’azienda di trasporti: 60% · 20, 000$ + 40% · (−7, 000$) = 9, 200$ (3.18) valore atteso dell’investimento nel negozio di libri: 50% · 6, 000$ + 50% · (−1, 000$) = 2, 500$ (3.19) Si può concludere, quindi, che l’investimento che garantirà i risultati migliori sarà quello del ristorante. Tale conclusione rappresenta una previsione sulla strategia che condurrà al profitto maggiore. Gli alberi di decisione rappresentano uno strumento indispensabile per affrontare quella categoria di problemi in cui è necessario scegliere l’alternativa che permette di minimizzare i rischi (problemi di decision-making). 3.4 Metodi Probabilistici 61 Essi, inoltre, possono essere usati come strumento di classificazione. In tale senso, ogni foglia può rappresentare una diversa classe e in ogni nodo interno vengono prese delle decisioni sugli attributi forniti in input, le quali influenzano la classificazione finale dell’istanza. Come per tutti gli altri modelli visti finora, dopo essere stato opportunamente creato, l’albero di decisione permette di compiere delle scelte su istanze di dati mai viste prima. Come altri modelli, inoltre, l’albero deve essere istruito riguardo ai criteri che determinano le varie scelte su ogni nodo. Esistono diversi algoritmi per la costruzione di un albero di decisione. In particolare, per ogni nodo (incluso il nodo radice), tale algoritmo deve determinare quali sono le caratteristiche di input e come esse forniranno il valore di uscita; successivamente, sempre per ogni nodo, è necessario decidere se dovrà rappresentare una foglia o, in alternativa, dovrà essere uno dei nodi interni. Per ultimo, sarà necessario stabilire la profondità dell’albero e, una volta giunti ai nodi foglia, cosa dovranno rappresentare i valori attesi. 3.4 Metodi Probabilistici Il calcolo delle probabilità considera fenomeni osservabili esclusivamente dal punto di vista della possibilità o meno del loro verificarsi. La probabilità di un evento X è un valore numerico. Tale valore può essere calcolato dividendo il numero di volte in cui avviene l’evento X per il numero massimo di possibili eventi che possono verificarsi nelle stesse circostanze. Gli algoritmi che verranno, adesso, analizzati si basano sul calcolo delle probabilità e su un teorema molto importante ai fini di tale disciplina, ovvero il teorema di Bayes. Si considerino due possibili eventi A e B. Si supponga che, ad esempio [10, 250], il primo consista nel fatto che un paziente sia affetto da appendicite, mentre, il secondo indichi che lo stesso paziente presenti un alto livello di globuli bianchi nel sangue. Il teorema di Bayes si propone di calcolare la probabilità P (A) del verificarsi dell’evento A in seguito al verificarsi dell’evento B (con probabilità P (B)). Si dimostra che, data la probabilità P (B)) del verificarsi di B) e la probabilità P (A ∩ B) del verificarsi di entrambi gli eventi, il valore che indica la probabilità dell’evento A) (detto evento condizionato) è data da: P (A ∩ B) (3.20) P (B) Il teorema permette di stabilire la probabilità del verificarsi di un evento non direttamente osservabile (quale, ad esempio, la presenza di un’appendicite) attraverso il valore della probabilità di un evento osservabile (quale l’innalzamento dei globuli bianchi). In altri termini, tale teorema si presta perfettamente alla costruzione di un modello di previsione, in quanto permette di stimare la causa osservando l’effetto. Data la conoscenza del teorema di Bayes è possibile esaminare alcuni dei più comuni algoritmi di previsione i quali ne sfruttano le potenzialità. P (A|B) = 3.4.1 Naive Bayes Classification Tecnica tipica delle pratiche di machine learning, esso fa parte delle tecniche probabilistiche di classificazione. Come altri modelli già visti, impiega dati che hanno la 62 3 I Modelli di Previsione forma di vettori di caratteristiche. Esistono diversi tipi di algoritmi per realizzare un simile modello, ma tutti presentano particolari caratteristiche in comune. Le componenti dei vettori delle varie osservazioni (cioè i dati impiegati per affrontare il problema), usati da tali algoritmi, sono variabili aleatorie. Tali variabili possono assumere diversi valori con una ben determinata probabilità. Caratteristica comune ai diversi algoritmi che implementano il modello Naive Bayes è che tali variabili casuali sono tutte indipendenti tra di loro. Due o più variabili, le quali possono assumere una serie di possibili valori in dipendenza da un fenomeno casuale osservato, si dicono indipendenti tra di loro se nessuno di tali eventi influenza lo svolgersi dell’altro. Il modello Naive Bayes viene usato in quei contesti in cui è possibile osservare una serie di fenomeni indipendenti tra di loro e, quindi, di stimare la probabilità di ognuno di essi. Per mostrarne direttamente le capacità è utile fare alcuni esempi dei possibili elementi di un vettore osservazione, relativamente ai dati raccolti su un gruppo di clienti i quali hanno acquistato un determinato prodotto X. Si vuole usare tali dati per prevedere il livello di successo di tale prodotto nel prossimo futuro e, di conseguenza, adattare le proprie strategie di marketing. Le componenti C, X1 , X2 , ..., Xn del vettore osservazione relativo a un cliente C possono rappresentare dei fenomeni direttamente osservabili. Verrà indicato, ad esempio, con X1 il sentimento del cliente nei confronti di un prodotto (positivo o negativo), con X2 il fatto che egli abbia acquistato, o meno, prodotti simili, e con X3 la valutazione del suo merito di credito (affidabile o insolvente). Ognuna di tali variabili assume, come appena mostrato, un valore discreto del quale può essere calcolata la probabilità. Le tre variabili sono, rispettivamente, P (X1 = valutazionepositiva), P (X2 = nonacquistatoprodottisimili)eP (X3 = af f idabile). In questo modo vengono riportate, matematicamente, le probabilità relative a ciascuno dei fenomeni osservati. Come altri già visti, infatti, il modello Naive Bayes utilizza dati storici per realizzare una previsione sul futuro. Tali dati vengono analizzati tramite il teorema di Bayes. Quest’ultimo permette di calcolare la probabilità che il prodotto X venga acquistato dal cliente C, date le caratteristiche X1 , X2 , ..., Xn di quest’ultimo. Matematicamente: P (C|X1 ∩ X2 ∩ Xn ) = P (X1 ∩ X2 ∩, ..., ∩Xn |C) · P (C) P (X1 ∩ X2 ∩, ..., ∩Xn ) (3.21) dove P (C) è la probabilità che il prodotto venga acquistato, X1 ∩ X2 ∩, ..., ∩Xn rappresenta l’intersezione delle probabilità degli eventi X1 , X2 , ..., Xn e P (X1 ∩ X2 ∩ Xn |C) rappresenta la probabilità che, dato il verificarsi delle Xn condizioni, il prodotto C venga acquistato. Quest’ultimo rappresenta l’unica incognita del problema. Si può osservare, infatti, come tutti gli altri termini dell’espressione rientrino nella categoria dei dati direttamente osservabili e fanno, quindi, parte delle informazioni storiche raccolte per la costruzione del modello, cioè il training dataset. Per il calcolo dell’ultimo termine è bene usufruire delle definizioni messe a disposizione dalla statistica. L’intersezione di più eventi X1 ∩ X2 ∩ Xn è definita come l’evento che si verifica se si verificano contemporaneamente X1 , X2 , ..., Xn . Attraverso l’ipotesi di indipendenza delle variabili è possibile usufruire del teorema della 3.4 Metodi Probabilistici 63 probabilità composta per il calcolo dell’incognita. Tale teorema afferma che, per eventi indipendenti tra di loro, la probabilità dell’evento intersezione di più eventi indipendenti è data dal prodotto delle probabilità dei singoli eventi. Cioè: P (X1 ∩ X2 ∩ Xn ) = P (X1 ) · P (X2 ) · ... · P (Xn )) (3.22) Applicando tale teorema all’Equazione 3.21 si ha che: P (C|X1 ∩ X2 ∩, ..., ∩Xn ) = P (X1 |C) · P (X2 |C) · ... · P (Xn )|C)|C) · P (C) (3.23) P (X1 ∩ X2 ∩, ..., ∩Xn ) I termini P (X1 |C) · P (X2 |C) · ... · P (Xn )|C), come già detto, sono direttamente osservabili, in quanto rappresentano la probabilità che il prodotto C sia stato acquistato, condizionata dal verificarsi dell’n-esima osservazione Xn . Attraverso tali considerazioni è possibile calcolare la probabilità che un elemento (nell’esempio, un cliente), etichettato come C e con X1 , X2 , ..., Xn caratteristiche, compia una determinata azione. La probabilità P (C|X1 ∩ X2 ∩, ..., ∩Xn ) è definita probabilità a priori, in quanto viene assegnata dopo aver preso in esame le informazioni più rilevanti raccolte. Per ottenere un classificatore sfruttando tale risultato è possibile indicare una serie di classi di uscita Ci . Identificando, ad esempio, ogni classe come un potenziale cliente, o un gruppo di essi, sarà possibile prevedere l’esito di una decisione di acquisto scegliendo la classe alla quale verrà associata la probabilità maggiore. Si può osservare, infine, che per massimizzare la probabilità a priori di una classe è necessario massimizzare esclusivamente il numeratore (in quanto, come è possibile vedere dalla formula del teorema di Bayes, il denominatore è indipendente dalla classe specifica). Per tale motivo, l’esito della previsione può essere indicato mediante la formula: " !# n Y Ci = max P Ci · P (Xn |Ci 1) (3.24) n=1 3.4.2 Il Modello di Markov Tale processo prende il nome dal matematico russo Andrej Andreevic Markov che, per primo, ne sviluppò la teoria. Modelli di tipo markoviano trovano applicazione in molti ambiti, dalla progettazione di reti di telecomunicazione all’analisi predittiva. Un modello costruito attraverso un processo di tale genere si basa su un presupposto, cioè l’ipotesi di Markov. Quest’ultima può essere riassunta in questo modo: la probabilità del verificarsi di un evento futuro, calcolata osservando n eventi passati, è pressappoco uguale alla probabilità del verificarsi dello stesso evento, calcolata osservando solo l’evento passato più recente. Tale ipotesi può essere scritta matematicamente in questo modo: P (eventon |eventon−1 , eventon−2 , ..., evento1 ) ≈ P (eventon |eventon−1 ) (3.25) 64 3 I Modelli di Previsione In sintesi, l’ipotesi di Markov indica che non è necessario ricorrere a dati storici troppo datati per prevedere lo svolgersi di un evento futuro. Se un evento è condizionato da un solo fenomeno già avvenuto si parla di approssimazione di Markov di primo ordine, se vengono considerati due fenomeni si parla di approssimazione di secondo ordine, e cosı̀ via. Tale enunciato può essere applicato al calcolo di una probabilità condizionata tramite l’uso del teorema di Bayes. Dato un evento X1 , condizionato da una serie di fenomeni osservati X2 , X3 , Xn (dei quali se ne conosce la probabilità), è possibile ottenere un’approssimazione di primo livello: P (X1 |X2 ∩ X2 ∩ Xn ) = P (X1 ∩ X2 |X1 ) · P (X1 ) P (X1 ∩ X2 ) (3.26) Il processo di Markov descrive una serie di eventi, calcolati tramite il metodo appena esposto. Ciascuno di tali eventi rappresenta lo stato di uno spazio degli stati discreto di un sistema. Il passaggio da uno stato all’altro viene descritto dalla probabilità di uno stato di assumere un altro valore tra quelli possibili, ed è, perciò, condizionata da questi ultimi. Si può, ad esempio, considerare un sistema a tre stati possibili X1 , X2 , X3 , dove il passaggio ad un nuovo stato è condizionato dagli stati precedenti. Sotto l’ipotesi di Markov, tuttavia, è possibile calcolare la probabilità di uno dei tre considerando esclusivamente il precedente stato più recente. Cosı̀, lo stato X1 potrà diventare lo stato X2 , lo stato X3 , o tornare a essere di nuovo X1 . La transizione tra questi ultimi avviene con una probabilità che può essere determinata tramite il teorema di Bayes. Una situazione simile può essere descritta attraverso l’uso di un grafo orientato. Un grafo è un insieme di elementi detti nodi (o vertici) che possono essere collegati fra loro da linee chiamate archi. Un arco orientato è un arco caratterizzato da una direzione. Il grafo, inoltre, è detto pesato se ad ogni arco è associato un peso o costo (cioè un valore numerico). Ogni stato del processo markoviano viene rappresentato da un elemento del grafo. Le transazioni vengono mostrate dagli archi, i cui pesi ne indicano la probabilità. Tale schema viene mostrato nella Figura 3.17. Figura 3.17. Catena di Markov a tre stati 3.5 Recommendation Systems 65 Un grafo cosı̀ definito viene chiamato catena di Markov. Esso può essere interpretato affermando che la probabilità che un sistema passi dallo stato X1 allo stato X2 è del 35%, mentre la probabilità di restare allo stato X2 è del 60%. Molti modelli si basano sulla teoria di processi markoviani. Tra questi, l’algoritmo di link analysis ranking PageRank, utilizzato da Google, percorre il grafo del web e analizza gli archi uscenti e gli archi entranti delle pagine associando un valore sulla base del quale si effettua l’ordinamento del motore di ricerca. Esso sfrutta la conoscenza offerta dal modello di Markov per determinare tale valore sulla base di quale sito (stato del grafo) si prevede che verrà maggiormente visitato. Un modello di Markov viene definito nascosto se gli stati precedenti, i quali condizionano quello futuro, sono sconosciuti, cioè non osservabili direttamente. Ogni stato genera un evento con una certa distribuzione di probabilità che dipende solo da esso; inoltre, l’evento è osservabile ma lo stato no. Come ogni modello di Markov, ogni stato è indipendente dagli altri; inoltre, le osservazioni sono indipendenti tra di loro. Per la costruzione di tale modello vengono forniti in ingresso, oltre agli eventi osservati, tre vettori. Il primo contiene, per ogni possibile stato, un elemento che rappresenta la probabilità di trovare tale stato nella condizione di partenza. Il secondo contiene la probibilità che ogni stato Xn ha di passare allo stato Xn+1 . L’ultimo vettore contiene la probabilità, di ogni stato, di generare un determinato evento. Anche in questo caso il modello deve essere “addestrato” a ottenere tali vettori di probabilità tramite una fase di preparazione usando il training dataset composto da dati precedenti. In un modello di Markov nascosto è possibile ottenere diversi risultati in uscita, tra questi la probabilità del verificarsi di un particolare evento o di una sequenza di aventi. Queste ultime probabilità vengono calcolate usando il teorema di Bayes. Una volta ottenuti i parametri appena citati, è possibile risolvere diversi problemi costruendo il modello attraverso l’uso di particolari algoritmi. Data, ad esempio, una sequenza di eventi in ingresso è possibile trovare la sequenza di stati più probabile che potrebbe generare tale sequenza; questo problema viene risolto dall’algoritmo di Viterbi. Attraverso un algoritmo detto algoritmo forward-backward, inoltre, è possibile trovare la probabilità di una particolare sequenza di eventi. Le possibilità offerte dal modello di Markov nascosto sono molteplici. Per tale motivo esso viene utilizzato in molti campi; tra questi, l’analisi predittiva. Nella seconda metà degli anni ottanta si è cominciato ad applicare l’algoritmo all’analisi delle sequenze biologiche; da allora questa metodologia è diventata di grande aiuto nella predizione delle regioni codificanti nella sequenza del genoma umano e nella previsione degli elementi secondari della struttura dalle sequenze primarie delle proteine. 3.5 Recommendation Systems Nell’insieme dei modelli usati per la realizzazione di previsioni è necessario dare spazio a quelli usati per i sistemi di raccomandazione o recommendation system. Tali sistemi si occupano di fornire agli utenti consigli personalizzati riguardo un set di oggetti appartenenti ad uno specifico settore. 66 3 I Modelli di Previsione Formalmente, è possibile esprimere il problema delle raccomandazioni introducendo alcuni concetti. Sia A l’insieme degli n utenti del sistema, inoltre, sia B l’insieme degli m oggetti che possono essere raccomandati. Si definisce u : A × B → R una funzione definita sul prodotto cartesiano A × B la quale associa un indice di gradimento a ogni coppia utente-prodotto. Tale indice indica una valutazione (numerica) che un utente ha assegnato o assegnerebbe ad un oggetto. Date queste definizioni, compito del recommendation system è scegliere, per ciascun oggetto in A, l’elemento in B tale da massimizzare la funzione u per la coppia. Il problema di tali sistemi è che non sempre u è definita per ogni elemento del prodotto cartesiano A × B, in quanto non sempre un utente esprime il proprio parere su un determinato prodotto. Parte degli obiettivi dei recommendation system consiste nel prevedere i valori della funzione di utilità u anche nella parte dello spazio dei dati in cui essa non è definita. In altre parole, l’obiettivo è fare una predizione sul voto che un determinato utente darebbe ad un oggetto del sistema che non ha ancora valutato. I diversi sistemi di raccomandazione predicono voti sconosciuti a partire da quelli conosciuti. In genere, essi sfruttano enormi quantità di dati per determinare l’indice di gradimento sconosciuto attraverso l’uso di diversi algoritmi. In base alla tecnica utilizzata è possibile suddividere i sistemi di raccomandazione nelle seguenti tre categorie: • • Sistemi basati sul filtraggio collaborativo. Per filtraggio collaborativo (collaborative filtering) si intende una classe di strumenti che consentono il recupero di informazioni predittive relativamente agli interessi di un insieme di utenti. Le tecniche di collaborative filtering si basano sulla raccolta e l’analisi di una grande quantità di informazioni sugli utenti; quindi, usano queste ultime per prevedere le loro preferenze basandosi sulle similitudini che essi presentano con altri utenti. Tali tecniche, inoltre, assumono che ogni utente, il quale ha mostrato interesse verso un determinato prodotto, continuerà a mostrarlo anche in futuro. Tra gli algoritmi usati per determinare le similitudini tra utenti vi è l’algoritmo K-Nearest Neighbor già visto. I dati collezionati, riguardanti le preferenze degli utenti, possono essere raccolti tramite sondaggi, osservando gli oggetti acquistati e visualizzati, analizzando le opinioni dei clienti all’interno di forum o social network, etc. Una volta individuati i gruppi di utenti simili, l’algoritmo costruisce un modello il quale mostra gli oggetti che i clienti che non hanno ancora acquistato potrebbero preferire. Uno degli esempi più interessanti di filtraggio collaborativo è rappresentato dall’uso che ne fanno alcune famose piattaforme sul Web, come Amazon, Facebook e Twitter. Il primo usa tali metodi di raccomandazione per consigliare vari oggetti in vendita ai potenziali clienti. Gli ultimi due utilizzano tali strumenti per raccomandare nuovi amici o gruppi di potenziale interesse a ogni utente. Sistemi basati sul filtraggio dei contenuti. Ulteriore approccio sul quale si basano i sistemi di raccomandazione, è il content-based filtering. Un sistema di tale genere sfrutta le similitudini tra gli oggetti acquistati in passato, da un determinato utente, per fare previsioni sugli oggetti che egli potrebbe gradire in futuro. Dopo aver creato il profilo di un oggetto (cioè, dopo averne definito gli attributi) vengono usati algoritmi di classificazione, come gli alberi di decisione o la rete 3.5 Recommendation Systems 67 neurale, per includere gli oggetti non ancora acquistati da un utente in gruppi contenenti oggetti già acquistati. Il giudizio dei clienti può essere usato per dare un maggiore o minore peso a ogni attributo. Anche sistemi di questo genere trovano largo utilizzo tra le più comuni piattaforme all’interno del Web. • Sistemi di raccomandazione ibridi. Recenti ricerche hanno dimostrato che un approccio ibrido, il quale combina le tecniche utilizzate dai sistemi basati sul filtraggio collaborativo con quelli basati sul filtraggio dei contenuti, risulta essere particolarmente vantaggioso in alcuni casi. Le due strategie possono essere implementate separatamente o attraverso lo stesso modello. Esistono diversi approcci per realizzare un sistema di raccomandazione ibrido. Alcuni di essi prevedono la combinazione dei risultati di diversi sistemi i quali lavorano parallelamente. Altri prevedono di lavorare sugli attributi usati da diversi sistemi per fornire un unico risultato. In altri approcci a cascata i risultati di un primo modello, costruito da un sistema, vengono usati come input per un altro modello, costruito da un secondo sistema. La piattaforma più nota per l’utilizzo di un sistema ibrido è Netflix. 4 Analisi della Regressione In questo capitolo continua la trattazione dei modelli adottati dall’analisi predittiva. In particolare, verranno analizzati i metodi di regressione. Mentre i modelli visti fino ad ora fornivano una risposta qualitativa, i metodi di regressione, provenienti dall’analisi statistica, mirano a determinare una valutazione quantitativa, a partire da variabili indipendenti facenti parte di vettori osservazione per l’addestramento del modello. Essi rivestono un’importanza fondamentale in quanto largamente utilizzati in diversi ambiti. 4.1 I Modelli di Regressione I modelli esaminati nel capitolo precedente coprono alcune delle più importanti categorie di modelli tra quelli fondamentali per l’analisi predittiva. Esiste un gruppo di essi, non ancora mostrato, il quale rientra nella categoria dei modelli indispensabili alla risoluzione dei più tipici problemi che richiedono la previsione di eventi futuri. Tale categoria è quella dei modelli di regressione. Quest’ultimi vengono realizzati attraverso tecniche definite dallo studio dell’analisi della regressione. La differenza fondamentale tra il modello appena citato e un modello di classificazione risiede nella differente tipologia di dati in output che si sta cercando di prevedere. I modelli di classificazione tentano di ricondurre l’esito della decisione a valori predeterminati, appartenenti a un insieme finito (anche se spesso molto grande). I modelli di regressione non fanno previsioni su un insieme di possibili valori già esistenti, ma tentano di prevedere dei valori numerici o quantitativi. Tale distinzione non è sempre valida in quanto alcuni modelli, come, ad esempio, le reti neurali, sono capaci di fornire entrambi i tipi di risultati. In generale, la regressione è una tecnica utilizzata per analizzare una serie di dati costituiti da una variabile dipendente e una, o più, variabili indipendenti (cioè osservabili). Il modello che rappresenta il fenomeno da prevedere è chiamato equazione di regressione. Essa è funzione delle variabili indipendenti, a meno di un termine di errore il quale è rappresentato da una variabile aleatoria. Quest’ultima rappresenta una variazione non prevedibile della variabile di uscita. Come per altri modelli di previsione, affrontare un problema di regressione non richiede la conoscenza dei processi con i quali vengono generati i dati. Al contrario 70 4 Analisi della Regressione di altri modelli visti finora, tuttavia, al fine di determinare un modello di regressione è necessario conoscere alcune informazioni riguardo la possibilità che ha il termine di errore di assumere determinati valori. Tale informazione è chiamata distribuzione di probabilità ed è definita come un modello matematico il quale collega i valori di una variabile aleatoria alle probabilità che tali valori possano essere osservati. Dati i valori di ingresso e la distribuzione di probabilità è possibile determinare i parametri che permettono al modello di realizzare previsioni accurate. Secondo l’opinione degli esperti del settore [8, pag.75], i modelli di regressione rappresentano la forza dominante nei moderni processi di decisione. 4.2 Regressione Lineare Semplice e Multipla Come appena illustrato, un modello di previsione basato sulla regressione tenta di prevedere dei valori numerici. Il più semplice, ma anche il più comune, tra i modelli di regressione è il modello di regressione lineare. Esso restituisce il valore di una variabile dipendente yo in funzione di una combinazione lineare delle variabili indipendenti x1 , x2 , xn : yo = β1 x1 + β2 x2 + ... + β0 + ε (4.1) dove x1 , x2 , xn sono i valori in ingresso (cioè le variabili indipendenti) i quali formano il vettore osservazione xn . Il simbolo ε rappresenta il termine d’errore e β1 , β2 , β0 rappresentano i parametri del modello. Quest’ultimi sono chiamati coefficienti di regressione e devono essere determinati durante la fase di “addestramento” del modello. Una volta ottenuti i parametri βn , è possibile realizzare una previsione sostituendo gli attributi di ingresso nel modello. Il valore di β0 , inoltre, rappresenta il risultato della previsione in assenza di attributi in input. Gli ulteriori valori di β possono essere interpretati come il rapporto tra i valori delle variabili in ingresso e i valori delle variabili in uscita; ciò significa che questa quantità è indicativa del cambiamento che ci si aspetta da ognuno di tali attributi per ogni incremento di un’unità di questi ultimi. Un modello di regressione lineare può essere rappresentato in uno spazio a n dimensioni, dove n è il numero di valori indipendenti. Un semplice modello, il quale utilizza dati con un solo attributo, può essere illustrato nello spazio cartesiano. In questo modo, in ascissa, saranno riportati i valori della variabile indipendente x1 e, in ordinata, i valori della variabile di uscita yo ; tale esempio è mostrato in Figura 4.1. I risultati di un modello di questo genere formano una retta. Il valore di β1 rappresenta la pendenza della retta, mentre, il valore di β0 rappresenta il punto in cui quest’ultima interseca l’asse delle ordinate. Il caso appena mostrato, in cui è presente un solo attributo in ingresso, determina un modello di regressione lineare semplice. Nei casi in cui sono presenti due o più variabili indipendenti xn il modello viene detto di regressione lineare multipla. Al fine di definire un modello semplice è necessario imporre alcune condizioni le quali semplificano la valutazione dei coefficienti di regressione. Per ogni variabile 4.2 Regressione Lineare Semplice e Multipla 71 Figura 4.1. Modello di regressione lineare casuale (quale la variabile ε) è possibile definire le quantità media e varianza. La prima è definita come la media degli n campioni osservati da una variabile aleatoria, pesata dalla probabilità di osservare tale campione. Per una distribuzione discreta di variabili aleatorie la media sarà: E(X) = ∞ X Xi · P (Xi ) (4.2) i=−∞ Per una variabile aleatoria a valori continui sarà: Z ∞ E(X) = Xi · P (Xi )dX (4.3) i=−∞ La varianza (associata ad una variabile aleatoria) è la misura della variabilità dei valori assunti dalla variabile. Nello specifico, tale grandezza misura quanto essi si discostino quadraticamente dal valore atteso. Essa è definita come il valore atteso del quadrato della variabile aleatoria X a cui viene tolto il suo valor medio: σ 2 = E[(X − E[X])2 ] (4.4) Un basso valore di varianza indica che la maggior parte dei valori assunti da una variabile aleatoria non differisce di molto rispetto al valore medio. Per ultima, si definisce covarianza la misura della correlazione tra due variabili. Una covarianza positiva indica una correlazione in cui, all’aumentare di una delle due variabili, aumenta anche l’altra. Al contrario, una covarianza negativa indica il diminuire di una variabile al decrementare dell’altra. Nel caso in cui due variabili siano statisticamente indipendenti, il valore della covarianza risulta essere nullo. Matematicamente essa è definita come la media del prodotto tra le varianze delle due variabili aleatorie X e Y: σX,Y = E[(X − E[X]) · (Y − E[Y ])] (4.5) 72 4 Analisi della Regressione Tali quantità sono ben definite per ogni modello di regressione lineare. In particolare si assume per ipotesi che, per n osservazioni (ossia i vettori xn delle variabili indipendenti x1 , x2 , xn , costituiti da un solo elemento nel caso semplice), la quantità εn sia sempre, per ogni osservazione, una variabile aleatoria a media pari a zero e varianza costante. Quest’ultima ipotesi è nota come ipotesi di omoschedasticità. In tale contesto, inoltre, l’errore εn associato ad una osservazione è statisticamente indipendente dall’errore associato ad ogni altra osservazione, ossia due εn qualsiasi hanno covarianza nulla. Ciò è impensabile in uno scenario reale dove, spesso, l’errore è dovuto ad un’imperfezione sistematica della misurazione, durante la quale un’osservazione può essere funzione di un’altra. La variabile ε rappresenta l’errore irriducibile al quale è sottoposto l’esito della previsione. Tale errore può essere dovuto a problemi di misurazione degli attributi in input non prevedibili. A causa della presenza di quest’ultimo, i valori riportati lungo gli assi cartesiani non cadranno sulla retta di partenza ma, invece, risulteranno discostati da essa. Anche in presenza di misurazioni molto precise ci si aspetta una certa quantità di errore e, dunque, i punti non formeranno una linea ben definita. Nello scenario ideale appena descritto, tuttavia, a causa della media a valore nullo e della varianza costante, è possibile risalire con facilità ai valori reali di output. Ciò non è sempre possibile. Gli attributi indipendenti relativi a ogni osservazione, per ipotesi, devono essere variabili deterministiche. Ciò significa che tali valori saranno sempre ben noti. Inoltre essi possono essere, a loro volta, restituiti come valore di uscita di ulteriori modelli di regressione. Come conseguenza, si assume che le variabili indipendenti siano anch’esse statisticamente indipendenti tra di loro. Tutte queste assunzioni sono importanti al fine del calcolo dei coefficienti di regressione β. Nonostante sia ancora possibile realizzare un modello di regressione lineare violando tali ipotesi, ciò potrebbe portare ad ottenere una stima inconsistente dei coefficienti di regressione. Per le condizioni viste finora, la variabile dipendente sarà funzione di una variabile indipendente x1 e di una variabile aleatoria εn : yo = β1 x1 + β0 + εn (4.6) Ciò rende yo , a sua volta, una variabile aleatoria. Data l’ipotesi di omoschedasticità, il valore medio atteso di tali risultati è pari all’equazione della retta β1 x1 + β0 . Quest’ultima è detta retta di regressione. L’obiettivo della regressione è quello di trovare la retta che si avvicina maggiormente all’insieme dei dati forniti. Si tratta di un problema di ottimizzazione in quanto, dopo aver determinato i coefficienti di regressione, è possibile stimare il valore di un nuovo punto yo a partire dall’osservazione di misure più semplici da ottenere. La fase di “addestramento” del modello prevede, come per altri strumenti già visti, la definizione degli attributi caratteristici di quest’ultimo; in tal caso si tratta dei coefficienti di regressione β, i quali verranno calcolati utilizzando un insieme di dati storici già in possesso di chi sta implementando il modello (ossia il training dataset). Tali dati comprendono, tra i loro attributi, oltre alle variabili indipendenti, anche i campioni delle variabili dipendenti, precedentemente ottenuti. I vettori osservazione del training dataset includono, dunque, un ulteriore elemento, il quale corrisponde al risultato del modello dati gli elementi indipendenti dello stesso vettore: 4.2 Regressione Lineare Semplice e Multipla xtraining = (yn , x1 , x2 , xm ) 73 (4.7) Attraverso tali valori è possibile determinare i coefficienti β. È necessario ricavare tali coefficienti in modo da esprimere al meglio la relazione funzionale tra variabili dipendenti e indipendenti. Nel caso di un modello di regressione lineare semplice, si parte considerando due variabili campione x1 e y1 . Il coefficiente che li lega deve essere determinato attraverso il metodo dei minimi quadrati, proposto da Gauss. Questo metodo tenta di individuare l’equazione della retta tale da minimizzare la somma dei quadrati delle distanze tra i dati campione e quelli della retta stessa. Poichè alcune distanze sono positive ed altre negative, utilizzando la somma dei quadrati, la retta risultante sarà individuata alla distanza minima da ogni punto campione. La Figura 4.2 illustra tale risultato. Figura 4.2. Retta di regressione Le stima dei parametri di regressione è ottenuta dai valori dei parametri cui corrisponde la retta che interpola al meglio le osservazioni. Dato il punto (x1 , y1 ), la differenza: y1 − (β1 x1 + β0 ) = εn (4.8) rappresenta l’errore relativo all’attributo x1 . Questo valore, definito scarto, è anche la distanza dal punto campione alla retta di regressione. È necessario determinare β1 e β1 minimizzando la somma degli scarti al quadrato di ogni punto osservazione, ossia: X min [yn − (β1 x1 + β0 )]2 (4.9) n=1 74 4 Analisi della Regressione Dall’Equazione 4.9 è possibile, infine, ottenere i parametri di regressione. Si dimostra, a tal fine, che il valore del parametro β1 è dato da: β1 = σxn ,yn σx2n (4.10) Dove σxn ,yn è la covarianza calcolata tra i valori della variabile dipendente e quelli della variabile indipendente; inoltre, σx2n rappresenta la media dei valori della variabile indipendente. Dallo stesso procedimento deriva il parametro β0 , il quale risulta essere combinazione lineare dei valori medi di xn e yn : β0 = E[yn ] + β1 E[xn ] (4.11) Tutto ciò è valido per il caso semplice. Attraverso il metodo dei minimi quadrati, dunque, è possibile ottenere i coefficienti β migliori, tali da ottenere i risultati più fedeli alla realtà rappresentata dal modello (ossia i punti che ricadono sulla retta di regressione) a meno dell’errore ε. Per illustrare un esempio [5] pratico di previsione tramite modello di regressione lineare semplice, si suppone di voler prevedere gli effetti sulle vendite settimanali di un supermercato in funzione dello spazio di esposizione. A tal fine viene raccolta una serie di dati campione relativi a supermercati vicini; questi ultimi sono mostrati nella Tabella 4.1. Negozio Spazio di Esposizione (m2 ) Vendite Settimanali (euro) 1 583 2800 2 423 2600 3 602 2900 4 220 1800 5 282 1900 6 623 3100 7 312 2400 8 374 2600 9 412 2300 10 457 2700 11 150 1300 12 147 1600 Tabella 4.1. Dati campione La relazione tra il totale delle vendite e lo spazio di esposizione può essere individuata attraverso una relazione lineare del tipo: yo = β1 x1 + β0 + εo (4.12) Dove x1 rappresenta lo spazio di esposizione e y1 rappresenta il totale delle vendite. Tali punti vengono riportati su un grafico cartesiano come mostrato in Figura 4.3. 4.2 Regressione Lineare Semplice e Multipla 75 Figura 4.3. Punti campione Calcolando media e varianza delle variabili campione, è possibile utilizzare tali quantità per il calcolo dei coefficienti di regressione: β1 = 3, 2 β0 = 1092, 88 (4.13) Dopo aver determinato β1 e β0 sarà, infine, possibile prevedere le vendite settimanali sostituendo il valore del nuovo spazio di esposizione nell’equazione della retta di regressione. Ogni volta in cui, al fine di prevedere una determinata quantià, sono disponibili più variabili indipendenti si utilizza un modello di regressione lineare multiplo. Dati n variabili di input, l’equazione generale di un tale modello è: yo = β1 x1 + β2 x2 + ... + βnxn + β0 + ǫn (4.14) Per la formulazione di un modello lineare multiplo si utilizzano le stesse ipotesi impiegate per il modello semplice. Il caso multiplo, infatti, rappresenta la generalizzazione di quest’ultimo. I punti appartenenti all’insieme delle osservazioni, possedendo più di un attributo, dovranno essere rappresentati in uno spazio a n dimensioni. Una rappresentazione del genere non produrrà più una retta, ma delineerà un piano nello spazio n-dimensionale. Utilizzando la notazione matriciale per rappresentare l’insieme delle osservazioni, il modello di regressione multipla sarà dato da: y1 x11 x12 ... x1m β0 ε1 y2 x21 x22 ... x2m β1 ε2 y3 x31 x32 ... x3m β2 ε3 Y = X = β = ε = (4.15) ε4 y x x ... x β 4m 4 41 42 3 ... ... ... ... ... ... ... yn xn1 xn2 ... xnm βn εn Tale notazione permette di esprimere il vettore delle variabili indipendenti Y o come: 76 4 Analisi della Regressione Yo = X ·β+ε (4.16) Per stimare i parametri del modello di regressione multipla si utilizza il metodo dei minimi quadrati. Quest’ultimo consente di trovare il vettore β che minimizza la somma degli scarti al quadrato. Si dimostra come esso possa essere ottenuto dalla relazione: ′ ′ β = (X · X)−1 X · Y (4.17) ′ Dove X è la trasposta della matrice delle variabili indipendenti. Se il numero di tali variabili è maggiore di due, l’equazione del modello descriverà un iperpiano. Nel caso in cui fosse presente una dipendenza lineare tra gli attributi indipendenti ′ il termine (X · X) sarà prossimo allo 0 e non sarà possibile calcolare i coefficienti. È interessante notare come i vari modelli di regressione lineare possano essere utilizzati in un numero elevatissimo di casi diversi. Essi vengono impiegati per prevedere quantità numeriche quali: temperature, prezzo e quantità di oggetti acquistabili, intervalli di tempo e molti altri ancora. Come appena mostrato, realizzare un modello lineare prevede la formulazione di alcune ipotesi restrittive sui dati (tuttavia, il modello risulta essere semplice da realizzare e molto intuitivo). 4.3 Regressione Logistica Si pone il problema di voler usare le conoscenze acquisite attraverso il modello di regressione lineare come metodo di classificazione. A tal fine, è possibile adattare il modello per risolvere le problematiche di un classificatore binario limitando i valori di restituzione all’intervallo [0, 1]. I valori di questo intervallo rappresenteranno le classi, mentre un valore intermedio (in tal caso 0,5) rappresenterà la soglia di separazione tra le due. Nonostante un simile modello possa costituire una buona approssimazione di un classificatore binario, esso non trova applicazioni pratiche per una serie di problemi. Innanzitutto, è impossibile limitare i valori di uscita di un modello di regressione ad un intervallo limitato. Essi, quasi sicuramente, assumeranno valori esterni a quest’ultimo; tali punti non potranno essere classificati in quanto non appartenenti ad alcuna categoria. Inoltre, un modello di regressione lineare tenta di minimizzare l’errore quadratico medio (ossia la discrepanza media al quadrato fra i valori dei dati osservati ed i valori dei dati stimati); ciò è contrario agli scopi di un modello di classificazione. Quest’ultimo, infatti, mira ad individuare una retta che separa realmente le varie osservazioni e non quella che minimizza l’errore di osservazione. Quest’ultima, in presenza di punti molto distanti dalla maggior parte degli elementi, risulta essere vicina a tali punti (in modo da diminuire l’errore), ma una simile rappresentazione non rispecchia la soglia di separazione tra gli elementi di due o più categorie. Il modello di regressione logistica riesce ad ovviare a tali problemi. Attraverso tale modello è, infatti, possibile ottenere un valore di output il quale ricade all’interno dell’intervallo chiuso [0, 1]. Esso, inoltre, viene “addestrato” mediante un 4.3 Regressione Logistica 77 metodo che non mira a minimizzare l’errore quadratico medio e, dunque, si presta maggiormente ad essere utilizzato come metodo di classificazione. Quello logistico è un modello di regressione applicato nei casi in cui la variabile dipendente y sia riconducibile ai valori 0 e 1 (si dice che essa è di tipo dicotomico, che può, cioè, assumere esclusivamente due valori). Il modello logistico viene applicato a quei casi in cui le variabili di restituzione sono vero o falso, maschio o femmina, vince o perde, sano o ammalato, etc. I valori di ingresso sono, come nel caso del modello lineare, delle variabili indipendenti; inoltre, anche in questo caso, una combinazione lineare di quest’ultime restituisce una variabile dipendente y. La differenza fondamentale, rispetto al modello lineare, consiste nel fatto che la variabile y viene usata come input per la funzione sigmoidale: ey e−y ey 1 = · = ey + 1 e−y ey + 1 1 + e−y Sostituendo l’equazione lineare della variabile indipendente si ottiene: f (y) = (4.18) 1 1 = (4.19) −β 1 + e−y 1 + e 1 ·X−β0 Per y tendente a −∞, il risultato della funzione sigmoidale tende a 0. Al contrario, per y tendente a +∞, il risultato tenderà a 1. Per y pari a 0, inoltre, la funzione vale 0,5. Tali caratteristiche rendono questa funzione la candidata ideale per risolvere problemi di classificazione sfruttando le caratteristiche dei modelli di regressione. È bene notare come, a differenza dell’equazione mostrata nel caso lineare, in questo caso non appare il termine di errore ε. Ciò è dovuto al fatto che, poichè il risultato della funzione sigmoidale appartiene all’intervallo [0, 1], la funzione stessa rappresenta la caratteristica di casualità del modello. Una tale distribuzione, in cui la variabile aleatoria (in questo caso il punto y) può assumere solo due possibili valori, viene definita distribuzione di Bernoulli. Il risultato del modello di regressione logistica Yo rappresenta, dunque, la probabilità che il punto y ricada in una delle due classi di uscita. f (y) = P (Y = 1|Yo ) = 1 (4.20) 1+ L’Equazione 4.20 mostra come la probabilità che il risultato del modello appartenga alla classe 1, dopo aver osservato l’output Yo , coincida con il valore stesso di Yo . Nel caso di un basso valore di Yo , l’uscita risulterà appartenente alla classe 0. Il valore medio atteso, in una distribuzione di Bernouilli, è rappresentato dal valore, scelto in maniera arbitraria, del risultato con esito positivo: in questo caso Yo = 1. Partendo dall’Equazione 4.20, tramite delle semplici manipolazioni algebriche, è possibile isolare la componente lineare, ossia il contributo delle variabili indipendenti di ingresso: ln( e−β1 ·X−β0 P (Y = 1|Yo ) ) = β · X + β0 1 − P (Y = 1|Yo ) (4.21) 78 4 Analisi della Regressione Il termine a sinistra dell’Equazione 4.21 viene definito funzione logit. Si può osservare come l’argomento del logaritmo rappresenta il rapporto tra la probabilità che il risultato appartenga alla Classe 1 e la probabilità che esso appartenga alla Classe 0. Dall’Equazione 4.21, inoltre, è possibile effettuare il calcolo dei coefficienti di regressione β, cosı̀ come è stato svolto per il modello di regressione lineare. La relazione tra le variabili indipendenti ed il valore Yo = 1, tuttavia, è di tipo non lineare. Ciò impedisce il calcolo dei coefficienti di regressione, come è già stato fatto. Per calcolare tali coefficienti non sono necessarie tutte le ipotesi, sui dati in input, indispensabili invece per il caso lineare. Per effettuare tale calcolo, per un modello di regressione logistica, viene utilizzato il criterio di massima verosimiglianza. Al contrario del metodo dei minimi quadrati, il quale tende a minimizzare la somma al quadrato dei termini di errore, tale criterio massimizza la probabilità di trovare una determinata osservazione come risultato di un modello; tale probabilità è definita come verosimiglianza. In particolare, la verosimiglianza, relativa all’appartenenza alla classe 1, è data da: P (Y = 1|Yo ). La verosimiglianza per la classe 0 vale 1 − P (Y = 1|Yo ). La probabilità dell’intersezione di tutti gli eventi, ossia la probabilità di osservare le osservazioni date, sarà data dal prodotto delle varia probabilità: Y Y P (yn = 1|xon ) · 1 − P (ym = 1|xom ) (4.22) Il criterio per individuare i coefficienti di regressione consiste nel massimizzare tale probabilità di ottenere un particolare insieme di osservazioni. Utilizzando algoritmi di stima iterativa per equazioni non lineari, sarà possibile determinare i valori di β0 , β1 , ... , βn tali da rendere massima la probabilità individuata dall’Equazione 4.22. I contesti applicativi del modello di regressione logistica sono molto numerosi. In economia, ad esempio, esso viene impiegato per analizzare gli effetti degli interventi economici sugli operatori di mercato: l’azienda fallisce (Y=1) o meno (Y=0) dopo aver ricevuto una sovvenzione, il disoccupato trova lavoro (Y=1) o no (Y=0) dopo aver seguito un corso di formazione. Nell’ambito del marketing viene usato per evidenziare l’incisività delle campagne pubblicitarie sulla propensione all’acquisto del consumatore: il cliente acquista (Y=1) o non acquista (Y=0) un dato prodotto in seguito ad una campagna promozionale. In medicina esso viene usato per studiare l’effetto di una cura sullo stato di salute del paziente: il paziente sottoposto ad una particolare cura farmacologica reagisce positivamente (Y=1) o meno (Y=0). In biologia viene adottato per evidenziare le determinanti delle reazioni delle cellule sottoposte ad un trattamento: le cellule malate si rigenerano (Y=1) oppure no (Y=0) dopo essere state sottoposte ad un particolare trattamento. In botanica viene utilizzato per studiare l’effetto fertilizzante delle sostanze utilizzate sui semi oggetto di studio: una pianta resiste alle gelate (Y=1) oppure no (Y=0) in seguito ad un intervento di modifica genetica. 5 Tool di Analisi Predittiva Dopo aver esaminato i modelli matematici che stanno alla base dei processi di predizione, questo capitolo illustra gli strumenti software che implementano tali modelli. Sono innumerevoli i tool che contengono metodi che prevedono algoritmi che permettono di ottenere i modelli precedentemente esaminati. In questo capitolo verranno esaminati alcuni di questi strumenti, tra quelli di uso più comune. 5.1 Caratteristiche Generali Lo sviluppo di nuove tecnologie all’interno del Web, ed il conseguente incremento dei vari flussi di informazione, in particolar modo dei Big Data, hanno determinato nuove possibilità offerte dall’analisi dei dati. Ultimamente, sempre più organizzazioni tentano di sfruttare tali potenzialità, utilizzando tecniche di data mining e machine learning per realizzare previsioni. Implementare un modello di analisi predittiva, tuttavia, richiede conoscenze specifiche e, per tale motivo, non è sempre una scelta possibile a tutti. Per venire incontro a simili richieste sono stati introdotti degli strumenti software, facilmente accessibili, i quali danno a chiunque la possibilità di realizzare modelli di previsione. In tal modo le varie organizzazioni possono avvalersi con maggior semplicità dei suddetti modelli ed integrarli nelle varie operazioni a supporto delle decisioni e nei propri processi interni. I tool di analisi predittiva sono stati introdotti al fine di fornire a chiunque la possibilità di realizzare previsioni partendo da dati di qualunque genere. Tali strumenti vengono realizzati in modo da rimuovere la complessità matematica intrinseca in ogni processo di generazione dei modelli. Essi, inoltre, forniscono un’interfaccia grafica per la scelta e la parametrizzazione del modello migliore ai vari scopi. Alcuni strumenti includono, inoltre, determinati metodi per il riconoscimento automatico dei dati e per il supporto nella scelta del modello migliore al fine di supportarli. Un qualsiasi strumento di previsione, tuttavia, risulta essere di poca utilità senza un’operazione di valutazione effettuata sulle variabili restituite. Ogni tool di predizione, dunque, include strumenti che permettono di visualizzare tali risultati in modo immediatamente comprensibile. Sarà possibile illustrare i risultati attraverso l’uso di grafici e tabelle e, in tal modo, sarà possibile valutarli e trarre conclusioni 80 5 Tool di Analisi Predittiva sulla reale efficacia del modello senza la necessità di possedere competenze specifiche per la valutazione. Il numero di tool disponibili e liberamente accessibili aumenta parallelamente alle richieste di analisi predittiva come strumento di supporto. Tali mezzi si differenziano tra di loro per il grado di complessità con il quale affrontano il problema della creazione dei modelli. Alcuni contengono opzioni limitate e favoriscono l’uso da parte di utenti meno esperti; altri permettono di realizzare modelli particolarmente complessi, ma necessitano di maggiori conoscenze da parte dell’utente. È possibile citare numerosi tool i quali possono essere più o meno sfruttati dalle più importanti compagnie; nelle prossime sezioni verranno approfonditi gli aspetti salienti di quelli maggiormente utilizzati e di maggior successo. 5.2 R Tra i tanti strumenti per l’analisi predittiva, è impossibile non citare R. Si tratta di un ambiente di sviluppo open-source integrato con un linguaggio di programmazione per utilizzo specifico nel contesto del calcolo statistico. Il linguaggio di programmazione R (Figura 5.1) è largamente utilizzato ai fini dell’analisi statistica e del data mining. Per estensione potrà, dunque, essere utilizzato ai fini dell’analisi predittiva. Figura 5.1. Il logo di R Le librerie di R contengono una vasta collezione di metodi statistici e grafici per la risoluzione e la rappresentazione di diversi problemi. Tali metodi permettono la creazione di modelli lineari e non lineari per affrontare problemi di statistica classica, analisi di dati in successione temporale, problemi di clustering e classificazione, e molti altri ancora. Ognuno dei metodi disponibili è realizzato con lo stesso linguaggio di programmazione nativo il quale caratterizza l’ambiente R. È possibile, tuttavia, collegare a run-time i metodi di R con metodi scritti in linguaggi di programmazione 5.2 R 81 quali: C++, Java, .NET, Python; ciò risulta particolarmente utile quando si devono affrontare problemi che richiedono un elevato onere computazionale. Uno dei punti di forza di R è la possibilità di mostrare i risultati delle varie implementazioni attraverso l’uso di grafici ed opportuni simboli matematici. A differenza di molti altri tool commerciali specifici (i quali semplificano la scelta del modello migliore in base al particolare tipo di problema), R permette, semplicemente, di richiamare una o più funzioni e di utilizzarle con i dati a disposizione. Esso rappresenta, quindi, un’ottima base di partenza per familiarizzare con i vari algoritmi. Il linguaggio di programmazione R è un linguaggio interpretato; pertanto, in esso, non esiste un compilatore e il codice sorgente viene tradotto da un interprete in linguaggio macchina al momento dell’esecuzione. L’interprete è quel software che all’avvio del programma, riceve un’istruzione alla volta (istruzioni scritte nel linguaggio di alto livello, in questo caso R) e la traduce in linguaggio macchina prima di passarla alla CPU. Solitamente tale processo provoca un rallentamento generale del software. Tale approccio richiede più memoria ed è meno veloce, a causa dell’overhead introdotto dall’interprete stesso. Nel caso di R ciò non rappresenta un problema, in quanto le operazioni svolte durante l’esecuzione dei metodi non richiedono un numero eccessivo di risorse computazionali, a meno di avere a che fare con grosse quantità di dati (in tal caso è possibile ridurre il peso della computazione assegnando alcuni compiti ad altri programmi o ricorrendo alla programmazione distribuita). La sintassi di R prevede l’assegnazione delle variabili tramite l’uso dell’operatore “< −”, la seguente istruzione assegna la stringa “hello, world!” alla variabile x e la stampa: > x <- ‘‘hello, world!’’ ‘‘hello, world!’’ In aggiunta all’operatore di assegnamento, come per altri linguaggi di programmazione, esistono diversi altri operatori. Essi possono essere: • Aritmetici (+, −, ∗, /) : consentono di svolgere operazioni e assegnare il risultato direttamente ad una variabile: > raggio <- 21.35 > p.greco <- 3.14159265358979 > circonferenza <- raggio * 2 * p.greco > area <- p.greco * raggio^2 • Logici: lavorano su dati booleani, ovvero variabili che possono assumere solo i valori vero e falso. < Minore <= Minore o Uguale > Maggiore >= Maggiore o uguale == Uguale ! = Diverso & Intersezione 82 5 Tool di Analisi Predittiva | Unione ! Negazione Di seguito vengono riportati alcuni esempi [3] della sintassi di tali operatori (il simbolo # precede un commento in R): > x<- 3:8; #Genera una sequenza di valori (da 3 a 8) > x > 5; #Restituisce true per i valori della # sequenza maggiori di 5, false per gli altri > x <= 8 #Restituisce true per i valori della # sequenza minori o uguali a 8, false per gli altri > x != 2; #Restituisce true per i valori della # sequenza diversi da 2, false per gli altri Come in molti altri linguaggi interpretati, non è necessario dichiarare il tipo da assegnare a una variabile prima di utilizzarla, ma sarà compito dell’interprete svolgere tale operazione. Una variabile può essere di tipo numerico (integer, float, double), alfanumerico (string), booleano (TRUE, FALSE). La memoria necessaria, relativa a tali variabili, viene allocata durante l’esecuzione (è una caratteristica dei linguaggi interpretati). Il linguaggio prevede un operatore di casting as.nuovo tipo(variabile). È possibile, inoltre, definire collezioni logiche di tali dati per potervi accedere in modo efficiente, ossia le strutture dati. Queste ultime appaiono indispensabili nelle situazioni in cui è necessario gestire milioni di dati appartenenti ad una determinata categoria, ed ottenere un modo rapido per svolgere operazioni su di essi. Esse comprendono: • Vettori: insieme di oggetti dello stesso tipo. Possono essere assegnati ad una variabile e possono contenere valori ben definiti, o appartenenti ad un dato intervallo. Essi vengono definiti tramite il seguente comando: > x <- c(1, 2, 3); #Crea un vettore e lo assegna alla variabile x • > x[1]; #Selezione di un singolo elemento del vettore Matrici: tabelle formate da righe e colonne. Possono essere considerate come dei vettori a due dimensioni: > m <- matrix (x, nrow=4) #Genera una matrice con 4 # righe usando gli elementi # del vettore x • > m[1,3] #Seleziona gli el. I riga e III colonna Fattori: sono vettori utilizzati per classificare o suddividere in “classi” gli elementi di un altro vettore di pari lunghezza. Un esempio classico è quello della suddivisione di una serie di misure eseguite in due siti, ad esempio “A” e“B”. Per trasformare un vettore, contenente le etichette dei livelli, in fattore si usa: > dati <- c (2,3,7,31,38,36) > fattore <- factor ( c("A","A","B","B","B")) In tal modo gli elementi del vettore c (associati alla variabile “dati”) verranno collocati rispettivamente nelle classi A e B. 5.2 R 83 • Data Frame: possono essere considerati come matrici dove ogni colonna può avere un tipo di dato diverso dalle altre. Rappresentano il modo più pratico per gestire tabelle di dati. È possibile specificare un nome per ciascuna colonna; nel caso in cui venga omesso il nome viene utilizzato quello dell’oggetto che costituisce la colonna. Un data frame può essere realizzato come una matrice le cui colonne sono costituite da vettori precedentemente definiti. Un esempio di Data Frame è riportato nel seguente listato: > specie <- c (2,3,7,8,9,35,37,31,38,36) > individui <- c (321,654,765,865,964,353,372,315,385) > dataframe <- data.frame (specie, individui) In R, in generale, è possibile raggruppare insiemi di più comandi all’interno di parentesi graffe. Ciò permette di realizzare istruzioni nidificate e determinare una gerarchia dell’esecuzione del programma. Come in molti linguaggi di programmazione, sono presenti alcune strutture di controllo. Tra queste citiamo: • if: permette l’esecuzione di espressione2 se e solo se espressione1 restituisce come risultato TRUE; in caso contrario, se è presente l’istruzione else viene restituito come risultato espressione3. if (espressione1) espressione2 else espressione3 • for: per ogni elemento di vettore assegna tale elemento alla variabile t e la usa in espressione2. for (nome_variabile in vettore) espressione2 • while: continua ad eseguire espressione fino a quando condizione rimane vera. while (condizione) espressione Oltre la possibità di definire parti di codice indipendenti, R offre l’opportunità di definire funzioni all’interno del codice. In qualunque momento è possibile scrivere una funzione (la quale accetta dei parametri in ingresso e restituisce dati di tipo determinato) ed assegnare ad essa un nome per poter essere riutilizzata. Alcune funzioni, come quelle che implementano i modelli di predizione, sono già realizzate e sono disponibili agli sviluppatori; esse sono contenute all’interno delle librerie dell’ambiente. Una funzione può essere richiamata tramite il nome della stessa, seguito dai parametri che necessita. Alcuni esempi di funzioni di uso generale già definite sono: mean(x) (restituisce la media degli elementi del vettore x), var(x) (restituisce la varianza degli elementi del vettore x), max(x) (restituisce il massimo tra gli elementi del vettore x), sum(x) (restituisce la somma degli elementi del vettore x), prod(x) (restituisce il prodotto degli elementi del vettore x). Una delle funzioni di maggiore utilizzo è la funzione plot(X,Y). Quest’ultima consente, dati due vettori X e Y, di rappresentare tali vettori su un grafico cartesiano e, quindi, di fornire in output un illustrazione grafica degli stessi. 84 5 Tool di Analisi Predittiva Al fine di effettuare previsioni, il linguaggio R offre una serie di funzioni le quali permettono di realizzare i modelli esaminati nei precedenti capitoli. Per svolgere operazioni di prova su tali metodi è possibile avvalersi di diversi dataset su vari repository disponibili sul web. La funzione autos <- read.csv(‘‘URL repository’’) permette di importare una collezione di dati generici dal web. Generalmente si tratta di un file contenente dati in formato data frame, in cui ogni riga (ossia, ogni tupla) corrisponde ad un’istanza dei dati ed ogni colonna rappresenta un attributo. Prima di poter utilizzare i dati è necessario svolgere alcune operazioni su di essi al fine di prepararli. Tali procedimenti sono necessari per strutturare la collezione dei dati e permettere all’algoritmo di riconoscerli (in base alle specifiche di input richieste da ciascun metodo) ed utilizzarli per costruire il modello. Queste operazioni comprendono: casting su alcuni attributi, rinominazione delle colonne (attraverso la funzione colnames(tupla)), sostituzione dei valori mancanti, eliminazione di attributi superflui, e molte altre in funzione delle varie necessità. La Figura 5.2 mostra un insieme di dati, pronti per l’utilizzo, visualizzati attraverso l’ambiente grafico di sviluppo RStudio [7, pag.259]. Essi contengono gli attributi relativi a un insieme di automobili; ognuna delle istanze comprende 9 attributi tra cui: cilindrata, anno di immatricolazione, peso, ed altri; è anche presente un attributo (ossia il nome del modello dell’automobile) che funge da label e che potrà potrà essere impiegato come variabile di restituzione del modello. Figura 5.2. L’esempio di un dataset utilizzato da R Dopo aver adeguatamente preparato il dataset per l’elaborazione, è consigliabile suddividerlo in due gruppi: training dataset e test dataset. Lo scopo è quello di usare il primo gruppo per “addestrare” il modello e, in seguito, per verificarne l’efficacia attraverso il test dataset. Una suddivisione in rapporto 70/30 è sufficiente per fornire a ciascun gruppo un sufficiente contenuto di dati. Ciascun gruppo dovrà essere rappresentativo dell’intero dataset; un tipico errore consiste nel suddividere i dati in modo che alcuni elementi, con determinate caratteristiche, ricadano esclusivamente all’interno di uno dei due sottogruppi. Tale situazione è da evitare in quanto il modello non sarebbe capace di comportarsi in maniera adeguata in presenza di dati mai visti. Il metodo migliore consiste nel suddividere la collezione di dati in maniera completamente casuale. La funzione sample(x, size) interviene a tale scopo. Essa preleva gli indici, relativi ad un numero di campioni pari a size delle tuple del data frame “x” (restituite dalla funzione nrow(x)), in maniera casuale. 5.2 R 85 > training_indices <- sample(nrow(x) , trainSize) > trainSet <- x[training_indices, ] > testSet <- x[-training_indices, ] > model <- lm(formula=trainSet$label ~ . , data=trainSet) > predictions <- predict(model, testSet, interval="predict", level=.95) > cbind(testSet$mpg, predictions[,1]) Gli indici delle tuple prelevate dalla struttura dati “x” vengono memorizzati nella variabile training indices (la quale, in questo modo, diventa un vettore di indici). Tali osservazioni verranno, infine, assegnate alle variabile trainSet; le restanti, invece, verranno assegnate alla variabile testSet. Una volta suddivisi i dati, è possibile passare alla fase di “addestramento” del modello. Per mostrare un esempio di uno degli algoritmi offerti da R, il seguente codice mostra la sintassi per la creazione di un modello di regressione lineare attraverso le librerie incluse in R: Tra i parametri in ingresso richiesti da tale metodo, la variabile formula indica l’attributo, il quale sarà utilizzato come variabile di output del modello di regressione lineare. Il parametro data, inoltre, indicherà il dataset dal quale verranno prelevate le osservazioni. Il modello verrà automaticamente generato ed assegnato alla variabile model. Ultimato il modello, sarà possibile effettuare previsioni, mediante quest’ultimo, utilizzando la seguente sintassi: Attraverso il parametro level sarà possibile impostare il livello di confidenza (in questo caso 0.95%). I risultati di tale operazione sono mostrati in Figura 5.3. La colonna fit contiene i risultati del modello per ogni osservazione (ossia, i punti che formano la retta di regressione); le colonne lwr e upr mostrano l’intervallo di valori dentro il quale può variare il risultato della predizione (tenendo conto dell’errore). Un maggiore livello di confidenza determina un intervallo maggiore, e viceversa. Nel caso di un procedimento supervisionato, ossia in cui si hanno a disposizione le variabili di output nel test dataset, è possibile confrontare tali valori con quelli predetti. In questo modo è possibile valutare l’affidabilità del modello. Il metodo cbind() affianca la colonna label del test dataset alla colonna con i risultati della previsione. Se essi coincidono per la maggior parte delle osservazioni è possibile utilizzare il metodo predict() con nuovi dati per realizzare previsioni. In caso contrario sarà necessario incrementare la precisione del modello attraverso un più voluminoso training dataset. Il punto di forza di R è la possibilità adattarsi a qualsiasi esigenza [14], in quanto, all’interno delle proprie librerie, contiene metodi per implementare qualsiasi modello predittivo. R, inoltre, offre la possibilità di lavorare partendo da dati grezzi, in 86 5 Tool di Analisi Predittiva Figura 5.3. Risultati della funzione predict() qualsiasi formato essi si trovino. In questo modo è possibile adattarli all’utilizzo con ogni possibile modello. Ciò risulta essere particolarmente vantaggioso per chi si avvicina per la prima volta al mondo dell’analisi predittiva e, non avendo l’esperienza necessaria alla scelta e all’utilizzo di tool maggiormente specifici, non riesce ad individuare subito il modello migliore per ogni situazione. Tra i metodi contenuti nelle varie librerie per implementare i modelli visti nei precedenti capitoli, vi sono i metodi nnet(), svm(), tree(), per la creazione di una rete neurale, di una support vector machine, e di un albero di decisione rispettivamente. La Figura 5.4 mostra i risultati restituiti da un albero di decisione [7, pag.272], visualizzati attraverso il metodo plot(). Sono, infine, disponibili metodi e procedure per l’implementazione di modelli probabilistici e di recommendation system. È possibile trovare sul Web la documentazione di ciascuno di tali metodi e dei parametri richiesti per l’implementazione dei modelli. 5.3 Weka Acronimo di Waikato Environment for Knowledge Analysis, Weka (Figura 5.5) è un ambiente software open-source per l’apprendimento automatico, sviluppato nell’università di Waikato in Nuova Zelanda. Si tratta di una raccolta di applicazioni, scritte completamente in Java, le quali implementano procedure di data mining e 5.3 Weka 87 Figura 5.4. Albero di decisione realizzato tramite R machine learning. Tra queste ultime è possibile trovare algoritmi di classificazione, regressione, clustering ed altri per la visualizzazione dei risultati; tale strumento si presta, dunque, alla realizzazione di modelli per analisi predittiva. Figura 5.5. Il logo di Weka Weka è uno strumento che presenta diversi vantaggi. Innanzitutto, esso è opensource, in quanto rilasciato con licenza GNU General Public License. In secondo luogo, poichè interamente implementato in Java, può essere eseguito su qualunque sistema operativo supporti la Java Virtual Machine; per tale motivo esso gode di una elevata portabilità. Ulteriore vantaggio di tale piattaforma è la quantità di metodi implementati utili sia per il pre-processing dei dati, sia per la costruzione dei modelli. Essa supporta tutti i più comuni strumenti di data mining e machine learning. Quest’ultimi possono essere richiamati con praticità attraverso l’interfaccia grafica inclusa all’interno del software. Weka, infine, ha la capacità di interfacciarsi con qualsiasi DBMS, purchè esistano i driver disponibili per la comunicazione con Java. Tale potenzialità permette a Weka di avvalersi dei risultati di una query SQL per ottenere i dati necessari al modello. L’interfaccia del software, mostrata nella Figura 5.6, è chiamata Explorer. Essa è costituita da una serie di schede le quali fungono da pannello di controllo per le varie funzionalità. Dalla scheda Preprocess è possibile accedere a diverse funzioni per il caricamento e la visualizzazione dei vari dataset con cui costruire e testare il modello. In Weka è possibile lavorare con un solo insieme di dati alla volta. Questi ultimi, in genere, vengono importati da un database, oppure, sono contenuti in un file in formato .CSV 88 5 Tool di Analisi Predittiva Figura 5.6. L’interfaccia Explorer di Weka (Comma-Separated Values - si tratta di un formato basato su file di testo utilizzato per l’importazione ed esportazione di una tabella di dati). Dalla stessa scheda è possibile svolgere operazioni di pre-processamento dei dati attraverso degli algoritmi di filtraggio predefiniti, tramite i quali è possibile trasformare i dati cancellando o modificando le varie istanze, al fine di rimuovere quelle che costituiscono semplice “rumore”. Per ognuna di tali istanze è, inoltre, possibile cancellare o modificare i diversi attributi che le costituiscono oppure, se necessario, aggiungerne di nuovi. All’interno della scheda Classify, come mostrato in Figura 5.7, sono contenuti gli algoritmi di classificazione e di regressione. Da un apposito menù è possibile selezionare lo strumento da utilizzare per analizzare il dataset precedentemente elaborato. Viene data la possibilità di implementare il modello attraverso il training dataset, oppure attraverso il test dataset. Quest’ultimo verrà prodotto automaticamente dopo pochi secondi dal momento in cui è stato selezionato. Il menù Result List contiene il risultato dell’algoritmo, ossia, il modello appena creato. Weka tiene traccia dei modelli precedentemente realizzati in modo da poter effettuare dei confronti sui risultati. Il menù Classifier Output, infine, contiene i risultati dell’elaborazione. Ciascun classificatore contiene una serie di opzioni le quali possono essere selezionate per modificare la costruzione del modello in base alle varie esigenze. La scheda Cluster contiene vari algoritmi di clustering come, ad esempio, diverse implementazioni dell’algoritmo k-means. I modelli vengono gestiti, anche in questo caso, come visto per la categoria di classificazione. Una volta creato il modello esso viene salvato in un file con estensione .model. Tali modelli potranno essere modificati in seguito anche attraverso l’uso dell’ambiente di sviluppo di R, utilizzando i metodi della libreria RWeka. Una volta generato il modello sarà possibile sfruttarlo per l’analisi di nuove 5.3 Weka 89 Figura 5.7. Alcuni dei modelli di classificazione disponibili in Weka istanze di dati. Un’interessante opzione è quella che consente di esportare la classe che rappresenta il modello (in un file di formato .Jar) ed utilizzarla all’interno di un programma scritto in Java, indipendentemente dall’interfaccia di Weka. Tale opzione offre l’opportunità di implementare un modello di predizione ovunque se ne abbia la necessità e rappresenta una delle funzionalità di maggior successo di Weka. Le schede Associate, Select Attribute e Visualize, infine, contengono diversi strumenti tipici delle procedure di data mining e altri per la visualizzazione grafica dei risultati. Questi ultimi metodi permettono di generare un grafico di dispersione, ossia un tipo di grafico in cui due variabili di un set di dati sono riportate su uno spazio cartesiano. Ulteriore vantaggio offerto da Weka è la possibilità di utilizzare gli algoritmi disponibili con grosse collezioni di dati, ossia, con i Big Data. Insieme alle più recenti versioni di Weka (in particolare, quelle che vanno dalla Versione 3.7 in poi) sono stati introdotti alcuni package che offrono la possibilità di realizzare una rete di calcolo distribuito. Tra questi, il package distributedWekaBase contiene diverse funzioni le quali implementano le metodologie di map e reduce, ma che non sono vincolate ad alcuna particolare piattaforma. Il package distributedWekaHadoop, 90 5 Tool di Analisi Predittiva inoltre, consente di utilizzare modelli realizzati tramite Weka in ambiente distribuito per mezzo di un interfaccia con Hadoop. 5.4 Orange Si tratta di un software open-source per la realizzazione di modelli di data mining e machine learning scritto in Python (Figura 5.8). Orange è un tool di programmazione visuale; esso offre un linguaggio che consente la programmazione tramite la manipolazione grafica degli elementi e non tramite sintassi scritta. Figura 5.8. Il logo di Orange Tale caratteristica lo rende uno strumento particolarmente indicato per coloro i quali non hanno familiarità con la programmazione, ma hanno comunque la necessità di utilizzare uno strumento di predizione. Orange fornisce una serie di strumenti utili per compiere diverse operazioni sui dati. Essi vengono definiti widget e vengono impiegati per la visualizzazione ed il pre-processing dei dati e per la creazione di modelli di previsione. Tali strumenti possono essere utilizzati con modalità drag and drop, quindi trascinati all’interno dell’area di lavoro e collegati tra di loro per formare un workflow, ossia, uno schema che mostra l’ordine delle operazioni da effettuare. L’interfaccia di Orange è mostrata in Figura 5.9. Ogni widget compie un’operazione specifica sui dati e comunica con altri widget scambiando informazioni attraverso un “canale di comunicazione”. Per ciascuno di essi, inoltre, sono disponibili diverse opzioni. Alcuni widget vengono impiegati al fine di prelevare i dati da diverse fonti come, ad esempio, quelli contenuti nei file sul disco. È questo il caso dell’elemento File. Tramite una connessione tra elementi i dati vengono trasferiti da un widget all’altro. In questo modo è possibile trasferire le informazioni appena prelevate ai widget Data Table e Scatter Plot. Il primo visualizza i dati prelevati sotto forma tabulare; il secondo crea uno spazio a due dimensioni all’interno del quale è possibile rappresentare il dataset in memoria, dopo aver indicato gli attributi da inserire lungo l’asse delle ascisse e lungo quello delle ordinate. 5.4 Orange 91 Figura 5.9. L’interfaccia grafica di Orange Tra le varie categorie di widget, vengono messi a disposizione tutti quelli necessari per svolgere la maggior parte dei più comuni processi per l’analisi dei dati. Tra questi, è possibile individuare strumenti quali: Naive Bayes, Logistic Regression, Neural Network, k Nearest Neighbours, Classification Tree, SVM, Linear Regression, e molti altri. Ognuno di essi ha lo scopo di costruire il corrispondente modello di predizione utilizzando i dati messi a disposizione attraverso le connessioni. I dati possono essere suddivisi in training e test dataset, mediante lo strumento Data Sampler, al fine di valutare l’efficacia del modello. Dopo aver realizzato quest’ultimo, infine, è possibile effettuare previsioni in tempo reale sfruttando l’oggetto Predictions, il quale accetta in ingresso i dati ed il modello precedentemente realizzato e restituisce i risultati. I parametri dei vari modelli, come anche gli attributi di maggiore interesse, possono essere definiti all’interno di ogni widget attraverso un menù grafico. Il programma permette la connessione tra due elementi per i quali l’output del primo è ammissibile come input per il secondo; inoltre, impedisce la connessione tra elementi per i quali non è possibile interagire. In questo modo lo sviluppo di modelli di previsione risulta essere particolarmente efficiente ed intuitivo. I risultati di ogni previsione possono, inoltre, essere visualizzati per una rapida analisi visiva utilizzando strumenti per la visualizzazione, quali Image Viewer, Go Browser, Scatter Plot, ed altri. Le caratteristiche appena citate mettono in evidenza il principale punto di forza di Orange, ossia la praticità. Mediante l’uso della programmazione visuale è possibile realizzare previsioni, sfruttando i dati in possesso, in poco tempo ed in maniera intuitiva. Tra le possibilità offerte vi è anche quella di poter modificare il codice sorgente Python di ciascun widget. In tal modo, possedendo le capacità di programmazione necessarie, è possibile modificare totalmente le procedure di default del programma, sfruttandone a pieno le capacità. Per una maggiore accessibilità, vengono, inoltre, rese disponibili alcune estensioni, le quali contengono procedure già definite per realizzare previsioni in ambito medico, economico e scientifico. 92 5 Tool di Analisi Predittiva 5.5 Analisi Predittiva Basata sul Cloud Computing Grazie alla diffusione dei vari tool, l’analisi predittiva, negli ultimi anni, è diventata uno degli argomenti di ricerca di maggior interesse da parte delle compagnie. Il diffondersi dei Big Data, inoltre, ha determinato la necessità di espandere le proprie risorse hardware per beneficiare dei vantaggi offerti dall’analisi di tali informazioni. Purtroppo, ciò non è sempre possibile per la maggior parte delle compagnie le quali non hanno la capacità di analizzare grossi flussi di dati. Per venire incontro alle esigenze computazionali richieste dall’analisi dei Big Data le compagnie hanno modificato l’obiettivo dei loro investimenti dall’acquisto di nuove risorse hardware e software al mondo dei servizi basati sul cloud [2]. Con il termine “ cloud computing ” si indica quel paradigma di erogazione di risorse informatiche (come l’archiviazione, l’elaborazione o la trasmissione di dati) caratterizzato dalla disponibilità di tali risorse, su richiesta, attraverso Internet. Sfruttando la tecnologia del cloud computing, gli utenti collegati ad un cloud provider (ossia, un fornitore di servizi attraverso Internet) possono usufruire di risorse quali unità di elaborazione e memorie di massa di macchine remote. Uno dei principali vantaggi di tale tecnologia consiste nel poter accedere alle risorse remote evitando ostacoli quali interfacce e protocolli di rete sconosciuti; è, cosı̀, possibile accedere ad ogni servizio anche tramite un semplice Internet browser. Esistono diverse opportunità offerte dall’interazione tra l’analisi predittiva ed il cloud computing. Implementare strumenti di previsione attraverso il cloud computing significa, per una compagnia, acquistare piattaforme software, dati, applicazioni ed infrastrutture come se fossero un servizio offerto dal web. Ciò permette di investire su quello che realmente viene utilizzato, incrementando o diminuendo le risorse in funzione del carico computazionale richiesto. Gli strumenti necessari per affrontare le varie problematiche vengono scelti dinamicamente in base al progetto attuale. Servendosi dei servizi in rete non è necessario concentrare tutti i propri sforzi su uno specifico tool. L’utentè avrà, infatti, la possibilità di scegliere il migliore tra i tool offerti dai vari servizi per soddisfare, di volta in volta, le proprie necessità. Tali servizi vengono offerti come fossero “scatole nere” (black-box ); l’utente non dovrà conoscere il funzionamento di ogni metodo: sarà sufficiente attivare il metodo ed il sistema restituirà il risultato senza che egli debba necessariamente sapere quale tool ha implementato l’algoritmo impiegato. I servizi basati sul cloud, inoltre, permettono l’integrazione di strumenti di terze parti. Quest’ultima possibilità consente, ad esempio, di utilizzare strumenti quali Apache Mahout su nodi distribuiti situati in rete, senza la necessità di dover possedere reti di calcolatori costosi. L’accesso ai Big Data costituisce un ulteriore vantaggio offerto dal cloud computing. Molte sorgenti dei Big Data, infatti, sono disponibili esclusivamente all’interno del cloud. Ciò permette di usufruire di tali informazioni senza la necessità di grosse banche dati, indispensabili per contenerle. Una simile soluzione incrementa la velocità con cui i vari modelli di previsione possono essere creati; ciò garantisce una maggiore possibilità di testing del modello stesso da parte dell’utente. Esistono diverse soluzioni offerte per coniugare le potenzialità dell’analisi predittiva con quelle del cloud computing. Tra queste, la piattaforma Microsoft Azure può offrire un supporto per lo sviluppo di modelli di predizione. Azure permette lo sviluppo di applicazioni e servizi all’interno di una rete di data center; essa inoltre, 5.5 Analisi Predittiva Basata sul Cloud Computing 93 supporta diversi linguaggi di programmazione. All’interno di Azure sono contenute diverse soluzioni quali HDInsight ed Azure Machine Learning. Il primo rappresenta la distribuzione proprietaria di Hadoop appartenente a Microsoft, basata su nodi distribuiti all’interno del cloud. Esso fornisce delle interfacce capaci di creare cluster Hadoop, di elaborare Big Data, di sviluppare soluzioni tramite dati di streaming o cronologici e di analizzare i risultati. Si tratta della soluzione di Microsoft al problema dei Big Data. Esso comprende strumenti utili all’analisi dei dati quali Hive e Mahout. Il secondo strumento permette di costruire e testare direttamente una soluzione di analisi predittiva. Una volta sviluppata, sarà possibile pubblicare tale soluzione come metodo il quale potrà essere richiamato localmente mediante delle Web API (ossia, un interfaccia per applicazioni distribuite basata sul protocollo di comunicazione REST, accessibile anche dal browser). Attraverso interfacce testuali e grafiche, come mostrato in Figura 5.10, è possibile sfruttare tali strumenti al fine di realizzare applicazioni (secondo il paradigma di Hadoop) per l’analisi dei Big Data a scopo predittivo. Figura 5.10. L’interfaccia grafica di Azure Machine Learning Grazie alle direttive di entrambi, è possibile gestire qualunque tipologia di dataset, sia strutturato che non strutturato. Un’ulteriore soluzione di cloud coumputing è offerta dalla piattaforma Google Cloud Platform (Figura 5.11). Anch’essa offre una serie di strumenti, tra cui, Google Prediction API. Si tratta di un interfaccia Web API la quale di accedere agli algoritmi di machine learning di Google e permette di fare previsioni su dati provenienti da varie fonti. Attraverso l’interfaccia Web è possibile importare collezioni di dati e creare le proprie applicazioni in linguaggio Python o, in alternativa, richiamare uno dei metodi per la creazione di modelli di previsione già esistenti. La Figura 5.12 mostra l’implementazione, da parte del client, di un modello di classificazione attraverso la sintassi richiesta per richiamare il metodo. 94 5 Tool di Analisi Predittiva Figura 5.11. Il logo di Google Cloud Platform Figura 5.12. Metodo richiamato dall’interfaccia di Google Prediction API Dall’interfaccia è, infine, possibile accedere a diversi metodi per il testing del modello e la visualizzazione dei risultati. Grazie all’accesso a tali strumenti, l’analisi predittiva basata sul cloud rappresenta la soluzione più rapida e meno costosa per sfruttare a pieno tutti i vantaggi del mondo dei Big Data. 6 Case study: Utilizzo di R per Predire i Ritardi dei Voli Nel seguente capitolo verranno esaminate, da un punto di vista pratico, tutte le tematiche finora affrontate, le quale riguardano lo svolgimento del processo di analisi predittiva. Nell’esempio proposto verrà affrontato il problema della previsione dei tempi di attesa in aeroporto. I dati utilizzati a tale scopo verranno prelevati da una fonte liberamente disponibile sul Web. Lo strumento impiegato per implementare il modello di previsione scelto, infine, sarà il tool di analisi dei dati denominato R. 6.1 Introduzione Al fine di illustrare lo svolgersi di un processo di analisi predittiva, verrà affrontato un caso di studio di interesse comune, ossia la previsione dei tempi di attesa in aeroporto. Per tutte le fasi del progetto verrà utilizzato il tool di data mining chiamato R, il quale comprende un ambiente di sviluppo ed un proprio linguaggio di programmazione. La scelta di tale strumento è determinata dalla sua versatilità. Esso, infatti, contiene molti metodi i quali implementano procedure utili per il trattamento dei dati e per la definizione dei modelli di predizione. Per tale motivo, R si adatta perfettamente allo scopo di realizzare una previsione partendo da semplici dati grezzi. Il percorso da seguire, per la realizzazione di un processo di analisi predittiva, prevede diverse fasi indispensabili per il successo dell’intero procedimento. La prima parte consiste nella definizione degli obiettivi della predizione. Comprendere a pieno l’evento che si vuole prevedere è fondamentale per effettuare la scelta del modello più adatto. La fase successiva consiste nello stadio di acquisizione ed elaborazione dei dati. Quest’ultima si divide in più sotto-fasi le quali porteranno ad ottenere una collezione di dati che potranno essere utilizzati per l’“addestramento” ed il testing del modello. In seguito, infatti, il dataset ottenuto dal filtraggio dei dati grezzi iniziali verrà suddiviso in due gruppi, ossia il training dataset ed il test dataset. Dopo aver costruito il modello, infine, l’ultimo stadio prevede la valutazione dei risultati ottenuti e, di conseguenza, della veridicità del modello di previsione. Di seguito verranno esposte le varie fasi appena citate. 96 6 Case study: Utilizzo di R per Predire i Ritardi dei Voli 6.2 Definizione degli Obiettivi ed Acquisizione dei Dati L’obiettivo della previsione è il punto di partenza sul quale focalizzare l’attenzione durante la fase iniziale. Nel caso preso in esame si intende prevedere l’intervallo temporale che potrebbe intercorre tra l’orario previsto per l’atterraggio di un aereo e l’orario reale di arrivo. Poichè si tratta di un valore numerico, e non di uno tra più possibili esiti predeterminati, il problema dovrà essere affrontato mediante un algoritmo di regressione lineare, piuttosto che con un algoritmo di classificazione. Ciò mette in evidenza l’importanza di riconoscere il tipo di variabile che si intende prevedere. Il processo di analisi predittiva viene generalmente effettuato partendo da dati provenienti da diverse fonti. Uno dei passi fondamentali consiste nel determinare quali, tra le informazioni provenienti da tali sorgenti, includere durante la realizzazione del modello. Scegliere dati pertinenti all’obiettivo permette di realizzare previsioni di carattere pratico oltre che puramente matematico. Nel caso in esame, i dati prelevati contengono informazioni relative ai voli effettuati lungo le rotte aeree dello stato di New York, durante i primi quattro mesi del 2015. Si tratta di un enorme dataset contenente diverse informazioni riguardo ogni specifico volo. Ciascuna di tali informazioni viene raccolta e resa pubblica dalle compagnie aeroportuali, dunque può essere facilmente reperibile per replicare il processo di previsione. Tra i dati raccolti vi sono informazioni temporali, quali anno, mese e giorno in sui è stato effettuato ogni volo, informazioni riguardanti il mezzo aereo ed informazioni sulle partenze, sugli arrivi e sullo stato del volo. Vengono inoltre riportate le possibili cause di ritardo per ogni tratta, indicando, per ciascuna di esse il tempo (in minuti) relativo alla stessa. Tali informazioni sono state riportate in formato tabulare: ogni riga corrisponde ad un’osservazione relativa ad un volo, mentre ogni colonna rappresenta un attributo contenente le informazioni appena citate. La Tabella ?? mostra nel dettaglio gli attributi prelevati e la relativa descrizione. I dati sono contenuti in un file in formato Comma-separated values (.CSV) e prelevati mediante l’istruzione: > aeroporto_2015 <- read.csv("file_aeroporto".csv") Sono state raccolte, in totale, 178.375 osservazioni, ciascuna contenente 32 attributi (riportati nella Tabella 6.1, corrispondenti ad ogni volo effettuato in quattro mesi, come mostrato in Figura 6.1. Un’analisi ancora più approfondita richiederebbe dati relativi ad osservazioni raccolte durante mesi precedenti a quelli già incluse nel dataset. Un’ulteriore quantià di osservazioni determina una maggiore precisione del modello di previsione. La raccolta di dati relativi a periodi storici sempre più lontani nel passato, tuttavia, pur migliorando l’affidabilità della previsione, richiede una maggiore quantità di memoria per contenere tali dati. È, dunque, necessario trovare il migliore compromesso tra i due vantaggi appena citati. 6.2 Definizione degli Obiettivi ed Acquisizione dei Dati Attributo 97 Descrizione YEAR Anno in cui viene effettuato il volo MONTH Mese in cui viene effettuato il volo DAY OF MONTH Giorno in cui viene effettuato il volo DAY OF WEEK Giorno della settimana in cui viene effettuato il volo UNIQUE CARRIER Codice identificativo del velivolo CARRIER Codice identificativo del velivolo, assegnato da IATA FL NUM Codice assegnato al volo ORIGIN AIRPORT ID Codice identificativo dell’aeroporto di partenza ORIGIN Nome dell’aeroporto di partenza ORIGIN CITY NAME Città di appartenenza dell’aeroporto di partenza ORIGIN STATE Stato di appartenenza dell’aeroporto di partenza DEST AIRPORT ID Codice identificativo dell’aeroporto di arrivo DEST Nome dell’aeroporto di arrivo DEST CITY NAME Città di appartenenza dell’aeroporto di arrivo DEST STATE Stato di appartenenza dell’aeroporto di arrivo CRS DEP TIME Orario di partenza previsto DEP TIME Orario di partenza reale DEP DELAY Differenza tra l’orario di partenza previsto e quello reale CRS ARR TIME Orario di arrivo previsto ARR TIME Orario di arrivo reale ARR DELAY Differenza tra l’orario di arrivo previsto e quello reale CANCELLED Booleano: 1 se il volo è stato cancellato CANCELLATION CODE Codice della cancellazione DIVERTED Booleano: 1 se il volo è stato dirottato CRS ELAPSED TIME Durata del volo prevista ACTUAL ELAPSED TIME Durata del volo reale DISTANCE Distanza percorsa (miglia) CARRIER DELAY Ritardo nel carico dei bagagli, in minuti WEATHER DELAY Ritardo dovuto a condizioni meteorologiche, in minuti NAS DELAY Ritardo per congestione del National Aviation System, in minuti SECURITY DELAY Ritardo dovuto a motivi di sicurezza, in minuti LATE AIRCRAFT DELAY Ritardo dovuto a precedenti ritardi, in minuti DIV ARR DELAY Differenza tra l’orario previsto e quello reale per voli dirottati Tabella 6.1. Attributi relativi alle osservazioni Figura 6.1. Dataset prelevato all’interno dell’ambiente di sviluppo di R 98 6 Case study: Utilizzo di R per Predire i Ritardi dei Voli Prima di sfruttare i dati a disposizione, per la creazione del modello, è necessario effettuare un’operazione di analisi su di essi per assicurarsi che siano compatibili con quelli richiesti dal modello di previsione scelto. 6.3 Analisi e Preparazione dei Dati Gli attributi contenuti all’interno del dataset non sono sempre tutti utili per la realizzazione del modello. Alcuni di essi, infatti, devono essere necessariamente rimossi prima di procedere ulteriormente con l’analisi dei dati. Nel caso in esame, in cui è stato scelto di impiegare un modello di regressione lineare al fine di realizzare la previsione, gli attributi di valore testuale non possono essere utilizzati e devono essere obbligatoriamente rimossi. Mediante il metodo str() è possibile visualizzare la struttura interna di un qualsiasi oggetto in R: > str(aeroporto_2015) ’data.frame’: 178375 obs. of 37 variables: $ YEAR : int 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 ... $ MONTH : int 1 1 1 1 1 1 1 1 1 1 ... $ DAY_OF_MONTH : int 1 2 3 4 5 6 7 8 9 10 ... $ DAY_OF_WEEK : int 4 5 6 7 1 2 3 4 5 6 ... $ UNIQUE_CARRIER : chr "AA","B6","DL",..: 1 1 1 1 1 1 1 1 1 1 ... $ CARRIER : chr "AA","B6","DL",..: 1 1 1 1 1 1 1 1 1 1 ... $ FL_NUM : int 1 1 1 1 1 1 1 1 1 1 ... $ ORIGIN_AIRPORT_ID : int 12478 12478 12478 12478 12478 12478 12478 12478 12478 12478 ... $ ORIGIN : chr "ABQ","ALB","ATL",..: 44 44 44 44 44 44 44 44 44 44 ... $ ORIGIN_CITY_NAME : chr "Aguadilla, PR",..: 56 56 56 56 56 56 56 56 56 56 ... $ ORIGIN_STATE_ABR : chr "AL","AR","AZ",..: 25 25 25 25 25 25 25 25 25 25 ... $ DEST_AIRPORT_ID : int 12892 12892 12892 12892 12892 12892 12892 12892 12892 12892 ... $ DEST : chr "ABQ","ALB","ATL",..: 46 46 46 46 46 46 46 46 46 46 ... $ DEST_CITY_NAME : chr "Aguadilla, PR",..: 47 47 47 47 47 47 47 47 47 47 ... $ DEST_STATE_ABR : chr "AL","AR","AZ",..: 4 4 4 4 4 4 4 4 4 4 ... $ CRS_DEP_TIME : int 900 900 900 900 900 900 900 900 900 900 ... $ DEP_TIME : int 855 850 853 853 853 856 859 856 901 903 ... $ DEP_DELAY : num -5 -10 -7 -7 -7 -4 -1 -4 1 3 ... $ CRS_ARR_TIME : int 1230 1230 1230 1230 1230 1235 1235 1235 1235 1235 ... $ ARR_TIME : int 1237 1211 1151 1218 1222 1300 1221 1158 1241 1235 ... $ ARR_DELAY : num 7 -19 -39 -12 -8 25 -14 -37 6 0 ... $ CANCELLED : num 0 0 0 0 0 0 0 0 0 0 ... $ CANCELLATION_CODE : chr "","A","B","C",..: 1 1 1 1 1 1 1 1 1 1 ... $ DIVERTED : num 0 0 0 0 0 0 0 0 0 0 ... $ CRS_ELAPSED_TIME : num 390 390 390 390 390 395 395 395 395 395 ... $ ACTUAL_ELAPSED_TIME: num 402 381 358 385 389 424 382 362 400 392 ... $ DISTANCE : num 2475 2475 2475 2475 2475 ... $ CARRIER_DELAY : num NA NA NA NA NA 0 NA NA NA NA ... $ WEATHER_DELAY : num NA NA NA NA NA 0 NA NA NA NA ... $ NAS_DELAY : num NA NA NA NA NA 25 NA NA NA NA ... $ SECURITY_DELAY : num NA NA NA NA NA 0 NA NA NA NA ... $ LATE_AIRCRAFT_DELAY: num NA NA NA NA NA 0 NA NA NA NA ... $ FIRST_DEP_TIME : int NA NA NA NA NA NA NA NA NA NA ... $ TOTAL_ADD_GTIME : num NA NA NA NA NA NA NA NA NA NA ... $ LONGEST_ADD_GTIME : num NA NA NA NA NA NA NA NA NA NA ... $ DIV_ARR_DELAY : num NA NA NA NA NA NA NA NA NA NA ... Osservando la tipologia di ogni variabile, appare evidente come sarà necessario rimuovere gli attributi UNIQUE CARRIER, CARRIER, ORIGIN, ORIGIN CITY NAME, ORIGIN STATE ABR, DEST, DEST CITY NAME, DEST STATE ABR in quanto non assumono valori numerici. Il metodo subset() restituisce una tabella formata da un sottoinsieme degli attributi della tabella aeroporto 2015, eliminando quelli indicati: > aeroporto_2015 <- subset(aeroporto_2015, select = -c(UNIQUE_CARRIER, CARRIER, ORIGIN, ORIGIN_CITY_NAME, ORIGIN_STATE_ABR, DEST, DEST_CITY_NAME, CANCELLATION_CODE)) È bene notare come l’attributo DEST STATE ABR, pur costituito da valori testuali, non è stato eliminato per conservare informazioni relative all’aeroporto di 6.3 Analisi e Preparazione dei Dati 99 partenza. Si osserva come tale attributo presenti valori discreti e, per questo motivo, può essere ancora utilizzato, in un modello di regressione lineare, se tali valori vengono associati ad alcuni indici numerici tramite il metodo factor(). Mediante quest’ultimo, ciascun valore alfabetico verrà assegnato ad un indice numerico; dunque, sarà possibile usare la variabile DEST STATE ABR: > > aeroporto_2015$CANCELLATION_CODE <- factor(aeroporto_2015$CANCELLATION_CODE) Usando il metodo summary(), il quale restituisce il numero di osservazioni corrispondenti ad ogni possibile valore discreto di una variabile, è possibile determinare il numero di osservazioni relativo ad ogni valore discreto di DEST STATE ABR: > summary(aeroporto_tot$ORIGIN_STATE_ABR) AL AR AZ CA CO FL GA HI IL 183 288 928 8520 1506 22012 6093 101 7836 NH NJ NM NV NY OH OR PA PR 176 572 79 1544 90911 2584 227 340 1893 IN KY LA MA MD 129 521 857 5125 1962 SC TN TX UT VA 769 1173 4758 699 3904 ME MI 355 3237 VI VT 231 379 MN MO NC 942 1083 5438 WA WI WY 593 386 2 NE 39 Il risultato del metodo mostra come CANCELLATION CODE possa assumere esclusivamente 39 valori possibili, i quali rappresentano alcuni dei codici che vengono attribuiti ai diversi aeroporti in tutto il mondo dalla IATA (International Air Transport Association). Poichè all’interno dei dati prelevati, sono presenti, tra i vari attributi, informazioni numeriche sul ritardo che ha caratterizzato ogni volo, l’algoritmo che verrà scelto per la realizzazione del modello sarà un algoritmo di apprendimento supervisionato. Al fine di indicare esplicitamente tale intervallo temporale è utile evidenziare un attributo di uscita il quale rappresenta il ritardo e che costituirà la variabile di restituzione del modello. Tale valore sarà dato dall’intervallo di attesa prima dell’arrivo di ogni aereo (ARR DELAY) e verrà , per convenienza, rinominato come OUTPUT mediante la sintassi: > colnames(aeroporto_2015)[colnames(aeroporto_2015)=="ARR_DELAY"] <- "OUTPUT" > aeroporto_2015 <- subset(aeroporto_2015, select = -c(YEAR, FL_NUM, ORIGIN_AIRPORT_ID, DEST_AIRPORT_ID)) L’attributo OUTPUT rappresenta, dunque, la variabile indipendente. Esso potrà, inoltre, indicare eventuali anticipi mediante valori negativi. I restanti attributi rappresenteranno, invece, le variabili indipendenti del modello. Dopo aver definito attributi dipendenti ed indipendenti, è necessario esaminare il dataset al fine di individuare le variabili le quali hanno un reale impatto nel determinare il ritardo di arrivo di un aereo. Tale operazione, in casi più complessi, viene svolta mediante l’intervento di esperti del settore. In questo caso verranno rimosse le variabili, le quali, intuitivamente, non rappresenteranno una possibile causa del mancato rispetto dell’orario di arrivo previsto per ogni aereo. Le variabili YEAR, FL NUMBER, ORIGIN AIRPORT ID, DEST AIRPORT ID e DISTANCE risultano non avere alcun peso su tale ritardo, verranno quindi rimosse mediante la seguenti istruzione: Il dataset modificato in tale maniera contiene esclusivamente valori numerici i quali hanno, quasi tutti, un impatto nel determinare i tempi di ritardo di un viaggio 100 6 Case study: Utilizzo di R per Predire i Ritardi dei Voli aereo. L’attributo CANCELLED non è stato eliminato in quanto, mediante un valore booleano, indica i voli cancellati per qualche motivo. Non avendo tali osservazioni alcun utilizzo nel descrivere una lista di voli, i quali possono o no aver subito un ritardo, devono essere eliminati. Verrà, dunque, usato il valore CANCELLED = 1 per individuare le tuple relative ad ogni volo mai arrivato a destinazione. Tali tuple dovranno essere rimosse mediante il comando: > aeroporto_2015 <- aeroporto_2015[!(aeroporto_2015$CANCELLED == 1), ] > aeroporto_2015 <- subset(aeroporto_2015, select = -c(CANCELLED)) Poichè, infine, i restanti valori dell’attributo CANCELLED saranno esclusivamente valori nulli, tale attributo potrà essere eliminato. 6.4 Estrazione di Nuove Variabili Durante la realizzazione di un modello di previsione si tenta di recuperare quante più informazioni possibili al fine di ottenere risultati particolarmente accurati. In genere, un’organizzazione che possiede dati propri tenta di integrare questi ultimi, precedentemente analizzati, con dati provenienti da fonti esterne. Nel caso in esame, si vuole aggiungere, ai dati già prelevati ed analizzati, delle informazioni riguardanti l’intervallo di tempo tra la data di partenza del volo, il quale può aver subito un ritardo, ed il giorno festivo più vicino. Si vuole mettere in evidenza il fatto che il tempo di arrivo di un mezzo aereo possa essere influenzato da festività recenti o in arrivo. Per determinare la presenza di festività vicine al giorno della partenza, viene creato un vettore all’interno del quale si riportano le date dei giorni festivi a partire dagli ultimi mesi del 2014 fino ai primi mesi del 2015: > vacanze <- c(’2015-01-01’, ’2015-01-06’, ’2015-02-17’, ’2014-10-30’, ’2014-12-06’, ’2014-12-24’, ’2014-12-25’) > vacanze <- as.Date(vacanze) Il comando as.Date() converte il vettore di stringhe in un vettore di date. Lo scopo è quello di creare un nuovo attributo del data frame aeroporto 2015, chiamato GiorniVacanze. Per ogni osservazione, verrà confrontata la data relativa ad essa con ogni data contenuta del vettore in cui sono riportati i giorni festivi. Alla data di ogni volo, dunque, verrà associata la differenza, in giorni, con la festività più vicina, e tale quantità sarà aggiunta come nuovo attributo del data frame. L’operazione finora descritta verrà effettuata mediante l’uso di una funzione. R infatti, essendo, a tutti gli effetti, un linguaggio di programmazione, permette la realizzazione di funzioni personalizzate per affrontare un problema al quale gli sviluppatori non hanno previsto soluzioni. Ciò rende stesso R un sistema per l’analisi dei dati molto potente e versatile. La funzione verrà creata mediante la seguente sintassi: 6.4 Estrazione di Nuove Variabili 101 > GiorniAlleVacanze <- function(mese, giorno) { anno <- ’2015’; data <- as.Date(paste(anno,mese,giorno,sep = ’-’)); numGiorni <- as.numeric(min(abs(data-vacanze))); return(numGiorni); } dove il costrutto function introduce la definizione della funzione, la quale accetterà in ingresso il mese e il giorno in cui è stato effettuato ogni volo (ossia, i primi due attributi di ogni osservazione) e restituirà la minore tra le differenze, in giorni, tra tale data e ogni data del vettore delle date festive (denominato vacanze). Il metodo paste() serve a comporre una stringa a partire da più stringhe, le quali, in tal caso, saranno costituite dai parametri mese e giorno forniti alla funzione. La stringa numGiorni <- as.numeric(min(abs(data-vacanze))) contiene i metodi abs() il quale preleva il valori assoluti della differenze tra l’elemento data ed ogni elemento del vettore vacanze (ogni differenza potrà essere positiva, se la data confrontata è precedente a quella dell’osservazione, oppure negativa, nel caso contrario) ed il metodo min(), il quale preleva la più piccola tra tali differenze. La funzione cosı̀ definita potrà essere, infine, utilizzata sui dati appartenenti ad ogni osservazione al fine di associare a quest’ultima il valore di restituzione numGiorni. Ciò può essere realizzato mediante il metodo mapply(), il quale, come primo parametro, invoca la funzione indicata per ogni coppia di elementi delle colonne MONTH e DAY OF MONTH; il risultato sarà aggiunto alla rispettiva tupla. > aeroporto_2015$GiorniVacanze <- mapply(GiorniAlleVacanze, aeroporto_2015$MONTH, aeroporto_2015$DAY_OF_MONTH) > matrice_correlazioni <- cov(aeroporto_2015) Il dataset cosı̀ ottenuto conterrà un’ulteriore informazione la quale fornirà un ulteriore punto di forza alla veridicità del modello. Dopo aver ottenuto tutti gli attributi con cui si intende implementare il modello, è bene verificare alcune delle ipotesi che sono state assunte durante la definizione del modello di regressione lineare. Tra tali ipotesi, la più importante è quella che prevede la mancanza di un’elevata correlazione statistica tra gli attributi del dataset. Essa viene definita ipotesi di multicollinearità ed è importante per garantire il calcolo di coefficienti di regressione coerenti. Tale ipotesi può essere verificata mediante il metodo cor(). Quest’ultimo crea una matrice quadrata le cui righe e colonne contengono gli attributi del dataset; per ogni elemento di tale matrice, il metodo fornisce la covarianza di ogni coppia di attributi: Utilizzando tale matrice, mostrata in Figura 6.2, è possibile individuare gli attributi statisticamente correlati tra di loro. Sfruttando il medoto findCorrelation(), contenuto nel pacchetto caret, è possibile ottenere suggerimenti sugli attributi che dovrebbero essere eliminati per garantire un basso livello di correlazione tra gli attributi del dataset: 102 6 Case study: Utilizzo di R per Predire i Ritardi dei Voli Figura 6.2. Matrice delle correlazioni tra gli attributi del dataset > findCorrelation(matrice_correlazioni, cutoff = 0.75) [1] 4 7 13 11 Il metodo findCorrelation() restituisce un vettore contenente la posizione degli attributi i quali possiedono una correlazione reciproca maggiore del 75%. Essi corrispondono alle variabili CRS DEP TIME, CRS ARR TIME, CRS ELAPSED TIME e DISTANCE. Questi ultimi dovranno essere necessariamente eliminati al fine di favorire la precisione di quest’ultimo. > aeroporto_2015 <- subset(aeroporto_2015, select = -c(CRS_DEP_TIME, CRS_ARR_TIME, CRS_ELAPSED_TIME, DISTANCE)) Dopo aver eliminato tali valori, il comando findCorrelation() non indica più altri attributi correlati; i restanti potranno, dunque, essere utilizzati. 6.5 Suddivisione dei Dati ed Implementazione del Modello Dopo aver realizzato il dataset, includendo i dati che plausibilmente concorrono a determinare le cause dei ritardi nei voli, è possibile utilizzare tali dati per la creazione del modello. Esso servirà a realizzare previsioni su dati ancora sconosciuti. A tal fine sarà necessario suddividere il dataset comprendente tutte le osservazioni in due parti, ossia il training dataset ed il test dataset. Il primo servirà all’addestramento del modello ed al calcolo dei coefficienti di regressione e sarà costituito dalla maggior parte delle osservazioni (è necessaria almeno una percentuale pari al 70% dei dati). Il secondo gruppo verrà impiegato, in seguito, per verificare la veridicità dei risultati e sarà costituito dalla parte restante del dataset. Il numero di osservazioni per ciascun gruppo può essere calcolato mediante i comandi: > dimensione_trainSet <- round(nrow(aeroporto_2015) * 0.7) > dimensione_testSet <- nrow(aeroporto_2015) - dimensione_trainSet In tal modo alla variabile dimensione trainSet, verrà associata la quantità di osservazioni appartenenti al training dataset (pari a 116.573 osservazioni), mentre la variabile dimensione testSet conterrà il numero di osservazioni del test dataset (49.960 elementi). 6.5 Suddivisione dei Dati ed Implementazione del Modello 103 È importante, a questo punto, considerare l’ordine con il quale i vari dati vengono prelevati e collocati nei due gruppi. Realizzare un training dataset, utilizzando rispettivamente, le prime osservazioni del dataset di partenza, infatti, non è sempre una scelta possibile. Osservando la tabella aeroporto 2015 è possibile notare come i vari dati siano ordinati secondo il mese in cui sono stati prelevati. Se ottenuta in quest’ordine, una tale collezione di dati non permette la realizzazione di un modello di previsione valido in quanto il training dataset deve, necessariamente, contenere informazioni relative all’intera collezioni dei dati di partenza. Impiegando, invece, esclusivamente le prime 116.573 osservazioni, relative ai primi mesi, il modello non riusulterà essere realmente rappresentativo della totalità delle informazioni disponibili. Una possibile soluzione è quella di prelevare le informazioni da collocare nel training dataset in maniera casuale. Ciò viene realizzato mediante i seguenti comandi: > set.seed(123) > indici_casuali <- sample(seq_len(length = nrow(aeroporto_2015)), size = dimensione_trainSet) > trainSet <- aeroporto_2015[indici_casuali, ] > testSet <- aeroporto_2015[-indici_casuali, ] > model <- lm(formula = trainSet$OUTPUT ~ . , data=trainSet) Tra questi comandi citiamo il metodo seq len(length), che genera una sequenza casuale di lunghezza length (in questo caso pari alla dimensione del dataset di partenza). Quest’ultima viene assegnata al metodo sample(seq, size). Esso è un generatore che preleva dalla sequenza seq un campione di indici pari a dimensione trainSet in maniera pseudo-casuale, dopo essere stato inizializzato assegnando un opportuno valore seed (seme). Ogni volta che si usa lo stesso seme, si otterrà sempre la stessa identica sequenza. La sequenza casuale indici casuali viene utilizzata, infine, per prelevare le osservazioni che faranno parte del training dataset trainSet, in maniera casuale. Le restanti saranno assegnate al test dataset chiamato testSet. Dati questi ultimi, è, dunque, possibile realizzare il modello di regressione lineare mediante la funzione lm() la quale, presi in ingresso la variabile dipendente trainSet$OUTPUT ed il training dataset, ricava automaticamente i coefficienti di regressione. Ciascuno di quest’ultimi misura il cambiamento nel valore (medio) di OUTPUT associato ad un cambiamento di una unità dell’n-esima variabile indipendente, mantenendo costanti tutte le altre variabili. La variabile model rappresenta l’implementazione pratica del modello di regressione lineare. Mediante quest’ultima è possibile cominciare ad effettuare previsioni vere e proprie. Prima di considerare il modello come valido a tutti gli effetti è necessario effettuare delle prove su di esso. La prima e più importante consiste nel fornire al modello stesso i dati contenuti nel test dataset precedentemente realizzato. In tal modo i risultati potranno essere confrontati con quelli emersi dall’implementazione con il training dataset. Se questi ultimi due risultati risulteranno essere simili tra di 104 6 Case study: Utilizzo di R per Predire i Ritardi dei Voli loro, il modello potrà essere considerato affidabile. La sintassi per l’implementazione del modello è la seguente: > predizione <- predict(model, testSet, interval="predict", level=.95) L’attributo level indica il livello di confidenza del modello. La Figura 6.3 mostra la tabella dei risultati restituiti. Nella colonna fit vengono mostrati i risultati previsti per per la variabile OUTPUT (viene visualizzato il valore NA se non è previsto alcun ritardo), mentre, le colonne lwr e upr mostrano l’intervallo dentro il quale possono ricadere i possibili risultati a causa dell’errore. Figura 6.3. Risultati della Previsione Per praticità, sarà utile affiancare i valori previsti con quelli osservati. Se la maggior parte di essi risulteranno essere relativamente simili tra di loro il modello potrà essere considerato valido e potrà essere impiegato per realizzare previsioni. Al fine di realizzare un’analisi approfondita è possibile realizzare ulteriori prove le quali garantiranno, in futuro, una maggiore precisione dei risultati. 6.6 Analisi della Regressione Prima di utilizzare il modello appena realizzato con dati attuali è bene effettuare ulteriori prove per verificare la sua correttezza. Una simile verifica può essere realizzata ricorrendo ad alcuni metodi statistici. 6.6 Analisi della Regressione 105 La variabile dipendente nell’equazione di regressione è modellata come una funzione delle variabili indipendenti, più un termine d’errore, attraverso il metodo dei “minimi quadrati” (OLS). Una volta costruito un modello di regressione, è importante confermarne la bontà mediante test statistici effettuati sulla base di ipotesi riguardanti la distribuzione di probabilità degli errori. Tra tali test il più comune è l’analisi dei residui [1]. Si definisce residuo ei della regressione la differenza tra il valore osservato OUTPUT (del training dataset) e lo stesso valore previsto dal modello. Il grafico dei residui è un diagramma di dispersione con i residui sull’asse delle ordinate ed i valori stimati sull’asse delle ascisse. L’analisi di tali residui risulta essere di particolare importanza quando si tenta di costruire un modello di regressione lineare valido; essa permette di valutare se il modello di regressione impiegato è adeguato per l’analisi dell’insieme dei dati considerato. Tale analisi prevede di verificare la validità delle assunzioni ipotizzate durante un processo di regressione lineare (distribuzione normale degli errori, ovvero dei residui, omogeneità delle varianze d’errore, indipendenza degli errori dai valori della variabile indipendente). L’analisi può essere effettuata grazie al linguaggio R il quale offre la funzione plot(). > plot(model) Essa restituisce una serie di grafici sui quali è possibile effettuare alcune verifiche al fine di garantire la qualità del modello. In Figura 6.4 viene illustrato il primo di tali grafici. Esso mostra gli errori residui sull’asse delle ordinate ed i valori stimati della variabile dipendente sull’asse delle ascisse; esso rappresenta, dunque, il grafico dei residui. Quest’ultimi devono essere distribuiti in modo simmetrico attorno alla linea orizzontale che rappresenta la linea di regressione; in altre parole, non dovrebbe esserci una netta tendenza nella distribuzione dei punti. Ciò verifica l’ipotesi che gli errori (residui) sono normalmente distribuiti. Nel caso in esame, i residui risultano essere, per la maggior parte, vicini alla linea di regressione, salvo alcune eccezioni (valori outlier ). In Figura 6.5 viene mostrato il grafico Q-Q plot. Si tratta di un grafico che confronta i valori dei residui standardizzati (quantile reale) con una linea che individua la loro distribuzione normale (quantile teorico). La standardizzazione si ottiene dividendo il valore di ogni residuo per la deviazione standard dello stesso residuo. Tale grafico rappresenta una figura per cui se i punti si distribuiscono sulla linea la distribuzione dei residui risulta normale, e quindi la regressione rappresenta un modello adeguato. Anche in questo caso, il modello risulta essere affidabile in quanto la maggior parte dei punti ricade lungo la curva. In Figura 6.6 viene mostrato un ulteriore grafico che mostra la radice quadrata dei residui standardizzati in funzione dei valori stimati. Anche in questo caso non ci deve essere alcuna tendenza evidente in questo grafico, ossia un eccessivo numero di valori outlier. In Figura 6.7, infine, viene mostrato un grafico che mostra il valore di leverage dei punti stimati. Tale parametro, il cui valore varia tra 0 ed 1, è una misura di quanto un dato valore della variabile indipendente si discosta dalla sua media. Il valore 106 6 Case study: Utilizzo di R per Predire i Ritardi dei Voli Figura 6.4. Residual vs Fitted Figura 6.5. Q-Q plot 6.6 Analisi della Regressione 107 Figura 6.6. Scale-Location di leverage dei punti rappresenta una misura dell’importanza dell’osservazione nel determinare il risultato del modello di regressione. I punti spostati a destra ed in alto sono quelli che hanno peso maggiore sulla regressione. Sovrapposte al plot ci sono alcune linee di contorno le quali permettono di misurare la distanza di Cook. Quest’ultima rappresenta un’altra misura dell’importanza di ciascuna osservazione rispetto alla regressione: valori di distanze di Cook bassi per un punto indicano che la rimozione della rispettiva osservazione ha poco effetto sui risultati della regressione. Valori di distanze di Cook superiori a 1, invece, sono sospetti ed indicano la presenza di un possibile outlier. Un modello che rispetta le condizioni appena verificate garantirà un’alta percentuale di successo nel prevedere futuri ritardi dei voli. Non sempre, tuttavia, tali condizioni vengono rispettate. Un’errata scelta dei parametri di ingresso (ossia delle variabili indipendenti) può causare un modello non ottimale. Spesso, infatti, è necessario ripetere più volte il processo appena realizzato per ottenere più modelli, quindi confrontarli tra di loro e scegliere quello con le caratteristiche migliori, oppure quello che fornisce risultati che più si avvicinano alle osservazioni date. L’aiuto di esperti del settore spesso risulta essere determinante al fine di scegliere gli attributi che meglio permettono ai risultati ricavati dal training dataset di concordare con quelli forniti dal test dataset. 108 6 Case study: Utilizzo di R per Predire i Ritardi dei Voli Figura 6.7. Residual vs Leverage 7 Conclusioni e uno Sguardo al Futuro Durante lo svolgimento della presente tesi sono stati approfonditi gli aspetti principali dell’analisi predittiva. Tale disciplina è stata descritta partendo dall’insieme delle tecniche che costituiscono il mondo dell’analisi dei dati digitali, ossia le tecniche di data mining e di machine learning. Queste ultime, a loro volta, sfruttano teorie statistiche per formulare strumenti capaci di utilizzare le informazioni, contenute nei dati, al fine di prevedere lo svolgersi degli avvenimenti futuri. L’analisi predittiva si è evoluta partendo dalle discipline appena citate diventando un vero e proprio strumento professionale a disposizione di chiunque voglia minimizzare la probabilità di eventuali rischi nell’affrontare un’importante decisione. Sono state illustrate, infatti, molte delle attuali applicazioni di tali metodologie in ambiti diversi, quali il marketing, la medicina e la sicurezza. Questi ultimi hanno integrato l’analisi dei dati in maniera sempre più efficiente, sviluppando un vero e proprio percorso diventato ormai un metodo comunemente utilizzato per ricavare quante più informazioni possibili sul futuro in maniera affidabile. Tale percorso si compone di una successione di processi da eseguire con un particolare ordine, ed è stato illustrato a partire dalla raccolta dei dati grezzi fino all’esame svolto sui risultati finali. La più importante caratteristica messa in evidenza costituisce anche la regola più importante di qualsiasi previsione basata sui dati: al fine di prevedere un evento futuro è, prima di tutto, necessario raccogliere informazioni riguardo il comportamento passato dell’oggetto della previsione stessa. Sulle informazioni appena citate, si basa la parte successiva della tesi. In particolare sono stati analizzati i cosiddetti Big Data, ossia grosse collezioni di dati grezzi contenenti enormi quantità di informazioni. Sono stati analizzati le fonti dalle quali proviene una cosı̀ ampia mole di dati e, in seguito, gli strumenti capaci di elaborarli. I Big Data hanno la capacità di fornire un contributo determinante nello sviluppo di quegli strumenti, sopracitati, tramite i quali vengono effettuate le previsioni vere e proprie. In seguito, tali strumenti sono stati oggetto principale della trattazione; si tratta di modelli matematici, statistici e grafici in grado di utilizzare i dati in modo da realizzare una rappresentazione della realtà passata e di determinare uno schema, che potrà essere impiegato per rappresentare la realtà futura. Ognuno di questi strumenti viene utilizzato in vari ambiti diversi, in base alle proprie caratteristiche 110 7 Conclusioni e uno Sguardo al Futuro ed al tipo di dato che viene restituito. Per ciascuno di essi, inoltre, sono stati illustrati i principali vantaggi e svantaggi. Particolare rilievo è stato dato a quella particolare tipologia di modelli denominati “di regressione”. Questi ultimi costituiscono una categoria di strumenti particolarmente utilizzati in vari contesti applicativi. Nell’ultima parte sono stati analizzati alcuni dei software in grado di implementare i modelli appena citati. Data l’esistenza di un’enorme varietà di tali applicazioni, durante la trattazione sono stati esaminati solo alcuni di essi, i quali presentano caratteristiche di particolare rilievo rispetto agli altri. Uno di essi è stato utilizzato, infine, per affrontare un problema reale che richiedeva la conoscenza di informazioni future al fine di minimizzare i tempi di attesa in aeroporto. Quest’ultimo è solo un piccolo esempio delle innumerevoli applicazioni attuali e potenziali dei modelli di previsione. Dati i motivi del successo dell’analisi predittiva, già esposti durante la presente trattazione, è facile comprendere il successo che quest’ultima riscuote in misura sempre maggiore, tra le varie organizzazioni professionali le quali decidono di includerla nei propri processi decisionali. Essa, al giorno d’oggi, trova spazio all’interno degli enti più diversi quali aziende, governi, ospedali, enti di beneficenza, università e molti altri ancora. L’efficienza degli innumerevoli servizi che quest’ultimi offrono, può essere notevolmente incrementata esclusivamente attraverso i risultati delle previsioni. L’evoluzione degli strumenti digitali, della diffusione dei Big Data e dei progressi scientifici favorisce l’espansione dell’utilizzo dell’analisi predittiva come strumento a favore dei servizi. Attualmente, il numero di tool e metodi per la realizzazione di modelli di previsione è in continuo aumento. Essi vengono resi sempre più accessibili mediante l’uso di Internet e di piattaforme sul web, e di pratico utilizzo, grazie ad interfacce grafiche intuitive le quali possono essere utilizzate anche da parte di utenti non esperti. Il vantaggio di poter realizzare una previsione appare essere di cosı̀ grande interesse che il possesso di grosse quantità di dati, relative a coloro i quali usufruiscono dei vari servizi, è diventato un punto di forza per ogni organizzazione. Al fine di realizzare modelli di regressione, classificazione, sistemi di raccomandazione ed altro, tali enti hanno deciso di interscambiare i dati in proprio possesso al fine di ottenere vantaggi reciproci nell’implementare strumenti predittivi. In tal modo il flusso di informazioni diventa anch’esso sempre più accessibile e permette la realizzazione di modelli sempre più efficienti. Le capacità di predizione vengono incluse in molti sistemi informatici ed inoltre la crescente richiesta sta portando alla diffusione capillare degli algoritmi di predizione su supporti di ultima generazione. È facile immaginare come tali metodi saranno presto integrati all’interno di applicazioni per smarthphone, dispositivi wearable come gli smartwatch e, persino, sulle automobili, al fine di implementare meccanismi di sicurezza. Nonostante si tratti esclusivamente di semplici congetture, è facile immaginare come una tale diffusione delle potenzialità offerte dall’analisi predittiva comporti un’enorme quantità di potenziali nuove applicazioni. Si stima [6] che entro il 2020 l’uso delle previsioni troverà applicazioni in diversi nuovi campi che ancora non hanno pienamente sperimentato le sue potenzialità. Alcune delle possibili applicazioni future prevedibili al momento sono le seguenti: 7 Conclusioni e uno Sguardo al Futuro 111 • Applicazioni in ambito automobilistico: la possibilità di implementare software di predizione all’interno dei computer di bordo delle automobili offre una serie di nuove possibilità e vantaggi (tra queste, la possibilità di analizzare i fattori che potrebbero determinare incidenti e diminuzione dei fattori di sicurezza). Mediante l’uso di diversi tipi di sensori, ad esempio, è già possibile prevedere i casi di sonnolenza durante la guida analizzando fattori quali i movimenti degli occhi degli automobilisti e le ore trascorse al volante senza pausa. Allo stesso modo, sarà presto possibile prevedere molte altre cause di incidenti. Le tecniche di previsione trovano una vasta applicazione nella ricerca per la costruzione di automobili senza guidatore, in quanto permettono di analizzare le varie informazioni raccolte dal mondo esterno e garantire, dunque, maggiore sicurezza. Sempre in ambito automobilistico, infine, gli strumenti di previsione permetteranno di stabilire l’identità degli utilizzatori di un veicolo, basandosi su dati biometrici, rendendo la partenza del motore virtualmente impossibile ad eventuali ladri. • Applicazioni per l’intrattenimento: diversi algoritmi di previsione saranno presto implementati al fine di prevedere, con precisione crescente, i servizi di maggiore interesse. Utilizzando dati raccolti dalla cronologia web, dai social network e dalle varie interazioni all’interno del web, è già possibile prevedere con buona approssimazione le risorse di potenziale interesse. Una delle piattaforme che intende sfruttare al meglio le potenzialità dell’analisi predittiva è il servizio di radio on-line denominato “Pandora Internet Radio”. Effettuando una registrazione, questo sito permette agli utenti di creare delle stazioni radio virtuali partendo dall’inserimento di un brano o di un artista che sia gradito all’utilizzatore. Il sistema sfrutta un algoritmo di previsione, appositamente creato, per cercare brani simili a quello segnalato dall’utente, e quindi riprodurre musiche che possibilmente potranno essere di gradimento all’ascoltatore. • Applicazioni per la previsione degli ingorghi: l’implementazione di algoritmi di previsione all’interno degli strumenti GPS, collegati in rete, permetterà presto di analizzare i dati forniti da fonti appositamente realizzate al fine di fornire suggerimenti sul percorso migliore da seguire. Ciò permetterà di evitare ingorghi che potrebbero crearsi lungo il percorso precedentemente stabilito. • Applicazioni in ambito “social”: molte piattaforme, quali ad esempio Facebook, utilizzano già i recommender system al fine di fornire suggerimenti su relazioni con altri utenti e pagine di potenziale interesse. Tali tecniche vengono realizzate con efficacia sempre maggiore, includendo dati da nuove fonti e raffinando gli algoritmi. Il social network CareerBuilder, ad esempio, implementa tecniche che tentano di prevedere le migliori offerte di lavoro per ogni utente analizzando il profilo personale di quest’ultimo. Molte applicazioni di Voicemail, infine, vengono realizzate con l’intento di analizzare i messaggi e categorizzarli come eventuali messaggi di spam, esattamente come già viene fatto per le email testuali. • Applicazioni in ambito commerciale: le compagnie utilizzano sempre di più l’analisi predittiva come strumento per battere i concorrenti. Esse sono alla continua ricerca di nuove fonti di dati che possano permettere loro di prevedere quando e perchè l’interesse di un cliente verso un prodotto comincia a diminuire. Di conseguenza, tali informazioni vengono impiegate al fine di offrire nuove offerte in anticipo sulle altre compagnie. Le applicazioni finora citate sono solo alcune delle molteplici possibilità offerte 112 7 Conclusioni e uno Sguardo al Futuro dall’analisi predittiva. È facile aspettarsi come esse siano destinate ad aumentare, parallelamente allo sviluppo di nuove tecnologie e di nuovi settori di ricerca. Ringraziamenti Dopo tanti sacrifici ed una lunga attesa sono finalmente giunto al termine di questa prima parte del mio percorso universitario e desidero ringraziare tutte le persone che mi hanno sostenuto in questi anni e mi hanno permesso di raggiungere tale obiettivo. Vorrei ringraziare, innanzitutto, la mia famiglia e, in modo particolare, mia madre ed i miei nonni che mi hanno sempre guidato e mi hanno fornito i mezzi per il raggiungimento di un traguardo tanto desiderato. Ringrazio il Professor Domenico Ursino per avermi seguito con grande pazienza durante tutto il periodo di realizzazione del progetto ed i ragazzi del gruppo Barbiana 2.0 per la disponibilità e le piacevoli ore passate insieme. Ringrazio di cuore tutti i miei amici, dentro e fuori il mondo universitario, per avermi donato giornate stupende e serate ancora più belle. Un ringraziamento particolare va ad una persona speciale senza la quale non sarei riuscito a raggiungere tale traguardo e, soprattutto, a superare i momenti più difficili. Infine, vorrei ringraziare colui che, nonostante non ci sia più, è sempre stato al mio fianco per ispirarmi e darmi la forza di non arrendermi mai. Riferimenti bibliografici 1. Analisi dei Residui. https://cran.r-project.org/, 2013. 2. Predictive Analytics in the Cloud. http://www.analyticsearches.com/, 2013. 3. Breve Introduzione ad R. http://www.ecology.unibo.it/, 2015. 4. CRM. http://www.crmpartners.it/cosecrm/, 2015. 5. Regressione Lineare Esempi Pratici. http://automatica.ing.unibs.it/, 2015. 6. The Future of Prediction. http://bigthink.com/experts-corner/, 2015. 7. A. Bari. Predictive Analytics for Dummies. John Wiley and Sons, Inc., 2014. 8. J. Dean. Big Data, Data Mining and Machine Learning. John Wiley and Sons, Inc., 2014. 9. S. Finlay. Predictive Analytics, Data Mining and Big Data: Myths, Misconceptions and Methods. Palgrave MacMillan, 2014. 10. R. Miguel Forte. Mastering Predictive Analytics with R. Packt Publishing Ltd., 2015. 11. J. Hurwitz. Big Data for Dummies. John Wiley and Sons, Inc., 2014. 12. A. D’Arcy J. Kelleher, B. Mac Namee. Fundamentals of Machine Learning for Predictive Data Analytics. Mit Pr, 2015. 13. V. Kotu. Predictive Analytics and Data Mining Concepts and Practice with RapidMiner. Elsevier, 2015. 14. T. W. Miller. Modeling Techniques in Predictive Analytics with R and Python. Paul Boger, 2015. 15. B. Ratner. Statistical and Machine-Learning Data Mining, Techniques for Better Predictive Modeling and Analysis of Big Data. Taylor and Francis Group, 2015. 16. A. Sathi. Big Data Analytics: Disruptive Technologies for Changing the Game. MC Press, 2012. 17. E. Siegel. Predictive Analytics - The Power to Predict Who Will Click, Buy, Lie or Die. John Wiley and Sons, Inc., 2013. 18. J. S. Strickland. Data Science And Analytics for Ordinary People. Lulu Inc, 2015.