Regressão logística e estrutura do conjunto de dados

17

Espero poder fazer esta pergunta da maneira correta. Eu tenho acesso aos dados play-by-play, por isso é mais um problema com a melhor abordagem e a construção correta dos dados.

O que pretendo fazer é calcular a probabilidade de ganhar um jogo da NHL, considerando a pontuação e o tempo restante na regulamentação. Eu acho que poderia usar uma regressão logística, mas não tenho certeza de como deve ser o conjunto de dados. Eu teria várias observações por jogo e a cada fatia de tempo que me interessa? Eu teria uma observação por jogo e caberia modelos separados por uma fatia de tempo? A regressão logística é o caminho certo a seguir?

Qualquer ajuda que você puder fornecer será muito apreciada!

Cumprimentos.

Btibert3
fonte
Pergunta difícil! Meu palpite é que ajudaria a saber mais do que eu sobre processos de contagem (e mais do que a Wikipedia: en.wikipedia.org/wiki/Counting_process )
onestop
Você tem acesso ao jornal ASA Chance? Parece-me que havia um artigo relevante aparecendo no último ano, mais ou menos, sobre hóquei ou outro esporte.
Roland2
Tento reformular o problema (para estimular a discussão?): Digamos que tenhamos um conjunto de estados discretos em um jogo (por exemplo, no jogo da velha). Agora é razoável criar um modelo por estado (talvez usando regressão logística) para prever o resultado. Agora, aqui também temos um jogo, mas com estados contínuos (ou seja, tempo do jogo). A questão agora do OP é: como a) discretizar o tempo em estados definidos finitos ou b) como construir um modelo cujos parâmetros variam dependendo (!) Da hora atual do jogo. Deve haver alguém que já tenha resolvido esse problema "geral".
11238 steffen

Respostas:

9

Faça uma regressão logística com as covariáveis ​​"tempo de jogo" e "gols (time da casa) - gols (time visitante)". Você precisará de um efeito de interação desses termos, pois uma vantagem de 2 gols no intervalo terá um efeito muito menor do que uma vantagem de 2 gols com apenas 1 minuto restante. Sua resposta é "vitória (time da casa)".

Não assuma apenas linearidade para isso, ajuste um modelo de coeficiente de variação suave para o efeito de "gols (time da casa) - gols (time visitante)"; por exemplo, em R, você poderia usar mgcva gamfunção de s com uma fórmula do modelo win_home ~ s(time_remaining, by=lead_home). Transforme lead_homeem um fator, para obter um efeito diferente de time_remainingpara cada valor de lead_home.

Eu criaria várias observações por jogo, uma para cada fatia de tempo em que você estiver interessado.

fabianos
fonte
Ótimo! Obrigado pela ajuda. Eu usaria o R e configuraria os dados de maneira semelhante à que você sugeriu, efeitos de interação e tudo. Fico feliz em ver que eu estava no caminho certo e realmente aprecio o seu tempo.
precisa saber é o seguinte
1
Tenha cuidado com a não independência gerada, incluindo vários intervalos de tempo. Um modelo de efeitos aleatórios (multinível) pode ajudar.
Eduardo Leoni
1
@ Eduardo: Eu concordo que a dependência não é modelada e que isso é um tanto problemático, obrigado por apontar. Não tenho certeza de como os efeitos aleatórios ajudariam - já que o resultado binário win_homeé constante no nível do agrupamento (ou seja, para todos os intervalos de tempo para qualquer partida é 0 ou 1), incluindo, por exemplo, uma interceptação aleatória, para as partidas apenas resultará em enormes problemas com a separação neste contexto.
Fabian
Você também pode considerar incluir um parâmetro para o total de gols marcados, já que os leads tendem a ser dados mais facilmente em jogos com pontuação alta.
James
6

Eu começaria a simular os dados de um modelo de brinquedo. 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)
}

Agora temos algo para brincar. Você também pode usar os dados brutos, mas acho que simular os dados é muito útil para refletir.

A seguir, traçaria os dados, ou seja, o tempo do jogo em relação ao lead home, com a escala de cores correspondente à probabilidade observada de vitória.

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

Isso o ajudará a encontrar o suporte dos seus dados e fornecerá uma idéia básica de como são as probabilidades.

Enredo

Eduardo Leoni
fonte
1

Confira os nerds das estatísticas no Football Outsiders , bem como o livro Mathletics, para obter alguma inspiração.

Os caras do Outsiders do futebol fazem previsões de jogos com base em todas as jogadas de um jogo de futebol.

O Winston em Mathletics também usa algumas técnicas, como programação dinâmica.

Você também pode considerar outros algoritmos, como o SVM.

Neil McGuigan
fonte