Regresión logística y estructura del conjunto de datos

17

Espero poder hacer esta pregunta de la manera correcta. Tengo acceso a los datos de juego por juego, por lo que es más un problema con el mejor enfoque y la construcción de los datos correctamente.

Lo que estoy buscando hacer es calcular la probabilidad de ganar un juego de NHL dada la puntuación y el tiempo restante en la regulación. Me imagino que podría usar una regresión logística, pero no estoy seguro de cómo debería ser el conjunto de datos. ¿Tendría múltiples observaciones por juego y por cada porción de tiempo que me interese? ¿Tendría una observación por juego y ajustar modelos separados por porción de tiempo? ¿Es la regresión logística incluso el camino correcto?

¡Cualquier ayuda que pueda brindar será muy apreciada!

Atentamente.

Btibert3
fuente
¡Pregunta difícil! Mi conjetura es que ayudaría a saber más que yo acerca de los procesos de conteo (y más de Wikipedia aún: en.wikipedia.org/wiki/Counting_process )
onestop
¿Tiene acceso a la revista ASA Chance? Me parece que apareció un artículo relevante en el último año, ya sea sobre hockey u otro deporte.
rolando2
Trato de reformular el problema (¿para estimular la discusión?): Digamos que tenemos un conjunto de estados discretos en un juego (por ejemplo, en tic-tac-toe). Ahora es razonable crear un modelo por estado (tal vez usando regresión logística) para predecir el resultado. Ahora AQUÍ también tenemos un juego, pero con estados continuos (es decir, tiempo de juego). La pregunta ahora del OP es: cómo a) discretizar el tiempo en estados de conjunto finitos ob) cómo construir un modelo cuyos parámetros varían dependiendo (!) Del tiempo de juego actual. Debe haber alguien que ya haya resuelto este problema "general".
steffen

Respuestas:

9

Haga una regresión logística con covariables "tiempo de juego" y "goles (equipo local) - goles (equipo visitante)". Necesitará un efecto de interacción de estos términos ya que una ventaja de 2 goles en el medio tiempo tendrá un efecto mucho menor que una ventaja de 2 goles con solo 1 minuto restante. Su respuesta es "victoria (equipo local)".

No asuma simplemente la linealidad para esto, ajuste un modelo de coeficiente que varíe suavemente para el efecto de "objetivos (equipo local) - objetivos (equipo visitante)", por ejemplo, en R podría usar mgcvla gamfunción con una fórmula de modelo como win_home ~ s(time_remaining, by=lead_home). Convierta lead_homeen un factor, de modo que obtenga un efecto diferente de time_remainingpor cada valor de lead_home.

Crearía múltiples observaciones por juego, una por cada porción de tiempo que le interese.

fabians
fuente
¡Excelente! Gracias por la ayuda. Iba a usar R, e iba a configurar los datos de forma similar a como sugirió, efectos de interacción y todo. Me alegra ver que estaba en el camino correcto, y realmente aprecio tu tiempo.
Btibert3
1
Tenga cuidado con la no independencia generada al incluir múltiples segmentos de tiempo. Un modelo de efectos aleatorios (multinivel) podría ayudar.
Eduardo Leoni
1
@ Eduardo: Estoy de acuerdo en que la dependencia no está modelada y que esto es algo problemático, gracias por señalarlo. No estoy seguro de cómo ayudarían los efectos aleatorios, ya que el resultado binario win_homees constante en el nivel de agrupación (es decir, para todos los segmentos de tiempo para cualquier coincidencia es 0 o 1), incluyendo, por ejemplo, una intercepción aleatoria, para las coincidencias solo dará como resultado grandes problemas de separación en este contexto.
Fabians
Es posible que también desee considerar incluir un parámetro para los goles totales anotados, ya que los leads tienden a regalarse más fácilmente en los juegos de alta puntuación.
James
6

Comenzaría a simular los datos de un modelo de juguete. Algo como:

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)
}

Ahora tenemos algo con lo que jugar. También podría usar los datos en bruto, pero me parece muy útil simular los datos para pensar detenidamente.

A continuación, simplemente trazaría los datos, es decir, el tiempo de trama del juego versus el plomo a casa, con la escala de colores correspondiente a la probabilidad observada de ganar.

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() 

Esto lo ayudará a encontrar el soporte de sus datos y le dará una idea cruda de cómo son las probabilidades.

Trama

Eduardo Leoni
fuente
1

Echa un vistazo a los nerds de estadísticas en Football Outsiders , así como al libro Mathletics para inspirarte.

Los chicos de Football Outsiders hacen predicciones de juego basadas en cada jugada en un juego de fútbol.

Winston en Mathletics también utiliza algunas técnicas, como la programación dinámica.

También puede considerar otros algoritmos como SVM.

Neil McGuigan
fuente