2022世界杯结果预测,简单AI模型最有效?附代码!

news2025/1/6 21:41:46

2022世界杯冠军是谁?本文将为你揭晓一个利用简单AI模型得到的靠谱预测。

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

这是真的……在某种程度上。
北大出版社,人工智能原理与实践 人工智能和数据科学从入门到精通 详解机器学习深度学习算法原理

人工智能原理与实践 全面涵盖人工智能和数据科学各个重要体系经典

很难预测最终比分或比赛的获胜者,但在预测比赛的获胜者时却并非如此。在过去的5年里,拜仁慕尼黑赢得了所有的德甲冠军,而曼城则赢得了4次英超联赛冠军。

巧合?我不这么认为。

我们将如何预测比赛?

有不同的预测方法。我可以构建一个复杂的机器学习模型并为其提供多个变量,但在阅读了一些论文后,我决定给泊松分布一个机会。

为什么?好吧,让我们看一下泊松分布的定义。

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

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

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

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

毫无疑问,假设 1 和 4 得到满足,但假设 2 和 3 部分成立。也就是说,让我们假设假设 2 和 3 始终为真。

过去我曾准确预测欧洲顶级联赛的获胜者,当时我绘制了前 4 大联赛过去 5 年每场比赛进球数的直方图。
在这里插入图片描述

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

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

下面是泊松分布的公式。

在这里插入图片描述

为了做出我考虑的预测:

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

要计算 lambda,我们需要每个国家队的平均进球数/失球数。这将我们带到下一点。

每个国家队的进球数/失球数
北大出版社,人工智能原理与实践 人工智能和数据科学从入门到精通 详解机器学习深度学习算法原理

人工智能原理与实践 全面涵盖人工智能和数据科学各个重要体系经典

在收集了 1930 年到 2018 年所有世界杯比赛的数据后,我可以计算出每个国家队的平均进球数和失球数。

在这里插入图片描述

在我对欧洲前 4 联赛的预测中,我考虑了主客场因素,但由于在世界杯上几乎所有球队都在中立场地比赛,因此我在分析时没有考虑这个因素。

一旦我获得了每支国家队的进球数/失球数,我就创建了一个函数来预测每支球队在小组赛阶段将获得的积分数。

预测小组赛阶段
下面是我用来预测每个国家队在小组赛阶段将获得多少分的代码。它看起来很吓人,但它只有我提到的很多东西,直到这一点被翻译成代码。


def predict_points(home, away):
    if home in df_team_strength.index and away in df_team_strength.index:
        lamb_home = df_team_strength.at[home,'GoalsScored'] * df_team_strength.at[away,'GoalsConceded']
        lamb_away = df_team_strength.at[away,'GoalsScored'] * df_team_strength.at[home,'GoalsConceded']
        prob_home, prob_away, prob_draw = 0, 0, 0
        for x in range(0,11): #number of goals home team
            for y in range(0, 11): #number of goals away team
                p = poisson.pmf(x, lamb_home) * poisson.pmf(y, lamb_away)
                if x == y:
                    prob_draw += p
                elif x > y:
                    prob_home += p
                else:
                    prob_away += p
        
        points_home = 3 * prob_home + prob_draw
        points_away = 3 * prob_away + prob_draw
        return (points_home, points_away)
    else:
        return (0, 0)

上面代码解释一下就是,我们用predict_points计算主队和客队将获得多少分。为此,我使用公式 计算了每个团队的 lambda average_goals_scored * average_goals_conceded。

然后我模拟了一场比赛的所有可能比分,从 0-0 到 10-10(最后一个比分只是我目标范围的限制)。一旦我有了 lambda 和 x,我就使用泊松分布的公式来计算p。

如果比赛分别以 1–0(主场获胜)、1–1(平局)或 0–1(客场获胜)结束,则prob_home、prob_draw和prob_away将累积其值。p最后,使用以下公式计算分数。

points_home = 3 * prob_home + prob_draw
points_away = 3 * prob_away + prob_draw

如果我们predict_points用来预测英格兰对美国的比赛,我们会得到这个。

>>> predict_points('England', 'United States')
(2.2356147635326007, 0.5922397535606193)

这意味着英格兰将获得 2.23 分,而美国将获得 0.59 分。

如果我们将此predict_points函数应用于小组赛阶段的所有比赛,我们将获得每个小组的第 1 和第 2 名,从而在淘汰赛中获得以下比赛对抗阵容。
北大出版社,人工智能原理与实践 人工智能和数据科学从入门到精通 详解机器学习深度学习算法原理

人工智能原理与实践 全面涵盖人工智能和数据科学各个重要体系经典
在这里插入图片描述

预测淘汰赛

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

def get_winner(df_fixture_updated):
    for index, row in df_fixture_updated.iterrows():
        home, away = row['home'], row['away']
        points_home, points_away = predict_points(home, away)
        if points_home > points_away:
            winner = home
        else:
            winner = away
        df_fixture_updated.loc[index, 'winner'] = winner
    return df_fixture_updated

简单来说,如果points_home大于points_away则为主队,否则为客队。

多亏了这个get_winner函数,我可以得到前面小组赛的结果。

在这里插入图片描述

预测四分之一决赛、半决赛和决赛

如果我get_winner再次使用我可以预测世界杯的获胜者。这是最终结果!

在这里插入图片描述

通过再次运行该函数,我知道赢家是….
巴西!

全栈程序员推荐,AI好书
在这里插入图片描述

北大出版社,人工智能原理与实践 人工智能和数据科学从入门到精通 详解机器学习深度学习算法原理

人工智能原理与实践 全面涵盖人工智能和数据科学各个重要体系经典

链接文中github link
github link

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21789.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试官:什么是伪共享,如何避免?

本文已收录到 GitHub AndroidFamily,有 Android 进阶知识体系,欢迎 Star。技术和职场问题,请关注公众号 [彭旭锐] 加入 Android 交流群。 前言 大家好,我是小彭。 在前面的文章里,我们聊到了 CPU 的高速缓存机制。…

【electron】判断当前进程是否是开发环境的五种方案(获取一些资源的路径)

文章目录导读需求开发环境判断是否是开发环境方案一:location.protocol方案二:全局变量__static方案三:全局变量process.resourcesPath方案四:全局变量process.env.WEBPACK_DEV_SERVER方案五:app.isPackaged获取配置目…

OS-process

process 什么是进程 进程是被加载到内存中、正在运行的程序;多个进程可能对于同一个程序、一个正在运行的OS中会有多个进程 进程是程序的一次执行过程,是操作系统分配资源的基本单位 作业等同于进程 进程的布局: 每个进程都有一个不同的…

内网渗透中最常见的十种漏洞分析总结

【环境搭建资料、工具包、全套视频…等籽料】私信聆取 以下信息是根据2020年和2019年为全球各种中型组织和企业完成的60多个渗透测试报告汇总而来的,在跳转到列表之前,让我们简要介绍一下全面的测试方法。 一、测试方法 目的是使用白盒(灰盒)方法在现场…

spirngboot项目.mvn/wrapper/maven-wrapper.properties‘ does not exist.

rm -rf ~ 命令后,项目出现一些问题,如下 执行命令: ./mvnw clean package -am -pl bistoury-dist -P$PROFILR -Dmaven.test.skip -Denforcer.skiptrue 报异常: starting to build bistoury agent Exception in thread "ma…

[附源码]java毕业设计同德佳苑物业管理系统论文

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

SpringBoot数据层解决方案/ 内置持久化解决方案JdbcTemplate使用/内置数据库H2使用以及RedisNoSql使用

写在前面: 继续记录自己的SpringBoot学习之旅,这次是SpringBoot应用相关知识学习记录。若看不懂则建议先看前几篇博客,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 3.4 数据层解决方案 3.4.1 使用项目 新建空项目&a…

redis的事务

Redis的事务:一次事务操作,改成功的成功,该失败的失败。 提交事务 如果遇见错误 成功的成功,失败的失败,不会回滚 先开启事务,执行一些列的命令,但是命令不会立即执行,会被放在一…

web分享会

文章目录前言平台1. 在线练习平台2. 自己搭建靶场3. CTF真题平台分享前言 个人的学习过程仅供参考。 个人情况 我是大二进的工作室,算是比较晚的了,工作室的师兄人也很好,我有问题也会去找他们。我是一位女生,非常欢迎师妹们加入&…

从购买云服务器开始到成功部署网站并且可以正常外网访问整个体系流程(从0到1的过程)

准备工作: 购买云服务器(阿里云或腾讯云都行),过程一样。购买域名,并做解析处理,通过域名访问网站(后面需要自行备案)。 云服务器一些基本配置处理: 用密码登录方式登录root用户到云服务器上 登录成功后&#xff0c…

MHDNet

发现一种性能更优的目标检测网络,不同的输入分辨率下,目标分布和检测头之间存在不同的匹配关系。基于这些有指导意义的发现,作者提出了一种基于检测头和目标分布之间匹配的轻量化交通目标检测网络,称为MHDNet。该模型在BDD100K数据…

【k8s】3、kubeadm安装k8s集群

文章目录一、环境部署1、关闭防火墙规则、关闭selinux、关闭swap交换分区2、修改主机名、DNS解析3、调整内核参数二、所有节点安装Docker三、安装k8s集群1、所有节点配置K8S源2、所有节点安装kubeadm、kubelet和kubectl3、部署K8S集群3.1 初始化操作(master节点操作…

【虚幻引擎UE】UE4/UE5 环境构建插件推荐及使用介绍

一、Ultra Dynamic Sky(天气插件) 支持天气和昼夜变换,包含音效,可以预设也可以动态切换。内置照明解决方案,太阳、月亮和天空照明均与天空同步,并随时间变化。 天气包含:晴天、2D晴天、雨天、…

进程的通信 - 命名管道

命名管道概述 命名管道(Named Pipes),顾名思义,一个有名字的管道。命名管道的名字主要是用于确保多个进程访问同一个对象。命名管道不仅可以在同一台计算机之间传输数据,甚至能在跨越一个网络的不同计算机的不同进程之…

Zbrush 导出置换 然后导入vray 在 3ds max 和 maya 设置

注:方法很多,这个只是个人学习总结,如果不合适,可另外学习其他方法! 第一步: Zbrush 导出置换和法线设置: 第二步: 3Ds max 设置方式建议用exr格式(由于导出的时候…

科目一过关技巧

口诀 3让6违——题目中看到“6分”选“违”字;看到“违”字选6分(“违”法停车的违字除外,选9分);看到“让”就3分红高蓝低——红色圈圈最高,蓝色最低虚可实禁——车辆可以压虚线,不能压实线&a…

Windows11 配置Cuda cuDNN Pytorch环境

文章目录1 安装CudaNote 安装失败的情况2 安装cuDNN3 安装Anaconda4 安装Pytorch5 使用Pycharm进行验证6 结束1 安装Cuda 进入 developer cuda: https://developer.nvidia.com/ 之后自定义路径进行安装即可 必装CUDA,其他情况自己选择 自定义路径 Document与Deve…

Python表白比心

本文介绍运用Python中的turtle库控制函数画比心图。    文章目录一、效果展示二、代码详解1 导入库2 播放音乐3 画手4 定义画心的函数5 定义写名字的函数并实现动态画心一、效果展示 在介绍代码之前,先来看下本文的实现效果。 可以参考Pinstaller(Python打包为exe…

[附源码]java毕业设计网上手机商城的设计与实现

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

JS,DOM试题2,在实践中应用,非常详细!!

列表收缩 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><style>ul,li{list-style: none;padding: 0;margin: 0;}ul{display: none;}h3{margin: 0;background: cornflowerblue;}div{text-indent: 20…