案例分享:德甲 X AWS,进球「神预言」到底是如何做到的?

image

很多朋友喜欢在业余时间观看足球比赛,而且能够快速根据当前球员射门的位置与角度,判断出这一脚有多大机会命中球门。如果是在电视上观看比赛,再配合上主持人的解说与充满情绪的引导,大家几乎能够预测出这临门一脚会有怎样的效果了。

但以往,这样的判断只能通过肉眼观察实现,同时结合当前防守球员的数量(例如守门员所在位置,或者射门球员位于球门正面还是侧面)做出假设。现在,使用xGoals(即「预期进球」的缩写)技术,AWS 得以为德甲联赛提供强大的技术支持,充分发挥数据与洞见的强大力量,帮助球迷们即时判断在球场各个位置射门得分的确切概率。

德国足球甲级联赛是德国职业足球的组织与营销主办方。在每场比赛中,德甲联赛将收集到超过360万个数据点,旨在更深入地了解运动场上正在发生的一切。以此为基础,德甲联赛积累起为全球5亿多球迷及70多家合作媒体增强观赛体验的丰富经验,这也使其成为世界上最具创新性的体育联盟之一。德甲联赛希望通过新的方式使用技术成果,以机器学习(ML)为驱动力提供实时统计数据,最终为粉丝建立起个性化内容并将数据转化为洞见乃至实际行动。

xGoals则是德甲联赛与AWS在2020年5月底正式启动的两项全新Match Facts功能之一(另一项为Average Positions),旨在增强全球球迷的观赛参与度,同时统计每场比赛的最高平均进球数。这项服务中使用的机器学习模型由全托管Amazon SageMaker负责构建、训练以及部署。xGoals能够客观评估德甲球员在赛场上任意位置的射门得分几率,还可以确定当前传球(相较于当前球员坚持单刀、或者是传给其他球员)是否会提升得分几率。

xGoals及其他德甲Match Facts服务以数据为基础建立分析洞见的尝试,也给整个足球领域建立起新的实时数据统计标杆。

量化进球几率

xGoals Match Facts服务于2020年5月26日多特蒙德队对阵拜仁慕尼黑的比赛中首次亮相,本场比赛在全球200多个国家进行播放。这是一场艰苦的比赛,双方的防守都异常强大,每一次进攻机会都需要拼尽全力去争取。在此期间,拜仁慕尼黑队的Joshua Kimmich带来了出色表现。但结合到球门的距离、射门角度、周边防守球员数量以及其他因素,强大如他也只有6%的得分几率。

xGoals机器学习模型能够产生一份介于0和1之间的概率图,具体数值以百分比形式显示。例如,在对德甲比赛中训练的机器学习模型进行评估后,可以看到每一脚点球的xGoals(简称「xG」)值为0.77,意味着进球得分的几率为77%。xGoals引入的这个数值能够以定量方式衡量球员或者球队的得分机会,并结合各项相关因素将其呈现给屏幕前的观众。

在每场比赛的最后,屏幕上还会显示出两支球队的xGoals值汇总。这样,观众就能看到客观得分机会的指标。如果不是Kimmich那一脚成功的射门,这场比赛很有可能打成平局。xGoals能够通过多种方式增强观看体验并提供分析洞见,帮助球迷们保持极高的参与度,同时深入理解当前比赛乃至整个赛季中特定球员及球队的赛场表现。

考虑到射门得分是一项具有极高动态属性的指标,实际比赛中的xGoals值很少能超过70%。球员们的位置会不断变化,射门者必须在有限的信息之下(主要依靠直觉)做出瞬间决策。因此,根据实际情况,即使已经攻入禁区之内,射门得分的难度也可能存在很大差异。因此,最重要的就是在每一个特定时刻,以数据为依据全面了解赛场上的所有事件。只有这样,将这些信息输入xGoals机器学习模型时,系统才能综合考量所有球员的位置做出真正可靠的判断。

一切以数据为起点

为了让赛事变得更加生动精彩,德甲联赛方面需要在赛前、赛中与赛后完成一系列检查与处理工作。各相关方都将参与到数据采集、数据处理、图形生成、内容创建(例如电视上的精彩瞬间集锦)以及实时评论等环节。每个德甲足球场配备多达20部摄像机,使用自动光学跟踪技术持续拍摄球员与皮球的位置。编辑团队则负责处理其他视频数据,选择理想的摄像机角度与场景进行播送,包括何时适合在电视画面上显示Match Facts统计信息。
image

赛场上的几乎所有事件(包括罚球与射门)都将被实时记录下来,并发送至德甲联赛的系统进行远程验证。人工注释者将对事件进行分类,同时补充针对特定情况的描述信息。例如,他们可以添加球员与球队的分配战术,以及当前行为类型(抢断或者助攻)。

最终,所有原始匹配数据都将被纳入AWS上的Bundesliga Match Facts系统当中,由其计算出xGoals值,而后发布给全世界的观众。

对于德甲官方应用及网站,Match Facts会第一时间在最终用户设备上持续显示。当然,德甲方面也在努力加快第三方数字平台及其他外部客户的Match Facts结果交付速度,保证为全球球迷提供最新的洞见与高级统计信息。

现在,实时内容分发与球迷参与度已经成为职业体育赛事的绝对核心。而受到疫情影响,目前的德甲比赛只能在没有一位观众的空旷赛场内进行 —— 这当然会严重影响到球赛观看体验。

我们的机器学习之旅:将代码引入生产

德甲联赛的领导层、管理团队以及开发部门一直在采用云服务的过程中与AWS专业服务团队通力配合,希望借助机器学习的力量增强观众体验。AWS数据科学顾问的任务,正是通过高效运用机器学习技术加速客户业务成果。客户需要首先参与初步评估,并从业务及技术两个方面认真研究希望达成的结果与相应可行性。AWS专业服务顾问则为客户的内部团队提供专业技能与行业经验、开发概念验证(POC)项目、打造最低可行性产品(MVP)并最终将机器学习解决方案投入生产。在此期间,我们还将持续推动学习与知识的转移,保证技术层面的尝试始终能够与明确的商业价值对应起来。

除了在德甲联赛下辖子公司Sportec Solutions中进行的内部实验与原型开发之外,我们也在全力建设独立的完善研究社区,致力于进一步提升xGoals计算的性能与准确率。将这一领域的知识与正确的技术栈上结合,再配合上最佳实践,我们将能够在保证卓越运营、安全性、可靠性、性能效率与成本优化的同时,更快推动大规模创新与实际执行。

足球比赛的历史数据无疑是基于机器学习技术的xGoals模型的训练基础。我们使用这些数据训练机器学习模型,根据赛场上的特定条件推理xGoals可能得出的结论。为了进行数据质量评估与初步实验,我们需要进行探索性数据分析、数据可视化、数据转换以及数据验证。

这方面工作,可以通过Amazon SageMaker notebook等方案进行。下一步自然就是将机器学习工作负载从研究阶段转移至开发环境。这一部署流程需要使用跨学科工程方法,包括将数据工程、数据科学与软件开发结合起来。生产设置还需要配合错误处理、故障转移与恢复计划等多项举措。总体而言,机器学习系统的开发与运营(MLOps)涉及一系列复杂流程,包括代码重构、重新设计与优化、自动化、设置云基础设施基础、实施DevOps与安全模式、执行端到端测试、监控并保证使用正确的系统设计。我们的目标,始终是尽可能在更多系统组件中实现自动化,最大程度减少人工干预与手动维护需求。

在下一节中,我们将进一步探讨AWS为德甲比赛Match Facts提供的底层技术栈,以及在将xGoals投入生产环境时的基本注意事项。

使用Amazon SageMaker训练xGoals模型

传统的xGoals机器学习模型单纯以事件数据为基础。这意味着评估进球几率时,模型只考虑球员的当前位置及其与球门之间的距离。但德甲方面将射门事件与以25Hz帧频获取的高精度位置数据结合起来 —— 虽然更高的数据采集精度会给数据流分析管道带来更高的数据清洗与数据预处理压力,但却能够带来更准确的预测结果,进而全面抵消额外工作量与复杂性产生的开销。通过持续跟踪皮球与球员的位置,该模型能够确定一系列附加特征,例如球员到球门间的距离、当前射门角度、球员的速度、对方防守球员数量以及对方门将的扑救范围等。

在xGoals当中,我们自2017年开始就使用Amazon SageMaker XGBoot算法使用德甲联赛超过40000次历史射门数据训练机器学习模型。训练工作可以使用默认的训练脚本(以XGBoost作为内置算法)执行,也可以通过以下方法进行模型扩展:添加预处理与后处理脚本(将XGBoost作为框架)。Amazon SageMaker Python SDK使您能够轻松通过内置的规模伸缩功能以编程方式执行训练作业。它还抽象了XGBoost自动超参数优化中所涉及的资源部署与管理复杂性。我们建议大家先从一小部分可用数据起步,借此实现更快的实验启动速度,而后逐步发展并最终在完整的数据集上实现更加复杂的机器学习模型优化。

xGoals训练作业中包含一项二进制分类任务,其中将ROC曲线下面积(AUC)作为目标指标,同时配合高度不平衡训练与射门验证数据集(无论是否实际进球)。

基于贝叶斯搜索的超参数优化作业提供多种机器学习模型选项,我们可以选择性能最强的机器学习模型并将其部署至Amazon SageMaker端点之上。由于不同模型在训练中有着不同的资源与生命周期要求,因此我们的模型训练与托管环境彼此分离。我们可以使用API实时推理从应用程序(例如AWS Lambda函数)或者Amazon SageMaker Notebook内部调用端点。

但是,单纯使用Amazon SageMaker训练机器学习模型还远远不够。其他基础设施组件对于完整云机器学习管道的建立同样至关重要,具体包括数据集成、数据清洗、数据预处理、特征工程以及机器学习模型的训练与部署等等。此外,我们还需要对其他特定应用程序云组件进行集成。

xGoals架构:无服务器机器学习

在设计应用程序架构之前,我们已经建立起持续集成与持续交付/部署(CI/CD)管道。根据AWS良好架构框架白皮书中的说明,我们采用多账户设置方法建立起独立开发、分段与生产CI/CD管道。我们将其与基础设施即代码(IaC)方法配合起来,在交付环境之外为每一项代码变更提供可预测的部署支持。以此为基础,团队即可成功隔离不同环境、缩短发布周期,并促进代码的可测试性。开发者工具部署到位之后,我们开始为应用程序设计基本架构。下图所示,为这套架构的基本情况。
image

数据以两种相互独立的方式进行摄取:AWS Fargate(面向容器的无服务器计算引擎)用于接收位置与事件数据流,而Amazon API Gateway则用于接收其他元数据,例如球队名单与球员姓名。此输入数据将触发对应的Lambda函数,后者负责处理多项短暂的一次性任务 —— 例如自动撤销闲置资源,数据预处理,简单的提取、转换与加载(ETL)作业,并在每次使用新的匹配数据时进行多轮数据质量测试。我们还使用Lambda调用Amazon SageMaker端点,以给定的一组输入特征为基础检索xGoals预测结果。

我们使用两套数据库以存储比赛状态:键值数据库Amazon DynamoDB,以及文档数据库Amazon DocumentDB(兼容MongoDB)。后者可帮助我们使用嵌套结构轻松查询及索引JSON格式的位置与事件数据。这套数据库特别适合匹配那些要求以灵活Schema实现快速迭代的工作负载。对于官方比赛数据的集中存储,我们使用Amazon Simple Storage Service (Amazon S3)。Amazon S3负责存储所有比赛历史数据,用于迭代改进xGoals模型。Amazon S3还将存储关于模型性能、模型监控以及安全指标的全部相关元数据。

为了监控应用程序的性能,我们使用AWS Amplify Web应用程序。这样,运营团队与各相关方能够通过用户友好型仪表板查看系统运行状态、Match Facts计算状态以及底层云基础设施的运行概述。这样的运营洞见能够帮助我们捕捉并建立赛后回顾分析,进而对当前系统进行持续改进。该仪表板还能帮助我们收集大量测量指标,衡量并评估业务目标的实现水平。最后,持续监控相关KPI(包括总体系统负载与性能、端到端延迟以及其他非功能性要求)则能保证德甲联赛从业务及技术角度充分了解当前系统。

xGoals架构完全以无服务器形式构建,旨在提高可扩展性与易用性。全托管服务消除了服务器及其他基础设施组件带来的繁重管理与维护工作。这样一套架构,使我们能够在比赛开始之后动态支持各类需求,并在比赛结束时自动释放资源(无需任何手动操作)显著降低应用程序成本与运营开销。

总结

自2020年1月将AWS指定为官方技术供应商以来,德甲联赛与AWS携手踏上征途,为全球200多个国家/地区的球迷及广播公司带来先进的分析技术。AWS支持的德甲比赛实况可帮助观众更好地理解场上决策需要考量的策略性因素。xGoals则帮助球迷们根据赛场上的几项定量指标快速评估射门得分的几率。具体用例包括以个人球员及守门员的视角出发,估算得分或成功扑救的几率,以及比赛的实际得分结果是否与赛场上的客观状态指标相符。

AWS专业服务一直与德甲联赛及其子公司Sportec Solution携手合作,推进数字化转型进程、加快业务成果交付并持续保持创新。在接下来的几个赛季中,德甲联赛还将引入AWS提供的全新Match Facts功能,保证为全球球迷们带来融参与度、娱乐性于一身的一流赛事观看体验。

“德甲联赛得以使用AWS提供的先进技术(包括统计信息、分析与机器学习)解释数据,提供更深入的洞见并对球场上做出的瞬间决策建立起更好的理解。通过德甲Match Facts服务,观众们也可以真正理解自己关注的球队如何根据实际情况做出战术决策。”
               ——德甲集团数字创新执行副总裁Andreas Heyden

image

阅读 1.7k

推荐阅读
AWS_AI开发社区
用户专栏

AWS_AI 开发者社区是专注于人工智能领域 IT 人士交流与互动的平台。在这里,你可以分享和获取一切有关人...

882 人关注
79 篇文章
专栏主页