问题
机器学习是计算机科学中发展最迅速的领域之一。不幸的是,对于一些既不是数据科学家也不是ML开发人员的客户来说,他们仍然不清楚如何处理它,尽管他们确实知道他们需要将人工智能融入产品。
以下是我们从客户那里得到的关于ML质量保证的最常见问题。
- 我想运行UAT;请你提供针对AI的完整回归测试案例?
- 已经在生产中运行了模型;如何确保在更新时它不会损坏?
- 如何确保它能生成需要的正确值?
机器学习简介
为了了解ML的工作原理,我们来仔细了解一下ML模型的本质。
经典算法/硬编码函数和基于ML的模型有什么区别?
- 从黑盒的角度来看,就是同一个盒子,有输入有输出。把输入填进去,得到输出--多么美好的事情啊!
从白盒的角度,特别是从系统的构建方式来看,就有些不同了。核心区别在于。
函数是根据你的数据通过特定的算法来拟合的。你可以验证模型系数的ETL部分,但你不能像其他参数一样轻松验证模型质量。
如何测试?
模型审查程序类似于代码审查,但是是为数据科学团队量身定做的。我没有看到很多QA工程师参与这个特殊的程序,但接下来就是模型质量评估、改进等。评估本身通常发生在数据科学团队内部。
你有一个基于ML功能的服务,已经部署在生产中。它已经启动并运行了,你想控制它不会被自动部署的新版本模型破坏。在这种情况下,有一个纯粹的黑盒方案:加载测试数据集,并验证它是否有一个可接受的输出(例如,将其与预部署阶段的结果进行比较)。请记住:这不是关于精确匹配,而是关于最佳建议值。所以,你需要注意可接受的离散率。
验证部署的ML函数是否正确处理数据(即+/-反转)。这就是白盒方法最有效的地方:在模型中使用单元和集成测试来正确加载输入数据,检查正确(+/-反),并检查功能输出。无论你在哪里使用ETL,有白盒检查是好事。
生产数据会发生突变,同样的输入随着时间的推移会产生新的预期输出。例如,某件事情改变了用户行为,模型的质量就会下降。另一种情况是动态变化的数据。如果这种风险很高,这里有两种方法。
1.简单,但昂贵的方法: 每天在新的数据集上重新训练。在这种情况下,你需要为你的服务找到合适的平衡点,因为再训练与你的基础设施成本高度相关。
2.复杂的方法。取决于你如何收集反馈。例如,对于二进制分类,你可以计算指标:精度、召回率和f1得分。根据这些参数写一个动态模型评分的服务。如果低于0.6,就是警报;如果低于0.5,就是重大事件。
公测对某些情况下非常有效。 您可以根据之前未使用的数据评估模型质量。 例如,再增加300个用户来生成数据并进行处理。 理想情况下测试的新数据越多越好。 原始数据集是好的,但是大量的高质量数据总是更好。 注意:这里不是很好的测试数据外推方法; 您的模型应与真实用户良好配合,而不是根据预测或生成的数据。
自动对服务进行ping操作,以确保其有效(不是专门针对ML测试,但不应忘记)。 使用Pingdom。 是的,这个简单的东西可以节省很多时间。 这里有许多更高级的DevOps解决方案。 但是,对我们而言,一切都始于此解决方案-我们从中受益匪浅。
参考资料
- python测试等IT技术支持qq群: 144081101(后期会录制视频存在该群群文件) 591302926 567351477 钉钉免费群:21745728
- 本文最新版本地址
- 本文涉及的python测试开发库 谢谢点赞!
- 本文相关海量书籍下载
答案
- 我想运行UAT;请你提供针对AI的完整回归测试案例?
向客户描述黑盒,并向客户提供测试数据和可以处理和可视化输出的服务。
描述所有的测试层,你是否在ETL层上验证数据和模型功能,以及你是如何做的。
制作模型质量报告。向客户提供模型质量指标与标准值。从你的数据科学家那里得到这些。
- 已经在生产中运行了模型;如何确保在更新时它不会损坏?
你需要对任何生产推送以及任何其他软件进行QA审查。
执行黑盒冒烟测试。根据功能尝试各种类型的输入。
用测试数据的样本验证生产服务器上的模型指标。如果需要,隔离prod服务器的部分,这样用户就不会受到测试的影响。
当然,要确保你的白盒测试是通过的。
- 如何确保它能生成需要的正确值?
了解你的模型和数据的可接受标准差。花一些时间与你的数据科学家一起深入研究模型类型和算法的技术方面。