Realizzazione di un sistema predittivo dei risultati del campionato di

Transcript

Realizzazione di un sistema predittivo dei risultati del campionato di
Realizzazione di un sistema
predittivo dei risultati del
campionato di calcio italiano di
serie A 2006/2007
Docente
Prof. Giuseppe Manco
Studenti
Matr. 96803 Francesco Aiello
Matr. 94881 Vittorio Leo
Introduzione
E’ Possibile predire il futuro?
– Poteri paranormali
– Data Mining ☺
Data Mining
– Amplia la conoscenza su cui basare le proprie
decisioni
– Modellazione predittiva
Modellazione predittiva
Input:
– Esempi
– Attributo di classificazione (classifica gli esempi)
– <x, f(x)>
Output:
– Funzione di predizione h(x)
– h(x) ≈ f(x)
Modellazione predittiva
Casi di studio
Sistema predittivo dei risultati del campionato
Mondiale Germania 2006 (American University in
Sharjah)
Approccio:
– Predizione risultati di ogni singola partita
– Validità: Breve periodo di svolgimento del mondiale
Svantaggi:
– Inadatto a periodi di riferimento molto lunghi
Si richiedono dati aggiornati prossimi al periodo di svolgimento
della partita
Casi di studio
Sistema predittivo dei risultati del
campionato di calcio italiano di serie A
2006/2007
Lungo periodo di svolgimento:
– Richiede approccio differente
– Perché?
Si desidera effettuare una previsione con i soli dati a
disposizione ad inizio campionato
Raccolta dati
Quanti dati?
– 10 anni di storia del calcio
– Dal 1996/1997 al 2006/2007
Sufficienti?
– Limite imposto dall’impossibilità di reperire
informazioni affidabili e complete riferite ad anni
precedenti al 1996
Raccolta dati
Fonti:
–
–
–
–
–
–
www.paninidigital.it
www.gazzetta.it/passport
fifaworldcup.yahoo.com
www.uefa.com
www.pianetafantacalcio.it
Altri siti
Problemi di reperimento dati:
–
–
–
–
Dati a pagamento
Fonti inattendibili
Difficoltà di accesso ad informazioni globali
Smaltimento dati
Consolidamento dati
Modellazione:
– Realtà di interesse:
Tuple = Istanze (squadre)
Colonne = Attributi (caratteristiche degli oggetti che
vogliamo studiare)
Strumenti:
– Excel: raccolta e manipolazione dati
– Java: manipolazione dati (limitazioni Excel)
– ActiveXLS: interazione Java - Excel
Excel
File per ogni stagione
– Fogli:
Giocatori (squadra, ruolo, età…)
Goal
Presenze stagionali
Presenze totali
Minuti giocati
Ammoniti
Espulsi
Assist
Partite
Rigori
Squadre
– Raggruppati in Statistiche generali 1
Attributi
Anno Precedente:
–
–
–
–
–
Giocatori (goal, età, presenze, minuti giocati…)
Allenatore (età, campionati vinti…)
Squadra (trofei, dati generali giocatori…)
Risultati stagionali
Dati campionato
Anno Corrente:
–
–
–
Giocatori (goal, età, presenze, minuti giocati…)
Allenatore (età, campionati vinti…)
Squadra (dati generali giocatori…)
Differenze rispetto a stagione precedente
– Storico risultati
Attributi non inseriti
Altezza media giocatori
Durata squalifiche
Nazionalità giocatori
Giocatori controllati da famiglia Moggi
Giocatori infortunati
Gol fatti e subiti primo tempo
Gol fatti e subiti secondo tempo
Media di presenze in nazionale
Numero medio compagne giocatori
Numero medio di anni giocati nella
squadra dai giocatori
Numero medio figli giocatori
Numero medio lutti in famiglia giocatori
Numero medio per partita di sostituzioni
Pareggi a fine primo tempo
Possibili moduli (un attributo per ogni
modulo)
Peso medio giocatori
Possesso palla medio
Spettatori pareggi
Spettatori sconfitte
Spettatori vittorie
Squalifiche
Stipendio medio giocatori anno corrente
Valore crediti fantacalcio
Vittoria trofei estivi
Vittorie Totali
Vittorie a fine primo tempo
Java
Costruzione foglio Statistiche Generali 2:
– Storia dei risultati per ogni squadra
– Aggiorna il risultato storico in base al risultato della
stagione corrente
Costruzione dataset:
– File unico contenente le tuple di ogni stagione
Fogli:
–
–
–
–
Anno precedente 1 (dati ad inizio stagione)
Anno precedente 2 (risultati stagionali)
Anno corrente 1 (dati ad inizio stagione)
Anno corrente 2 (storico risultati)
Conversione del dataset da XLS ad ARFF
Java – Le classi
CacolatoreRisultatiScontriAnnoCorrente.java
– Per ogni coppia di squadre calcola i risultati nella stagione corrente
CompilatoreDataset.java
– Raggruppa i dati sparsi nei 10 file Excel in un unico file che rappresenta l’intero
Dataset
CostruttoreFile.java
– Per l’impossibilità di caricare in memoria file excel troppo grandi (limitazione delle
librerie ActiveXLS), tale classe estrae solo le informazioni utili da ognuno dei dieci
file Excel e le trasferisce in altri 10 file di dimensioni più piccole.
Formattatore.java
– Nelle tabelle contenenti gli incontri erano presenti delle disomogeneità nei nomi delle
squadre. Tale classe rende omogenei tali nomi.
Renamer.java
– Modifica i nomi degli attributi in modo da poter distinguere quelli relativi alle squadre,
ai giocatori, allenatori…
ExcelToArff.java
– A partire dal file Excel costruito tramite “CompilatoreDataset” genera un equivalente
file Arff da utilizzare in Weka.
Analisi dei dati
Weka
–
–
–
Filtraggio dati
Apprendimento
Analisi
Analisi in Weka
– Analizzati numerosi algoritmi.
– Algoritmi scelti:
J48
Bagging (combinato con J48)
Ada Boost (combinato con J48)
AttibuteSelectedClassifier con J48
FilteredClassifier con filtro supervisionato e J48
LogitBoost con DecisionStump
Vote
J48
J48 = C4.5
Costruisce un albero di decisione
Split: Migliore attributo
– Entropia, un concetto basato sulla teoria dell’informazione
Misura l’impurità di uno split
Seleziona l’attributo che massimizza la riduzione di entropia
Metaclassificatori
Problema:
– Dato:
Training set D di dati in X
Un insieme di algoritmi di learning
Una trasformazione s: X→X’ (sampling,
transformazione, partizionamento)
– Restituire:
Un nuovo algoritmo per x X che combina gli
outputs degli algoritmi ottenuti
Proprietà:
– Limitare l’errore
AdaBoost
Idea:
– Apprende un insieme di classificatori da D
Ri-pesa le istanze per enfatizzare la misclassificazione
Classificatore finale ← combinazione pesata di classificatori
Bagging
Campionamento mirato
– Dato: D contenente d istanze
– Creiamo S[i] pescando a caso (con rimpiazzamento) m istanze da D
– S[i] di dimensione m: il rimpiazzamento può far replicare le scelte
Tipicamente, si lascia fuori lo 0.37 di D
Evoluzione del dataset
Attributo di classe
– Scelta iniziale: 1, 0 (vittoria
campionato)
– Sbilanciamento nei dati
160
140
120
100
1
80
0
60
40
20
0
Modifica attributo di classe
– Soluzione:
{da1a3,da4a6,da7a9,da10a1
2,da13a15,da16a20}
posizione in classifica
– Sbilanciamento eliminato
Risultati – Cross Validation
J48
Correctly Classified Instances
Incorrectly Classified Instances
TP Rate
0.741
0.259
0.111
0.111
0.222
0.452
FP Rate
0.058
0.137
0.187
0.165
0.173
0.096
53
113
31.9277 %
68.0723 %
Precision Recall F-Measure ROC Area Class
0.714 0.741 0.727
0.843 da1a3
0.269 0.259 0.264
0.624 da4a6
0.103 0.111 0.107
0.468 da7a9
0.115 0.111 0.113
0.507 da10a12
0.2
0.222 0.211
0.571 da13a15
0.519 0.452 0.483
0.707 da16a20
Risultati – Cross Validation
AdaBoost con J48
Correctly Classified Instances
Incorrectly Classified Instances
69
97
41.5663 %
58.4337 %
TP Rate FP Rate Precision Recall F-Measure ROC Area Class
0.741
0.05
0.741
0.741 0.741
0.939 da1a3
0.37
0.115
0.385
0.37
0.377
0.737 da4a6
0.222
0.201
0.176 0.222 0.197
0.569 da7a9
0.111
0.094
0.188 0.111 0.14
0.553 da10a12
0.444
0.129
0.4
0.444 0.421
0.726 da13a15
0.581
0.111
0.545 0.581 0.563
0.791 da16a20
Risultati – Cross Validation
Bagging con J48
Correctly Classified Instances
Incorrectly Classified Instances
TP Rate
0.926
0.333
0.074
0.185
0.185
0.742
FP Rate
0.065
0.086
0.115
0.173
0.137
0.126
69
97
41.5663 %
58.4337 %
Precision Recall F-Measure ROC Area Class
0.735 0.926 0.82
0.937 da1a3
0.429 0.333 0.375
0.745 da4a6
0.111 0.074 0.089
0.511 da7a9
0.172 0.185 0.179
0.616 da10a12
0.208 0.185 0.196
0.626 da13a15
0.575 0.742 0.648
0.847 da16a20
Quanto osservato ci induce a pensare che i meta classificatori ci
possono tornare utili
Risultati – Cross Validation
AttibuteSelectedClassifier con J48
– Riduce la dimensionalità dei dati di training in base alla selezione di alcuni attributi
più rilvanti di altri, la scelta degli attributi è fatta attraverso un opportuno valutatore
che nel nostri caso è il CfsSubseEval che valuta la validità degli attributi
considerando la loro individuale capacità predittiva e la loro correlazione con
l’attributo di classe
Correctly Classified Instances
Incorrectly Classified Instances
TP Rate
0.926
0.444
0.333
0.296
0.296
0.742
FP Rate
0.05
0.072
0.115
0.115
0.101
0.133
Precision
0.781
0.545
0.36
0.333
0.364
0.561
Recall
0.926
0.444
0.333
0.296
0.296
0.742
85
81
F-Measure
0.847
0.49
0.346
0.314
0.327
0.639
51.2048 %
48.7952 %
ROC Area Class
0.926
da1a3
0.734
da4a6
0.565
da7a9
0.701
da10a12
0.635
da13a15
0.827
da16a20
Risultati – Cross Validation
FilteredClassifier con filtro supervisionato e J48
– Classifica i dati dopo averli discretizzati in modo supervisionato
Correctly Classified Instances
Incorrectly Classified Instances
81
85
48.7952 %
51.2048 %
TP Rate FP Rate Precision Recall F-Measure ROC Area
0.889
0.036
0.828
0.889
0.857
0.922
0.444
0.108
0.444
0.444
0.444
0.709
0.259
0.122
0.292
0.259
0.275
0.505
0.222
0.129
0.25
0.222
0.235
0.672
0.37
0.086
0.455
0.37
0.408
0.759
0.71
0.133
0.55
0.71
0.62
0.794
Class
da1a3
da4a6
da7a9
da10a12
da13a15
da16a20
Risultati – Cross Validation
LogitBoost con DecisionStump
– Effettua classificazione utilizzando uno schema di
classificazione
Correctly Classified Instances
Incorrectly Classified Instances
80
86
48.1928 %
51.8072 %
TP Rate FP Rate Precision Recall F-Measure ROC Area
0.741
0.043
0.769
0.741 0.755
0.963
0.556
0.079
0.577
0.556 0.566
0.86
0.333
0.065
0.5
0.333 0.4
0.721
0.407
0.137
0.367
0.407 0.386
0.75
0.37
0.144
0.333
0.37
0.351
0.682
0.484
0.156
0.417
0.484 0.448
0.746
Class
da1a3
da4a6
da7a9
da10a12
da13a15
da16a20
Risultati – Cross Validation
Vote con:
– AttibuteSelectedClassifier con J48
– FilteredClissifier con filtro supervisionato e J48
– LogitBoost con DecisionStump
Correctly Classified Instances
Incorrectly Classified Instances
93
73
Mai così alto
56.0241 %
43.9759 %
TP Rate FP Rate Precision Recall F-Measure ROC Area
0.926
0.058
0.758
0.926 0.833
0.972
0.519
0.065
0.609
0.519 0.56
0.873
0.37
0.072
0.5
0.37
0.426
0.67
0.481
0.101
0.481
0.481 0.481
0.752
0.333
0.094
0.409
0.333 0.367
0.662
0.71
0.141
0.537
0.71
0.611
0.848
Class
da1a3
da4a6
da7a9
da10a12
da13a15
da16a20
Considerazioni
Accuratezza dei modelli non risulta in
generale elevata
TP rate in corrispondenza dei valori di
classe “da1a3” e “da16a20” sono molto
elevati
Con Vote - TP rate in aumento
Evoluzione del dataset
Discretizzazione
Natural Binning.
–
non
supervisionata
–
Numero di classi:
9
Risultati peggiori dei precedenti
TP rate sempre elevati per i valori di
classe “da1a3” e “da16a20” e pessimi per
le classi intermedie
Evoluzione del dataset
Discretizzazione non supervisionata – Equal
Frequency Binning.
–
Numero di classi:
9
–
K intervalli di identica frequenza di elementi
Nessun guadagno
TP rate sempre elevati per i valori di
classe “da1a3” e “da16a20” e pessimi per
le classi intermedie
Evoluzione del dataset
Normalizzazione.
Conversione dei valori degli attributi nella scala da 0 a 1
L’analisi produce valori identici a quelli ottenuti dai dati
originali
Tutti gli altri classificatori forniscono dati peggiori
Algoritmo scelto per la fase di test:
–
Vote con:
AttibuteSelectedClassifier con J48
FilteredClissifier con filtro supervisionato e J48
LogitBoost con DecisionStump
Test
Divisione dataset in:
– Training Set = 156 tuple
– Test Set = 10 tuple random
Correctly Classified Instances
Incorrectly Classified Instances
7
3
70
30
%
%
TP Rate FP Rate Precision Recall F-Measure ROC Area Class
1
0
1
1
1
1
da1a3
0.667
0
1
0.667
0.8
1
da4a6
0
0
0
0
0
0.875
da7a9
0
0.2
0
0
0
?
da10a12
0
0
0
0
0
?
da13a15
1
0.125
0.667
1
0.8
1
da16a20
Considerazioni
Comportamento classificatore:
– buono sulle prime ed ultime posizioni
– Perde in posizioni di metà classifica
– conferma di ciò che era emerso con l’analisi dei
risultati prodotti dalla Cross-Validation
Predizioni
Squadra
Posizione predetta
1.Ascoli
Da10a12
2.Atalanta
Da10a12
3.Cagliari
Da7a9
4.Catania
da13a15
5.Chievo Verona
Da4a6
6.Empoli
Da7a9
7.Fiorentina
da4a6
8.Inter
da1a3
9.Lazio
da4a6
10.Livorno
da4a6
11.Messina
da13a15
12.Milan
da1a3
13.Palermo
da4a6
14.Parma
da10a12
15.Reggina
Da13a15
16.Roma
Da4a6
17.Sampdoria
Da7a9
18.Siena
da4a6
19.Torino
Da4a6
20.Udinese
da4a6
Conclusioni
Risultati verosimili per le prime 3 posizioni:
– Squadre che lottano per lo scudetto
Inter
Milan
conferma i buoni valori ottenuti nella fase di
validazione
Problematiche
Scarsa accuratezza delle posizioni di centro
classifica
– caratteristica intrinseca dei dati che per queste
posizioni non permettono un’adeguata
discriminazione delle posizioni intermedie di
classifica
Soluzioni:
– Maggior numero di tuple del dataset
– Nessuna tecnica trovata per l’aggiramento di
tale problema
FINE