• 0
  • 0
分享
  • 如何测试机器学习流水线?——软件测试圈
  • 恬恬圈 2024-01-04 10:52:01 字数 2109 阅读 959 收藏 0

  谈到数据产品,很多时候有一种误解,认为这些产品无法通过自动化来进行测试。 尽管流水线的某些部分由于其实验性和随机性而无法通过传统的测试方法进行测试,但大部分流水线可以。 除此之外,更加不可预测的算法可以通过专门的验证过程。

  让我们来看看传统的测试方法,以及我们如何将这些方法应用到我们的数据/ ML 流水线中。

  测试金字塔

  标准简化的测试金字塔如下所示:

1-1.png

  这个金字塔表示您将为应用程序编写的测试类型。 我们从大量的单元测试开始,这些单元测试独立于其他功能来测试单个功能。 然后我们编写集成测试来检查将我们隔离的组件组合在一起是否按预期工作。 最后,我们编写 UI 或验收测试,从用户的角度检查应用程序是否按预期工作。

  在数据产品方面,金字塔并没有太大的不同。 我们有或多或少相同的等级。

1-2.png

  注意:该产品仍将进行UI测试,但本文主要关注与数据流水线最相关的测试。

  在一些科幻作家的帮助下,让我们更仔细地看一下,在机器学习的背景下,每一项都意味着什么。

  单元测试

  数据流水线中的大部分代码都包含数据清理过程。 用于进行数据清洗的每个功能都有一个明确的目标。 例如,假设我们为输出的模型选择的特征之一是前一天和当天之间的值的变化。 我们的代码可能看起来像这样:

  在这里,我们知道对于给定的输入,我们期望得到一定的输出,因此,我们可以使用以下代码进行测试:

  对于每个独立的功能,您将编写一个单元测试,以确保数据转换过程的每个部分都对数据产生预期的影响。对于每个功能,您还应该考虑不同的场景(是否有 if 语句?那么应该测试所有条件)。然后,这些将在每次提交时作为持续集成 (CI) 流水线的一部分运行。

  除了检查代码是否符合预期之外,单元测试还可以帮助我们调试问题。通过添加一个重现新发现的错误的测试,我们可以确保在我们认为已经修复的情况下修复了该错误,并且我们可以确保该错误不会再次发生。

  最后,这些测试不仅检查代码是否符合预期,还帮助我们记录了我们在创建功能时的期望。

  集成测试

  这些测试旨在确定单独开发的模块组合在一起时是否按预期工作。就数据流水线而言,可以检查如下事项:

  数据清理过程产生适合模型的数据集

  模型训练可以处理提供给它的数据并输出结果(确保将来可以重构代码)

  因此,如果我们采用上面的单元测试函数并添加以下两个函数:

  然后我们可以使用以下代码来测试组合 clean_data 中的函数是否会产生预期的结果:

  现在假设我们要做的下一件事是将上述数据输入逻辑回归模型。

  虽然我们不知道期望值,但我们可以确保我们始终得到相同的值。 测试这种集成对我们很有用,以确保:

  模型可以使用数据(每个输入都存在一个标签,数据类型由所选模型的类型决定,等等)

  我们能够在未来重构我们的代码,而不会破坏端到端的功能。

  我们可以通过为随机生成器提供相同的种子来确保结果始终相同。 所有主要的库都允许您设置种子(Tensorflow 有点特殊,因为它需要您通过 numpy 设置种子,所以请记住这一点)。 测试可能如下所示:

  这类测试不会像单元测试那样多,但它们仍然是 CI 流水线的一部分。 您将使用这些来检查组件的端到端功能,因此,将测试更多主要场景。

  机器学习验证

  现在我们已经测试了我们的代码,我们还需要测试 ML 组件是否正在解决我们试图解决的问题。当我们谈论产品开发时,ML 模型的原始结果(无论基于统计方法多么准确)几乎从来都不是所需的最终输出。这些结果通常在被用户或其他应用程序使用之前与其他业务规则相结合。因此,我们需要验证模型是否解决了用户问题,而不仅仅是准确率/f1-score/其他统计量度是否足够高。

  这对我们有什么帮助?

  它确保模型真正帮助产品解决手头的问题

  例如,如果20%的准确率不正确导致患者无法获得所需的治疗,那么将蛇咬伤分类为致命或非致命的模型就不是一个好模型。

  它确保模型产生的价值在行业方面是有意义的

  例如,如果向用户显示的最终价格的值太低/太高,而在该行业/市场中没有意义,那么以 70% 的准确度预测价格变化的模型就不是一个好的模型。

  它提供了一层额外的决策文档,帮助工程师在流程的后期加入团队。

  它以通用语言提供产品的ML组件的可见性;让客户、产品经理和工程师以同样的方式理解。

  这种验证应该定期运行(通过 CI 流水线或 cron 作业),其结果应该对组织可见。这确保了组织可以看到数据科学组件的进展,并确保及早发现由更改或陈旧数据引起的问题。

  总结

  ML 组件可以通过多种方式进行测试,为我们带来以下优势:

  产生一种数据驱动的方法,以确保代码执行预期的操作

  确保我们可以在不破坏产品功能的情况下重构和清理代码

  记录功能、决策和以前的错误

  提供产品 ML 组件的进度和状态的可见性

  因此,不要害怕,如果你有编写代码的技能,你就有编写测试的技能,并获得上述所有优势。


作者:吃果冻不吐果冻皮    

来源:http://www.51testing.com/html/48/n-7792048.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 前言:自从片言社区(fewords.cn)上线后,我就一直在更新技术文章。最近停更了一周,也是在想除了纯粹的技术分享以外,聊聊思维方式、职业发展对大家是不是更有帮助。每天都有不少人咨询我问题,如果汇总统计各个类型的问题频次,排名第一的绝对是:35岁以后,我该怎么办? 在这次连载文章里我就来解读一下,如何面对职场中年危机。35岁现象,真的存在吗?我可以肯定的回答你,存在,且非常明显。首先我们要说明一个前提,我们今天讨论的是软件技术领域或者说是互联网相关岗位领域的35岁危机。为什么要声明这个前提呢?因为对于一个医生、律师或者教师,35岁的他,职业发展的真正黄金期才刚刚开始。但是对于一个软件技术领域...
            0 0 1673
            分享
          •   据《华尔街日报》报道,Meta 将于本周早些时候推出 Threads 的网络版,这是公司为 X(前身为 Twitter)量身打造的竞争产物。有趣的是,网页版的Threads自这一短消息社交平台服务开始以来一直缺失,令人沮丧。  Meta 首席执行官马克-扎克伯格(Mark Zuckerberg)在本月早些时候表示,公司正在努力增加这一功能,同时改进搜索功能(其实就是搜索功能--现在,你只能在该平台上搜索用户名),"未来几周内"就会准备就绪。  不过,《华尔街日报》称,消息人士透露,该功能的"推出计划尚未最终确定,可能会有变化"。莫塞里上周在 Thre...
            0 0 1036
            分享
          • 质量保障的核心目标质量保障的核心目标在实际的项目或团队中很少有明确的约定或口径,就实际经验而言,可以归于一条:线上故障的减少。这个经验得来的目标实际是一个非常宽泛的目标了,通过团队成员的多方努力,这个目标仍然是“若即若离”。站在不同人员的角度,对测试目标会有共同的期望:故障的减少 & 人效的提升 & 迭代周期的缩短。但对测试结果的期望,线上故障的减少可以说是最核心的一个目标。产品故障的广泛定义从广义上来说,故障同时包括了:硬性质量引发的问题、软性质量引发的问题、需求定义引发的问题。硬性质量引发的问题指上线/配置修改等直接引发的线上不可用问题(用户直接不可用)软性质量的引发的问题...
            0 0 1110
            分享
          •   根据我的观察,优秀的测试人员可以做的事情可以包括如下3点:  ·由单纯的测试变成项目质量保证工作  · 持续集成探索和推动和自动化测试技术研究  · 测试相关工具的开发  1、我们先来讲第一点,由单纯的测试变成项目质量保证工作  测试,从狭义的角度来讲,包括如下这些环节:  测试计划和测试用例编写-测试执行-质量报告书写  测试人员一般会在开发阶段就进行测试计划和测试用例的编写和准备工作;在测试阶段,我们一般先会做功能测试,等项目功能基本稳定,bug较少了,就开始做兼容性测试、性能测试、安全性测试。兼容性测试保证了产品在多浏览器、APP在产品在不同机型下的兼容性;性能测...
            0 0 1197
            分享
          • 1、什么是兼容性测试?兼容性测试侧重哪些方面?参考答案:兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行,即是通常说的软件的可移植性。兼容的类型,如果细分的话,有平台的兼容,网络兼容,数据库兼容,以及数据格式的兼容。兼容测试的重点是,对兼容环境的分析。通常,是在运行软件的环境不是很确定的情况下,才需要做兼容。根据软件运行的需要,或者根据需求文档,一般都能够得出用户会在什么环境下使用该软件,把这些环境整理成表单,就得出做兼容测试的兼容环境了。兼容和配置测试的区别在于,做配置测试通常不是Clean OS下做测试,而兼容测试多是在Clean OS的环境下做的。2、我现在有个程序,...
            11 11 983
            分享
      • 51testing软件测试圈微信