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