发布于: Aug 26, 2022

 

数据分析与预测在体育运动领域面临很多的挑战,尤其是面对海量的数据,我们应该如何处理,如何通过一套算法,形成自己的预测系统

 

数据分析与预测在体育运动领域面临很多的挑战,尤其是面对海量的数据,我们应该如何处理,如何通过一套算法,形成自己的预测系统,本文将会为您做简要介绍。

 

为了探索广泛的分类算法(例如逻辑回归、随机森林、XGBoost 以及神经网络等),我们使用了 10 倍分层交叉验证法(stratified cross-validation)进行模型训练。在探索之后,我们发现 Amazon SageMaker 所内置的 XGBoost 拥有更高的预测性能以及更快的推理速度。此外,与原始代码库相比, XGBoost 实现占用的内存空间更小、日志记录更全面、超参数优化(HPO)质量更高。

超参数优化又被称为调优,指的是为学习算法选择一组最佳超参数的过程。事实上,这也是任何机器学习过程中最具挑战的工作。Amazon SageMaker 中的 HPO 使用贝叶斯优化实现,旨在为下一项训练作业选定最佳超参数。Amazon SageMaker HPO 会自动启动采用不同超参数设置的多项训练作业,并根据预定义的客观指标评估训练结果,而后根据先前的结果为后续训练选择更好的超参数搭配。

下图所示,为模型训练工作流的基本架构。

 

 

大家可以通过初始化估算器(estimator),借此配置训练作业以及何时启动超参数调优作业。这里的估算器包含算法的容器镜像(在本用例中为 XGBoost)、训练作业的输出配置、静态算法的超参数值,以及用于训练作业的实例类型及数量。关于更多详细信息,请参阅训练模型。

要为本用例创建 XGBoost 估算器,请输入以下代码:

import boto3
import sagemaker
from sagemaker.tuner import IntegerParameter, CategoricalParameter, ContinuousParameter, HyperparameterTuner
from sagemaker.amazon.amazon_estimator import get_image_uri
BUCKET = <bucket name>
PREFIX = 'kicker/xgboost/'
region = boto3.Session().region_name
role = sagemaker.get_execution_role()
smclient = boto3.Session().client('sagemaker')
sess = sagemaker.Session()
s3_output_path = ‘s3://{}/{}/output’.format(BUCKET, PREFIX)

container = get_image_uri(region, 'xgboost', repo_version='0.90-1')

xgb = sagemaker.estimator.Estimator(container,
                                    role, 
                                    train_instance_count=4, 
                                    train_instance_type= 'ml.m4.xlarge',
                                    output_path=s3_output_path,
                                    sagemaker_session=sess)
在完成XGBoost估算器对象的创建之后,使用以下代码为其设定初始超参数值:
xgb.set_hyperparameters(eval_metric='auc',
                        objective= 'binary:logistic',
			num_round=200,
                        rate_drop=0.3,
                        max_depth=5,
                        subsample=0.8,
                        gamma=2,
                        eta=0.2,
                        scale_pos_weight=2.85) #类不平衡权重

# 指定目标指标(验证集的auc)
OBJECTIVE_METRIC_NAME = ‘validation:auc’

# 指定超参数及其范围
HYPERPARAMETER_RANGES = {'eta': ContinuousParameter(0, 1),
                        'alpha': ContinuousParameter(0, 2),
                        'max_depth': IntegerParameter(1, 10)}

在本文中,我们使用 AUC(ROC曲线下面积)作为评估指标。以此为基础,调优作业得以衡量不同训练作业的性能。射门预测同样属于典型的二元分类问题,在 objective 参数中指定为 binary:logistic。大家还可以对另一组 XGBoost 专用超参数进行调优。关于更多详细信息,请参阅 XGBoost 模型调优。

接下来,通过指示 XGBoost 估算器、超参数范围、传递参数、设置目标指标名称与定义、调节资源配置(例如需要运行的总训练作业数量以及可以并发运行的训练作业)这一系列过程创建出 HyperparameterTuner 对象。Amazon SageMaker 会使用正则表达式从 Amazon CloudWatch Logs 当中提取指标,具体参见以下代码:

tuner = HyperparameterTuner(xgb,
                            OBJECTIVE_METRIC_NAME,
                            HYPERPARAMETER_RANGES,
                            max_jobs=20,
                            max_parallel_jobs=4)
s3_input_train = sagemaker.s3_input(s3_data='s3://{}/{}/train'.format(BUCKET, PREFIX), content_type='csv')
s3_input_validation = sagemaker.s3_input(s3_data='s3://{}/{}/validation/'.format(BUCKET, PREFIX), content_type='csv')
tuner.fit({'train': s3_input_train, 'validation':

最后,通过调用 fit() 函数启动超参数调优作业。此函数将使用 S3 存储桶中的训练与验证数据集路径。在创建超参数调优作业之后,您可以通过 Amazon SageMaker 控制台跟踪其进度。训练时间取决于实例类型以及您在调优设置当中选择的实例数量。

 

在训练作业完成之后,您可以部署性能最佳的模型。如果希望比较模型性能以进行 A/B 测试,Amazon SageMaker 也支持为多个模型托管代表性状态传输(REST)终端节点。要进行此设置,请创建一个终端节点配置,在其中描述模型之间的流量分发方式。此外,终端节点配置还将描述模型部署所需要的实例类型。这里我们首先获取性能最佳训练作业的名称,并创建模型名称。

在终端节点配置创建完成之后,即可部署实际终端节点以支持推理请求。我们需要验证示例端点,并将其合并至生产应用程序当中。关于部署模型的更多详细信息,请参阅将模型部署至 Amazon SageMaker 托管服务。要创建终端节点并调整配置,请输入以下代码:

endpoint_name = 'Kicker-XGBoostEndpoint'
xgb_predictor = tuner.deploy(initial_instance_count=1, 
                             instance_type='ml.t2.medium', 
                             endpoint_name=endpoint_name)

在终端节点创建完成之后,即可实时请求预测结果。

 

我们可以创建一个安全且可扩展的 RESTful API,基于输入值请求模型预测。在 Amazon Web Services 服务的帮助下,大家能够轻松便捷地创建出各种不同 API。下图所示,为模型推理工作流的基本架构。

首先,我们通过 Amazon API Gateway 传递参数以请求踢球进入端区的可能性,具体参数包括踢球的位置与区域、踢球手 ID、当前联赛及冠军 ID、比赛时段、踢球者所属球队当前为主队还是客队、球队当前得分状态等。

API Gateway 将这些值传递给 Amazon Web Services Lambda 函数,由函数解析这些值并从 DynamoDB 表中请求与球员表现相关的其他特征,包括踢球手的所处区域、其在当前锦标赛乃至整个职业生涯中的平均成功率等。如果数据库中不存在此球员,则模型会使用平均表现作为预设。该函数在完成所有数值组合之后,即可对数据进行标准化并将结果发送至 Amazon SageMaker 模型端点进行预测。

该模型执行预测,并将预测到的概率返回至 Lambda 函数。此函数解析返回的值,再将结果发送回 API Gateway。API Gateway 响应输出结果,整个端到端进程的延迟不足 1 秒。

以下截屏所示,为 API 的示例输入与输出。RESTful API 还会输出特定位置及区域中所有球员的平均成功率,借此比较球员表现及整体平均水平。

 

 

为了创建第一套延迟在毫秒级别的实时锦标赛预测模型,机器学习解决方案实验室采取逆向工程方式,借此确定如何尽可能节约时间及资源。该团队在 Amazon SageMaker 环境中的端到端 notebook 上不断探索,希望在这套统一的平台上尝试数据访问、原始数据解析、数据预处理及可视化、特征工程、模型训练与评估以及模型部署。以此为基础,整个建模流程的自动化程度得到显著提升。

此外,机器学习解决方案实验室团队还使用新生成的数据更新模型,借此实现模型的持续迭代。这种方式极大提升了建模工作的计算效率与时间效率。

在后续计划中,Stats Perform AI 团队决定深入研究英式橄榄球分析的发展方向,尝试使用这项技术解析阵容、战术讨论,并使用细粒度且具备时空连续性的比赛数据。凭借新的特征表示与潜在因子建模(二者已经在 Stats Perform 的 Edge 比赛分析与球员招募产品中得到有效应用),相信英式橄榄球运动将会迎来更广阔的创新空间。  

 

Stats Perform 与 Amazon Web Services 共同为 2020 年健力士六国英式橄榄球锦标赛带来第一套实时预测模型。此模型能够在球场上的任意位置做出罚球或端区突破的成功概率。他们使用 Amazon SageMaker 构建、训练并部署机器学习模型,并将变量分为三大主要类别:基于位置的特征、球员表现特征以及比赛情境特征。Amazon SageMaker 端点能够以亚秒级延迟提供的预测结果,成功帮助主办方在比赛的现场直播当中为数百万球迷提供实时指标。

 

相关文章