
如今,基于机器学习的预测和优化服务已吸引了许多公司:从大型银行到小型在线商店。 解决各种客户的问题时,我们遇到了许多问题,这些都是我们讨论ML测试功能的基础。 对于那些感兴趣的人,这是我们来自Jet Infosystems测试经理Sergey Agaltsov的下一篇文章。
以前,只有大型公司才能利用机器学习的优势,因为它既昂贵又困难,并且公共领域中的数据很少。 今天,它变得更加容易。 可以从集成商,专业公司或主题站点请求专业知识ML。 这对每个人都是有益的,因为随着专业知识的增长,开发了新的算法,并且机器学习领域的“丰富经验”也在不断丰富。
我们找不到现成的解决方案的唯一方面是测试ML服务。 谷歌搜索,您可以确保在搜索结果中没有提及开发此类服务时测试人员的活动。 当然,数据科学专家自己会使用各种度量标准来测试他们的模型,并且根据这些度量标准,服务甚至可能会尽可能地准确,但是现实情况是该模型并不总是能够考虑各种生产细微差别和瓶颈。 然后,机器学习的逻辑开始发展为硬代码。
在这方面,我们开始面临许多问题:
- 我们的优化模型是否总是考虑到可能的生产限制?
- 我们的模型能够解决瓶颈吗?
- 我们的模型能够正确响应生产变化吗?
这是我们决定集中测试团队的地方。
我们的任务是统一ML测试实践,以便能够应对所有上述问题。 目前,我们已经得出了一些结论,现在我将告诉您哪些结论。
测试是否符合生产限制和要求,以供优化算法考虑
在经典测试中,在任何测试中,我们总会有一个“预期结果”。 我们完全知道系统应该对一个或另一个输入数据做出什么反应。 但是,如果我们在生产环境中谈论机器学习,那么这种最可预期的结果可能是遵守法规文件,例如GOST,技术说明和临时流程表,这些文件限制了生产过程本身和最终产品的质量标准。 在测试期间,我们必须确保实际上遵守了所有这些限制,并且尽管数量众多,但我们确保测试用例涵盖了每个限制。
在一个用于优化物料N生产的真实项目的示例中(我们尚未公开该案例,因此我们将使用匿名名称),我们解决了以下问题:
- 我们已根据各种化学元素的含量对所有等级的N材料混合物进行了分类。 结果,我们得到了一个列表,我们后来计划将其用作辅助以确保足够的测试覆盖范围。
- 我们确信,该模型针对所有这些混合物发布的建议实际上是生产技术人员无条件接受的,并将此问题的结果记录在CSV文件中。 因此,我们收到了有关某些“黄金标准”的建议。
- 然后编写一个脚本,该脚本在各个版本的模型中遍历我们的参考混合物列表,并将其交付结果与“黄金标准” csv中存储的内容进行比较。
- 如果未检测到模型行为的变化,则可以将回归测试视为成功。 如果不是,则进行“汇报”。
因此,我们能够解决回归测试的问题,并确信引入模型的更改不会影响我们工作的早期结果。
测试着重于瓶颈
优化模型最能预测历史数据中最常见的内容,反之,一旦模型遇到自身不寻常的情况,它就可以“变成南瓜”。
通常,在这种情况下,优化服务必须“提示”适当的行为模型,这会生成我之前编写的硬代码。 但是,如何识别这些瓶颈并调试服务? 我将在为管理材料N的生产提供建议服务的示例中说明这一点(该案例尚未公开,因此,下面将使用面纱名称)。
首先,我们的架构师开发了一个集成仿真器,该仿真器生成了类似于生产效率的数据,从而填充了日期范围,在此基础上,优化模型发布了有关处理物料N的建议。接下来,测试人员分析了这些建议并找出了最可疑的建议-那些建议被剔除总质量流量推荐参数。 在此阶段,当模型以一种或另一种方式无法充分处理传入的数据流时,我们已经能够识别出许多问题。 这使我们能够稳定服务的状态并继续下一步。
第二阶段是“沉默”测试。 该服务是在后台的生产环境中提出的。 他的工作不会使材料加工N的操作员从机器的控制中分散注意力,我们依次收集了“操作员解决方案”,并将其与服务建议相比较。 因此,我们发现了在前一阶段无法捕捉到的模型盲点。
该模型必须能够响应生产更改。
我们的项目组合中有一个服务组合,可以优化燃料材料的生产。 服务的实质是,技术人员将生产组件的库存转移到模型中,设置产品质量的限制指标并设置必要的生产计划,并得到建议:为获得指定量的燃料,他需要以何种比例使用某些组件质量。
在开发此服务的过程中,我们遇到了一个我们无法预见的奇怪问题。
几年来,该公司在燃料生产中以一定范围的总转速运转,并同时使用正负相同比例的部件。
但是最近,该组织改变了这些组件的供应,并且有可能通过提高单位速度来弥补这一事实。 客户期望模型能够响应这些更改,因此从技术生产的角度来看-这是可以接受的解决方案,但这并未发生。 怎么了 答案很明显-该模型是在历史样本上训练的,而以前从未发生过。 您可以就谁在这种情况下是正确的以及谁应该受到责备这一话题进行很长的讨论,但是在将来,我们计划减少以下情况的可能性:
- 与生产部门的客户代表更加紧密地合作,以确定瓶颈和潜在的产品变更。
- 事先用相似的案例覆盖测试案例。
- 编写自动测试以检查是否符合生产限制和标志的相关性。
关于我们必须使用的测试工具的几句话:
- 错误跟踪-吉拉,
- 质量管理体系-Test Rail,
- 版本控制系统-GitLab,
- CI / CD-詹金斯,
- 自动测试-Java + Junit / TestNG,
- 与模型直接交互的脚本-Python + Jupyter。
您测试ML吗?
对我们而言,建立ML测试实践已成为一项挑战,实际上它必须从头开始。 但是测试是必要的-它有助于减少进入试运行之前的错误数量并缩短实施时间。
今天,我们所有人都需要分享和交流经验。 有必要在专门的站点和专业论坛上进行有关测试的讨论,顺便说一下,这些讨论在ML领域正变得越来越多。 并且,如果您已经建立了测试ML的实践,我想每个人都将有兴趣阅读它们,因此请在评论中分享您的经验。
Sergey Agaltsov,Jet信息系统测试经理