14 岁那年,我第一次在足球上押注 2010 年世界杯冠军。我仅凭直觉就猜中了每一场比赛,并押注了我计划中的两支决赛队伍:荷兰队和西班牙队。最后,这两支球队进入了决赛——我很高兴我的预测成真了。
14 年后,我开始寻找一个项目来加深我的 Python 和机器学习技能,这让我接触到了一个 2024 年欧洲杯的预测项目。我的主要目标是预测比赛结果(胜、平或负)以及每支球队的进球数。
在本文中,我将概述我的 2024 年欧洲杯预测项目,重点介绍我采取的关键步骤、遇到的挑战以及获得的见解。如需深入了解技术细节(包括代码实现),请参阅随附的笔记本项目— 您需要一个 DataLab 帐户才能访问所有文件。
预测足球比赛结果的挑战
由于多种因素,预测足球比赛结果非常困难。在足球比赛中,进球的统计分布变化很大。同时,与其他团队球类运动相比,每场比赛的得分机会相对较少,导致结果难以预测。
以手球为例:手球的得分机会频繁,因此比赛结果往往更可预测,因为进球数更可能反映出创造和阻止得分机会的情况,因为得分尝试次数在比赛过程中平均下来。然而,在足球比赛中,有时在球门前“停下大巴”,然后进行一次坚决的反击,就足以扭转比赛局势。
此外,足球比赛具有高度路径依赖性的特点,这意味着比赛的势头和结果通常严重依赖于第一个进球。微小但重要的动作可能会导致进球或红牌,并极大地改变比赛的进程,使预测变得更加困难。
近年来,VAR(视频助理裁判)的引入增加了比赛的不可预测性,因为它可以推翻场上的关键决定。我们不要忘记难以捉摸的“当日状态”,作为以不可预测著称的法兰克福队(绰号“喜怒无常的女足”)的球迷,我可以就这个因素写一本书。
2024 年欧洲杯体育分析
解决数据限制的策略
除了讨论的因素之外,我的预测 亚马逊数据库 模型还面临几个我必须解决的额外数据限制。
缺乏球员特定数据:如果没有详细的球员数据,例如关键球员的存在、个人表现指标或伤病情况,模型可能会错过影响比赛结果的关键因素。虽然国家队不像足球俱乐部那样受到转会市场波动的影响,但球队的组成多年来发生了很大变化,因此如果数据能够反映这一点,那将是有益的。
缺乏比赛数据:缺少比赛数据,如比赛中的控球率或传球成功率,会降低模型做出精确预测的能力。比赛第一个进球的时间和球队等数据点也有助于追踪上述路径依赖关系的模式,从而更容易预测比赛的走向。
为了解决所用数据带来的挑战,我们采用了以下几种策略:
填补缺失数据
我尽可能地填补了缺失的数据点以确保数据集保持全面——例如,添加要预测的比赛的战术阵型。
由于大多数球队都坚持使用相同的阵型,因此在训练和测试后,我假设每支球队都会使用他们在过去五场比赛中最常用的阵型。这使我们能够在阵容公布之前预测比赛,而阵容公布只会在比赛开始前一小时发生。
排除或替换功能
当归纳和删除都不切实际时,我会排除或替换某些特征,以避免损害模型的准确性。
例如,我最初想做一个两级预测,即利用主要特征来预测控球率和预期进球等次要特征,并根据这些次要特征来预测结果。为了简单起见,我决定不采用这种方法,而是根据比赛平均统计数据为每支球队分配两个特征来代表他们的比赛风格。
删除缺失数据
如果无法进行归纳,我会删除缺失数据以保持数据集的完整性。幸运的是,只有少量观测值丢失,因此数据集仍然包含 3,000 多个匹配项,可用于模型构建。
数据管道:从收集到预测
解决了困难和限制之后,让我们来看看将原始数据转化为有见地的预测的过程。数据管道是该项目的骨干,涉及收集、预处理和准备数据进行建模,利用各种战术、心理和历史特征。
数据抓取
第一步是从Transfermarkt等各种来源抓取历史比赛数据,以收集有关过去比赛的全面信息。
生成的 DataFrame 中的一行对应参与球队的一场比赛。此数据与FootyStats数据相结合,包括了比赛风格特征,例如平均控球率和效率指标。
欲了解更多详细信息,请查看此处的数据抓取笔记本。
特征工程
接下来,原始数据被转换成可供机器学习模型使用的有意义的特征。这涉及提取值、转换变量和计算平均值。
不同颜色点的图
数据集中所有球队的效率与脆弱性集群
我们确定了几个关键特征并将其用于模型中,以提高预测的准确性。这些特征包括:
战术阵型:双方球队的阵型以及前锋和后卫的人数。目的是确定各种流行阵型之间的结果模式以及球队的进攻和防守能力。
最受欢迎/最不受欢迎状态:为了简单客观地衡量这一点,我从欧洲国家联赛级别(以及非欧洲球队的相应国际足联世界排名范围)中得出这个特征,以表明哪支球队预计表现会更好。
球队状态:过去五场比赛中的平均进球数和失球数可以洞悉每支球队当前的进攻和防守表现水平。
比赛风格:平均控球率和效率与脆弱性指标集群(见上图)用于捕捉球队的比赛风格。效率计算为进球与预期进球 (xG) 的比率,包括自进球和失球。集群仅针对合格球队进行拟合,因为它们是感兴趣的球队,然后应用于数据集中至少有一场比赛的所有其他球队。请注意,由于数据中的比赛数量有限,非欧洲球队的值可能相差甚远。
阶段:包括锦标赛阶段(小组赛或淘汰赛阶段),以说明球队面临的不同压力水平。目的是根据赌注发现表现模式。
团队精髓和长期趋势:此功能假设存在一些无法解释的休息,可以将其作为每个团队的精髓来捕捉。结合时间变量,此功能表示其他功能未涵盖的元素,从而全面了解团队的整体表现和趋势。
在构建机器学习模型之前,数据集被分为未玩过的比赛和玩过的比赛,以区分标记数据和未标记数据。此外,我们取高度右偏形式特征的对数,并应用规范化和独热编码,以确保数据采用合适的格式。