漂流:测试毫升模型在生产

2021年5月27日上午火灾(PT)

下载幻灯片

部署的机器学习模型已经成为一个相对无摩擦的过程。然而,正确的部署模型与一个健壮的测试和监控框架是一个更为复杂的任务。不存在放之四海而皆准的解决方案productionizing毫升模型时,通常需要自定义实现利用多个库和工具。然而,有一组核心统计检验和度量一个人应该有适当的检测数据和概念漂移等现象防止模型变得不知不觉地陈旧,不利于业务。

结合我们的经验与砖的客户合作,我们做一个深入的关于如何测试你的ML模型在生产中使用开源工具如MLflow SciPy statsmodels。bob下载地址你会远离这个演讲用知识武装的关键原则生产测试模型和数据的有效性,以及一个可概括的演示使用MLflow协助这一过程的再现性。

在这个会话表:
Chengyin Eng,数据科学顾问,砖
尼尔•Turbitt高级数据科学家,砖

成绩单

Chengyin Eng:嗨,每一个人。欢迎来到我们的谈话,远去,测试机器学习模型在生产。谈话结束的时候,你会被锚定一个测试套件和开源包选项来测试您的模型和生产数据的有效性。bob下载地址让我先介绍我自己。我的名字叫Chengyin Eng。我是一个数据科学家在砖。我为客户实现数据科学解决方案,还教机器学习。我的背景是在计算机科学、统计和环境研究。砖之前,我在人寿保险行业。

尼尔Turbitt:嗨,每一个人。我的名字是尼尔Turbitt。我也在砖的高级数据科学家。类似于Chengyin,我在EMEA毫升实践团队工作的欧洲。,我的时间与客户合作,构建和部署可扩展的机器学习解决方案,以及提供课程,专注于数据科学和机器学习与火花。砖之前,我的背景是构建可伸缩的数据驱动和机器学习解决方案在各种领域,比如供应链预测、物流优化和推荐系统。

Chengyin英格:酷。对于这次演讲,我们要讨论机器学习生命周期,我们为什么要关心漂移和测试,不仅我们应该监控,而且我们应该如何监控。最后,我们还将向您展示一个演示的工作流实现的。目前我们看到很多公司采用机器学习业务,但是根据园丁分析,一个令人惊讶的85%的数据实际上科学项目失败。另一个技术研究分析表明,只有4%的公司已经成功部署他们的机器学习模型。失败的百分比非常刺耳。让我们深入的原因。有很多机器学习项目失败的原因,这里我们只关注生产阶段。顶部原因机器学习模型未能执行在长期生产环境是大多数数据科学家忽视维护机器学习模型的重要性,发布部署。
我们许多人认为我们的工作是完成我们船后一个模型来生产。因此我们忽略的重要性再培训和测试我们的模型和数据生产,确保模型质量跨越时间是一致的。也许并不奇怪,毕竟考虑到毫升行动,这是机器学习的一组最佳实践,操作化是一个相对新兴的观点。周围有很多的困惑在哪里应用统计检验。特别地,使用什么样的测试。这是区域,我们希望阐明。我们希望在这里回答你的第一个问题。统计测试是什么,我们应该使用监控模型在生产吗?有一些专有软件部分解决这个问题,但是我们想要拉回层专有软件和检查从统计的角度来看。
第二个问题我们想要的答案是什么工具我可以用协调的监测数据和模型,我们希望演示如何设置这个只使用开源工具。bob下载地址这次演讲我们会关注测试表格数据在一个批处理场景中,但相关统计检验也在流媒体和实时场景。你也可以借相同的总体框架以适应其他类型的数据,如图像和文本。在这个演讲,我们将不会覆盖任何战略的部署模型。我们将不会覆盖任何单元测试和集成测试的代码。因为测试和监控每个用例和领域所特有的。这个演讲绝不是说明性的模型更新的模型。相反,我们将覆盖如何检测这些特征的变化和运动静止。深入nidicridy关于测试之前,尼尔,你能谈谈MLS周期和为什么我们应该监控吗?

尼尔Turbitt:当然。所以在我们可以解决的主题如何实现监控,我认为我们首先需要建立监测在哪里发挥作用在整个生命周期的机器学习系统。如果我们从基础开始我们第一次看到一个业务问题,我们可能有一个业务涉众来与一个他们认为可以解决的问题与机器学习。我们要与团队合作,确定这个项目的成功是什么样子。尤其是,建立可衡量的业务指标来评估我们的成功模型。这个范围做然后我们想开始与我们的数据团队合作,建立好,如果我们有必要的数据来解决这样的问题。一些工作后,我们有必要数据管道在开始做一些探索性数据分析,或者我们要开始创建一些特性,然后想想,嗯,我们有一些预测的特性,使我们能够预测目标?
我们接着要进入有趣的部分的建模数据并输入这一迭代反馈回路的模型拟合数据,评估模型的性能。当我们开始观察结果,我们要反复调整我们的数据收集过程中,我们可能需要更新特性生成过程和调整他们的模型hyper-parameters达成最终的模型,我们终于满意了。在这个阶段,我们可能觉得我们近。我们有一个模型,表现良好,它对我们的眼睛举行测试数据集的表现良好。这是按一个按钮部署的问题。然而,在某些方面,这确实是只有一个模型的生命周期的开始。以下组件的模型部署和监控通常被人们称为MLS Chengyin提到。但事实上,这是问,嗯,你怎么实施一毫升模型?我们如何决定何时以及如何部署模型将是高度依赖于多种因素。
从多快新数据到达火车模型需要多长时间?和没有银弹机器学习部署。这是最终会非常贬低和具体问题。当开发一个模型来解决给定的业务问题,如何保持模型一旦模型是在生产中往往是大大忽视了。如果有一件事,我会劝你远离这个演讲特别是,它将采取相当长的时间在开发一个MLS的解决方案考虑productionized更高版本的解决方案将被测量和监控。为什么显示器?模型部署并不是结束。如果我们考虑的火葬用的预测模型的结果是一个模型的能力来识别模式之间的一组输入特性对预测目标,因此,我们的模型只会表现在新数据只要新数据有点类似足够它最初训练的数据。
即使我们火车模型在一个合适的数据集通常情况下,输入数据的分布会随着时间改变。这些变化可以产生无限的来源。但只列出了其中的一些,如果我们考虑错误,上游错误是不可避免的。大部分数据的变化将一些变化在一个错误的结果来自一个上游数据生成过程。外部我们可以考虑市场变化,人类的行为改变,甚至完全不需要任何外部因素可能影响底层数据收集。类似的改变你的用户偏好对我们的模型随着时间的推移会有巨大的影响。这大量的来源变化能影响我们的模型然后执行在一个最终齿轮模型性能下降。模型将随时间降低,而不是作为一个问题,如果一个模型将会降低。更多的问题,当一个模型将降低,如果我们能确定这个或者当它发生之前,这是持续监控模型的主要动机一旦部署到生产。
我开始提到它,但核心模型退化的原因之一是一个叫做漂移的现象。为了让我们了解什么是统计测试我们应该生产模型,我们首先必须了解可能发生的各种类型的漂移。和最普遍的形式的漂移后,特性漂移,你可能会经常听到这个被称为数据漂移或协变量转变,这常常发生在底层输入数据以某种方式改变了。的分布特性,我们训练模型已显著改变。标签漂移然后将是我们的标签有明显的分布变化与一些外界的影响。这通常可以由实际的底层特征本身的转变。漂移预测漂移,然后高度相关的标签。而是相关的外部影响,实际上是直接相关的功能模型,然后是一个转变的一部分来自我们的预测模型。
概念漂移然后将来自一个效应发生的由于一些外界影响和变化的潜在模式,我们的模型已经学会,它不再是有效的。所以我们之间的潜在的自然特性和我们的标签,我们试图预测随着时间的推移演变。然后双击其中的一些。看着特性标签和生产漂移,这些都可以后他们的头在非常相似的情况下,经常发生在封闭的方式。所以会导致另一个。这些不同形式的文学常常桶同一把伞下漂移漂移的数据。和Chengyin走过我们如何使用相同的测试集来确定这些不同形式的漂移,只是为了说明类似特性漂移是什么样子我们先看看以下两个功能分布。特性漂移上下文中的分类特性可能是每个类实例的观察到分布不同于我们期望什么。
如果我们看一看一个数字特征的背景下,特性漂移可以变得很明显,如果我们有一个特征如年龄,我们发现这个输入特征的均值和方差随时间变化。另一方面概念漂移可以体现在许多不同的方式,最终这些不同形式需要一种不同的方法来检测它,这使得它有点棘手。这些如果我们有一个调查,所以突然概念漂移数据的雪堆,对不起,漂移突然由于一些不可预见的情况发生。黑天鹅事件像去年COVID流行将是一个典型的例子。逐渐或增量概念漂移会随着时间的推移我们的数据逐步发展。最后,反复出现的概念漂移会发生周期性的,可能在一年中特定的时间,一个黑色星期五和零售是一个典型的例子一个递归的概念漂移。
现在,我们有了这些漂移可以采取多种形式的知识,最重要的问题,我们想问我们想要采取什么行动的结果确定漂移吗?特性漂移,底层的输入数据已经改变可能保证调查的实际特性生成过程。我们可能想要重新培训我们的模型来捕捉这种变化在底层数据,自由漂移,我们看到明显的变化在不断增长的事实我们的标签,也许一个国旗调查标签生成过程,然后另外调查是否有潜在的输入特性的变化。预测漂移,从我们的模型预测的分布显著改变随着时间的推移可能会保证,一些调查模型训练和数据生成过程,然后等待评估如果转移预测的影响将会对业务本身。
然后最后,概念漂移有一些外部因素一直在影响我们的输入特性之间的关系对我们的水平。我们想看一看我们如何合并也许一些额外信息的形式新,做工程,通过一些额外的功能,或者我们可能要考虑一个完全替代方法问题在极端情况下我可能,或者另外然后可以侥幸做一些培训或调优模型。一旦我们知道不同类型的漂移,我们想确定我们想要采取的行动,如果我们发现它们,Chengyin现在所做的是让我们通过什么,有哪些统计测试,我们可以利用来识别这些。

Chengyin英格:现在让我们来看看实际的测试和统计检查,我们应该在的地方。模型的特点和目标,我们也应该监督他们基本的统计和总结他们的分布。我们还应该监视的业务度量,以防业务度量的变化会影响模型的相关性和影响。最后但并非最不重要,我们也应该监控模型的性能,只有替换现有的生产模式。如果新的候选模型执行至少一样好或更好。现在让我们进入特定的监视测试数据。我们应该首先确定哪些特性数值或分类。数字特征,我们可以计算或的意思是,中位数最小最大,缺失值的百分比。统计测试,我们可以应用检查的方法是两个样本Kolmogorov-Smirnov,也称为KS测试Bonferroni调整。Mann-Whitney测试。 And the test for variance here is Levene test. Before we cover any of those tests for the category of features, we’ll go through the basic concepts of this test that we’ll be incorporating in our demo.
首先,让我们看看KS测试Bonferroni调整。KS测试是有用的,当我们想要比较两个连续的分布。这里的零假设是,X和Y来自相同的人口分布。如果分布X和Y是不同的P值足够一定α显著性水平,通常它是0.05,然后我们拒绝零假设,得出分布X和Y不来自相同的人口。有时我们可能会遇到一个错误类型,这是当我们拒绝零假设当它实际上是真的。正如我们多次重复这个KS的N特性比较。然后误报率会增加。这就是为什么我们需要Bonferroni调整调整,alpha值特性的总数减少家庭比较明智的错误率。请注意,您将看到这个框架的其他统计假设检验重复测试。
列文测试具体比较两个连续分布之间的差异。假设,零假设,来自人口分布方差相等。如果列文统计有P值低于预设α水平0.05的说,然后我们拒绝零假设,得出结论:两个种群或两者分布,而有不同的差异。现在让我们主分类特性的测试。类似于数值特性,我们也可以计算的百分比值和其他汇总统计,我们可以包括模式,这是最常发生的价值和独特的数量水平。统计测试,我们可以利用单向卡方测试。
单向卡方检验比较预期的列分布和观察到的列分布的分类变量。观察到分布的零假设,即输入数据等于预期的分布,这是你的生产数据。类似于之前,如果卡方统计量的P值降低0.05 alpha,然后我们可以拒绝零假设。到目前为止,我们已经谈论了很多关于测试,我们应该使用监测数据。在接下来的幻灯片,我们会讨论监控测试,将有用的模型。关于模型,可能会有很多不同的方面,人们可能会关心。首先可以或目标和功能之间的关系。我们可能想要调查之间的相关性变化的输入和目标。
对于一个数字目标,我们可以使用皮尔逊系数计算系数,计算相关性。明确的目标,我们可以使用频率表,或也称为应急表。第二部分是模型的性能,这就是你们中的很多人可能是最明显的。回归模型我们可以检查均方误差,误差分布情节,r平方等等。对于一个分类模型,我们可以看看中华民国,混淆矩阵,F1-score等等。如果我们想评估模型在更细粒度的术语中,我们也可以研究模型性能只是特定的数据片,也许通过月产品类型和你的名字。最后,我们还应该认识到时间的火车模型。甚至新模型的三倍时间训练在那之前相比,这可能是一个警示信号,是可疑的。
让我们看看,我们可以使用的工具来衡量和想要生产。测量和监控模型的生产。目前没有一个单独的开源解决方案,为我们提供了一个健壮的意思bob下载地址。我们决定把一些从几个开源库,臭名昭著的一些测试自己,把这个测试在我们的演示工作流程。bob下载地址特别是,我们使用MLflow模型跟踪和增量数据跟踪。对于统计测试,我们使用了两个示例KS测试,列文从SciPy和statsmodels分别测试和卡方测试。对于可视化我们使用海运库。对于那些新MLflow,我们将简要介绍MLflow是什么。它是一个开源工具,bob下载地址帮助MLOps。
有四个组件完全跟踪,项目模型和现代的注册表。和所有这些组件可以帮助我们毫升的再现性项目。在演示中,我们将使用跟踪模型和模型注册组件。他们帮助我们跟踪模型参数,指标性能和工件。他们可以帮助我们节省模型依赖的需求和帮助我们管理生命周期模型。所有这一切在一起你会看到在我们的演示,让我们重现结果和检索历史汇率。

尼尔Turbitt:太好了。谢谢Chengyin。我们这里有将是一个系列的笔记本电脑我们要模拟一个场景,我们想在生产部署和维护一个模型。这是需要每月进行预测。因为我们已经被封锁了,我们想知道,我们可以把我们的下一个假期。我们选择使用一个数据集包含在夏威夷,Airbnb上市,我们的目标是预测一个新的清单,价格给定的属性,如数量的卧室和财产,财产的社区。这里有几件事来设置。我们已经包括了一个笔记本,包括这一个,我们会走过后下bitly的链接。所以,如果你想运行这个自己,通过代码进一步详细地看一看,去bit . ly / dais_2021_drifting_Hawaii。
,你会发现这个笔记本设置相关的两个笔记本,包括实用函数做监控,然后设置本身的实际训练。培训设置将涉及一些培训功能,实际上我们用来训练模型本身。除了实际创建我们使用的各种数据集复制不同月份的数据。有一些要求,我们还概述了这里。特别地,我们在测试这个砖运行时到毫升。你在这里看到的一切,我们将使用开源库和包。bob下载地址我们使用MLflow跟踪各种参数,三角洲实际版本数据本身。然后实际潜在统计我们会做测试,我们将使用尤其是SciPy。我们要做的是模拟一批推理情况我们要训练,我们将在生产部署并维护一个实际模型预测这些清单价格每月在夏威夷最高。
数据每月到达,我们的工作流程是一旦我们有一个初始模型部署加载一个新的输入数据,应用任何传入的数据检查,这将是做这种测试Chengyin提到了在做误差和漂移的评估。然后我们要识别和解决任何错误数据本身。我们然后去训练一个新的模型,然后应用任何模型验证检查,我们必然要在移动模式应用于生产。如果这些检查通过,然后我们会将新的候选模型部署到生产。如果检查失败,那么我们不会部署模型。就像我们说,,我们将使用MLflow三角洲除了SciPy做实际测试以及版本控制的数据和模型本身。虽然我们专门这样做在一个批处理设置监督毫升问题本身,这些测试的统计测试,我们使用适用于流媒体和实时设置。
几个其他的笔记本电脑控制,就像我说的,调整设置和实际实例化的各种方法,我们将使用。我将在新标签页中打开这些,这样我们可以看一看那些我们使用。我将创建一些部件。这些砖工具我们可以利用参数化一个笔记本。我们将使用这些变量进一步下降,我将更详细地解释。让我们模拟训练的第一个月。会发生什么是,我们有一个初步的数据,我们想训练模型,然后将该模型部署到生产。因为我们没有历史数据比较现有模型在生产中比较新的候选模式。我们不会检查你的健壮的制衡推动这种模式生产之前。但在现实世界中,您显然希望确保模型是稳定测试之前生产。
让我们创建本月传入的数据和模型训练开始。特别是,我们要做的是附加到这个黄金三角洲表。这是δ表,我们要用培训本身,我们很高兴已经处理过的数据本身。特别是我们有这个黄金三角洲路径,我们移动,以防它已经没有创建一个干净的新版本,δ表。然后我们要加载在本月零三角洲路径。在我们将使用其中的一些变量,已创建的训练集。只是为了告诉你,是什么样子。你会看到一个不同的进口数量,一些笔记本的冲突。这里执行的一切,已通过这些第一夫妇的命令就是实例化这些变量在这个笔记本设置。
月的数据装载,我们保存这黄金三角洲路径。和我们要做的是触发只是我们的第一个月的数据,我会打破这到底是怎么回事。和实际的房间满足跟踪通道流和培训我们的模型本身来自这列火车sklearn射频模型方法。特别地,这将是一个运行的名字,也就是MLflow运行。需要一个黄金三角洲路径,也就是这个三角洲表之路。它的模型参数,这将是一个字典的参数我们想一定适合随机森林sklearn回归量模型,我们将使用。这misc参数将是我们最终想要跟踪任意参数和使用预处理当我们使用这列火车sklearn方法。
让我们看看什么是包含在该方法发现,特别是,它将调用这个创建sklearn射频管道,也就是要建立sklearn管道,其中包含数字阶段,分类阶段,结合在一起,增加了与我们的模型参数随机森林进步的舞台上,我们将会符合我们的功能。尤其是,这将在我们的火车被称为sklearn射频模式。就像我说的,为MLflow runium来看,黄金三角洲的三角洲路径表,我们将使用模型参数和任何额外的任意参数,我们最终想要使用跟踪,然后另外,流入我们的预处理阶段。我不会去通过这条线,但我应该只是捕捉我们通常在干什么?
特别是在整个监测笔记本,我将指导通过不是逐行代码做什么,但从概念上讲,你会应用测试,你培训和测试在每个阶段你会做什么。特别是,我们将使用MLflow跟踪和监控。跟踪和日志我们的模型参数。任何工件后,我们一定要用我们最初训练模型本身。我们还将启用MLflow汽车日志记录,这基本上是要剔除任何参数,我们一定要跟踪MLflow。此外,它会跟踪实际模型构件本身,然后基本上我们要追查出我们想要使用一些额外的参数。
首先,我们要做的是实际三角洲的负载表本身,重要的是我们要日志三角洲路径。的路径是什么,黄金三角洲表,我们使用吗?是什么版本的δ表,我们使用?这将是重要的我们在随后几个月的数据,因为最终我们想说的是这个版本的数据,这些数据看起来像什么?分布,我们看着我们通过随后的几个月,我们可以比较这两件事吗?此外,然后做什么是日志记录各种参数,我们都一定想看到网上有记录。实例的数量,一个月是什么?使用的训练实例数量是什么?测试实例使用的数量是什么?
但重要的是这里会发生什么是我们跟踪所有这些额外的信息。我们创建随机森林管道。我们对我们的训练数据拟合模型本身。这里我们也做记录好,实际的模式,是用来配合模型?那是什么在预测模型预计的时间吗?此外,评估模型本身。我们可以记录指标,又很重要,能够说行,好吧,这个模型在本月某些表现这种方式。我们经过这几个月,能够看到的,好,性能通过时间是什么?
让我们执行这个细胞,,如果我首先,设置这个培训。让我们引发的实际运行本身。这一点,就像我说的,我们将开始创建MLflow运行并引发实际的模型训练本身。一旦执行模型,我们要做的是利用MLflow模型注册表。尤其是,这将使我们能够跟踪模型的血统。你会看到,同时该模型训练会发生什么,似乎在MLflow本身运行。所有我们在这里所做的是使用开源工具。bob下载地址尽管MLflow是砖缝在很好地工作区,这样当我们执行一个MLflow运行,我们认为它现在出现在侧边栏。如果我点击这个,我可以出去到实际MLflow实验。
特别地,我们看到,我们现在有第一MLflow运行。点击进入这个我们看到跑的名字是月零,我们可以看到的是我的各种参数,我注销。很多这些是我们说Mlflow.autolog时自动剥离。但特别是,我们记录了一些自定义参数的路径和δ版本。这将成为重要的我们在说,这个创建运行在本月的数据。尤其是这月,数据,它使用的版本是什么?此外,我们有我们的测试的各种指标对我们的培训。重要的是,我们也有实际的模型工件本身。特别是,这将是我们创建的管道安装随机森林模型。
然后我们可以负载在稍后的阶段看,嗯,这些历史如何预测未来版本的这个模型吗?其他事情我们也注销CSV,这是获取一些关于输入数据的汇总统计。我们已经做了这方面的只是创建一个笨重的数据帧,将它设置为CSV,你看,我们的意思是,标志、各种汇总统计,最终我们可能会想要使用。工艺参数,杰森只是创建一个字典,我们记录了杰森,只是包含任意其他参数,我们可能想要使用,如月是什么,目标在各种分类列和列数字列在那个时间点上使用。
回到我们的笔记本本身,我们有一个模型的训练,我们将使用这个模型注册表。就像我说的,这追踪模型的血统。我们可以说这个模型分段。这是在生产中。能够看到,一个模型实际上驻留在何处,帮助管理工作流的模型通过他们的生命周期。特别是,我们要做的是在模型中创建这个版本一个注册表。如果我导航到注册中心本身的模型,我将看到的是我有一个版本,只是最近创建和我们能做的是迁移阶段或生产,然后开始使用我们的模型一旦在这些不同阶段。特别是对于这个第一个月,我们要做的只是过渡到生产。
再一次,你想要做的是强劲的检查这个模型是按预期执行,执行对这些数据片Chengyin已经提到的,但为了我们的演示,我们连续过渡分段,这样在以后的几个月,我们将看到,我们可以比较我们的生产模式。让我们复制经历一个月,当新的数据到达。尤其是,这里我们试图模拟一些真实世界的场景,你可能上游数据问题,或者你可能会有漂移特性。这里我们已经结合两件事。特别是我们已经重新重新创建一些上游数据清理过程变化我们的社区清洁丢失一些条目。特别是一些社区应该现在不存在。,另外,我们要做的是重新创建一些上游数据生成过程引入了可伸缩性问题与我们的一个特性。
特别是,我们有检查成绩阅读。的总体评价是什么之前的评论对于一个给定的清单有界在0到100之间。我们所做的在我们的笔记本设置实际上是重新调节是0到5之间重新创建一个新的星级系统我们打算做一些检查,如那些分布检查和错误检查我们之前提及以前是我们能探测到我们甚至开始模型训练吗?和工作流,我们要做的是首先,摄取数据,应用一些功能检查,新传入的数据。一旦我们解决任何问题,我们会添加到我们的黄金三角洲表,我们要做的模型训练。一旦模型本身,我们可以做实际模型检查,好了,这是怎么新模型比较年长的历史性的模型?
然后如果给定模型通过制衡,那么我们迁移到生产本身。在我们开始之前,我想回到我们的模型,我们当前的模型。如果我刷新这个,你会发现我们有这个版本,这不是在生产。我们模拟呢?在这第一个月的模拟特性漂移。历史上,因为我们的特点是有界在0和100之间现在漂流0到5之间,然后上游数据错误。一些净化问题高社区的问题被提出。未来的各种检查,我们要使用,我们要把这些分解成不同的子集,所以检查我们可以适用于所有的特性,比如缺少这个检查,我们要运用好,零是什么检查诊断。我们期待的null值,一些数字功能检查,这将是有一个看起来只是一些天真的汇总统计。这些如何不同于前几个月的数据,我们已经看到了。
分布的一些检查,回到那些Kolmogorov-Smirnov测试Chengyin走了,然后还列文的测试,我们也看到了连续变量在分类方面的事情。我们要做一个卡方检验,嗯,每个级别的预计数之间的历史数据对我们的新数据?如何比较?然后检查历史模式是什么?现在新的电流模式是什么?我们要做的是加载在本月一个误差δ路径。我们已经创建了这个差值表的设置,它再现这些错误。我们将负载,在和我们要创建一个汇总统计。这是有趣的,同样的汇总统计功能中使用的训练函数本身,我们然后注销。我们要做的是我们要从当前生产运行模型。 What does that mean? Again, if I go back to my model registry where I see this first version, if I click into this first version, all that the MLflow registry is it’s really tracking the lineage of models.
在此,这是一个指针回到原来的运行,我们首先对月零记录。再一次,我们看到三角洲版本是什么,三角洲的路径是什么,月零。最后我们能做的是说,底层的运行从生产模型。说,好吧,我可以加载三角洲表因为我知道路径和δ的版本。然后我会计算一下历史数据汇总统计信息,我们使用以前的模型的训练。我们这里比较的是我有一个新的月的数据,但是我想比较,和我们以前的历史数据训练。让我们开始做一些检查。这些都是非常基本的检查。看到,什么是null的比例在本月新传入的数据,我们设置这个空比例阈值。特别是,这个检查空比例是一个方法,我们在训练集定义了笔记本。 Again, I’m not going to go through, well, what is really going on in the underpinnings here, but we’re just going to loop through each of the different features and say, does the amount of nulls exceed a certain threshold?
这个阈值我们刚刚任意设置2.5在现实世界中,你想要做的试验和错误,将大量的null能够国旗只是通过一种非常武断的阈值。和我们看到的是,社区计划显示为null,一种比例超过0.6的null。现在这真的意味着我们想要看起来有点进一步向这个社区净化是什么?回想我们试图复制在这里,一些上游数据问题,我们看到社区洁净,我们有这些插入缺失值。我们真的能够抓住,马上。其次,我们要做的就是运用一些统计检查,这是想说,我的历史数据是什么?我的新传入的数据是什么?我会说我的数字列,据统计阈值限制,也就是说所有的各种统计数据列表,我想看看是什么,这个新传入的数据明显增加或减少某一阈值限制我们以前看到的相比呢?
分解,我们从这个新传入的月汇总统计。我们有我们当前的生产模式,总结数据,模型训练。我们有一些数字列,我们必然要经历。尤其是,这个目标列是一个我们想要包含在我们的分析。和我们说,如果任何超过50%的曾见过什么,标记出来。特别是,这是一种天真的方法。你可以更聪明的你如何实现这个,但这只是一个基本的检查前面的摘要统计信息是什么?新摘要统计信息是什么?和有显著增加的一个任意的阈值呢?真正站在这里吗? I know a couple of things standing out just terms of the median max for bedrooms has increased, the bedrooms and maximum nights already the thing that would flag an error here, or really warrant further investigation would be for review score rating and price. And basically we’re saying the price, the median, these have all for review score rating. These have all decreased substantially, from 95 to 3.48.
在价格方面。我们看到的是,有一个明显的变化,所以,有增加。我们想要看的是,嗯,什么是其中的一些功能的分布显示这些重大变化?我们将创建一些盒子情节,这将只创建一个非常自动视觉检测的方法。是否有显著差异?我们看到以前审核评分评级,这是我们当前的生产数据,我们使用在0到100之间。现在这个新传入的数据,这是0到5之间。这是一个非常的快速测试说什么是不正确的。我们可以进一步验证运行列文KS测试测试。这些测试Chengyin走我们通过。 In particular Levene test to say, is there a significant difference in our variances and the KS test with the Bonferroni correction to say, does the Kolmogorov–Smirnov tests detect a significant change in those two distributions? Just to run through this, what we’re going to do is use the current production model, what is the data frame that it used versus the current incoming month of data? What are the numeric columns to basically look through and say, do you detect any difference?
和这个P阈值被设置在顶部。这说的是什么是显著性水平,我想把它设置为。Kolmogorov-Smirnov测试类似,我们要说的是相比那些历史数据与新的输入数据,数字列,我想生活是什么?再一次,这个门槛是什么,我想看看吗?这里出现的一件事是KS检验,Bonferroni纠正α水平,我们看到评论评分评级有重要的价值。这说的是,新的评估分数评级分布已经从以前的显著改变。这将非常值得我们研究,新的发行版是什么?数据生成的上游怎么样?这个阶段将会引起关注,嗯,上游数据是什么?会有一个上游数据问题? On the categorical feature side of things, we’re also going to implement a Chi-square test to see, well, do the levels of our categorical columns statistically, are they statistically different? In terms of expected count, we see that host is super host is significant, but only just significance.
会令一些调查,但实际上它不是由于任何我们所做的,或者我们已经合成。选择在这里真的是最初我们有了这些问题。我们必须与我们的数据团队说,好的,有上游数据处理显著改变了吗?在本例中,我们将复制是什么,好了,我们已经解决了这些问题进行复查分数评级在附近洁净了。我们满意的改变,和我们现在这个月有一个固定的三角洲路径,将负载。然后我们将添加到我们的黄金三角洲路径。这是什么我们现在有黄金三角洲与这个新表的数据量,我们可以现在进行第二个月的训练。会发生的是我们有一个月,我们将再次使用相同的模型参数,其他参数相同。
你会注意到我们有第二个运行,增加了我们的实验。然而,我首先做的是注册这个模型,然后过渡阶段。然后我可以告诉你,是什么样子。如果我们,经过我们的实验,这只是带我到一个单独的选项卡中MLflow UI。特别地,我们看到的是我们的第二个月,如果我导航,我们有δ路径,三角洲版本,以前0现在是1,因为我们使用新版本的表为一个月,所有的参数都是问我们以前见过。度量,我们将看到的是测试,测试平方是略有不同,我们仍然有相同的工件,我们以前见过的。特别是,我们可以看到实际模型中的注册表,如果我们导航,是,我们有两个版本,这是九个阶段。
这是最终要的东西我们想比较。我有一个建模生产从我们的前一个月。我有一个新的模型目前在上演。我可以比较这两个模型在我新的候选模型迁移到生产?我应该运行它通过一系列的测试验证,嗯,预测是什么?它是如何执行针对当前生产模型?有许多方法来做到这一点。我们要申请一个很天真的测试在说我目前的分段运行,这我可以再次得到,因为我们可以直接跟踪血统回到底层MLflow运行。我能得到底层MLflow运行实体说,捡起的分段模型。什么是对我目前的生产运行运行的和比较。
这是两个不同的MLflow运行。它将应用最小平方阈值模型。说比较,根据这一指标,这两个不同的模型,应用这个标准来检查模型是否超过某一阈值我们要说的是,你可以从分段生产进行过渡。我们一定要赶在这里如果有模型性能的显著下降。如果有类似的预测漂移,我们想赶上这预测有显著改变,因为我们以前见过。最终我们想赶上之前通过生产模型,我们想说,好吧,随着时间的推移我们实际的指标是怎样执行的?一定要追踪这个。鉴于我们所看到的,我们的分段运行,虽然它不是很好,我们的传播得分,我们真的只是想显示方法,如何编排模型本身。
我们看到它是稍微更好的根据我们的阈值,根据部件我们最初在第一个我们要做的是我们的模型过渡到生产,鉴于现在表现得更好。如果我回到我的模型在注册表中,我们可以看到的是,两个版本将会迁移到生产。和以前的生产模式将存档。如果我进入,我可以回到我的两个版本。再一次,这是很令人震惊的回是我的一个月,并最终反馈,这个底层模型本身,然后我可以负载。让我们穿过我们最后的场景,几个月两个一些新数据到来。在这种情况下,我们复制的是我们的价格已经明显改变,但我们没有的特性。
我们真的试图合成这是季节性的。我们说一些新的月数据包含清单条目,这是记录在假期旺季。结果,价格为每一个清单增加了一些任意数量。我们模拟在这里什么?我们试图模拟一些标签漂移,以前我们的标签都有一定的分布,但现在它的转移,还概念漂移的底层特征和标签之间的关系发生了变化,由于季节性,我们试图引进。回到我们刚刚讨论在不同口味的概念漂移,复发性概念漂移,可以发生在某种节奏。
我们要应用相同的功能检查。传入的数据,我们甚至开始模型训练之前,我们想要运行它通过一系列检查之前试图抓住煽动培训。与传入的新数据是否有差异?再一次,我们要做的是负载在第二个月的数据,我们会创建汇总统计信息。我们会得到底层MLflow从当前生产运行模式。我们将三角洲的负载表,用于培训前一个月的数据。从当月1,然后我们将负载的汇总统计数据,我们已经从之前的四。
特别是,我们将开始与我们再次错过这个检查,null的比例是多少?我们看到,没有什么很好,没有超过这个null-proportional阈值。再一次,这是你可以任意选择在数字方面的东西。我们想要检查我们所有的数字特征,意味着有什么明显的变化,中间值和标准偏差、min和max,特别是你会看到的是均值和中位数价格都大大改变了他们的健康。他们超过50%高于前一个月。所有,这是说敲响了警钟,好吧,我应该考虑这个价格,因为分配以来真的改变了我以前训练的前一个月模型。
看着一盒思想,它将很快变得明显,所有的各种特性,超过阈值,我们看到的是,价格是以前从0到25000左右,现在大大增加了从0到75之间。分布甚至只是目测它已经改变了。我们可以应用一些统计通过购买一些方差检查严格。并最终KS测试你会希望检测到分布转变。KS测试基本上是说这两个发行版,这两个之间有重大改变?我们说价格,确实有这两个发行版之间统计上的显著差异。在这个阶段,它会引起人们的关注,这些数据有差异。最终,你可以选择做的实际上是出去说,好吧,如果我重新训练模型,我可以把这个新变化数据,并从中学到东西吗?
另外,你也可以做的是试着进行一些新特性的工程,你把一些季节性特征说,好吧,这个数据被记录在这个月,等等,一些季节性的信息整合,从而适合你的模型本身。分类方面,我们看到有一些分类不同类别变量在统计上有不同的种类。然而在看这个,这不是什么问题,但同样,它会告诉你,有时你提高这些错误,可能不一定是重大的改变,但是,你应该解决这些事情并相应地治疗。动作会在这里是好的我们观察这个标签的转变,我们想做的实际上是重新训练模型和最初看到我们的表现如何?
我们要出去说,新的月的数据添加到我们的黄金三角洲表,我们要培养一个新的模型,尽管月领域的几个月的数据。我们有月零,月,两个月,现在进来,现在我们看到在我们的实验中,我们有一个新的模型。再一次,我们要做的是首先,注册这个模型我们又将这种模式过渡到分段说明我会回到实际注册模型本身将会很好,我们有一个版本三阶段和应用这些模型检查我们以前看到的。我们会得到底层MLflow运行从当前分段模型。我们又要应用相同的统计检查说,嗯,新的候选模型的性能如何?
如何测试平方平方比较前面的平方值吗?我们可以看到,这里有一个重要的表现,尽管我们比较不同。他们被应用到不同的测试集。我们看到,测试时是明显不同的百分比减少。同时,这将导致和调查看,嗯,为什么表现不佳的新模式?此外,然后我可以解决这个问题?我可以再培训方面的模型不同hyper-parameters和做一些混合主要培训?还是我把一些额外的新特性,将捕捉到这种季节性?在这种情况下,我们说当前的分段模型表现不佳,因此进一步调查。这真的向您展示了如何使用端到端流程的开放源码工具,比如MLflow和δ是再现性和真正捕获三个时间能够回到过去,然后说,好吧,这是我的模型。bob下载地址
在这个时间点上,这是我使用的版本的数据,然后还在测试方面和监控方面,如何使用包如SciPy说,好吧,这些测试适用于这些数据集通过时间和能够说,好吧,这里有一些变化,有一些明显的错误数据。希望显示你的简单的介绍如何将这些东西和我将它穿过Chengyin来包装我们的结论。谢谢。

Chengyin英格:感谢尼尔演示。希望我们在这张幻灯片有覆盖的概念,通过演示变得清晰。回顾一下,记住,一个模型部署不是结束。不断监视和测量模型在生产的关键是确保您的机器学习模型是对业务相关的和有价值的。其次,没有一刀切的解决方案来监控和测试。希望你能够把我们的示例框架适用于你自己的域名和用例。你也应该增加其他相关测试来捕捉你感兴趣的度量标准。
最后,无论您用例构建总是确保你能够跟踪模型和繁殖的结果。关键是记录历史性能基线,并在发生新的部署失败,您的系统应该足够强劲,能够支持回滚。如果你有兴趣学习更多关于这个话题,我们也包括一些文献和讨论后包选项,供您参考。希望你今天学到有用的东西从我们的谈话。别忘了给我们的反馈,告诉我们你从我们今天的演讲最大的收获。希望再次见到你。

Chengyin英格

Chengyin Eng砖是一种数据科学顾问,她实现了数据科学的解决方案,并将机器学习培训跨功能的客户。她收到了她在第一版的硕士…
阅读更多

尼尔Turbitt

尼尔Turbitt高级数据科学家在机器学习实践团队在砖。他与砖的客户合作,构建和部署机器学习解决方案,以及提供…
阅读更多