# Applicazioni pratiche di machine learning/Previsioni su scommesse sportive

Applicazioni pratiche di machine learning
Copertina Tutti i moduli · Sviluppo
* Applicazioni pratiche di machine learningApplicazioni pratiche di machine learning
** Previsioni su scommesse sportiveApplicazioni pratiche di machine learning/Previsioni su scommesse sportive
** Previsioni su azioni, criptovalute, derivatiApplicazioni pratiche di machine learning/Previsioni su azioni, criptovalute, derivati
** Trovare lavoroApplicazioni pratiche di machine learning/Trovare lavoro
** Previsioni sul cambiamento climaticoApplicazioni pratiche di machine learning/Previsioni sul cambiamento climatico
** Previsioni sul livello del mareApplicazioni pratiche di machine learning/Previsioni sul livello del mare
** Previsioni sulle produzioni agricoleApplicazioni pratiche di machine learning/Previsioni sulle produzioni agricole
** Riconoscimento della scrittura a manoApplicazioni pratiche di machine learning/Riconoscimento della scrittura a mano
** Previsioni sugli incendiApplicazioni pratiche di machine learning/Previsioni sugli incendi
** Diagnosi di malattieApplicazioni pratiche di machine learning/Diagnosi di malattie
** Diagnosi di malattie mentaliApplicazioni pratiche di machine learning/Diagnosi di malattie mentali
** Identificazione delle pulsarApplicazioni pratiche di machine learning/Identificazione delle pulsar
** Identificazione dei social botApplicazioni pratiche di machine learning/Identificazione dei social bot
** Approvazione carte di creditoApplicazioni pratiche di machine learning/Approvazione carte di credito
** Previsione di reatiApplicazioni pratiche di machine learning/Previsione di reati
** Concessione sussidiApplicazioni pratiche di machine learning/Concessione sussidi
** Previsione di vendite futureApplicazioni pratiche di machine learning/Previsione di vendite future
** Segmentazione dei clientiApplicazioni pratiche di machine learning/Segmentazione dei clienti
** Previsioni su direct mailApplicazioni pratiche di machine learning/Previsioni su direct mail
* Appendice
** Installazione di RApplicazioni pratiche di machine learning/Installazione di R
** Creare reports in RStudioApplicazioni pratiche di machine learning/Creare reports in RStudio
** Creare reports in JupyterApplicazioni pratiche di machine learning/Creare reports in Jupyter
** ChatGpt come data analyst o data scientistApplicazioni pratiche di machine learning/ChatGpt come data analyst o data scientist
Modifica il sommario

# CALCIO
## Parte 1: Dati

Dal seguente link: https://www.football-data.co.uk/italym.php è possibile scaricare le probabilità di vincita, pareggio o vittoria in trasferta di vari bookmakers per le partite di calcio di serie A in Italia . In particolare si utilizzano per la previsione nelle scommesse sportive gli anni 2017,2018,2019,2020 .
Caricamento dati:
Creazione colonna "risultato", contenente gli 1,X,2 risultati della corrispondente partita, da aggiungere al dataframe degli anni 2017 e 2018:
Creazione colonna "risultato", contenente gli 1,X,2 risultati della corrispondente partita, da aggiungere al dataframe degli anni 2018 e 2019:
Creazione colonna "risultato", contenente gli 1,X,2 risultati della corrispondente partita, da aggiungere al dataframe degli anni 2019 e 2020:
Si scelgono per la previsione le seguenti variabili contenenti le probabilità di scommessa 1,X,2 sulle partite fatte dai bookmakers:
* B365H = Bet365 probabilità di vittoria in casa
* B365D = Bet365 probabilità di pareggio
* B365A = Bet365 probabilità di vittoria in trasferta
* BSH = probabilità di vittoria in casa Blue Square
* BSD = probabilità di pareggio Blue Square
* BSA = probabilità di vittoria in trasferta Blue Square
* BWH = Bet&Win vittoria in casa
* BWD = Bet&Win pareggio
* BWA = Bet&Win probabilità di vincere in trasferta
* GBH = probabilità di vittoria in casa di Gamebookers
* GBD = Gamebookers probabilità di pareggio
* GBA = Le probabilità di vincere in trasferta di Gamebookers
* IWH = probabilità di vittoria in casa Interwetten
* IWD = probabilità di pareggio Interwetten
* IWA = Interwetten in trasferta
* LBH = Probabilità di vittoria in casa di Ladbrokes
* LBD = Ladbrokes probabilità di pareggio
* LBA = Ladbrokes probabilità di vittoria in trasferta
* PSH e PH = probabilità di vittoria in casa Pinnacle
* PSD e PD = probabilità di pareggio di Pinnacle
* PSA e PA = Pinnacle probabilità di vittoria in trasferta
* SOH = probabilità di vittoria in casa Sporting Odds
* SOD = probabilità di pareggio Sporting Odds
* SOA = probabilità di vittoria in trasferta Sporting Odds
* SBH = probabilità di vittoria in casa di Sportingbet
* SBD = probabilità di pareggio di Sportingbet
* SBA = probabilità di vittoria in trasferta Sportingbet
* SJH = probabilità di vittoria in casa di Stan James
* SJD = probabilità di pareggio di Stan James
* SJA = probabilità di vittoria in trasferta di Stan James
* SYH = probabilità di vittoria in casa di Stanleybet
* SYD = probabilità di pareggio di Stanleybet
* SYA = Probabilità di vittoria in trasferta di Stanleybet
* VCH = VC probabilità di vincita in casa
* VCD = VC probabilità di pareggio
* VCA = VC probabilità di vittoria in trasferta
* WHH = probabilità di vittoria in casa di William Hill
* WHD = probabilità di pareggio di William Hill
* WHA = Probabilità di vittoria in trasferta di William Hill
...e si uniscono i 3 dataframes contenenti le probabilità di vincita in casa, pareggio o trasferta negli anni 2017,2018,2019,2020 :
Si eliminano dal dataframe df1 le righe contenenti gli eventuali valori mancanti nelle probabilità...

## Parte 2 : Domanda di ricerca

Di prescelte partite future di serie A in Italia il risultato sarà 1,X o 2 tramite l'intelligenza artificiale?

## Parte 3 : Modellizzazione e Previsione

Si suddivide il dataset df1 in un training set costituito dal 90% delle partite e in un testing set costituito dal rimanente 10% di partite e come predictors si scelgono le probabilità indicate dai vari bookmakers escludendo data della partita e nomi delle squadre in casa e trasferta. La variabile da predire è "risultato" .

## Parte 4: Conclusioni

Utilizzando quindi l'algoritmo Random Forest l'accuratezza della previsione sul training set è del 100%, mentre sul testing set è solo del 54,17% e quindi in pratica partecipare alle scommesse sportive utilizzando il machine learning è approssimativamente come giocare sul rosso e il nero alla Roulette...

# TENNIS
## Parte 1 : Dati

I dati scaricabili da qui : https://github.com/JeffSackmann/tennis_atp contengono variabili di tutte le partite di tennis ATP giocate dal 1968 in poi . Le variabili che si prendono in considerazione per la previsione del vincitore o del perdente sono :
* best_of - il numero massimo di set giocati
* draw_size - la dimensione del disegno
* match_num - numero partita in un determinato torneo
* round: il round del torneo a cui appartiene una partita
* surface - superficie in cui si gioca la partita
* tourney_id - id del torneo
* tourney_level - livello del torneo
'G' = Grande Slam 'M' = Master 1000s 'A' = altri eventi a livello di tour 'C' = Sfidanti 'S' = Satelliti/ITF 'F' = finali del tour e altri eventi di fine stagione 'D' = Coppa Davis
* loser_age - età del giocatore perdente
* loser_entry - Come è entrato il giocatore perdente nei tornei?
WC - Carattere jolly D - Qualificazione LL - Perdente fortunato PR - Classifica protetta SE - Esenzione speciale ALT - Giocatore alternativo
* loser_hand - mano del giocatore perdente, destra o sinistra
* loser_ht - l'altezza del giocatore perdente
* loser_id - id del giocatore perdente
* loser_ioc - il paese di origine del giocatore perdente
* loser_rank - ranking del giocatore perdente
* loser_seed - semi del giocatore perdente
* winner_age - età del giocatore vincente
* winner_entry - Come è entrato il giocatore vincente nei tornei?
WC - Carattere jolly D - Qualificazione LL - Perdente fortunato PR - Classifica protetta SE - Esenzione speciale ALT - Giocatore alternativo
* winner_hand - mano del giocatore vincente, destra o sinistra
* winner_ht - l'altezza del giocatore vincente
* winner_id - id del giocatore vincente
* winner_ioc - il paese di origine del giocatore vincente
* winner_rank - ranking del giocatore vincente
* winner_seed - semi del giocatore vincente
Caricamento dati:

## Parte 2 : Domanda di ricerca

Chi sarà il vincitore o il perdente in una partita di tennis tramite l'intelligenza artificiale ?

## Parte 3 : Modellizzazione e Previsione

Si creano 2 nuove variabili: mese e anno:
Si scelgono le variabili dal dataset sui cui fare l'addestramento del modello:
Si rinominano le variabili relative a loser e winner:
Si crea una copia del dataset df in df1 e si scambia il primo con il secondo giocatore:
Si crea la variabile label da predire . label assume il valore 0 nel dataset df in cui second player vince e assume il valore 1 nel dataset df1 in cui first player vince e si concatenano i 2 due dataset:
Si divide il dataset df in un training set fatto dal 75% delle osservazioni e su cui si addestra il modello ed il rimanente 25% costituisce il testing set su cui verrà testato il modello :
Si inizializza la libreria h2o necessaria per automatizzare il machine learning:
Si addestra il modello :
Si ottengono i seguenti modelli per cui il migliore risulta : StackedEnsemble_BestOfFamily_4_AutoML_3_20221020_193936 con un auc=74,21%
Si prova il modello sul testing set ottenendo la matrice di confusione e un'accuracy del 64,07% :

## Parte 4 : Previsioni con Python

Di seguito si utilizza il codice contenuto in questo Notebook : https://www.kaggle.com/code/alexisbcook/pipelines rilasciato con licenza Apache 2.0 .
Le colonne numeriche e categoriche nel dataset che hanno valori mancanti NA vengono trasformate con valori approssimativi nei NA tramite SimpleImputer, mentre le variabili categoriche vengono trasformate in numeriche tramite OneHotEncoder :
Per la previsione utilizzo l'algoritmo XGBoost (Extreme Gradient Boosting) e addestro il modello sul training set dopo avere preprocessato i dati con il preprocessor precedentemente creato. Infine prevedo i dati sul validation set.
Sul validation set ottengo un'accuracy del 68% :

## Parte 5: Conclusioni

Rispetto al calcio, nel tennis si ottiene un'accuracy maggiore e quindi una previsione migliore ma non sufficiente per considerare le previsioni su scommesse sportive tramite machine learning un buon investimento.

# FORMULA 1 (Gran Premi)
## Parte 1: Dati

Dal seguente link: http://ergast.com/mrd/ è possibile scaricare i dataset dei Gran Premi di Formula 1 con dati dal 1950 al 2023 e predire tramite algoritmi di machine learning il pilota vincente con un'Accuracy del 99% sul testing set.
Caricamento dati:
Come si vede, ci sono 3.475.793 righe e 37 colonne nel dataset df :
Considero soltanto i piloti in stato finished, cioè quelli che hanno percorso almeno il 90% dei giri del Gran Premio, quindi su 60 giri ne hanno fatti almeno 54. In tal modo riduco il dataset a 1.320.987 righe:

## Parte 2: Previsioni

Le colonne numeriche e categoriche nel dataset che hanno valori mancanti NA vengono trasformate con valori approssimativi nei NA tramite SimpleImputer, mentre le variabili categoriche vengono trasformate in numeriche tramite LabelEncoder :
Per la previsione utilizzo l'algoritmo KNeighbors (il più semplice degli algoritmi di machine learning) e addestro il modello sul training set. Infine prevedo i dati sul validation set:
Sul validation set ottengo un'accuracy del 99% :

## Parte 3: Conclusioni

Sebbene l'accuracy previsionale sia del 99%, il modello non prevede eventuali incidenti, guasti o cattive condizioni climatiche quindi in realtà l'accuratezza è minore...