写点什么

谁才是一级方程式赛车中的最强车手?

发布于: 2021 年 03 月 01 日
谁才是一级方程式赛车中的最强车手?

一级方程式(简称 F1)赛车无疑是世界上最为复杂精妙的运动。人与机器的完美融合,成为在赛道上夺取优胜的关键。


作为 F1 赛事成立七十周年庆典的重要一环,也为了帮助车迷们更好地了解“谁才是有史以来最强车手?”,F1 与 Amazon 机器学习实验室合作开发出 Fastest Driver——由亚马逊云科技支持的最新 F1 Insight 项目。


Fastest Driver 使用亚马逊云科技的机器学习(ML)技术,通过 F1 历史数据库中自 1983 年以来的排位赛圈速记录对车手进行排名。在本文中,我们将演示如何使用全托管 Amazon SageMaker 服务实现机器学习模型的构建、训练与部署。在模型部署完成之后,Fastest Driver 这套以客观事实与数据资源驱动的分析模型,可以计算出 F1 赛事历史上的最强车手!


数学模型给出的答案,只关注众多 F1 驾驶员身上的一项素质,即周六下午排位赛中的最快圈速。换言之,模型并不关注赛车本身,也不关注谁能在赛道上开出每小时 200 英里的最高极速、同时游刃有余地应对赛道上的突发情况。正是这些驾驶技巧的总和,决定了优秀车手与伟大车手间的差距。因此,模型并没有迷失在这些技能当中,而单纯只强调圈速、以及车手极限压榨赛车性能的能力。


——一级方程式赛车数据系统总监

Rob Smedley

使用认证数据量化车手表现

我们将速度定义为排位赛中各位车手的单圈用时。车手们的赛场表现受到诸多因素的影响,包括天气条件、汽车配置(例如所用轮胎)以及赛道环境等。F1 排位赛共分为三节:第一节淘汰掉单圈用时位列第 16 位或更低的车手,第二节淘汰第 11 至第 15 位,第三位则确定正式比赛中从第 1 位至第 10 位车手的发车顺序。我们使用由 F1 官方提供的认证数据分析各位车手的实际水平。


通过将排位赛中的单圈用时进行归一化,我们得以消除不同赛道之间的差异,跨越多场比赛对单圈时间进行全面汇总。这种标准化过程得以均衡不同车手之间的用时差异,更准确地比较不同赛道上各位车手的实际表现,同时也消除了针对特定赛道构建模型以解决完赛时长的客观区别。除此之外,我们还引入另一项重要技术,即比较同一车队(例如阿斯顿·马丁红牛车队)内部的车手在排位赛中的数据,观察各位队友在至少五轮排位赛中的竞争结果。以车队为基础,我们得以在相同的比赛条件下直接进行车手能力比较,同时将赛车本身造成的影响控制在最低水平。


当然,比赛条件(例如湿滑路况)以及规则变更都有可能给车手的成绩造成重大影响。为此,我们将同一车队各位队员之间的中位单圈用时偏差(阈值设定为 2 秒)以识别并消除异常单圈时间离群值。例如,我们可以比较丹尼尔·里卡多与塞巴斯蒂安·维特尔在 2014 年参加红牛 F1 挑战赛时的表现。在该赛季内,里卡多单圈平均比维物尔快 0.2 秒。但如果排除到 2014 年美国大奖赛期间的成绩,则里卡多与维特尔的平均单圈用时差距将缩小至 0.1 秒。为什么会这样?因为在该分站赛中,维特尔因 107% 规则处罚而被迫从维修区开始比赛,导致里卡尔的单圈用时比维特尔领先超过 2 秒。

构建 Fastest Driver 模型

要构建良好的机器学习模型,首先需要准备高质量数据。通过对车手们的认证数据进行汇总,我们构建起一套跨越多年赛程的队友比较网络,旨在比较各支车队、各个赛季以及各场分站赛中的车手成绩。


例如,塞巴斯蒂安·维特尔与马克斯·维斯塔彭从未效力于同一车队,因此我们将二者与红牛车队的丹尼尔·里卡多进行比较,借此区分他们的驾驶水平。在 2016 至 2018 赛季,里卡多在红牛车队的平均圈速比维斯塔彭慢 0.18 秒。在删除了 2018 年巴林分站赛(这场比赛中,里卡多的圈速远好于维斯塔彭,但这是因为维斯塔彭发生撞车而未能正确完赛)等离群成绩值后,我们假设每场排位赛的权重值相等,那么在只考虑里卡多、维特尔以及维斯塔彭的情况下,维斯塔彭将当选为最强车手:维斯塔鼓比里卡多单圈快 0.18 秒,里卡多又比维特尔快 0.1 秒。


使用全车手网络之后,我们可以开始比较所有 F1 车手的赛事成绩,真正踏上最强车手的探索之旅。回到海基·科瓦莱宁,我们看看他在迈凯轮车队时与刘易斯·汉密尔顿在比赛中的表现。按排位赛中的单速成绩中位数来比较,二者的差距仅为 0.1 秒。虽然科瓦莱宁在世界锦标赛上的成绩无法与汉密尔顿相比肩,但其排位统计数据已经很能说明问题。凭借着整个职业生涯中稳定扎实的排位赛表现,他在模型的统计结果中高居榜首。


Insight 背后的核心模型之一,使用的正是 Massey 方法(一种线性回归形式的方法)。使用 Massey 方法,Fastest Driver 通过求解一组线性方程式对各位车手进行排名,其中每位车手的得分根据他们与队友间的平均圈速差计算得出。另外,在比较队友间的得分时,我们的模型还使用车手日程安排强度等特征,希望尽可能实现车手赛场表现的标准化。总体而言,这套模型认为在对阵同队车手或者高水平对手时拥有良好排位赛圈速的车手,其技术实力更强。


我们的目标是为每位车手划定一项数字得分,借此推断该车手相对于其他 F1 车手的比较优势。当然,前提是在任何一场比赛中,单圈用时差的预期裕度与车手的真实固有得分差值成正比。可能有些读者朋友对数学比较感兴趣,那这里再多解释几句:方程式中的 xi 代表所有车手,r 代表真实固有车手得分。在每场比赛当中,我们可以预测两位车手之间的任意单圈时间优势或劣势(yi)的裕度为:

在此等式中,xi 将为胜者 +1,为负者 -1;而 ei 则为由无法解释的变化而引起的误差项。对于给定的 m 场比赛观察值与 n 位车手,我们可以整理出如下(m * n)线性议程:

车手得分(r)则为通过线性回归对这一正态方程的解:

以下为 Massey 方法的示例代码,其使用 Amazon SageMaker 进行车手排名计算并演示出完整的训练过程(左滑即刻查阅完整代码):


1.    import numpy as np2.    import pandas as pd3.    import statsmodels.api as sm4.    from scipy.stats import norm 5.    6.    #example data comparing five drivers7.    data = pd.DataFrame([[1, 0, 88, 90], 8.                         [2, 1, 87, 88],9.                         [2, 0, 87, 90],10.                         [3, 4, 88, 92],11.                         [3, 1, 88, 90],12.                         [1, 4, 90, 92]], columns=['Driver1', 'Driver2', 'Driver1_laptime', 'Driver2_laptime'])13.    14.    def init_linear_regressor_matrix(data, num_of_drivers, col_to_rank):15.        """initialize linear system matrix for regression"""16.        wins = np.zeros((data.shape[0], num_of_drivers))17.        score_diff = np.zeros(data.shape[0])18.    19.        for index, row in data.iterrows():20.            idx1 = row["Driver1"]21.            idx2 = row["Driver2"]22.            if row['Driver1_laptime'] - row['Driver2_laptime'] > 0:23.                wins[(index)][(idx1)] = -124.                wins[(index)][(idx2)] = 125.                score_diff[(index)] = row['Driver1_laptime'] - row['Driver2_laptime']26.            else:27.                wins[(index)][(idx1)] = 128.                wins[(index)][(idx2)] = -129.                score_diff[(index)] = row['Driver2_laptime'] - row['Driver1_laptime']30.        wins_df = pd.DataFrame(wins)31.        wins_df[col_to_rank] = score_diff32.        return wins_df  33.    34.    def massey(data, num_of_drivers, col_to_rank='delta'):35.        """Compute for each driver, adjacency matrix and aggregated scores, as input to the Massey Model"""36.    37.        wins_df = init_linear_regressor_matrix(data, num_of_drivers, col_to_rank)38.        model = sm.OLS(39.            wins_df[col_to_rank], wins_df.drop(columns=[col_to_rank])40.        )41.        results = model.fit(cov_type='HC1')42.        rankings = pd.DataFrame(results.params)43.        rankings['std'] = np.sqrt(np.diag(results.cov_params()))44.        rankings['consistency'] = (norm.ppf(0.9)-norm.ppf(0.1))*rankings['std']45.        rankings = (46.            rankings47.            .sort_values(by=0, ascending=False)48.            .reset_index()49.            .rename(columns={"index": "Driver", 0: "massey"})50.        )51.        rankings = rankings.sort_values(by=["massey"], ascending=False)52.        rankings["massey_new"] = rankings["massey"].max() - rankings["massey"]53.        return rankings[['Driver', 'massey_new']]54.    55.    rankings = massey(data, 5)56.    print(rankings)
复制代码


最终,由 Fastest Driver 分析模型计算得出的这份有史以来最快车手名单(基于 1983 年至今整个 F1 历史数据库提供的信息)确实让人眼前一亮,其中一部分车手牢牢把持着领先排名。


激动人心的时刻来了!快来看看,你喜欢的车手有没有上榜!

 

著名车手艾尔顿·塞纳、迈克尔·舒马赫、刘易斯·汉密尔顿、马克斯·维斯塔彭以及费尔南多·阿隆索等车手在我们这份最强车手榜单名列前茅


需要强调的是,要量化车手的实际能力,我们需要将互动次数控制在最低水平。为此,我们只考虑五轮排位赛中同车队成员的对抗成绩。此外,我们还添加了大量参数与影响因素,努力消除各类实际条件给排名造成的影响——包括撞车、故障、年龄、职业暂歇或者排位赛期间的天气变化情况等。


此外,我们还注意到,如果某位车手在休息三年或者更长时间后重新回归 F1 赛场(例如 2010 年的迈克尔·舒马赫与佩德罗·德·拉·罗萨,2011 年的卡菲基恩,2019 年的罗伯特·库比卡等),则相对单圈成绩能够提高 0.1 秒。而当车手与同车队其他队员间的年龄差距较大时,例如 2013 年马克·韦伯对塞巴斯蒂安·维特尔,2017 年费利佩·马萨对兰斯·斯特罗尔,以及 2019 年基米·莱科宁对安东尼奥·吉奥维纳齐,年轻一方也会表现出类似的优势。


从 1983 年至 2019 年,我们通过观察发现与年龄较大的队员对抗时,年轻车手平均拥有 0.06 秒的单圈优势。当然,这份榜单不能算是最终排名,大家也可以积极地开展讨论,说出你的观点。Fastest Driver 只是提出了一种科学的车手排名方法,希望客观地评估车手在不同赛车上表现出的操控水平。

用 Amazon SageMaker 实现轻量化灵活部署

为了从 Fastest Driver 中获取洞见结论,我们在 Python Web 服务器上实施 Massey 方法。但一种复杂的情况在于,每轮比赛周末之后,模型需要使用新的认证数据进行圈速更新。为了及时完成模型更新,除了向 Web 服务器发送排名标准请求之外,我们还执行刷新请求,使服务器从 Amazon Simple Storage Service (Amazon S3)处下载新的认证数据。

      

我们将模型 Web 服务器部署在 Amazon SageMaker 模型端点之上。默认情况下,多实例 Amazon SageMaker 模型端点分布在多个可用区内,且内置有自动伸缩功能,能够保证我们的端点始终具备极高的可用性。


除此之外,各端点还与其他 Amazon SageMaker 功能相集成,进一步提升系统的运行效能。例如 Amazon SageMaker Model Monitor,能够自动监视端点中的模型漂移。作为一项全托管服务,Amazon SageMaker 让我们的最终架构非常轻巧灵活。为了完成部署,我们还使用 Amazon API Gateway  与 Amazon Lambda 在端点周边添加了 API 层。下图所示,为我们实际使用的基本架构。


这套架构包含以下操作步骤:


1、由用户向 API Gateway 发送一条请求。 

2、API Gateway 将该请求发送至 Lambda 函数。 

3、该 Lambda 函数向 Amazon SageMaker 模型端点生成一条请求。如果请求用于获取排名,则端点使用

当前可用的认证数据计算 UDC 排名,并返回结果。如果请求用于执行刷新,则端点将从 Amazon S3 处下载新的认证数据。

总结

回顾 F1 赛事七十年的发展历程,F1 与亚马逊云科技之间的这项合作,为破解最强车手这个历史难题带来了独特的视角。跟随 F1 的机器学习探索脚步,您也可以将这项技术应用到其他领域的复杂问题当中,处理各种长久存在的争议。在本赛季的 F1 赛事中,车迷们将有机会看到“最强车手”们轮番登场,关注他们在最新一轮竞逐中的实际表现。

      

全世界的体育联盟都在运用亚马逊云科技机器学习技术改善粉丝体验。健力士六国橄榄球锦标赛与德国德甲联赛已经在使用亚马逊云科技服务帮助粉丝们更具体地观察赛场上的细节,获得更深刻的赛场动态见解。在美国,全国橄榄球联盟(NFL)使用亚马逊云科技为球迷、球员及联盟各球队提供先进的统计数据,努力借助 AI 与机器学习之力改善球员们的健康与运动安全水平。


原文链接:谁才是一级方程式赛车中的最强车手?

用户头像

还未添加个人签名 2019.09.17 加入

还未添加个人简介

评论

发布
暂无评论
谁才是一级方程式赛车中的最强车手?