My pool table set for 9-ballMy pool table set for 9-ballMy pool table set for 9-ballMy pool table set for 9-ballIl mio tavolo da biliardo è impostato per 9-ball In un post precedente , ho discusso le definizioni di machine learning e se JMP lo fa (sì, lo fa), e qui applicherò l'apprendimento automatico ad alcuni dati reali che ho raccolto.
Due dei miei algoritmi di machine learning preferiti, perché sono facili da capire, sono K Nearest Neighbors e Naïve Bayes. Un algoritmo non deve essere complesso per ottenere buoni risultati e per alcuni problemi questi due algoritmi si comportano in modo rapido e preciso.
K Nearest Neighbors è praticamente esattamente quello che sembra. L'algoritmo calcola quali delle osservazioni nel set di dati sono le "K" più vicine al punto che si desidera prevedere. Quindi la previsione è la media della risposta per quei punti più vicini (se la tua variabile di risposta è continua) o è la categoria più frequente (se la tua variabile di risposta è categoriale). In genere, si adatta un intervallo di K e, utilizzando la convalida incrociata, si sceglie quale K fornisce le migliori prestazioni predittive.
Spesso mi viene chiesto perché Naïve Bayes sia chiamato "Naïve". Il nome deriva dal fatto che il presupposto chiave che viene fatto quando si utilizza questo algoritmo è che tutte le variabili predittive sono indipendenti l'una dall'altra. In molti casi, questo è un presupposto ingenuo. Pertanto, questo metodo tende a fornire prestazioni migliori quando tale ipotesi è più vicina al vero rispetto a quando si dispone di variabili predittive altamente correlate tra loro. Per fare previsioni, la probabilità di una categoria della risposta (ad esempio, vittoria o sconfitta) date le variabili predittive osservate viene calcolata in base alla probabilità di osservare quei valori nei dati di addestramento in cui quella categoria è la risposta. Qualunque categoria risulti nella probabilità calcolata più alta è la categoria prevista.
Diamo un'occhiata a questi due metodi in azione.
Chi è migliore?
Mio marito ed io siamo accaniti giocatori di biliardo e giochiamo quasi ogni giorno quando torniamo a casa dal lavoro. Dopo circa un anno di gioco, pensavamo di essere abbastanza alla pari, forse io ero leggermente migliore. Ho detto: "Possiamo rispondere a questa domanda!"
Quindi, a partire dal 1° gennaio 2018, abbiamo iniziato a monitorare i nostri risultati. Tengo un foglio di calcolo (solo perché il computer nella sala giochi di casa non ha installato JMP!) che registra il mese, il giorno della settimana, la data, quante partite ho vinto, quante partite abbiamo giocato, se Ho vinto quella sessione di gioco e quale partita di biliardo è stata giocata (palla 8 o palla 9). Poiché questo era prima in un foglio di calcolo, ci sono anche colonne che calcolano la percentuale di vincita complessiva del gioco e la percentuale di vincita della sessione.
Per fortuna, posso semplicemente trascinare il mio file Excel nella mia finestra iniziale di JMP e la procedura guidata di importazione di Excel fa la sua magia per creare una tabella di dati JMP. Qualche modifica per far vincere la sessione? indica una variabile nominale e il numero di partite vinte e giocate a variabili ordinali, e sono pronto a prevedere la mia prossima notte di dominio del pool!
Imported dataImported dataImported dataImported dataDati importati Solo che non sono ancora pronto. Ricordi che ho menzionato con K Nearest Neighbours che la convalida incrociata viene utilizzata per determinare il miglior adattamento K? Al momento non ho una rubrica per la formazione e la validazione. Sebbene sia K Nearest Neighbors che Naïve Bayes abbiano un'opzione per utilizzare una percentuale dei dati come convalida nei lanci della piattaforma, se voglio confrontare i due metodi, dovrei utilizzare lo stesso set di formazione per entrambi. Fortunatamente, JMP mi copre anche qui, con l'utilità Crea colonna di convalida.
Ci sono diverse opzioni nell'utilità su come creare la colonna di convalida. Se la mia variabile di risposta era molto sbilanciata, cosa che accade nei casi in cui gli errori non sono comuni o alla ricerca di transazioni fraudolente, vorrei utilizzare l'opzione Stratified Random per essere sicuro di avere dati con entrambe le risposte nel set di addestramento e convalida. In questo caso, so che tutte le mie colonne sono bilanciate abbastanza bene, quindi è improbabile che manchi completamente una categoria dal mio set di addestramento o convalida. Pertanto, creerò semplicemente la mia colonna di convalida utilizzando l'opzione Casuale fisso. Potrei impostare un seme per la generazione casuale in modo da poter riprodurre nuovamente questa particolare colonna in futuro, ma non credo sia necessario in questo caso.
Tempo di analisi!
Ora, con la colonna di convalida alla mano, posso avviare la piattaforma K Nearest Neighbors nel menu Analizza > Modellazione predittiva. Sessione vinta? è la mia variabile di risposta e ciò che vorrei prevedere, vale a dire per il mio compleanno, sabato 13 ottobre. [Nota: ho iniziato a scrivere questo post prima del mio compleanno; leggi fino alla fine per scoprire se le previsioni fatte qui erano corrette!] Mese, Giorno, Partita e Giocata (il numero di partite giocate) sono i miei fattori. Non credo che la data sarà utile, soprattutto perché ogni combinazione mese-data si verifica una volta (tranne per alcuni giorni del fine settimana in cui abbiamo giocato a più sessioni). Farò anche in modo che la piattaforma calcoli i vicini più vicini fino a 25 anziché il valore predefinito 10.
KNN Launch DialogKNN Launch DialogKNN Launch DialogKNN Launch DialogFinestra di dialogo di avvio KNN
La parte Selezione del modello del rapporto traccia il tasso di classificazione errata calcolato su ciascuno dei set di addestramento e convalida per i modelli con un numero di vicini compreso tra 1 e 25. La linea di selezione è impostata su K = 20, che ha il tasso di classificazione errata più basso nel set di convalida. La tabella seguente mostra che poco più del 44% delle osservazioni nel set di convalida sono state classificate in modo errato. La matrice di confusione mostra che all'incirca lo stesso numero di osservazioni che erano effettivamente vittorie o sconfitte sono state classificate erroneamente. Il Mosaic Plot fornisce una rappresentazione visiva della matrice di confusione.
KNN ReportKNN ReportKNN ReportKNN ReportRapporto KNN Il tasso di classificazione errata non è eccezionale, ma non sono sicuro che i miei predittori siano davvero così predittivi. Se avessi pensato di scrivere questo post il 1 gennaio, avrei potuto tenere traccia di cose come quanto fosse stata stressante la giornata, se ci stavamo godendo o meno una bevanda per adulti con il nostro gioco e forse quanto avrei dormito avuto la sera prima! Quindi non ho intenzione di biasimare l'algoritmo per non avermi fornito un modello che si adatta perfettamente.
Salverò la formula di previsione nella tabella dei dati, così posso fare la mia previsione sul mio compleanno dopo aver adattato questi stessi dati usando Naïve Bayes.
NB Launch DialogNB Launch DialogNB Launch DialogNB Launch DialogNB Avvia la finestra di dialogo
La prima cosa che notiamo è che il tasso di classificazione errata sul set di convalida è leggermente inferiore a poco più del 40%. La matrice di confusione ci mostra che abbiamo classificato correttamente altre sette osservazioni nel set di validazione con il modello Naïve Bayes rispetto al modello K Nearest Neighbors. Infine, abbiamo una curva ROC per ogni set. Sul set di convalida, la nostra area sotto la curva (un'altra misura della qualità dell'adattamento del modello) è 0,5676. Anche se questo non è eccezionale, è comunque meglio di un'ipotesi casuale, che ci darebbe un AUC ≈ 0,5.
NB ReportNB ReportNB ReportNB ReportNB Rapporto
Salverò di nuovo la formula di previsione nella tabella dei dati per fare la mia previsione sulle prestazioni del mio pool di compleanno.
Poiché giochiamo una serie "al meglio di 9" quando giochiamo a palla 9, non so in anticipo quante partite giocheremo. Vincerò velocemente in una sconfitta per 5 – 0? O ci vorranno tutte e 9 le partite per determinare un vincitore? Aggiungerò una riga per ciascuno dei potenziali numeri di giochi giocati (da 5 a 9) e vedrò cosa prevedono i nostri modelli.
Added rows for predictionAdded rows for predictionAdded rows for predictionAdded rows for predictionAggiunte righe per la previsione
Per questo particolare giorno, entrambi i modelli concordano sul fatto che dovrei essere il vincitore a meno che la serie non vada a 9 partite. In tal caso, K Nearest Neighbours prevede che perderò. Sarà un buon compleanno!
Pochi giorni dopo è arrivato il mio compleanno e armato della consapevolezza che vincerò, sono entrato nella sala giochi. Circa un'ora dopo, sono uscito, abbattuto, avendo perso tre partite contro cinque. Almeno ho la torta!
Quello che è successo?
Le cose sembravano così buone per me secondo i modelli! Come ho potuto perdere? Il modello Naïve Bayes mi dà la possibilità di esaminare la probabilità stimata di vincita oltre alla previsione finale. Sembra che avrei dovuto dare un'occhiata anche a quelli, piuttosto che sperare così in alto. Ho salvato le formule di probabilità nella tabella dei dati e diventa chiaro che mentre era prevista la mia vittoria, la probabilità più alta era poco meno del 75% e la più bassa era poco più del 60%. Ciò significa che mio marito aveva buone possibilità di vincere. E guardando solo la previsione finale, ho valutato male le mie reali possibilità di vincere il compleanno. Lo prenderò come una parola di cautela per esaminare tutte le informazioni che ho a disposizione prima di piazzare le mie scommesse la prossima volta!
Win probabilities. [Note: some data table columns hidden for space.]Win probabilities. [Note: some data table columns hidden for space.]Win probabilities. [Note: some data table columns hidden for space.]Win probabilities. [Note: some data table columns hidden for space.]Probabilità di vittoria. [Nota: alcune colonne della tabella dati sono nascoste per spazio.]
Colpo d'addio
Qualche parola finale su questi modelli: anche gli algoritmi più avanzati non funzionano bene quando le variabili nel modello non sono molto predittive della risposta. Lo vediamo in azione con questi dati e gli alti tassi di classificazione errata che hanno. Come ho affermato in precedenza, non è colpa degli algoritmi, ma dei dati che ho raccolto. La maggior parte dei modelli con predittori ragionevoli ha molto più successo di quanto non fossero qui. Forse nel 2019 aggiungerò qualche informazione in più alla mia raccolta di dati e rivedrò questi modelli.
Inoltre, il biliardo è un evento sportivo in cui l'elemento umano gioca un ruolo più importante nel risultato rispetto a molte (forse anche la maggior parte) applicazioni abituali dell'apprendimento automatico. Puoi vedere questo gioco quasi ogni fine settimana in autunno nelle partite di calcio collegiali e professionistiche in cui un perdente tira fuori un ribaltamento. Questo è a volte indicato come "una data domenica". Tuttavia, a lungo termine, dopo molte prove, date queste probabilità, avrei vinto la mia scommessa; proprio come la maggior parte delle volte vince la squadra di calcio favorita e gli scommettitori sportivi fanno i loro soldi. E, infatti, se guardo ai giorni successivi al mio compleanno, ho vinto circa il 60% delle volte.