YYDS!用Python预测了世界杯冠军

2024-02-22 23:59

本文主要是介绍YYDS!用Python预测了世界杯冠军,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1839d95d5064132ec8075342b68e19ec.gif

来源:机器学习AI算法工程

该项目所属数据挖掘类型:分类预测问题。

通过对2018年之前世界杯各个国家球队的表现以及比分结果进行数据分析,并结合以往各个球队在历届世界杯中的表现,通过机器学习算法建立模型,并对其进行评价以及模型优化之后,进行模拟2022年卡塔尔世界杯的冠军球队的归属。

首先从Kaggle网站上找到合适的历年世界杯的比赛结果数据集。

网址:https://www.kaggle.com/abecklas/fifa-world-cup

该数据存在诸多多余的属性:如比赛年份,比赛场地等。我们首先去掉无关的属性,只留下:主队、客队、主队进球数、客队进球数,比赛结果。其中结果集分为1为主队获胜,2为客队获胜,-1为平局。

52bc6c93733a8b599b18e156dbe80e85.png

此时,我们发现仅有主场客场比分并不能很好地分析每个队的实力,所以我们要进行数据统计,找出新的特征值来扩充数据集。

数据扩充

首先我们计算每个国家的参赛次数

71b26e0e1e2ff1c80536bdd7e3535477.png

合并后生成的tr_data_after.csv中内容为:主队、客队、主队参赛次数、客队参赛次数、主队胜利次数、客队胜利次数、主队进球数、客队进球数、主队胜率、客队胜率、主队场均进球、客队场均进球、比赛结果。

4954db7ba4f291eb69199772f7c6cf0b.png

d0ea6619f3e7eb3fc45bad85619ced81.png

179029bc0d5f0e8a614f886580cbf92d.png

数据预处理

efe2514dbc5ece95cfe399bb5c363974.png

其中标准分数(z-score)是一个分数与平均数的差再除以标准差的过程。
用公式表示为:z=(x-μ)/σ。
其中x为某一具体分数,μ为平均数,σ为标准差。

93b76e845eec1a34e9f2bc0229051e3e.png

预处理后的数据存放至play_score_normal.csv中:

274d27a73f07b4580c687aacfb91b097.png

机器学习模型

6a372e3728a92e19324caa66f66195bd.png

此处使用了神经网络、逻辑回归、支持向量机、决策树、随机森林算法分别进行训练。并输出其在训练集上的准确度、在测试集上的准确度以及平均绝对误差。

此时发现结果并不理想,准确度仅为六成左右。

误差原因分析:

(尝试方法一)分别输出以上机器学习算法的学习曲线:

143970c7a113cdc2e52e3b0e7cb2e98c.png

d75c3d6bcae117af8480e5cfcef91a45.png

9aa8c1ef1be2694168288e321923bb57.png

结果图上可以看出,随着数据量的增加,三组模型虽然趋近于收敛,但是在训练集和检验集上准确度表现都很差,仅有0.58左右。这预示着存在着很高的偏差,是欠拟合的表现。

决策树学习曲线:

ee01afc3eb8be7e1c960fe6e4f1045e5.png

决策树和随机森林出现了高方差情形,也就是过拟合的情况。这都预示着我们要找到正确率低原因,并且优化我们的模型。

(尝试方法二)输出灰色关联矩阵:

24ebc73bb8d9fdc47f7547cf50da8efe.png

统计出每个特征关联度的均值后,我们发现大部分的特征关联度都在0.738021~0.710410之间,也就是说大部分特征都与结果呈现出了相对较高的关联性。

这也意味着已有的数据源的特征关联度对之前模型的影响是有限的。

(尝试方法三)以上两种方法进一步缩小了误差原因,于是重新分析测试集与预测结果如图:

测试集:蓝色的*

预测结果:红色的o

发现在预测平局方面,算法预测结果有着较大的误差。于是我们推测由于结果集中的平局拉低了模型的准确度。

204083a08d525b6b83d258e710509bd7.png

进一步查询有关资料发现,我们所使用的决策树算法,随机森林算法,还有逻辑回归,都典型二分类的算法。而此时我们的结果集有三类。

我们重新检查数据源,发现平局的情况仅有199条,而仅凭借着这些较少数据量去很好的训练数据是不合适的。于是我们开始探讨简化结果集即去掉平局结果的可行性。

在充分了解世界杯的规则后,从16强开始,就意味着告别了小组赛,开始了淘汰赛。如遇到平局,就开始加时赛以及点球大战。即比赛结果只有胜负两种结果。而数据集中的比赛结果是将点球大战排除在外的90分钟内的比赛结果。所以含有平局的情况。

模型改良

将play_score_normal.csv中所有的结果集为-1(即平局的数据去掉)

重新采用上述机器学习算法进行训练学习。

训练结果如下:

神经网络:

  • 训练集准确度:0.570

  • 测试集准确度:0.570

  • 平均绝对误差: 0.5740740740740741

逻辑回归:

  • 训练集准确度:0.554

  • 测试集准确度:0.622

  • 平均绝对误差: 0.5296296296296297

决策树:

  • 训练集准确度:0.894

  • 测试集准确度:0.407

  • 平均绝对误差: 0.8074074074074075

随机森林:

  • 训练集准确度:0.894

  • 测试集准确度:0.485

  • 平均绝对误差: 0.7111111111111111

SVM支持向量机:

  • 训练集准确度:0.592

  • 测试集准确度:0.530

  • 平均绝对误差: 0.6222222222222222

由上可见,准确度有了略微的提升,但这还不是我们想要达到的准确度。于是我们继续研究,并尝试使用深度学习算法继续提升模型的准确度。

深度神经网络

于是我们使用了Sequential模型,它是多个网络层的线性堆叠,通过堆叠许多层,构建出深度神经网络。

5800d43a9f79f93932b07bacf9377d35.png

5249d03e443422cc725a9e7c126063d8.png

正确率已经能够到达92%。但需要进一步的调参,找到更合适的参数,防止过拟合。

接下来我们暂时用此模型,对世界杯的结果进行模拟预测。

冠军预测

对于2022年的16强队的选择,考虑到近几年球队的数据更能反映出该球队的状态,于是我们统计了近几年(2002-2018)年共5次世界杯进入16强次数最多的队伍。

从16支队伍里面随机选中8支队伍,分为两队:

d5e4012fcdbbc22820f3f4633eceb5f0.png

从数据集里面找到这16支队伍相对应的数据:

dd2b37f66fe8c65d69f0c8211144fbea.png

比赛的两支队伍的数据进行合并用作待预测数据,并使用深度学习算法进行预测:

4395edbe5e357e6e903f069384474f48.png

6562e943ad13922a6f4c16f208c54009.png

b96872b4d03c830798bcfbc60fe89e20.png

b6fae943bee208b9f321331a530b9662.png

代码+数据集在公众号Python小二后台回复世界杯获取~

以上预测结果仅为参考,原因如下:

1、数据量较少。

2、小组赛是由抽签结果确定的,而且分为了各个地区(如亚洲区、欧州区),抽签的结果无法预测,即每个队伍有特定地区的对手,且是由抽签决定的。

3、本预测结果16强队均为历史上进入16强次数最多的队伍,且比赛时为两两随机比赛,而真正进入世界杯16强队伍中会有很多“黑马”杀入,并且有很多洲际规则需要考虑。

若要真正预测结果,则需等待小组分组结果后,决出16强或32强。这样会比较然后将其球队数据代入,最终决出冠军。

  • 👉 Python 毕设实战项目

  • 👉 Python 练手必备神器

  • 👉 Python 爬虫实战必备神器

这篇关于YYDS!用Python预测了世界杯冠军的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/736919

相关文章

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

利用Python打造一个Excel记账模板

《利用Python打造一个Excel记账模板》这篇文章主要为大家详细介绍了如何使用Python打造一个超实用的Excel记账模板,可以帮助大家高效管理财务,迈向财富自由之路,感兴趣的小伙伴快跟随小编一... 目录设置预算百分比超支标红预警记账模板功能介绍基础记账预算管理可视化分析摸鱼时间理财法碎片时间利用财

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑