跳转到主要内容
Chinese, Simplified

测试和修复机器学习模型的系统方法

目录

  1. 介绍
    1. 关于信任和理解的快速说明
    2. 示例问题和数据集
  2. 检测策略
    1. 敏感性分析
    2. 残差分析
    3. 基准模型
    4.  ML攻击的安全审计
  3. 补救策略
    1. 3.1数据扩充
    2. 3.2噪声注入和强正则化
    3. 3.3模型编辑
    4. 3.4模型断言
    5. 3.5不必要的社会学偏见补救
    6. 3.6模型管理和监控
    7. 3.7异常检测
  4. 进一步阅读和结论
  5. 工具书类

1.简介

因此,您已经训练了一个机器学习(ML)模型。您做得很好:交叉验证、提前停止、网格搜索、单调性约束和正则化。它在不合时宜的测试数据中准确稳定,比它所取代的线性模型更好。您甚至将模型封装在Docker容器中,该容器包含数据工程和信息技术(IT)伙伴的所有依赖项。是时候部署了吗?不那么快。当前ML模型训练和评估的最佳实践并没有告诉我们如何发现和修复现实世界中ML系统中可能出现的所有问题。如果这些系统能像常规应用程序一样进行测试和调试就好了…输入:模型调试。模型调试是一门新兴学科,专注于发现和解决ML系统中的问题。模型调试尝试像代码一样测试ML模型(因为它们通常是代码),并探测复杂的ML响应函数和决策边界,以系统地检测和纠正ML系统中的准确性、公平性和安全性问题。

1.1关于信任和理解的快速说明

在ML中,信任和理解是相似的,但并不相同。解开这种差异有助于我思考模型调试以及它与ML工作流的其他部分之间的关系。如图1所示,目前有很多工具可用于促进人类对ML的信任和理解。一些技术,如模型调试、社会偏见测试和补救,可以帮助我们使ML更加准确、公平和安全,而无需告诉我们模型是如何工作的。这些帮助我们信任一个模型,而不是帮助我们理解它。其他技术,如可解释的ML模型和事后解释,通过揭示模型机制或总结模型决策,直接增加我们的理解。当我们喜欢模型或解释时,这些技术只会作为副作用增加信任。

Figure 1: Many tools exist today to increase trust and understanding of ML systems. Some promote trust directly, while others promote understanding directly. Figure courtesy of Patrick Hall and H2O.ai.

本文将重点讨论调试ML和提高对ML的信任的数学方面。然而,考虑负责任的ML工作流的这两个额外方面至关重要:

  • 实现对ML的理解
  • 面向ML模型的IT系统的测试和强化

即使您重视信任,尤其是准确性,而不是公平性、可解释性或安全性,也需要使ML系统易于理解,以实现对错误ML决策的逻辑上诉或操作员覆盖。很难反驳黑匣子。[1] 你不会喜欢你的孩子被一个准确但难以理解的ML系统拒之门外。你也不会喜欢被同样的黑匣子系统剥夺医疗保健。您希望有机会对影响您生活的错误ML决策提出上诉,这就是为什么业务或生命关键ML系统应该始终是可以理解的。图2提出了一个工作流程,其中包括在ML系统中增加信任和理解的步骤。当与图2中提出的其他技术一起使用时,模型调试可能效果最佳。

你们中的许多人可能比我更了解向消费者展示ML模型的测试和强化系统。除了这种工作仍然是必要的之外,我不想说太多了。仅仅因为一个系统包含一个ML模型并不能免除它的测试。此外,谷歌(可能还有其他公司)已经就这一主题提出了一些可行的想法和框架。

 

Figure 2: A ML workflow that can enhance trust and understanding. Figure courtesy of Patrick Hall and H2O.ai.

现在,让我们来了解如何调试ML模型的内核。首先,我们将讨论本文中使用的示例问题和数据集,然后是如何检测错误,最后是如何压缩它们。

1.2示例问题和数据集

下面的一些例子是基于来自加州大学欧文分校(UCI)ML存储库的著名台湾信用卡数据集。[3] 在这个数据集中,我们试图预测某人是否会在下一次信用卡付款时付款,DEFAULT_NEXT_MONTH=0,或默认值,DEFAULT _NEXT_MONTH=1。有关付款的变量用于生成违约概率或p_default_NEXT_MONTH。我将使用我最喜欢的模型类型之一,一种可解释的单调约束梯度提升机(M-GBM)来进行这些预测。在M-GBM中,p_DEFAULT_NEXT_MONTH只能随着某个输入变量的增加而增加或减少。这使得解释和调试模型变得非常容易,并且不会真正影响该数据集模型的整体准确性。M-GBM根据付款变量进行训练,包括PAY_0-PAY_6,或客户最近到六个月的还款状态(较高值为逾期付款),PAY_AMT1-PAY_AMT6,或顾客最近到六周的还款金额,以及BILL_AMT1-BILL_AMT6,或客户最近到六月的账单金额。所有货币价值均以台币(NT$)为单位。

一些示例结果还包含变量LIMIT_BAL和r_DEFAULT_NEXT_MONTH。LIMIT_BAL是客户的信用额度。r_DEFAULT_NEXT_MONTH是一个logloss残差值,或者是M-GBM预测p_DEFAULT-NEXT_MONT与已知正确答案DEFAULT_ NEXT_MONTH相距多远的数字度量。我还将使用数据集中的人口统计变量,如性别,来测试不必要的社会学偏见。在大多数情况下,本文将示例信贷问题视为一般的预测建模练习,而不考虑适用的法规。(当然,违规处罚可能会使模型调试更具商业吸引力。)

 

2.检测策略

我们如何在ML模型中发现数学错误?我至少可以想到四种主要方法:敏感性分析、残差分析、基准模型和ML安全审计。你可能也会想到其他人。

2.1敏感性(“假设”)分析

敏感性分析,有时被称为“假设”分析,是一个简单而强大的想法。只需模拟代表有趣场景的数据,然后看看您的模型在这些场景中做出了什么样的预测。因为几乎不可能知道非线性ML模型对训练过程中没有看到的数据会有什么反应,所以对我们所有重要的ML模型进行灵敏度分析非常重要。[4] 您可能对要测试的场景类型有一些想法。如果是这样的话,那就太好了。也许你也想和你的模特一起玩?也很棒。对于这些情况,一定要检查What-If-Tool,它为某些类型的ML模型提供了交互式沙箱体验。

这也有助于采用更结构化的方法进行敏感性分析。本小节将介绍结构化敏感性分析的三种策略:

  • 部分依赖性、个体条件期望(ICE)和累积局部效应图(ALE)
  • 对抗性示例搜索
  • 随机攻击

在我们进入这些之前,最好知道哪些变量对您的模型最重要。我总是把测试的重点放在那些变量上。图3是使用XGBoost使用Shapley值计算的准确一致的变量重要性图。[5] (Shapley变量重要性测量也可在H2O和LightGBM中本地获得。)图3向我们展示了PAY_0非常重要,而且可能太重要了,正如我们稍后将看到的那样。

Figure 3: An accurate and consistent variable importance chart for the M-GBM model and the credit card dataset. Figure courtesy of Patrick Hall and H2O.ai.

2.1.1部分依赖性、ICE和ALE

部分依赖性将感兴趣数据集中感兴趣列(如PAY_0)的所有值设置为感兴趣值,如缺失或NaN,或任何其他合理值。这个新的数据集通过训练的模型运行回来,为每一行创建一个预测。取所有这些预测的平均值就是该变量、该数据集、该值和该模型的估计部分依赖性。现在,我们对几个我们感兴趣的不同值重复这个过程,以创建要绘制的部分依赖曲线。在图4中,该图向我们展示了M-GBM模型中PAY_0的粗略平均行为。

虽然这很容易理解,但部分依赖远非完美。众所周知,当数据集中存在强烈的相互作用或相关性时,会显示出不可信的结果。我们至少有两种选择来改善部分依赖性,ALE和ICE。听起来很有趣,对吧?ALE几乎是部分依赖性的直接替代品。它的计算效率更高,通常也更准确。ALE有R包,如:ALEPlot、DALEX和iml。

ICE通常与部分依赖性一起使用。ICE是一种与部分依赖性非常相似的计算方法。遵循与上述相同的步骤,只是感兴趣的数据集只有一行。这一点,我们通常会计算数据集中许多不同行的ICE曲线。当代表许多不同真实或模拟个体的ICE曲线与部分依赖性所代表的总体平均行为一致时,这是部分依赖性足够准确的好迹象。当ICE曲线偏离部分依赖性时,这可能表明模型中存在相互作用(可能是部分依赖性的平均值)。简言之,ICE可以告诉我们在我们的模型下有趣的真实或模拟个体的行为,如果部分依赖是可信的,以及我们是否应该注意我们的模型中的任何强交互。部分依赖和ICE的组合和变体可在PDPbox、PyCEbox、ICEbox和pdp等多个开源软件包中使用。

图4结合了部分依赖性、ICE和直方图,提供了关于M-GBM模型中最重要的变量PAY_0的许多见解。首先,我们可以看到,对于PAY_0>1,训练数据非常稀疏。这通常是一个坏兆头。ML模型需要大量的数据来学习。该模型几乎没有关于最近一次还款延迟超过1个月的人的数据可供了解。看看部分依赖性,我们可以看到其他一些潜在的问题。该模型给出了缺失数据(即NaN)的最低平均违约概率。这在商业上有意义吗?我不知道怎么回事。此外,从安全角度来看,这有点可怕。如果我想从这个模型中获得好的分数,我可能只需要将一个缺少PAY_0值的对抗性示例破解到M-GBM的生产评分队列中。此外,我们可以看到预测从PAY_0=1到PAY_0=2的巨大波动。从商业角度来看,这有意义吗?也许是这样,这很好,但从安全和数据漂移的角度来看,这是另一件需要注意的事情。如果我想对这种型号的客户进行拒绝服务攻击,我只需要将他们的PAY_0值更改为大于1。对于这个模型,我们可能想让我们的IT伙伴知道如何监控涉及PAY_0=NaN和PAY_0>1的对抗性示例攻击。此外,如果我们的市场朝着衰退的方向变化,客户有更多的逾期账单,重要的是要记住这个M-GBM对PAY_0>1的值有多敏感。

 

Figure 4: Histogram, partial dependence, and ICE for PAY_0. Figure courtesy of Patrick Hall and H2O.ai.

在更令人放心的方面,部分依赖性和ICE曲线显示了PAY_0的单调性约束,平均而言,对于许多个体。幸运的是,单调性约束也帮助我们处理了数据稀疏性问题。由于单调性约束,该模型保持了从PAY_0=2(其中有一些训练数据)到PAY_0>8(其中没有训练数据)的默认概率。如果没有约束,在PAY_0的这个域中的模型预测可能只是随机噪声。最后,由于ICE和部分依赖性基本一致,我们可以看到PAY_0、该数据集和M-GBM模型的部分依赖性曲线可能非常值得信赖。现在,您只需要对其余最重要的变量执行此分析。为了简洁起见,我将转到下一个敏感性分析调试策略,对抗性示例搜索。

2.1.2对抗性示例搜索

对抗性的例子是使模型产生意外结果的数据行。查找对抗性示例是一种很好的调试技术。搜索过程使我们能够看到我们的模型在许多不同场景中的表现。找到并理解实际的对抗性示例可以指导我们如何使我们的模型更加健壮,并告诉我们当模型进入生产环境时需要寻找的异常情况。如果你在Python深度学习领域工作,可以看看聪明人和傻瓜箱,找到对抗性的例子。对于结构化数据,没有那么多免费的软件可以帮助我们,但我有一个启发式搜索方法,你可以尝试或修改。图5显示了启发式搜索的结果。

Figure 5: Maximum predicted probability of default for adversarial example search across several important variables. Figure courtesy of Patrick Hall and H2O.ai.

对于M-GBM模型和数据,启发式搜索从PAY_0开始,像我在图4中所做的那样计算ICE,并找到预测中波动最大的ICE曲线。对于该数据集和模型,即p_DEFAULT_NEXT_MONTH第90个百分位处的ICE曲线。然后,通过四个重要变量(PAY_0、PAY_3、PAY_AMT1和PAY_AMT2)的十个不同值,对p_DEFAULT_NEXT_MONTH第90个百分位处的数据行进行10000次扰动。(之所以选择这些变量,是因为它们的Shapley值范围很广,而不是直接从图3中的变量重要性图中选择的。)然后,M-GBM模型对p_DEFAULT_NEXT_MONTH第90个百分位处的10000个扰动行实例的数据集进行重新搜索,结果如图5所示。

图5向我们展示了关于M-GBM模型的一些有趣的事情。首先,我们可以看到即使对于几个变量的组合也保持单调性约束。其次,我们可能在M-GBM模型中发现了一个逻辑缺陷。看起来,无论某人最近一次或第二次付款的金额有多大,如果他们最近一次付款延迟超过一个月,该模型都会产生很高的违约概率。这意味着,在不发布违约预测的情况下,M-GBM模型可能无法计算预付款,也无法计算支付大额款项以弥补逾期付款的人。如果我确实想在我的M-GBM模型中或在基于M-GBM模式的基于ML的信贷系统中解释这些情况,我可以考虑编辑M-GBM模块或使用模型断言来使信贷系统能够处理这些更复杂的场景。(见第3.3和3.4小节。)第三,这次搜索确实发现了至少一个对抗性的例子。当PAY_AMT1和PAY_AMT2的极低值与用于初始化搜索的行中的其他值相结合时,将导致M-GBM模型产生惊人的高默认概率。当M-GBM模型投入生产时,这些值是需要监控的。它们可能表明该模型正受到对抗性攻击。

如果您认为所提出的对抗性搜索方法似乎有用,请尝试一下。启发式搜索过程可以总结如下。

对于每个重要变量:

  • 在模型预测的每十分之一处计算ICE曲线。
  • 找到预测中摆动最大的ICE曲线。
  • 隔离与此ICE曲线相关联的数据行。
  • 对于这一行数据:
    • 扰动行中的1-3个其他重要变量。(很难绘制超过1-3个变量的结果。)
    • 重新存储被扰乱的行。
    • 继续,直到每个额外的重要变量在训练数据中循环通过其域,以及通过缺失或其他有趣的超出范围的值。
  • 5.绘制并分析结果。

2.1.3随机攻击

随机攻击是通过将模型暴露于各种随机数据来进行的。想想:双字节字符集、一行一列的数据集、1000万列一行的数据集等。随机攻击可以发现传统的IT漏洞和数学漏洞。考虑一下,当暴露于一个有1000万列和1行的数据集时,您的API会表现出错误,因为它会发出带有太多私人或内部信息的堆栈。或者它只是以一种非常丑陋的、服务崩溃的方式失败了?也许您的API和模型将双字节字符视为缺失值,并总是为包含它们的记录分配低默认概率的值?谁知道呢?不是你…如果你不测试这种东西。此外,如果您完全不知道从哪里开始进行模型调试,请从随机攻击开始。我打赌你会发现一些非常有趣的事情。

2.2残差分析

残差分析长期以来一直是线性模型诊断的基石,在ML时代应该保持这一点。残差是指已知的真实结果与模型预测结果之间的差异。有很多方法可以计算残差,但通常残差大意味着模型错了,残差小意味着模型是对的。残差图将所有输入数据和预测放入二维可视化中,在二维可视化中可以清楚地看到有影响的异常值和其他类型的数学错误。残差分析的唯一结论是,要计算残差,我们需要真实的结果。因此,如果我们在一段时间内无法获得真实结果的情况下进行预测,有时我们无法实时处理残差。(在抵押贷款中说。)

图6显示了由重要变量PAY_0的水平绘制的M-GBM模型的对数损失残差。洋红色残留物来自实际违约的客户。蓝色残差来自未违约的客户。可悲的是,图6描绘了我的M-GBM模型的一幅该死的画像。

Figure 6: Logloss residuals plotted by PAY_0. Figure courtesy of Patrick Hall and H2O.ai.

在图6中,我们可以看到,对于PAY_0<1的理想值,即无消费(-2)、按时支付(-1)或使用周转信贷(0),存在许多大的品红色残差。这意味着,当某人最近一次付款时,该模型基本上无法预测违约。对于PAY_0>1,模型误差由大的蓝色残差驱动,这意味着当客户的PAY_0值不理想时,即晚了几个月,M-GBM模型无法预测按时付款。将这些信息与图3中的变量重要性图相结合,表明M-GBM在病理上过度依赖PAY_0。我可能会部署一个单一的业务规则:如果PAY_0>1,那么DEFAULT_NEXT_MONTH=1,并且具有与M-GBM或几乎任何GBM相同的准确性。这样,我只会将一个脆弱的规则释放到野外,而不是成千上万或数百万个破碎的、可能有偏见的和可破解的规则。

我们可以尝试通过数据增强、强正则化、模型编辑或模型断言来修复这个危险的错误,所有这些都将在本文的修复部分进行讨论。但有一点是明确的,这种模式是破碎的、不可信的,不适合在现实世界中使用。这个问题不会出现在拟合统计、升力或AUC图中,如果不考虑残差,我永远不会看到它如此清晰。事实上,残差图向我们展示的看似健康的模型可能令人震惊。[6] 希望我已经说服你绘制残差是一种影响很大的调试技术。使用您喜欢的任何语言和一个像样的绘图库通常都很容易,但DALEX、themis ml和auditor等软件包提供了开箱即用的功能。

2.2.1差异影响、准确性和误差分析

差异影响(DI)大致是指决策系统中的非故意歧视。DI测试方法是一种众所周知的方法,可以在训练数据和预测建模结果中发现某些类型的不必要的社会学偏见。它们完美吗?不。它们是你能做的最起码的事情来阻止你的ML模型永久化或加剧不必要的社会偏见吗?可能还有一些开源软件包可以帮助您进行DI测试,包括aequitas、AIF360和Themis。基本的DI测试方法着眼于人口统计变量的准确性和错误率。理想情况下,我们希望这些准确率和错误率在不同的人口群体中大致相等。如果不是,这强烈表明你的模式正在延续或加剧不必要的社会偏见。在图7中,我们可以看到,就可变性别而言,男性和女性的准确率和错误率看起来相当相似。这是一个好迹象,但这并不意味着我们的模型没有不必要的社会学偏见,即使是在性别方面。

所有模型都能够根据输入数据的微小变化来区别对待相似的人,这可能会导致局部偏见或缺乏个人公平性。地方偏见的一个例子可以是,向有良好付款记录、收入为10万新台币的年轻女性发放信贷,但拒绝向收入为99999新台币的非常相似的年轻女性提供信贷。我们知道,新台币1元的收入差异并没有真正的差异,但ML模型可以任意将这两个相似的个体放在非线性决策边界的不同一边。更糟糕的是,标准DI测试通常无法发现局部偏差问题。我们如何确保个人层面的公平?到今天为止,这仍然是一个有点悬而未决的问题,许多恒星研究人员正在试图回答这个问题。[7] 我可以给出的一个实用建议是,仔细观察最接近模型决策边界或概率截止点的个人。在大多数情况下,非常相似的人不应该在边界的不同一边。现在,在将不同的准确性和错误率作为一种通用的错误检测工具进行讨论之前,重要的是要说ML中的公平性远远超出了这里的小讨论。如果你想了解更多信息,请查看“公平、问责和透明度在ML(FATML)会议”和相关资源,并尝试上面链接的一些软件包。8.

Figure 7: Accuracy and different types of error for PAY_0 and SEX across levels of these categorical variables. Figure courtesy of Patrick Hall and H2O.ai.

传统的DI测试方法通常也可以应用于分类变量,我发现这是一种很好的错误检测方法。图7显示了重要变量PAY_0的不同分类级别的许多准确性和误差指标。在这里,我们可以看到M-GBM在PAY>1时的性能之间的显著差异,这可能是由该领域中训练数据的稀疏性驱动的。该表很好地展示了该领域中模型性能的脆弱性,以及PAY>1时模型性能的差异。这种错误检测技术也可以应用于数值变量,只需对它们进行装箱即可。

2.2.2残差的解释

过去几年给我们带来了许多解释ML模型预测的技术。这些技术也可以用于改进我们的残差分析。可以创建局部可解释的模型不可知解释(LIME)、部分依赖性或残差的个体条件期望图。shap包的最新添加使计算Shapley对残差的贡献成为可能,这意味着你可以准确地了解哪些变量是驱动误差的,无论是局部的,即单行的,还是全局的,即整个数据集的。解释残差的另一个好选择是将模型拟合到残差上。图8是当DEFAULT_NEXT_MONTH=1时,适用于M-GBM残差的决策树。图8显示了M-GBM模型错过未来违约的原因模型,这可能会导致现实世界中的冲销。

 

 

Figure 8: Decision tree model of residuals for DEFAULT_NEXT_MONTH = 1. Figure courtesy of Patrick Hall and H2O.ai.

图8中的决策树的交叉验证R平方为0.89,DEFAULT_NEXT_MONTH=1残差的平均绝对百分比误差约为17%。所以它是相当准确的,这意味着M-GBM的错误猜测中有很强的模式。此外,决策树可以帮助我们了解这些模式。最大的残差出现在PAY_0<0.5 AND PAY_AMT2<NT$2802.5 AND PAY_4<1 AND PAY_AT2≥NT$1312.5的客户,或者最近和第四次最近还款状态良好,第二次最近还款在NT$1300到NT$2800之间的客户。在这种情况下,我们知道M-GBM模型往往无法预测未来的违约。这项针对残差的决策政策呼应了早期的结果,即M-GBM过度强调PAY_0,但增加了一个额外的提示,以进一步调查最近第二次付款在1300至2800新台币之间的客户。这种针对高剩余客户的提取决策策略也可以用于创建模型断言或预测后业务规则。(见第3.4节。)模型断言可以将具有这些特征的客户发送给人工案例工作者处理,或发送给更具体的模型。它也可能被用来实时纠正错误的预测!

2.3基准模型

基准模型是稳定、可信、透明的模型,通常类似于线性模型、单个决策树、简单的基于规则的模型,或者以前存在的且广为人知的ML模型。检查您的新ML模型在不合时宜的测试数据中是否确实执行了已知的基准测试,这总是一个好主意。如果您的新ML模型的性能没有超过更传统或透明的模型,请不要使用它。

一旦您确定了ML模型至少比更简单或预先存在的基准更准确,该基准模型就可以成为一个可靠的调试工具。我使用基准模型来问这样的问题:我的ML模型是谁错了,而我的基准模型是对的?如果您能够隔离错误的ML模型行为,则可以考虑将基准模型预测与ML模型预测混合,以便对这些情况做出更好的预测。此外,您可能可以解释为什么透明模型在某些数据子集上表现得更好,并制定潜在的补救策略。例如,当将行为不端的ML模型与线性模型进行比较时,ML模型不准确的一个可能原因是过度强调ML模型中的非鲁棒交互。此外,基准模型可用于实时发现异常情况。在大多数低信噪比、以人为本的ML问题中,简单模型和ML模型的预测应该没有太大区别。实时比较基准模型和ML模型预测可以帮助您在发生异常时发现一些准确性、公平性或安全性。

2.4 ML攻击的安全审计

有几种已知的针对ML模型的攻击可能导致模型结果的改变、有害或敏感训练数据的暴露。[9] [10]图9概述了一些最著名的ML攻击。不幸的是,传统的模型评估方法并不能告诉我们模型是否安全。除了其他调试步骤外,谨慎的做法可能是将部分或全部已知的ML攻击添加到您的组织已经进行的任何白帽黑客演习或红队审计中。

Figure 9: A cheat sheet that describes several different types of known attacks against ML. A full size version of this cheat sheet is available: https://github.com/jphall663/secure_ML_ideas. Figure courtesy of Patrick Hall and H2O.ai.

3.补救策略

现在,我们已经研究了一些系统的方法来发现基于ML的系统中的准确性、公平性和安全性问题,让我们考虑一些补救策略来修复任何检测到的问题。

3.1数据扩充

如果模型调试暴露出训练数据中的稀疏位置,或者模型中与缺少数据相关的逻辑错误,那么您可能需要获取更多数据。您可以模拟所需的数据,将其重新添加到训练数据中,重新训练模型,并重新测试模型。更有可能的是,你必须回到白板上,重新思考如何收集你的培训数据,并等待更完整的数据可用。为了避免将来出现此类问题,请考虑实验设计技术。[11] 在这里的例子中,收集有关债务收入比或就业状况的信息可能有助于在M-GBM模型中淡化PAY_0。

数据扩充也可以作为ML模型中不必要的社会学偏见的补救策略。ML中社会学偏见的一个主要来源是人口统计学上不平衡的训练数据。如果你的模型要用于各种人,最好确保你的训练数据也能代表各种人。性别阴影研究线既是一个警示故事,也是一个成功故事,其中包括人口统计学平衡训练数据的必要性。[12]

3.2噪声注入和强正则化

今天,我们大多数人在ML模型中使用L1和L2正则化。我们可能应该继续这样做。不幸的是,标准类型的正则化可能无法克服我们训练数据中强烈的病态偏见、相关性或依赖性。在所讨论的示例中,PAY_0就是这种情况。一个潜在的解决方案是启动L1和L2正则化。如果这种补救措施不够有力,您可以考虑其他措施,如L∞正则化、丢弃、权重裁剪或噪声注入技术。

为了修复训练数据而走极端也可能表明数据收集存在问题。如果一个变量驱动了你的整个模型,那么你可能至少错过了一个令人困惑的输入变量。在这种情况下,将数据扩充视为另一种补救策略。

3.3模型编辑

一些ML模型被设计为可解释的,因此您可以直接理解它们是如何工作的。其中一些模型,如决策树或GA2M(也称为可解释增强机,EBM)的变体,可以由人类用户直接编辑。如果你在GA2M模型的内部工作中看到了你不喜欢的东西,那么改变模型方程来消除你不喜欢什么并不难。其他模型可能不如GA2M或决策树那样易于编辑,但如果它们生成了人类可读的评分代码,则可以进行编辑。如果你的M-GBM评分代码中有很多错误的规则,也许你可以修复它们,或者删除它们。当然,可以尝试GA2M,但也可以考虑将编辑其他模型作为一种可行的错误修复策略。

关于模型编辑需要考虑的一件事是,它可能会使您的模型在训练或验证数据中看起来更糟。无论你的模型中有什么,因为它使训练和验证错误变得更好。因此,如果你编辑一个模型,你需要有坚实的理由来支持你的决定。

3.4模型断言

模型断言,也称为预测后业务规则,是对模型预测的断言语句,可以帮助纠正错误或有问题的模型预测。[13] 在我的例子中,我看到我的M-GBM模型无法解释客户最近一次付款延迟一个月以上后的预付款或超额付款。在做出违约决定之前,明智的做法可能是检查客户上次付款是否已预付或多付。生产中M-GBM模型的模型断言可以说:如果((PAY_0>1)AND(PAY_AMT1>LIMIT_BAL))THEN DEFAULT_NEXT_MONTH=0

(一个滑稽的、从头条新闻中撕下来的模型断言可能更像是:在将与怀孕相关的优惠券发送到他们的家庭之前,检查以确保客户不是未成年人。[14])

3.5不必要的社会学偏见补救

有很多人工和技术方法可以解决当今ML模型中不必要的社会学偏见。许多人为的解决方案包括促进数据科学团队的意见和经验的多样性,并确保不同的知识参与模型构建的各个阶段。技术补救方法分为三个基本方面:

数据预处理:

  • 明智的功能选择,例如使用文件上的时间作为输入变量,而不是破产标志。[15]
  • 对训练数据中的行进行采样和重新加权,以最大限度地减少训练数据中不必要的社会学偏见,例如AIF360中的重新加权。

模型培训和选择:

  • 在选择超参数和截止阈值时考虑公平性度量。
  • 直接培训展会模特:
    • AIF360中的学习公平表示(LFR)和对抗性去偏。
    • 使用兼顾准确性和公平性指标的双重目标函数。

预测后处理:训练后更改模型预测,如AIF360或themis-ml中的拒绝选项分类。

(当然,在2019年的ML模型中,用两段话来解决不必要的社会学偏见这一主题近乎荒谬和冒犯。今天存在许多技术来解决不需要的社会学偏差。了解更多关于它们的信息。今天真的没有借口部署种族主义模型,但它一直在发生,即使是在事关重大的生命关键场景中。[16])

3.6模型管理和监控

知道你有多少模特,是谁训练的,什么时候训练的。像记录其他软件资产一样记录它们。此外,监控重要的已部署ML模型输入和预测。注意相关趋势和异常情况。不要只关注准确性。还要考虑公平和安全问题。

现在,大多数数据科学家都明白,模型通常是根据真实情况的快照数据进行训练的。随着时间的推移,现实发生了变化。新数据会从快照中漂移,模型的准确性可能会在新数据上降低。这种模型漂移可能在模型输入和预测的统计趋势中表现得很明显。这种漂移也会影响模型的公平性特征吗?可能因此,除了您今天可能正在进行的任何输入或预测监控之外,还可以考虑对DI进行实时测试。

最后,当旧型号被拆除更换时,旧型号应该退役,这意味着要小心存储,以备将来的诊断、取证或诉讼需要。重要的模型不应该只是被删除。

3.7异常检测

异常输入和预测总是令人担忧,并且可能表明对手正在攻击您的模型。在示例M-GBM模型中,我们看到它对PAY_0的缺失值、PAY_0高值以及PAY_AMT1和PAY_AMT3极低值特别敏感。在这种情况下,丢失和其他不合逻辑的值可能甚至不应该被允许进入M-GBM的生产评分队列。对PAY_0值高或PAY_AMT1和PAY_AMT3值极低的新数据进行实时监控,可能会将这些客户转移到人工案例工作者的处理或更透明的模型中。

要实时捕捉异常预测,请考虑传统的统计过程控制方法,将ML预测与稳定透明的基准模型预测进行比较,或者监控新数据如何在模型中流动。(后者有时被称为激活分析。)对于基准模型,将ML模型预测与基准模型预测进行比较。如果它们非常不同,在发布预测之前仔细观察一下,或者只使用这些数据的基准模型预测。对于激活分析,新数据可能不经常流经在模型训练期间未频繁激活的模型机制(例如决策树节点或神经网络隐藏单元)。如果这种情况经常发生,那么调查原因可能是最安全的。

4.进一步阅读和结论

本文介绍了ML模型的几种调试策略,主要集中在结构化数据和标准商业数据挖掘用例上。如果你感兴趣,你可以深入研究在GitHub上创建我的示例所使用的代码。[17] 要了解ML研究界的模型调试情况,请查看国际学习表示会议(ICLR)调试机器学习模型研讨会。[18]

虽然从业者和研究界都在围绕模型调试展开讨论,但这门学科可能仍处于初级阶段。它的未来很大程度上取决于我们。每当ML被用于业务或生命关键决策时,我个人希望看到更多值得信赖的ML和模型调试。

5.参考文献

原文地址
https://towardsdatascience.com/strategies-for-model-debugging-aa822f1097ce
本文地址
Article

微信

知识星球

微信公众号

视频号