Régression logistique et structure de l'ensemble de données

17

J'espère pouvoir poser cette question correctement. J'ai accès aux données play-by-play, c'est donc plus un problème avec la meilleure approche et la construction des données correctement.

Ce que je cherche à faire, c'est de calculer la probabilité de gagner un match dans la LNH compte tenu du score et du temps restant dans le règlement. Je pense que je pourrais utiliser une régression logistique, mais je ne sais pas à quoi devrait ressembler l'ensemble de données. Aurais-je plusieurs observations par match et pour chaque tranche de temps qui m'intéresse? Aurais-je une observation par match et des modèles séparés par tranche de temps? La régression logistique est-elle la bonne voie à suivre?

Toute aide que vous pourrez apporter sera très appréciée!

Meilleures salutations.

Btibert3
la source
Question difficile! Je suppose que cela aiderait à en savoir plus que moi sur les processus de comptage (et plus que Wikipedia: en.wikipedia.org/wiki/Counting_process )
onestop
Avez-vous accès au journal ASA Chance? Il me semble qu'un article pertinent a été publié au cours de la dernière année, qu'il s'agisse de hockey ou d'un autre sport.
rolando2
J'essaie de reformuler le problème (pour stimuler la discussion?): Disons que nous avons un ensemble d'états discrets dans un jeu (par exemple dans le tic-tac-toe). Il est maintenant raisonnable de créer un modèle par état (peut-être en utilisant une régression logistique) pour prédire le résultat. Maintenant, ICI, nous avons aussi un jeu, mais avec des états continus (c'est-à-dire le temps de jeu). La question maintenant de l'OP est: comment a) discrétiser le temps dans des états finis ou b) comment construire un modèle dont les paramètres varient en fonction (!) Du temps de jeu actuel. Il doit y avoir quelqu'un qui a déjà résolu ce problème "général".
steffen

Réponses:

9

Faites une régression logistique avec les covariables «temps de jeu» et «buts (équipe à domicile) - buts (équipe à l'extérieur)». Vous aurez besoin d'un effet d'interaction de ces termes, car une avance de 2 buts à la mi-temps aura un effet beaucoup plus petit qu'une avance de 2 buts avec seulement 1 minute à gauche. Votre réponse est "victoire (équipe à domicile)".

Ne vous contentez pas de supposer la linéarité pour cela, ajustez un modèle de coefficient variant en douceur pour l'effet des «buts (équipe à domicile) - buts (équipe à l'extérieur)», par exemple dans R, vous pouvez utiliser mgcvla gamfonction de 'avec une formule de modèle comme win_home ~ s(time_remaining, by=lead_home). Faites- lead_homeen un facteur, de sorte que vous obtenez un effet différent de time_remainingpour chaque valeur de lead_home.

Je créerais plusieurs observations par jeu, une pour chaque tranche de temps qui vous intéresse.

fabians
la source
Génial! Merci pour l'aide. J'allais utiliser R, et j'allais configurer les données de la même manière que vous l'avez suggéré, les effets d'interaction et tout. Heureux de voir que j'étais sur la bonne voie, et j'apprécie vraiment votre temps.
Btibert3
1
Soyez prudent avec la non-indépendance générée en incluant plusieurs tranches de temps. Un modèle à effets aléatoires (multi-niveaux) pourrait aider.
Eduardo Leoni
1
@ Eduardo: Je suis d'accord que la dépendance n'est pas modélisée et que c'est quelque peu problématique, merci de l'avoir signalé. Je ne sais pas comment les effets aléatoires pourraient aider - puisque le résultat binaire win_homeest constant au niveau du regroupement (c'est-à-dire pour toutes les tranches de temps pour une correspondance donnée, c'est soit 0 soit 1), y compris, par exemple, une interception aléatoire, pour les correspondances entraînera simplement d'énormes problèmes de séparation dans ce contexte.
fabians
Vous pouvez également envisager d'inclure un paramètre pour le nombre total de buts marqués, car les prospects ont tendance à être distribués plus facilement dans les matchs à haut score.
James
6

Je commencerais à simuler les données d'un modèle de jouet. Quelque chose comme:

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

Maintenant, nous avons quelque chose à jouer. Vous pouvez également utiliser les données brutes, mais je trouve que la simulation des données est très utile pour réfléchir.

Ensuite, je voudrais simplement tracer les données, c'est-à-dire le temps du jeu par rapport à la maison principale, avec l'échelle de couleurs correspondant à la probabilité observée de gagner.

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

Cela vous aidera à trouver le support de vos données et vous donnera une idée brute de ce à quoi ressemblent les probabilités.

Terrain

Eduardo Leoni
la source
1

Consultez les statistiques nerds de Football Outsiders ainsi que le livre Mathletics pour vous inspirer.

Les gars de Football Outsiders font des prédictions de jeu basées sur chaque jeu dans un match de football.

Winston in Mathletics utilise également certaines techniques telles que la programmation dynamique.

Vous pouvez également envisager d'autres algorithmes tels que SVM.

Neil McGuigan
la source