许多人称足球为 "不可预测的游戏",因为一场足球比赛有太多不同的因素可以改变最后的比分。,从某种程度上这是真的.....因此本文仅供学习参考!!,预测一场比赛的最终比分或赢家确实是很难的,但在预测一项比赛的赢家时就不是这样了。在过去的5年中,Bayern Munich赢得了所有的德甲联赛,而Manchester City则赢得了4个首发联赛。其实这些都可以用来预测的。,经过测试,本文建立的模型能成功地预测了在20-21赛季中期的所有英超、西甲、意甲和德甲这些联赛的冠军,这也是基于当时已经有近19场比赛了。同样,我们使用该模型来预测下2022年世界杯,会不会有如此惊人的效果呢?一起拭目以待吧~,有不同的方法来进行预测。我可以建立一个花哨的机器学习模型并给它提供多个变量,但在阅读了一些论文后,我决定使用泊松分布试一试。,泊松分布 有读者会疑问,这是为什么呢?那接下来首先看一下泊松分布的定义。,有读者会疑问,这是为什么呢?那接下来首先看一下泊松分布的定义。,泊松分布是一个离散的概率分布,描述了在一个固定的时间间隔或机会区域内发生的事件的数量。,如果我们把进球看作是一场足球比赛90分钟内可能发生的事件,我们可以计算出A队和B队在一场比赛中可能进球的概率。,但这还不够。我们仍然需要满足泊松分布的假设。,毫无疑问,假设1和4是符合的,但2和3是部分正确的。也就是说,我们假设假设2和3总是正确的。,当预测欧洲顶级联赛的冠军时,我绘制了过去5年前4个联赛每场比赛的进球数柱状图。,
,4个联赛的进球数柱状图,如果你看一下任何联赛的拟合曲线,它看起来像泊松分布。,现在我们可以说,可以用泊松分布来计算一场比赛中可能出现的进球数的概率。,下面是泊松分布的公式。,
,为了进行预测,我考虑了。,为了计算lambda,我们需要每个国家队的平均进/丢球数。这将我们引向下一个问题。,
,
,
,
,
,
,
,
,由于在世界杯中,几乎所有的球队都在中立球场比赛,所以在这次分析中没有考虑主场/客场的因素。,一旦有了每个国家队的进/丢球数,就创建了一个函数,预测每支球队在小组赛中会得到多少分。,下面是我用来预测每个国家队在小组赛阶段会得到多少分的代码。,
,通俗地说,predict_points 计算的是主队和客队会得到多少分。这里使用公式计算每支球队的lambda,即average_goals_scored * average_goals_conceded 。,然后模拟了一场比赛从0-0到10-10的所有可能的比分(最后的那个比分只是我的进球范围的极限)。一旦有了lambda和x,就可以使用泊松分布的公式来计算p。,prob_home、prob_draw和prob_away分别累积了p的值,如果说比赛以1-0(主场获胜)、1-1(平局)或0-1(客场获胜)结束。最后,用下面的公式计算积分。,如果我们用predict_points来预测英格兰对美国的比赛,我们会得到这个结果。,这意味着英格兰将得到2.23分,而美国将得到0.59分。因为这里使用的是概率,因此得到的是小数。,如果将这个predict_points函数应用于小组赛阶段的所有比赛,我们将得到每个小组的第1和第2名,从而得到以下淘汰赛的比赛。,
,
,
,df_fixture_knockout['winner'] = '?' df_fixture_knockout 图片 对于淘汰赛,我不需要预测分数,而是预测每个小组的获胜者。这就是为什么我在之前的 predict_points 函数基础上创建了一个新的 get_winner 函数。,简单地说,如果主队的积分大于客队的积分,那么赢家就是主队,否则,赢家就是客队。,使用get_winner函数可以得到如下的结果。,
,
,
,
,如果我使用 get_winner,我可以预测世界杯的冠军。这是最后的结果!!,
,通过再一次运行该函数,我得到的赢家是...巴西!
© 版权声明
文章版权归作者所有,未经允许请勿转载。