Regressione logistica e struttura del set di dati


17

Spero di poter porre questa domanda nel modo corretto. Ho accesso ai dati play-by-play, quindi è più un problema con il miglior approccio e la costruzione corretta dei dati.

Quello che sto cercando di fare è calcolare la probabilità di vincere una partita NHL in base al punteggio e al tempo rimanente nella regolamentazione. Immagino di poter usare una regressione logistica, ma non sono sicuro di come dovrebbe essere il set di dati. Avrei più osservazioni per partita e per ogni intervallo di tempo a cui sono interessato? Avrei avuto un'osservazione per gioco e avrei adattato modelli separati per un intervallo di tempo? La regressione logistica è anche la strada giusta da percorrere?

Qualsiasi aiuto tu possa fornire sarà molto apprezzato!

I migliori saluti.


Domanda difficile! La mia ipotesi è che sarebbe utile sapere più di me sui processi di conteggio (e più di Wikipedia: en.wikipedia.org/wiki/Counting_process )
onestop,

Hai accesso al diario Chance di ASA? Mi sembra che nell'ultimo anno sia comparso un articolo pertinente, che riguardi l'hockey o un altro sport.
rolando2,

Provo a riformulare il problema (per stimolare la discussione?): Diciamo che abbiamo una serie di stati discreti in un gioco (ad esempio in tic-tac-toe). Ora è ragionevole creare un modello per stato (magari usando la regressione logistica) per prevedere il risultato. Ora QUI abbiamo anche un gioco, ma con stati continui (cioè tempo di gioco). La domanda ora del PO è: come a) discretizzare il tempo in stati impostati finiti oppure b) come costruire un modello i cui parametri variano a seconda (!) Del tempo di gioco corrente. Ci deve essere qualcuno che ha già risolto questo problema "generale".
Steffen,

Risposte:


9

Fai una regressione logistica con le covariate "tempo di gioco" e "goal (squadra di casa) - goal (squadra in trasferta)". Avrai bisogno di un effetto di interazione di questi termini poiché un vantaggio di 2 goal a metà tempo avrà un effetto molto più piccolo di un vantaggio di 2 goal con solo 1 minuto rimanente. La tua risposta è "vittoria (squadra di casa)".

Non limitarti ad assumere linearità per questo, adatta un modello di coefficiente che varia in modo uniforme per l'effetto di "goal (squadra di casa) - goal (squadra ospite)", ad esempio in R potresti usare mgcvla gamfunzione con una formula modello come win_home ~ s(time_remaining, by=lead_home). Trasformati lead_homein un fattore, in modo da ottenere un effetto diverso di time_remainingper ogni valore di lead_home.

Vorrei creare più osservazioni per gioco, una per ogni fetta di tempo che ti interessa.


Grande! Grazie per l'aiuto. Stavo per usare R, e per impostare i dati in modo simile a come hai suggerito, effetti di interazione e tutto il resto. Sono contento di vedere che ero sulla strada giusta e apprezzo molto il tuo tempo.
Btibert3,

1
Prestare attenzione alla non indipendenza generata includendo più fasce orarie. Un modello di effetti casuali (multi-livello) potrebbe aiutare.
Eduardo Leoni,

1
@ Eduardo: concordo sul fatto che la dipendenza non sia modellata e che ciò sia alquanto problematico, grazie per averlo sottolineato. Non sono sicuro di come gli effetti casuali possano essere d'aiuto - dato che l'esito binario win_homeè costante a livello di raggruppamento (cioè per tutte le fasce orarie per una data partita è 0 o 1), incluso, ad esempio, un'intercettazione casuale, per le partite comporterà enormi problemi di separazione in questo contesto.
fabians

Potresti anche considerare di includere un parametro per il totale dei goal segnati, in quanto i lead tendono a essere assegnati più facilmente nei giochi con punteggio elevato.
James,

6

Vorrei iniziare a simulare i dati da un modello giocattolo. Qualcosa di simile a:

n.games <- 1000
n.slices <- 90

score.away <- score.home <- matrix(0, ncol=n.slices, nrow=n.games)

for (j in 2:n.slices) {
  score.home[ ,j] <- score.home[ , j-1] + (runif(n.games)>.97)
  score.away[ ,j] <- score.away[ , j-1] + (runif(n.games)>.98)
}

Ora abbiamo qualcosa con cui giocare. Potresti anche usare i dati grezzi, ma trovo molto utile simulare i dati per riflettere.

Quindi vorrei solo tracciare i dati, ovvero il tempo di trama del gioco rispetto al lead home, con la scala dei colori corrispondente alla probabilità osservata di vincita.

score.dif <- score.home-score.away

windf <- data.frame(game=1:n.games, win=score.home[ , n.slices] > score.away[, n.slices])

library(reshape)
library(ggplot2)

dnow <- melt(score.dif)
names(dnow) <- c('game', 'time', 'dif')
dnow <- merge(dnow, windf)

res <- ddply(dnow, c('time', 'dif'), function(x) c(pwin=sum(x$win)/nrow(x)))

qplot(time, dif, fill=pwin, data=res, geom='tile') + scale_color_gradient2() 

Questo ti aiuterà a trovare il supporto dei tuoi dati e ti darà un'idea di come siano le probabilità.

Tracciare


1

Dai un'occhiata ai nerd delle statistiche su Football Outsiders e al libro Mathletics per un po 'di ispirazione.

I ragazzi di Football Outsiders fanno previsioni di gioco basate su ogni giocata in una partita di calcio.

Winston in Mathletics utilizza anche alcune tecniche come la programmazione dinamica.

Puoi anche considerare altri algoritmi come SVM.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.