AWS re:2020 最令人兴奋的公告之一是添加了一项新功能,以帮助检测机器学习 (ML) 模型中的偏差并解释模型预测:.在人们使用 ML 算法进行大规模预测的世界中,大型技术组织能够向客户解释为什么他们根据 ML 模型的预测做出特定决策变得越来越重要。至关重要的是,这直接脱离了原来的基本模型,它就像一个“封闭的盒子”,我们可以观察输入和输出,但看不到内部运作。这不仅为进一步分析以迭代和进一步改进模型配置开辟了途径,还为客户提供了前所未有的模型预测分析水平。
一个特别令人感兴趣的用例来自由 AWS 提供支持的 Fußball Liga (DFL) 德甲赛程,旨在为模型预测提供有趣的见解。由 AWS 提供支持的德甲直播为世界各地的德甲球迷在足球比赛期间提供更具吸引力的球迷体验。它为观众提供有关投篮难度、他们最喜欢的球员的表现的信息,并且可以说明球队的进攻和防守趋势。
借助 DFL,您现在可以交互式地解释需要哪些关键基本特征来确定 ML 模型依赖什么来预测值。 xGoal(预期进球的缩写)是计算出的球员在球场上任何位置进球的概率。了解各自的特征属性并解释相关结果有助于模型调试,从而提高预测的质量。也许最重要的是,提高透明度有助于建立对机器学习模型的信心和信任,为未来的协作和创新开辟无数机会。更好的可解释性推动了更广泛的采用。话不多说,让我们一起来详细了解一下吧!
德甲联赛成绩
由 AWS 提供支持的 Live 为德甲比赛提供基于官方比赛数据实时生成的高级统计数据和见解。这些统计数据通过国内和国际广播公司以及 DFL 的平台、频道和应用程序向观众提供。这让全球超过 5 亿德甲球迷能够更深入地了解球员、球队和联赛,以及更加个性化的体验和下一代统计数据。
使用德甲联赛结果,DFL 可以评估球员在球场上任何位置进球的概率。实时计算每次射门的进球概率,让观众了解射门的难度和进球的概率。值越高(所有值都在 0 到 1 之间),进球的可能性就越大。在这篇博文中,我们将仔细研究这个指标,并深入研究底层机器学习模型的内部工作原理,以确定为什么它可以预测个人射门和整个足球赛季。
编译和审查培训数据
德甲 ML 模型将进球得分事件数据与通过帧速率为 25 Hz 的先进跟踪技术获得的高精度数据相结合,使其优于以前的模型。通过实时跟踪球和球员的位置,定制模型可以确定其他特征德甲多特蒙德球员向球迷解释,例如射门角度、球员与球门之间的距离、球员的速度、对方后卫的数量以及对方守门员的位置。节省范围。我们使用(AUC)作为训练操作的客观指标,并从 2017 年开始使用该算法,通过来自德甲联赛的 40,000 多个历史射门数据来训练模型。有关使用 SDK 进行训练和超参数优化的更多信息,请参阅技术匹配事实:数据如何输入。
只需查看原始训练数据集中的几行即可了解我们正在处理的特征类型; Shot 数据集混合了二进制值、分类值和连续值。以下屏幕截图显示了用于模型训练和可解释性处理的 17 个特征中的 8 个。
它极大地帮助新手数据科学家和经验丰富的机器学习学者编译数据集、构建和训练自定义模型,然后将其部署到医疗保健、媒体和娱乐以及金融等许多垂直行业。
与大多数机器学习工具一样,它缺乏一种方法来深入研究和解释所述模型的结果,或调查训练数据集中是否存在偏差。随着 的发布,这一切都发生了变化,它使您能够检测偏差并以可重复和可扩展的方式强制模型可解释性。
缺乏可解释性通常会阻碍组织采用 ML(机器学习)。近年来,解决模型可解释性缺乏问题的理论方法已经成熟,一个出色的框架成为可解释人工智能(AI)领域的关键工具:SHAP()。这种方法的完整解释超出了本文的范围,因此这里有一个简短的介绍:SHAP 的核心是通过提出以下问题来构建模型解释:“当从我们的模型中删除某个特征时会发生什么?预测有变化吗?” SHAP值是这个问题的答案——它们直接计算某个特征对预测的影响德甲多特蒙德球员向球迷解释,无论是大小还是方向。基于联盟博弈论,SHAP值旨在描述作为联盟参与者的数据实例的特征值,然后告诉我们如何在各种特征之间公平分配支出(预测)。 SHAP 框架更优雅的功能之一是它与模型无关且高度可扩展,可用于简单的线性模型以及包含数百层的深度复杂的神经网络。
使用以下内容解释德甲模型的行为
现在我们已经介绍了数据集和 ML 可解释性德甲多特蒙德球员向球迷解释,我们可以开始初始化处理器,它可用于计算我们需要的 SHAP 值。此处理程序中的所有参数都是通用的,仅与您当前的生产环境和可用的 AWS 资源相关。
首先,我们使用以下代码定义处理作业以及会话、AWS 和 (IAM) 执行角色以及 (S3) 存储桶:
from sagemaker import clarify
import os
session = sagemaker.Session()
role = sagemaker.get_execution_role()
bucket = session.default_bucket()
region = session.boto_region_name
prefix = ‘sagemaker/dfl-tracking-data-xgb’
clarify_processor = clarify.SageMakerClarifyProcessor(role=role,
instance_count=1,
instance_type=’ml.c5.xlarge’,
sagemaker_session=session,
max_runtime_in_seconds=1200*30,
volume_size_in_gb=100*10)
我们可以将 CSV 训练文件保存到 S3,然后指定作业的训练数据和结果路径,如下所示:
DATA_LAKE_OBSERVED_BUCKET = ‘sts-openmatchdatalake-dev’
DATA_PREFIX = ‘sagemaker_input’
MODEL_TYPE = ‘observed’
TRAIN_TARGET_FINAL = ‘train-clarify-dfl-job.csv’
csv_train_data_s3_path = os.path.join(
“s3://”,
DATA_LAKE_OBSERVED_BUCKET,
DATA_PREFIX,
MODEL_TYPE,
TRAIN_TARGET_FINAL
)
RESULT_FILE_NAME = ‘dfl-clarify-explainability-results’
analysis_result_path = ‘s3://{}/{}/{}’.format(bucket, prefix, RESULT_FILE_NAME)
现在我们已经实例化了处理器并定义了可解释性训练数据集,我们可以开始指定特定于问题的实验配置:
BASELINE = [-1, 61.91, 25.88, 16.80, 15.52, 3.41, 2.63, 1,
-1, 1, 2.0, 3.0, 2.0, 0.0, 12.50, 0.46, 0.68]
COLUMN_HEADERS = [“target”, “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”,
“9”, “10”, “11”, “12”, “13”, “14”, “15”, “16”, “17”]
NBR_SAMPLES = 1000
AGG_METHOD = “mean_abs”
TARGET_NAME = ‘target’
MODEL_NAME = ‘sagemaker-xgboost-201014-0704-0010-a28f221a’
以下是需要注意的重要输入参数,如前面的相关代码片段所示:
我们将重要参数直接传递给 ., .和 。实例。运行以下代码来启动正在处理的作业:
model_config = clarify.ModelConfig(model_name=MODEL_NAME,
instance_type=’ml.c5.xlarge’,
instance_count=1,
accept_type=’text/csv’)
shap_config = clarify.SHAPConfig(baseline=[BASELINE],
num_samples=NBR_SAMPLES,
agg_method=AGG_METHOD,
use_logit=False,
save_local_shap_values=True)
explainability_data_config = clarify.DataConfig(
s3_data_input_path=csv_train_data_s3_path,
s3_output_path=analysis_result_path,
label=TARGET_NAME,
headers=COLUMN_HEADERS,
dataset_type=’text/csv’)
clarify_processor.run_explainability(data_config=explainability_data_config,
model_config=model_config,
explainability_config=shap_config)
全局解释
在对整个训练集运行可解释性分析后,我们可以快速轻松地查看每个特征的总 SHAP 值及其分布,从而使我们能够绘制给定特征值的正或负变化如何影响最终预测。我们使用开源 SHAP 库来绘制处理作业中计算出的 SHAP 值。
下图是全局解释的示例,它使我们能够理解模型及其跨多个数据点的总特征组合。 、 和 t 这些特征在预测我们的目标变量(即是否对目标进行评分)方面发挥着最重要的作用。
这种类型的图可以更进一步,为我们提供比条形图更多的背景信息,让我们更深入地了解每个特征的 SHAP 值的分布(允许您映射给定特征值的变化如何影响最终的结果)预测),以及预测工具与目标变量之间的正负关系。下图中的每个数据点代表一次投篮尝试。
如图右侧纵轴所示,红色数据点代表较高的特征值,蓝色数据点代表较低的值。 X 轴显示了对投篮预测值的正面和负面影响,该影响源自 SHAP 值。例如,您可以从逻辑上推断出增加射门角度会增加预测的对数赔率(这与是否进球的真实预测相关)。
值得注意的是,对于结果垂直分散度较高的区域,重叠数据点的集中度较高,这使我们能够了解每个特征的值的分布。
这些功能根据其重要性从高到低排序。当我们比较三个时间段(2017-2018、2018-2019 和 2019-2020)的该图时,我们发现特征重要性及其相关的 SHAP 值分布几乎没有变化。在德甲联赛中,所有俱乐部都是如此,只有少数俱乐部偏离了常态。
即使我们的比赛事件都不涉及点球(所有特征值= 1),它仍然必须包含在处理工作中,因为它也包含在初始模型训练中。我们需要模型训练和处理的两个特征集之间的一致性。
特征依赖关系
我们可以更深入地研究 SHAP 特征依赖图,这可以说是最简单的全局解释。我们只需选择一个特征,然后在 X 轴上绘制特征值,在 Y 轴上绘制相应的 SHA 值。下图显示了我们最重要功能的这种关系:
如果我们仔细观察这两个(影响较小的)分类变量,我们会发现,在所有其他条件相同的情况下,头球总是会降低进球的几率,而任意球会增加进球的几率。鉴于 =Yes 和 =No 在 0 SHAP 值附近的垂直分散,我们无法得出关于它们对目标预测的影响的任何结论。
特征交互
在考虑了各个特征的影响之后,我们可以通过突出不同特征之间的交互(附加效果)来改进依赖图。我们使用博弈论中的 SHAP 交互值来获得每个实例的 FXF 维矩阵,其中 F 是特征数量。使用此交互索引,我们可以为具有最强交互作用的 SHAP 特征依赖图着色。
例如,假设我们想知道变量 和 是如何相互作用的,以及它们对 SHAP 值的影响。只需将对方球员对射手施加的所有个人压力相加即可计算得出。我们可以看到与进球变量呈负相关,离球门的距离越近,进球的机会就越高。当然,在那些进球预测率较高的比赛中, 和 之间存在很强的反比关系;即前者减少,后者增加。
几乎所有接近球门的射门都是以大于 45 度的角度击出的。距离目标越远,角度就越小。这是有道理的;你什么时候见过有人在距离球门40米的边线进球?
请记住,从之前的结果来看,射门角度越大,进球的机会就越高;我们可以查看防守球员数量的SHAP值,并确定这种情况仅发生在一两个防守球员靠近进攻球员时。
仔细回顾我们最初的全局汇总图,我们可以看到特征总和中存在一些不确定性(由零 SHAP 值标记周围的密集点簇表示)。我们可以使用交互图来深入研究这些值,然后尝试发现并确定导致这种情况的原因。
经过检查,我们发现即使对于两个最重要的特征,它们对改变的SHAP值的影响也是最小的。这里的关键是,当球员压力很小或没有压力时,低压力会增加进球的几率,而当接近球门的压力很大时,情况恰恰相反:球员进球的可能性较小。这些效果是相反的:我们看到,随着压力的增加,形状值的增加会降低。令人高兴的是,我们的特征交互图能够证实我们的远见并量化发挥作用的各种力量。
毫不奇怪,只有少数头球是从小于 25 度的角度射入的。然而,更有趣的是,在比较头球对进球概率的影响时,我们发现无论25-75°范围内的角度如何,头球都会降低进球概率。这可以简化如下:如果你最喜欢的球员脚下有球并从广角射门,那么进球的几率比球在空中上升的几率更高!
相反,如果角度大于25度,则以较慢的速度运球的球员可能比以较快的速度向球门运球的球员有更低的得分机会。从这两张图可以看出,<25和>25对进球预测的影响有明显的区别。当我们快速识别数据的总体趋势时,我们可以开始看到使用 SHAP 值来分析季节数据的价值。
当地解释
到目前为止,我们的分析仅关注整个数据集的可解释性结果(全局解释)。现在,让我们探索一些特别有趣的比赛及其进球事件,看看当地的解释是什么。
让我们回顾一下2019-2020赛季最有趣的一场比赛,那就是2020年2月8日勒沃库森(拜耳04)4-3战胜多特蒙德()。这场比赛惊心动魄,我们可以看到每个特征对值(我们在横轴上看到的模型输出值)有不同的影响。我们看到,从底部开始,一路向上,这些特征开始对最终预测产生越来越大的影响,一些极端情况表明 、t 和 t 如何在我们模型的概率预测中发挥最终决定权。虚线代表进球的比赛事件。
如果我们看一下莱昂打进的比赛的第六个进球(模型之前相对轻松地预测了这个进球),我们可以看到许多(关键)特征值超过平均值并有助于进球改进概率,如下所示反映在下面的力图中相对较高的值 0.36。
我们看到的基本值是德甲过去三个赛季的平均每次射门次数,即0.0871!模型在此基线开始预测,正向力和负向力可能会增加或减少预测值。在图中,要素的 SHAP 值表示为箭头,驱动更高(正值)或更低(负值)的预测值。该镜头具有高点 (56.37)、低点 (1.0) 和低点 (6.63),而在之前的情况下,不存在具有抵消效果的特征。所有定性描述(例如,小、低和大)都与数据集中每个相应特征的平均值相关。
在另一个极端,有些目标我们的模型无法预测,SHAP 值也无法解释。埃姆雷·詹 (Emre Can) 被 22% 的德甲观众评选为 2019-2020 赛季最佳射手。考虑到他与球门的最佳距离(约30米)以及接近平角的球门角度(11.55度),他的进球机会几乎为零(3%),所以他最终的进球令人惊讶有了这样的成绩。奇迹。唯一有助于提高他得分机会的特点是他承受的压力很小,并且附近只有两名球员可以阻止他得分。不过,这显然很难阻止Can。正如足球比赛中常见的情况一样,射门的每个方面都可以如此完美,以至于没有人(更不用说先进的机器学习模型)可以预测最终结果。
只需使用进球时球员位置的跟踪数据,我们就可以制作 Can 实际进球的 2D 动画。
演示1
演示2
结论:对德甲形势的影响
由 AWS 提供支持的德甲联赛源的主要收获有两个。本文的实验结果向我们表明:
在像足球比赛这样复杂的现实场景中,传统的或基于逻辑的规则系统在应用时就开始崩溃,无法提供任何类型的事件预测,更不用说对特定情况进行深入解释。通过该应用,我们不仅可以增强进球预测模型,还可以根据每场比赛的情况来分析足球比赛。
近年来,随着捕捉足球数据的技术取得巨大进步,我们可以使用模型来对这些海量数据进行建模。随着德甲比赛数据集的复杂性、深度和丰富性不断增加,团队不断探索新的、令人兴奋的想法,以了解有关比赛的更多信息,以及如何根据正在进行的富有洞察力的可解释性结果模型来调整我们优秀的数据库。更新和改进是不可避免的并且持续进行,为德甲联赛的行动开辟了许多令人兴奋的途径。
“通过 STS,开发人员可以在几分钟内体验先进的可解释人工智能算法的强大功能,并将它们与数字平台的其余部分无缝集成,这是我们标准化云上 ML 工作流程的长期战略的关键部分。”
该解决方案是否可以帮助痴迷的足球运动员在当地联赛中获得优势,为经理提供对球员当前和预测未来表现的客观评估,或者作为知名足球专家的对话开端,帮助他们识别特定球员和球队的进攻和防守趋势,您已经可以通过将其应用于德甲比赛来欣赏它在足球生态系统所有领域所创造的有形价值。
关于作者
Nick 是 AWS 专业服务团队的数据科学家。他与医疗保健、金融、体育和媒体等不同行业的 AWS 客户合作,利用 AI/ML 加速业务成果。工作之余,他喜欢旅行、尝试新美食以及阅读科技知识。尼克的教育背景是天体物理学和机器学习,但他偶尔也会关注一下德甲联赛,而且他从小就是曼联(曼联)的球迷!
Luuk 是 AWS 专业服务团队的数据科学家。他与各行业的客户合作,帮助他们通过机器学习挖掘数据。在业余时间,他喜欢学习思想以及心理学、经济学和人工智能 (AI) 之间的交叉点。
Anzer 是 DFL 子公司 AG 的首席数据科学家。他致力于使用人工智能/机器学习从足球数据中为球迷和俱乐部提取有趣的见解。他的教育背景是数学和机器学习,但他还在蒂宾根大学攻读体育分析博士学位,并正在努力获得自己的足球教练执照。
标签: , , 人工智能