惊呆了!我用 Python 可视化分析和预测了 2022 年 FIFA世界杯

日期: 栏目:欧洲环 浏览:36 评论:0

  许多人称足球为 “不可预测的游戏”,因为一场足球比赛有太多不同的因素可以改变最后的比分。

  从某种程度上这是真的…因此本文仅供学习参考!!

  预测一场比赛的最终比分或赢家确实是很难的,但在预测一项比赛的赢家时就不是这样了。在过去的5年中,Bayern Munich赢得了所有的德甲联赛,而Manchester City则赢得了4个首发联赛。其实这些都可以用来预测的。

  经过测试,本文建立的模型能成功地预测了在20-21赛季中期的所有英超、西甲、意甲和德甲这些联赛的冠军,这也是基于当时已经有近19场比赛了。同样,我们使用该模型来预测下2022年世界杯,会不会有如此惊人的效果呢?一起拭目以待吧~

  有不同的方法来进行预测。我可以建立一个花哨的机器学习模型并给它提供多个变量,但在阅读了一些论文后,我决定使用泊松分布试一试。

  有读者会疑问,这是为什么呢?那接下来首先看一下泊松分布的定义。

  泊松分布是一个离散的概率分布,描述了在一个固定的时间间隔或机会区域内发生的事件的数量。

  如果我们把进球看作是一场足球比赛90分钟内可能发生的事件,我们可以计算出A队和B队在一场比赛中可能进球的概率。

  但这还不够。我们仍然需要满足泊松分布的假设。

可以计算事件的数量(一场比赛可以有1、2、3或更多的进球)。事件的发生是独立的(一个目标的发生不应影响另一个目标的概率)。事件发生的速度是恒定的(在某一时间间隔内发生目标的概率对于相同长度的其他每一个时间间隔都应该是完全相同的)。两个事件不可能在完全相同的时间内发生(两个目标不可能同时发生)

  毫无疑问,假设1和4是符合的,但2和3是部分正确的。也就是说,我们假设假设2和3总是正确的。

  当预测欧洲顶级联赛的冠军时,我绘制了过去5年前4个联赛每场比赛的进球数柱状图。

  在这里插入图片描述

  4个联赛的进球数柱状图

  如果你看一下任何联赛的拟合曲线,它看起来像泊松分布。

  现在我们可以说,可以用泊松分布来计算一场比赛中可能出现的进球数的概率。

  下面是泊松分布的公式。

  为了进行预测,我考虑了。

lambda:90分钟内进球数的中位数(A队和B队)。x:一场比赛中A队和B队可能进的球数

  为了计算lambda,我们需要每个国家队的平均进/丢球数。这将我们引向下一个问题。

  关于python世界杯预测代码不懂可以微信扫描下方CSDN官方认证二维码加入python交流学习

  多多交流问题,互帮互助,这里有不错的学习教程和开发工具。

  👉[[CSDN大礼包:《python安装包&全套学习资料》免费分享]](安全链接,放心点击)

  在收集了从1930年到2018年的所有世界杯比赛的数据(需要完整数据请扫文末二维码后,回复:世界杯 获取)后,可以计算出每个国家队的平均进球和丢球情况。

  读取数据

  清洗df_fixture

  清洗df_missing_data

  在这里插入图片描述

  清洗df_historical_data

  在这里插入图片描述

  保存清洗过后的数据

  在这里插入图片描述

  世界杯梦之队球员

  在这里插入图片描述

  每个国家队中最有技能的球员

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  由于在世界杯中,几乎所有的球队都在中立球场比赛,所以在这次分析中没有考虑主场/客场的因素。

  一旦有了每个国家队的进/丢球数,就创建了一个函数,预测每支球队在小组赛中会得到多少分。

  下面是我用来预测每个国家队在小组赛阶段会得到多少分的代码。

  计算球队实力大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!

  在这里插入图片描述

  通俗地说,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名,从而得到以下淘汰赛的比赛。

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  对于淘汰赛,我不需要预测分数,而是预测每个小组的获胜者。这就是为什么我在之前的 predict_points 函数基础上创建了一个新的 get_winner 函数。

  简单地说,如果主队的积分大于客队的积分,那么赢家就是主队,否则,赢家就是客队。

  使用get_winner函数可以得到如下的结果。

  在这里插入图片描述

  预测四分之一决赛、半决赛和决赛的情况

  四分之一决赛

  在这里插入图片描述

  半决赛

  在这里插入图片描述

  决赛大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!

  在这里插入图片描述

  如果我使用 get_winner,我可以预测世界杯的冠军。这是最后的结果!!

  在这里插入图片描述

  通过再一次运行该函数,我得到的赢家是…巴西!大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!

惊呆了!我用 Python 可视化分析和预测了 2022 年 FIFA世界杯

惊呆了!我用 Python 可视化分析和预测了 2022 年 FIFA世界杯

评论留言

我要留言

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。