逻辑回归和数据集结构

机器算法验证 时间序列 可能性 物流
2022-01-19 22:57:12

我希望我能以正确的方式问这个问题。我可以访问逐个播放数据,因此最好的方法和正确构建数据更多是一个问题。

我要做的是在给定得分和剩余时间的情况下计算赢得 NHL 比赛的概率。我想我可以使用逻辑回归,但我不确定数据集应该是什么样子。对于每场比赛以及我感兴趣的每一段时间,我会进行多次观察吗?我会在每场比赛中进行一次观察并在每段时间内拟合不同的模型吗?逻辑回归甚至是正确的方法吗?

您能提供的任何帮助将不胜感激!

最好的祝福。

3个回答

使用协变量“上场时间”和“进球(主队)-进球(客队)”进行逻辑回归。您将需要这些术语的交互效果,因为在半场结束时领先 2 球的影响比仅剩 1 分钟时领先 2 球的影响要小得多。您的回答是“胜利(主队)”。

不要仅仅为此假设线性,为“目标(主队)-目标(客队)”的效果拟合一个平滑变化的系数模型,例如在 R 中,您可以使用mgcv'gam函数和模型公式,如win_home ~ s(time_remaining, by=lead_home). lead_home一个因素,这样你就可以得到不同的time_remaining效果lead_home

我会在每场比赛中创建多个观察结果,针对您感兴趣的每一段时间进行观察。

我会开始模拟来自玩具模型的数据。就像是:

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

现在我们有一些东西可以玩了。您也可以使用原始数据,但我发现模拟数据非常有助于思考问题。

接下来,我将绘制数据,即游戏与领先回家的情节时间,色标对应于观察到的获胜概率。

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

这将帮助您找到数据的支持,并让您大致了解概率的样子。

阴谋

查看Football Outsiders的统计书呆子以及Mathletics一书以获取一些灵感。

足球局外人根据足球比赛中的场比赛做出比赛预测。

数学中的温斯顿也使用了一些技术,例如动态规划。

您还可以考虑其他算法,例如 SVM。