知名公司怎样测试机器学习模型?

尽管机器学习行业在开发帮助数据团队和从业人员操作其机器学习模型的解决方案方面取得了进展,但测试这些模型以确保它们能按预期工作,仍然是最具挑战性的方面之一。开始一个机器学习项目时,标准的做法是对业务、技术和数据集的要求进行严格注意。

虽然大多数团队对在部署模型之前使用模型评估指标来量化模型的性能感到满意,但这些指标大多不足以确保你的模型为生产做好准备。你还需要对你的模型进行彻底的测试,以确保它们对现实世界的遭遇足够强大。

参考资料

将自动测试和人工验证结合起来进行有效的模型测试

GreenSteam公司为海运业提供软件解决方案,帮助减少燃料使用。过量的燃料使用既昂贵又不利于环境,国际海事组织要求船舶运营商变得更加绿色,并在2050年前减少50%的二氧化碳排放量。

GreenSteam的模拟仪表盘测试工作流程概述

  • 用于模型验证的自动测试。
  • 手动模型评估和验证。

为了在他们的工作流程中实现自动化测试,该团队利用使用Jenkins运行代码质量检查和冒烟测试。

在自动化测试运行并通过模型管道后,领域专家手动审查评估指标,以确保它们有意义,验证它们,并标记为准备部署。

团队运行的单元和集成测试是为了检查关于数据集的一些断言,以防止低质量的数据进入训练管道,并防止数据预处理代码的问题。你可以把这些断言看作是团队对数据的假设。例如,他们会期望在数据中看到某种相关性,或者看到模型的预测边界是非负的。

单元测试机器学习代码比典型的软件代码更具挑战性。单元测试模型代码的几个方面对团队来说是困难的。例如,为了准确地测试,他们必须训练模型,即使有适度的数据集,单元测试也会花费很长的时间。

此外,一些测试随机失败。运行单元测试以保证数据质量的挑战之一是,在样本数据集上运行这些测试更加复杂,所花的时间远远少于在整个数据集上运行这些测试。这对团队来说是很难解决的,但要解决这些问题。他们选择了取消部分单元测试,而采用冒烟测试。

团队定义了验收标准,他们的测试套件也在不断发展,他们通过增加新的测试和删除其他测试进行试验,获得了更多关于什么是有效的和什么是无效的知识。

他们将在一个类似于生产的环境中对每个新的拉动请求的完整数据集进行模型训练,只是他们将调整超参数的值,以获得快速的结果。最后,他们将监测管道的健康状况,以便及早发现问题。

在训练完模型后,我们会根据数据集创建带有不同图表的报告来显示结果,这样领域专家就可以在模型出厂前对其进行审查。

训练完模型后,领域专家会生成并审查一份模型质量报告。该专家会通过人工审核过程批准(或拒绝)该模型,然后在得到验证并通过之前的所有测试后,该模型最终可以由团队运往生产。

零售客户应用程序进行机器学习测试的方法

这个团队利用机器学习帮助零售客户以自动化的方式解决票据。当用户提出票据或由维护问题产生时,应用程序使用机器学习将票据分类到不同的类别,帮助更快地解决。

工作流程涉及在每次提交时在持续集成(CI)管道中生成构建。此外,构建管道将运行代码质量测试(linting测试),以确保没有代码问题。

一旦管道生成了构建(一个容器镜像),模型就会通过发布管道在类似生产环境中进行压力测试。在部署之前,团队也会偶尔对模型进行A/B测试,以评估不同情况下的性能。

运行测试以检查代码质量对任何软件应用都是至关重要的。你总是想测试你的代码,以确保它是。

  • 正确的。
  • 可靠(在不同条件下不会中断)。
  • 安全。
  • 可维护。
  • 高度性能。

这个团队在CI管道中的任何容器镜像构建之前,对他们的代码进行了lint测试。提示测试确保了他们能够执行编码标准和高质量的代码,以避免代码中断。执行这些测试还可以让团队在构建过程之前抓住错误(当它们容易调试时)。

根据不同的用例,该团队还进行了A/B测试,以了解他们的模型在部署前在不同条件下的表现,而不是纯粹依赖离线评估指标。通过从A/B测试中学到的东西,他们知道一个新的模型是否改进了当前的模型,并调整了他们的模型,以更好地优化业务指标。
对机器学习模型进行压力测试

“我们使用发布管道对模型进行压力测试,在这里我们用每分钟X次的推理来轰炸模型的部署。X可以是1000或100,这取决于我们的测试。目的是看看模型的性能是否符合要求”。

测试模型在极端工作负荷下的性能,对于通常预期用户高流量的商业应用来说至关重要。因此,该团队进行了压力测试,看看在给定的时间范围内,在预测请求数量增加的情况下,该模型的响应速度和稳定性如何。

这样,他们对模型在负载下的可扩展性进行了基准测试,并确定了模型的突破点。此外,该测试帮助他们确定该模型的预测服务是否符合所需的服务水平目标(SLO),即正常运行时间或响应时间指标。

值得注意的是,对模型进行压力测试的意义不在于看模型能处理多少推理请求,而在于看当用户超过这种流量时会发生什么。这样,你可以了解模型的性能问题,包括加载时间、响应时间和其他瓶颈。

在部署模型后的生产中,我们测试数据和模型的漂移。我们还做了生产后的审计;我们每季度都有审计,研究运营情况。

测试生产模型的目标是确保模型的部署是成功的,模型与其他服务一起在生产中正确运行。对于这个团队来说,在生产中测试模型的推理性能是持续提供商业价值的一个关键过程。

此外,该团队还测试了数据和模型的漂移,以确保模型可以被监控,也许在发现这种漂移时可以重新训练。从另一个角度来说,测试生产模型可以使团队通过领域专家的手动检查对其关键任务模型进行错误分析。

一家金融科技初创公司的机器学习应用的行为测试

MonoHQ的交易元数据产品使用机器学习对交易报表进行分类,这对各种企业客户的应用是有帮助的,如信贷申请、资产规划/管理、BNPL(先买后付)和支付。根据叙述,该产品将数以千计的客户的交易归入不同类别。


在部署模型之前,该团队进行了一次行为测试。这个测试包括3个要素。

  • 预测分布。
  • 失败率。
  • 延迟。

如果模型通过了这三项测试,团队就会把它列出来进行部署。如果模型没有通过测试,他们将不得不重新工作,直到它通过测试。他们总是确保为这些测试设置一个性能阈值作为衡量标准。

他们还对他们的模型进行A/B测试,以了解哪个版本更适合投入到生产环境中。

检查预测质量的行为测试显示了模型对推理数据的反应,特别是NLP模型。

首先,团队运行一个不变性测试,向输入数据引入扰动性。
接下来,他们检查输入的轻微变化是否会影响模型的反应--它对客户交易的叙述进行正确分类的能力。

从本质上讲,他们在这里试图回答:在具有类似背景的数据集中进行轻微的调整是否会产生一致的输出?

为了测试模型在负载下的响应时间,该团队配置了一个测试环境,他们将向模型服务发送大量的流量。以下是他们的过程。

  • 采取大量的交易数据集。
  • 创建表。
  • 将数据流向模型服务。
  • 记录推理延迟。
  • 最后,计算出整个交易数据的平均响应时间。

如果响应时间通过了指定的延迟阈值,就可以进行部署了。如果没有,团队就得重新修改以改善它,或者设计另一种策略来部署模型以减少延迟。

在这个测试中,团队将两个模型容器化,部署到生产系统中,供上游服务消耗到生产系统中。他们部署其中一个模型,为随机抽样的用户提供流量,另一个则为不同的用户抽样,这样他们就可以衡量模型的结果对用户的真实影响。此外,他们可以使用真实的客户来调整他们的模型,并测量他们对模型预测的反应。

这种测试还可以帮助团队避免从新训练的模型中引入复杂性,因为这些模型很难维护,对他们的用户没有任何价值。

为机器学习应用进行工程和统计测试

一个处理新兴市场新闻的系统,为交易者、资产经理和对冲基金经理提供情报。

这个团队对他们的机器学习项目进行了两种类型的测试。

  • 基于工程的测试(单元和集成测试)。
  • 基于统计的测试(模型验证和评估指标)。

工程团队运行单元测试,检查模型是否抛出错误。然后,数据团队会(向工程团队)移交模拟模型,其输入输出关系与他们正在建立的模型相同。同时,工程团队会对这个模型进行测试,以确保它不会破坏生产系统,然后为它服务,直到数据团队的正确模型准备好。

一旦数据团队和利益相关者评估并确认该模型已准备好部署,工程团队将运行与原始模型的集成测试。最后,他们将把模拟模型与生产中的原始模型进行交换,如果它能工作的话。

为了运行初始测试以检查模型是否能与生产中的其他服务很好地整合,数据团队将发送模拟(或假)模型给工程团队。模拟模型的结构与真实模型相同,但它只返回随机输出。工程团队将为模拟模型编写服务,并为测试做准备。

数据团队将向工程团队提供数据和输入结构,以测试输入-输出关系是否与他们所期望的一致,是否以正确的格式出现,并且没有抛出任何错误。

工程团队并不检查该模型是否是正确的模型;他们只检查它是否从工程角度发挥作用。他们这样做是为了确保当模型进入生产时,它不会破坏产品管道。

当数据团队训练和评估了正确的模型,并且利益相关者验证了它,数据团队将把它打包并交给工程团队。工程团队将用正确的模型交换模拟模型,然后运行集成测试,以确保它按预期工作,不出现任何错误。

数据团队将在真实世界的数据和统计评估指标上训练、测试和验证他们的模型。数据科学负责人审核结果并批准(或否定)该模型。如果有证据表明该模型是正确的模型,数据科学负责人将向必要的利益相关者报告结果。

他将解释模型的结果和内部运作,模型的风险,以及模型的错误,并确认他们是否对结果感到满意,或者模型仍然需要重新工作。如果模型被批准,工程团队会将模拟模型与原始模型交换,重新进行集成测试,以确认它不会出现任何错误,然后进行部署。

总结

希望正如你从用例和工作流程中学到的那样,模型评估指标不足以确保你的模型可以投入生产。你还需要对你的模型进行彻底的测试,以确保它们对现实世界的遭遇足够强大。

为ML模型开发测试可以帮助团队系统地分析模型错误和检测故障模式,因此在将模型部署到生产之前,要制定和实施解决计划。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章