theses

annuncio pubblicitario
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.
Scarica