模型算法的测试方法

模型蜕变测试

1.蜕变测试概述

常规软件应用程序的测试存在测试断言,这表示可以通过测试人员或测试机制(例如自动测试)针对预期值验证软件应用程序的输出是否符合事实。但是在模型算法测试中,由于时间和人力等的限制,缺乏由模型算法测试确定的测试断言。此时需要某种不休赖于测试断言的测试,这就是蜕变测试出现的背景。

蜕变测试( Metamorphic Testing, MT )是利用模型算法内含属性的测试方法,其思想是假设以某种方式修改了那些与属性相关的输入,则可以在给定原始输入和输出的情况下预测新的输出。依据被测软件的领域知识和软件的实现方法建立蜕变关系,利用蜕变关系来生成新的测试用例,这些测试用例可用于测试模型,通过验证蜕变关系是否保持不变来决定本次模型测试是否通过。

蜕变关系( Metamorphic Relation, MR)表示一组与模型算法中多对输入和输出相关的属性,即在多次执行目标程序时,输入与输出之间期望遵循的关系。

早在1998年,澳大利亚斯威本科大学的Chen等便提出了蜕变测试的概念。"oracle"或“oracle测试”问题表示程序的执行结果不能预知的现象,即不知道预期结果。为了解决oracle问题,Chen等提出了蜕变测试的概念。对于该方法,Chen认为测试过程中没有发现错误的测试用例(即执行成功的测试用例)同样蕴涵着有用的信息,它们可以用来构造新的用例以对程序进行更加深入的检测。蜕变测试技术通过检查这些成功用例及由它们构造的新用例所对应的程序执行结果之间的关系来测试程序,无须构造预期输出。这种测试条件与理论恰好可以应用到模型算法的测试中,根据一定的蜕变关系来制订测试计划, 提高算法测试的覆盖率。

蜕变测试可用于机器学习模型的黑盒测试。对于机器学习模型的情况也一样,预先没有预期值,输出是某种预测。由于机器学习模型的结果是可预测的,而预测值本身是难以预先确定的,如果机器学习模型的输入和输出之间能建立某种蜕变关系,那么可以运用蜕变测试来进行机器学习模型的黑盒测试。蜕变测试具有3个显著的特点。

  • 为了检验模型的执行结果,测试时需要构造蜕变关系。
  • 为了从多方面判定模型功能的正确性,通常需要为待测模型构造多条蜕变关系。
  • 为了获得原始测试用例,蜕变测试需要与其他测试用例生成的策略结合使用。

 为了制定在模型算法上进行质量检查的蜕变测试计划,一般需要执行以下操作。

首先,算法(数据模型)工程师或测试工程师需要与产品经理合作,了解使用模型算法解决的实际业务问题。此外,测试工程师还需要与算法(数据模型)工程师合作,了解模型细节,例如模型算法的功能、原理等。基于以上信息,需要仔细考虑测试用例并将其作为测试计划的一部分。 产品经理和算法(数据模型)工程师也需要确认与审查相同的内容,然后使用编程脚本来实现测试过程的自动化。

2.模型蜕变关系

实施蜕变测试最难、最核心的工作就是发掘模型算法中所存在的蜕变关系。除由实际业务经验获得的蜕变关系,还有一些通用的蜕变关系。

蜕变关系-0: 一致仿射变换( consistence witn afine ua stormeticri)。一致仿射变换( f(x)=kx+b),即线性变换,对于原始训练数据集和测试数据集中的每一个特征值进行线性变换,衍生数据集上的预测结果期望保持不变。

蜕变关系-1.1:类别标签乱序( permutation of class labels )。假设函数Perm()实现类别标签的一对一映射。若原始测试数据T的预测结果为L,则衍生数据集上该条测试数据的预测结果期望为Perm(L)。

蜕变关系-1.2:属性乱序( pemutaton of the attribute)对于原始数据集的属性进行乱序操作,衍生数据集的预测结果期望不变。

蜕变关系 -2.1:增加无信息属性( addition of uninformative attributes)。无信息属性是指该属性与每一个类别的关联强度是相同的。对原始数据集增加一列无信息属性,若原始测试数据T的预测结果为L,则衍生数据集上该条测试数据的预测结果期望为L;。

蜕变关系-2.2: 增加有信息属性( addition of informative attributes )。若原始测试数据T的预测结果为L,为原始数据集增加一列属性,其属性值满足与类别L强关联,与其余类别的关联强度平均,则衍生数据集上该条测试数据的预测结果期望为L。

蜕变关系-3.1:- 致重复预测 ( consistence with re-prediction)。若原始测试数据T的预测结果为L,将数据T和标签L,加入原始训练数据集,则在衍生训练集上重训模型后,T的预测结果期望为L。

蜕变关系-3.2: 附加川练样本( additional  training sample ).若原始测试数据T的预测结果为L,复制原始训练集中类别为L的数据,则在衍生训练集上重训模型后,T的预测结果期望为L。

3.蜕变测试在模型算法测试中的应用

如前所述,一旦确定了一个或多个蜕变关系, 就可以构造用于验证模型算法正确性的测试用例。这些测试用例可以基于以下条件成为自动化的一部分。

  • 独立的测试用例,测试输入输出对。
  • 逻辑上较新的测试用例,它们是成功执行最后个测试用例的结果。

这与常规测试不同,常规测试中成功的测试用例不会导致新的测试用例。在执行测试时,根据一定的逻辑与当前测试用例的结果,生成新的测试用例,并进行有穷尽的递归,直至递归结束得到最终的蜕变测试结论。

此外,可以使用编程语言来编写脚本以实现自动化,并作为构建和部署自动化持续集成/交付工作流步骤的一部分来运行。

模型模糊测试

1.模糊测试概述

模糊测试(fuzz test )是一种黑盒测试, 使用随机数据作为系统的输入,如果应用程序执行失败,那么需要解决由此引发的问题与缺陷。简而言之,意外或随机输入可能会导致意外结果,通过使用大量的测试用例,尽可能多地发现有可能出问题的地方。用于输入的随机数据和不合法的数据称为模糊数据。例如,在传统软件测试的文本阅读器中,我们需要使用程序打开文件,这时可以将整个文件打乱,而不是仅替换其中的一部分,也可以将该文件限制为ASCII文本或非零字节。总之,尽可能多地增加文件的多样性,从而尽可能多地发现文本阅读器程序可能存在的缺陷。

模糊测试最初由Barton Miller于1989 年提出。在模糊测试中,用随机坏数据攻击一个程序或系统,然后观察程序或系统到底哪里遭到了破坏。模糊测试的技巧在于,它是不符合逻辑的,模糊测试可以自动执行,不需要猜测哪个数据会导致异常,而是将尽可能多的随机、杂乱的数据输入程序中(思想与Monkey Test类似),以确认程序的稳定性、健壮性、兼容性。通过使用模糊测试验证出的异常对于我们来说是很出乎意料的,因为任何按逻辑思考的人都不会想到这种异常。模糊测试是一项简单的技术, 但它应用到模型测试中后能够揭示出模型算法中的重要Bug。在进行模糊测试时,大致过程如下。
(1)准备模型算法的一 份正常输入。
(2)生成模糊数据测试用例,用随机数据替换该输入中的某些部分。
(3)将模糊数据输入模型算法。
(4)分析模型算法中模糊数据输入对应的输出结果。

这些测试用例是随机的。在对一个模型算法执行模糊测试前,首先要确定输入点,然后把输入教据传递进去。这些输入数据有可能是个文件、 一个数据包、 测试表里面的一个项。 总之,它是一种数据, 需要定义、构道这种随机数据,其中可以用任意多种方式生成随机数据,

2.模糊测试在模型算法测试中的应用

前面介绍的是模期测试在传统软件测试中的概念、思想和方法论,我们可以将模糊测试迁移到机器学习模型算法测试中。
一般来讲, 在使用模糊测试对模型算法进行测试时,要经过以下几个步骤。
(1)确定模型算法的输入,包括格式、类型。
(2)根据正确的输入,通过随机或半随机的方式生成大量新的输入数据。
(3)将生成的输入数据传入被测试的模型算法中。
(4)当模型算法接收到输入以后,检测模型算法的状态(如是否能够响应、响应是否正染、资源占用情况等)、并记录输出结果。
(5)根据被测模型算法的状态记录和输出结果,分析判断模型算法中是否存在潜在的异常。

模糊测试可以检测到的错误类型有以下几种。

  • 断言关败和内存泄露: 模糊测试广泛用于模型算法存在漏洞而影响内存安全的情形。此类问题是一种非常严重的缺陷漏洞, 可能会导致模型算法因异常而崩溃。
  • 无效输入:在模糊测试中,模糊器用于生成无效输入,该无效输入用于测试错误的例程,这对于不控制输入的模型算法很重要。简单的模糊测试是一种自动执行否定测试的方法。
  • “正确”的错误:模糊测试也可以用于检测某些类型的“看似正确性”错误,例如,输入格式、输入数据类型等。

在模型算法测试中执行模糊测试具有以下优点。

  • 提升了模型算法的安全性。
  • 可检查模型算法的漏洞, 是种“性价比较高”的测试技术。
  • 可发现是严重的错误,而且是容易被攻击的错误。
  • 如果由于时间和资源的限制, 测试人员没有注意到一些错误,那么在模糊测试中会发现这些错误,这是对人工测试的一种补充。

当然,模糊测试也存在一定的缺点。

  • 无法检测出所有的安全威胁或 Bug。
  • 只能检测到模型算法中简单的错误或威胁。

模型鲁棒性测试

模型鲁棒性测试概述
鲁棒性也就是所说的健壮性,在进行模型算法测试时,我们还要关注模型算法对异常情形产生的异常输入的处理能力,甚至是服务过程中的容灾能力。简单讲就是模型算法在一些异常情况下是否可以有比较好的效果,我们需要考虑算法处理不确定性的能力。例如,在人脸识别中,运动产生模糊和佩戴眼镜、发型变化或光照不足等情况下,判断模型的识别结果正确与否。算法鲁棒性的要求,简单来说就是在“好的时候”效果要好,在“坏的时候”效果不能太坏。

举个例子,一个家用清洁机器人通常会清洁无宠物的房屋。如果将机器人放到饲养宠物的办公室,在清洁过程中遇到宠物,该机器人以前从未“见过”宠物,因此会继续用肥皂清洗宠物,这样就会导致不良后果。再举个例子,在AIphaGo和李世石对决中,李世石是赢了一盘的。李世石九段下出了“神之一 手” ,DeepMind 团队透露:错误发生在第79手,但AIphaGo直到第87手才发觉,其间它始终认为自己仍然领先。正所谓“一着不慎,满盘皆输”。这里指出了一个关键问题一鲁棒性。
因此,模型算法乃至模型算法服务的鲁棒性直接影响到业务方使用过程中的稳定性,是模型算法测试中需要关注的一个重点。进行模型鲁棒性测试的目的如下。
●使模型满足高风险应用。
●使模型对未知情形进行合理的预测。

模型在异常情形下产生的非正常、不合理的输出,会直接影响用户对产品的体验。在高风险的应用场景(如自动驾驶、疾病诊断的应用)中,有时会缺少人工监督,因此模型算法已经被赋予了重要的自主决策权,模型的预测结果甚至会直接关系到人们的性命。模型算法必须对嘈杂或变化的坏境、错误指定的目标,以及错误的实现具有鲁棒性,以使此类干扰不会导致系统采取具有灾难性后果的行动,例如撞车和误诊。此外,在实际应用中模型不会只面对我们人类认知范轴内的所有情形,因此还需关注模型对未知情况的处理能力。

在进行模型鲁棒性测试时,要估算指定模型中模块的所有可能组合,报告估算模型分布的关键统计数据,并确定经验上最有影响力的模型细节,确保数据不确定性与模型不确定性的自然平衡。通常的标准误差和置信区间反映了数据的不确定性,表明在重复采样中估计值有多少变化。同样重要的是探查模型内部,拆解建模对象并查看哪些因素对于获得当前结果至关重要。

常用的模型算法鲁棒性测试方法

我们在进行模型算法的鲁棒性测试时可以分两步。首先,在所有可能的控制组合中估计模型分布,以及指定可能的功能形式、变量定义、标准错误和评估指标,这使我们可以模拟模型的不同条件,并对产生的不同结果进行度量。然后,进行模型影响分析,显示每种模型依赖成分如何影响模型的结果。

本着上述理念,模型算法的鲁棒性测试方法就是用尽可能多的异常数据来进行测让些异常数据应该覆盖模型运行中所有不同的情形。通常我们会从两个角度来评估模型的鲁棒性一模型算法自身的输入/输出和模型算法依赖的服务。

从模型算法自身的输入/输出角度来看,为了测试模型算法的鲁棒性,我们会构造一些异常的模型输入,从而观测模型的输出是否符合要求。比较常见的输入构造方法有几种。

  • 特征值在合理阈值外。
  • 增加或减少特征数量。
  • 更改输入格式,如改变输入结构体、构造不同的分隔符。
  • 更改数据类型,如Double类型输入更改为String类型。

通过前文我们已经了解了模型算法服务的完整生命周期。在模型部署到线上并实服务时,模型服务很可能会依赖各种其他流程与服务,如原始数据采集、数据加工、存储和特征计算等。我们可以从模型算法依赖的服务出发,模拟这些服务的异常、崩溃等情形。根据之前提到的模型效果评估指标,计算正常情形与异常情形下对应的F1分数、PSI、KS值等指标,对比正常和异常情形下指标的变化可以体现出这些异常情形对模型预测效果的影响。综合考虑某一异常 情况出现的频率及对应的影响,确认模型算法在该异常情形下的变化及程度是否符合我们的预期、是否在业务方的可接受范围内,以此来评估模型的鲁棒性。显然,我们肯定会认为在同一异常情形下, 对效果影响较小的算法更优,这也说明该模型算法的鲁棒性越强。

通过对模型算法的鲁棒性进行测试、评估,可以获知该模型在对外服务时的效果下限,并指导算法的优化与改进,确保最终部署的模型算法的质量,在业务应用上达到更好的效果。例如,通过使用KS值进行评估,模拟在某种条件下对特征产生的某种影响,获取在这种常条件下影响结果的代码。mo

load mode1,sample
label = get_label(sample)
features=get_feature(sample)
ks_normal = model.get_ks(features.label)
features_anomalous=simulate_abnormality(features)
ks_anomalous=model.get_ks(features_anomalous,label)
result=compare(ks_normal,ks_anomalous)

模型安全测试

模型安全测试概述
尽管由机器学习算法驱动的系统可以增强人类的决策能力并改善结果,但它们并非无懈可击, 并且可能容易受到对抗性攻击。这会引起安全隐患,有可能降低人们对系统的信心。尽管技术社区不断发现并修复软件系统中的漏洞,但这对以机器学习为动力的系统攻击带来了新的挑战。例如,攻击者可能会通过注入经过精心设计的样本来破坏训练数据,从而最终损害系统安全性。他们可以通过研究机器学习系统的输出来窃取机器学习模型,也可以通过引入噪声或对抗性干扰来“愚弄”模型算法。
当进行模型安全测试时,通常模型算法被攻击的方式有两种-----试探性攻击和对抗性攻击。在试探性攻击中,攻击者的目的通常是通过一定的方法窃取模型, 或通过某种手段恢复一部分训练机器学习模型所用的数据来推断用户的某些敏感信息。对抗性攻击对数据源进行细微修改,让人感知不到,但机器学习模型接受该数据后会做出错误的判断。

安全测试在模型算法测试中的应用
举个例子,现代机器学习系统在识别图像中的对象、注释视频、将语音转换为文本或在不同语言之间进行翻译等认知任务上达到了很高的水平。这些突破性结果中有许多是基于深度神经网络( Deep Neural Network, DNN)的。深度神经网络是一种复杂的机器学习模型,与人脑中相互连接的神经元具有某些相似性。深度神经网络能够处理高维输入(例如,分辨率图像中的数百万个像素),以各种抽象级别表示这些输入中的模式,并将这些表示方式与高级语义概念相关联。对抗性攻击示例是指深度神经网络故意修改的输入(如图像)产生所需的响应。

此外,数据几乎是每个机构、公司最重要的资产。关于安全我们还需要关注模型算法中输出数据的安全。首先,要确定模型的输出是否违反了法律法规中数据合规性的要求,若有这方面要求,我们需要关注模型的输出是否进行了脱敏、标准化等处理。其次,我们需要确认模型使用者是否可以通过调用大样本获取大量数据,以避免造成损失。

模型可解释性测试

1.模型可解释性概述
机器学习模型的可解释性越高,人们就越容易理解为什么做出某些决定或预测。模型可解释性是指对模型内部机制的理解以及对模型结果的理解。其重要性体现在两方面:在建模阶段辅助开发人员理解模型,进行模型的对比选择,必要时优化调整模型;在投入运行阶段,向业务方解释模型的内部机制,对模型结果进行解释。例如,商品推荐模型需要解释为何向这个用户推荐某个商品。

在一般规律中,模型的复杂度和准确性往往是正相关的,越高的复杂度意味着模型越无法实现可解释性。在过去的几年中,计算机视觉领域中深度学习的进步导致人们普遍认为,针对任何既定的数据科学问题,最准确的模型必须是复杂且无法解释的。这种想法源于机器学习在社会中的用途。当前的机器学习应用是广告推荐、网络搜索之类的低风险决策,但是此类决策不会对人类生活产生深远的影响。在技术上可解释的模型与黑盒模型是等效的,但是可解释模型比黑盒模型更符合“道德”标准。可解释模型会被约束以更好地理解如何进行预测。在某些情况下,我们可以很清楚地看到变量是如何联系起来形成最终测结果的。最终的预测结果可能只是简短逻辑语句中几个变量的组合,或者使用线性模型对变量求加权和。

在一些传统、重要的场景(诸如诊断疾病、驾驶汽车等)下应用模型算法来实现智能时,模型服务的使用方需要了解模型算法的可解释性,以此建立对模型决策结果的信任。在务中,我们希望了解患病预测模型为什么会判定某人没有患病,或者自动驾驶模型为什么会直行时变换车道。因此,在对模型算法进行测试时,对于简单、可解释的模型,我们还要关注模型的解释性是否合理。在实施模型的可解释性测试之前需要对业务、数据、模型算法有深入的理解。模型可解释性的作用与价值如下所示。

  • 调试模型。一般真实业务场景中会有很多不可信赖的因素,我们没有能够全面覆数据。当我们遇到了用现有业务知识无法解释的数据的时候,了解模型预测的模式,可以帮助我们快速定位问题。
  • 指导数据平集和特征工程的方向。特征工程通常是提升模型准确率肥有效的方法之,特征工程通常涉及反复地操作原始数据, 用不同的方法来得到斯的特征。我们了解了模出预测的逻辑和业务背要知识后,便可以更好地确定什么样的数基可以应用到业务中以挖掘特征,更好地体会什么样的特征会 更有利于业务和模型的应用。
  • 指导决策。一些决策是模型自动做出来的, 例如,亚马逊官网不会用人工来决定在页面上展示给我们哪些商品。但很多重要的决策是由人来做出的,对于这些决策,模型的洞察力会比模型的预测结果更有价值。
  • 建立人与模型之间的信任。很多人在做重要决策的时候不会轻易地相信模型,除非我们验证过模型的一些基本特性。 实际上,把模型的可解释性展示出来后,如果可以匹配上人们对问题的理解,那么这将会建立起人们对模型的信任。

可解释性在模型算法测试中的应用
模型可解释性的主要内容包括基于“白盒”模型的内在可解释性,以及基于“黑盒”模型推断的可解释性。
1)基于“白盒”模型的内在可解释性
可以使用内在可解释的机器学习算法,如表10-3所示。根据目前研究阶段的成果可知,可解释的算法有通用的线性模型(包括线性回归)、决策树算法、朴素贝叶斯算法、K近邻算法等。例如,因为深度神经网络等复杂的模型能够在各个层次进行抽象推断,所以它们可以处理因变量和自变量之间非常复杂的关系,即输入与输出之间的学习过程高度非线性、不单调,参数之间相互影响。这远超人类可直接理解的范畴。这种复杂性使模型变为“黑盒”,我们无法获知所有产生模型预测结果的这些特征之间的关系,所以只能用准确率、错误率等评价标准来评估模型的可信性。

内在可解释的机器学习算法
算法        是否线性是否具有单调性特征是否交互
线性回归
逻辑回归
决策树部分具有
RuleFit
朴素贝叶斯
K邻近算法

2)基于“黑盒”模型推断的可解释性
该类基于模型推断的可解释性一般将包含机器学习模型的系统看作黑盒,从而能够保证解释模型与方法和原机器学习系统之间是解耦的,保持解释层的模型无关性。下面介绍几种与模型无关的可解释性构建方法。

  • 部分依赖绘图( Partial Dependence Plot, PDP )。针对复杂模型,部分依赖绘图计算中可以考虑所有样本点,在保持样本中其他特征的原始值不变的条件下,计算特征(一般是1~ 2个)在所有可能值情况下的模型预测均值,从而全局化地描述该特征对模型预测的边际影响。它能够可视化特征的重要性,描述特征与目标结果之间的关系。通过PDP展示的结果非常直观,并且全局性地分析了特征对模型输出的影响,但是可解释性的可信度在很大程度上依赖特征之间的相关性。PDP没有考虑特征之间的相关性,在通过遍历某特征值求均值的过程中不可避免地引入了一些不可能存在的点,导致最终结果出现偏差。
  • 特征归因( fature atrbuton )。特征归因是分析模型决策依赖指定特征的程度的一种度量。该方法同样符合人类直觉-----特征重要性越高, 模型预测越“依赖“该特征,从而能够直观发现特征对结果的影响。值得注意的一个问题是,许多Boosting方法及框架(如XGBoost、LightGBM,以及CatBoost等)都能够提供模型的特征重要性(feature importance)参数。此类模型在构建过程中获得的特征指数能够反应模型在训练数据上对特征的依赖,有效地辅助特征工程。这可归属于建模前的可解释性部分,用于辅助模型的构建。但此类特征重要性不能够回答模型如何在任务中做出决策这个问题。这些方法获取的特征重要性完全依赖于训练数据集,而训练数据集很难真实反映实际环境下的数据分布。

  • 全局代理模型( global surrogate model )。全局代理模型能够提供整个模型的可解释性,而不是仅针对某个或某些样本实例的解释。一种朴素的思路是,将原始数掘集中的实际标签替换为黑盒模型中的预测标签,生成新的样本集,并在该样本集上练一个内在可解释的模型。显然,该方法能够直观地解释复杂模型的决策流程,但是这不可避免地丢失了模型的预测性能。因为代理模型直接学习的是关于黑盒模型的知识,而不是原始数据本身的知识。代理模型的核心思想可以概括为使用简单可解释的模型模拟复杂模型的行为,即学习模型的一种可解释压缩表示。深度学习中模型蒸馏( distiling )等压缩技术也是生成代理模型的可用方法,其关键是如何限制模型架构保证最终代理模型的可解释性。

模型可解释性测试是一个用于评估解释方法的科学评估体系, 尤其是在计算机视觉领域,许多解释方法的评估还依赖于人类的认知,因而只能定性评估,无法对解释方法的性能进行量化,也无法对同类型的研究工作进行精确的比较。由于人类认知的局限性,人们只能理解结果中揭示的显性知识,通常无法理解其隐性知识,因此无法保证基于认知的评估方法的可靠性。模型可解释性测试是非常有前景的研究领域,该领域已经成为国内外学者的研究热点,并且取得了许多瞩目的研究成果。

模型监控与迭代

1.模型效果的监控

尽管通过模型算法效果评估、蜕变测试、鲁棒性测试、安全测试等可以排除许多风险,但是很难在测试评估阶段就解决所有问题。部署机器学习系统以后,我们需要使用工具来持续监控和调整机器学习系统。对模型算法的质量保障的最后一步从监控和强制执行两个角度进行。
一方面, 模型监控包括检查系统的所有方法,以便通过人工检查(汇总统计信息)和自动检查(扫描大量活动记录)来分析与预测模型状况。另方面, 设计用于控制和限制机器学习系统行为的切制来减少系统异常,以保证机器学习系统不会在服务过程中失控。

机器学习系统的实施方式和数据处理方式在各种应用场景中不尽相同,因此在不同的应用场景下,我们需要使用的模型监控方法和策略会有所不同。精心设计的监控手段和工具可以评估机器学习系统做出的预测、决策的质量。例如,医学机器学习系统在理想情况下会完成诊断以及得出结论,医生应在采用机器学习系统给出的诊断前检查其推理过程。此外,为了解更复杂的机器学习系统,我们甚至可以采用自动方法,使用“机器心理理论”来构建行为模型。

最后,我们希望能够在必要时关闭机器学习系统,这是可中断性的问题。设计可靠的离线开关非常具有挑战性;但是此类中断(尤其是在频繁发生时)最终改变了原始任务,导致机器学习系统从经验中得出了错误的结论。

如何进行模型监控以及应对问题呢?机器学习系统发布到线上后,模型在线上持续运行,需要根据不同的应用场景以固定时间间隔(可以是实时、隔天、隔周或隔月等)检测模型算法的表现,通过各种评估指标对模型进行评估,对各指标设置对应的阈值。当达到阈值时立即发送警报给相关员以进行跟进解决与修复。在模型服务过程中,难免会遇到未知的、.无法快速解决的异常,此时我们需要有强制执行系统,通过服务降级的方式来应对。

2.模型迭代的测试

随着运行时间的推移、业务与数据的变化,模型的效果会衰退,有可能不能很好地拟合当前的数据。此时便需要用新数据进行训练以得到新模型,对旧模型进行替换与迭代。

在对模型算法进行迭代时,除了对新模型进行相关的常规评测,还要关注另外一个问题--------模型产出的只是预测值 (或概率值),至于要怎么使用预测值,阈值设为多少是与模型本身没关系的,这些应由业务调用方自行决定。进行模型迭代时预测值一定会发生变化, 因此我们需要保证这种变化不会影响到调用方,或者及时通知调用方进行相应更改。例如,旧模型的预测值是均匀分布在0 ~ 1的;而新模型预测值的分布比较极端,预测值大多集中分布在0~0.1和0.9 ~ 1,这就会出现问题。因为业务调用方当初根据|旧模型的预测值均匀分布在0~1设置了阈值,所以调用方如果不重新调整阈值就会造成业务上的异常。因此,在更新模型的时候还需要进行预测值的分布统计以及对比新、旧模型预测值的PSI评估(也叫预测值的稳定性测试)。一般来讲, 在进行模型迭代时,不允许预测值出现很大的变化。

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值