为什么我们要重视机器学习模型的调试?

作者 | Patrick Hall and Andrew Burt
编译 | CDA数据分析师

了解和修复ML中的问题,对于模型的广泛采用至关重要。

人们逐渐意识到ML模型可能会失败,这是模型需要调试的原因,理解和修复ML模型中的问题对ML的未来至关重要。如果无法在模型表现不佳或行为异常时对它们进行故障排除,大规模采用和部署ML将无法实现。

因为所有ML模型都会出错,所以所有关心ML的人也应该关心模型调试。这些人员包括高级管理人员,前线数据科学家以及风险,法律和合规人员。本文旨在作为简短的技术入门文章,介绍什么是模型调试,帮助了解什么是调试模型以及在实践中如何调试模型的基础知识。这些建议是基于我们作为数据科学家和律师的经验而建立的,专注于管理部署ML的风险。

什么是模型调试?

有时ML模型只是单纯错误,但是有时它们不仅错误并且在社会上具有歧视性,或者被黑,或者仅仅是不道德的。当前的模型评估技术,例如交叉验证或ROC曲线,根本无法告诉我们部署ML模型时可能发生的所有令人讨厌的事情是作为大型、复杂、面向公众的IT系统的一部分。

那就是模型调试的地方。模型调试是一门新兴的学科,致力于发现和修复ML系统中的问题。除了更新的创新之外,该业务还借鉴了模型风险管理,传统模型诊断和软件测试。模型调试尝试测试像代码这样的ML模型(因为它们通常是代码),并探查复杂的ML响应功能和决策边界,以检测和纠正ML系统中的准确性,公平性,安全性和其他问题。调试可能集中于多种故障模式(即ML模型可能会出错),包括:

  • **不透明:**对于许多故障模式,您需要了解模型在做什么,以便了解出了什么问题以及如何解决。至关重要的是,透明度并不能保证可信赖的模型。但是透明通常是调试大量命令的先决条件。
  • **社会歧视:**目前,在ML中,有许多被广泛宣传的社会歧视事件。这些可能会对歧视性模型决策的主体造成损害,并对模型所有者造成重大的声誉或法规损害。
  • **安全漏洞:**对抗参与者可能会破坏ML模型或与模型相关联的数据的机密性,完整性或可用性,从而导致一系列不良后果。正如我们在最近的“未来隐私论坛”报告中所记录的那样,对ML的安全性的研究是一个不断发展的领域,也是一个日益严重的问题。
  • **隐私危害:**模型可以以多种多样(并且还在不断增长)的方式损害个人隐私。有关个人的数据可以在训练了很长时间之后从ML模型中解码(例如,通过所谓的反演或提取攻击)。通过从非敏感数据中推断敏感属性以及其他危害,模型还可能侵犯个人隐私。
  • **模型衰减:**众所周知,ML模型和数据管道“易碎”。这意味着意外的输入数据或数据管道中随时间的细微变化会严重破坏模型的性能。

预防和解决此类问题的最佳方法是模型调试。我们将在下面介绍调试方法。

如今的调试如何进行?

数据科学家至少有四种主要方法来查找ML模型中的错误:敏感性分析,残差分析,基准模型和ML安全审核。

尽管我们对每种方法的分析似乎都是技术性的,但我们认为,了解可用的工具以及如何使用它们对于所有风险管理团队都是至关重要的。任何技术能力的人都应该至少能够考虑使用模型调试技术。

敏感性分析

灵敏度分析,有时称为假设分析?分析,是模型调试的主体。这是一个非常简单而强大的想法:模拟发现的有趣数据,并查看模型对该数据的预测。因为ML模型可以以非常令人惊讶的方式对从未见过的数据做出反应,所以用敏感性分析测试所有ML模型是最安全的。尽管无需正式框架即可进行敏感性分析相对简单,但假设分析工具是开始使用TensorFlow系列中某些模型的好方法。敏感性分析的结构化方法包括:

  • **对抗性示例搜索:**这需要系统地搜索引起ML模型奇怪或明显响应的数据行。图1说明了对示例信用违约ML模型的示例对抗搜索。如果您使用的是Python和深度学习库,那么CleverHans和Foolbox软件包还可以帮助您调试模型并查找对抗性示例。

图1:对抗性示例搜索的结果显示,根据示例信用违约ML模型,最近(PAYAMT1)低的信用卡付款和最近(PAYAMT2)第二低的信用卡付款导致了极高的违约概率。货币金额以新台币表示。图由Patrick Hall和H2O.ai提供。

  • **局部依赖性,累积局部效应(ALE)和单个条件期望(ICE)曲线:**这涉及系统地可视化更改模型中一个或多个变量的影响。有一吨这些技术包:ALEPlot,DALEX,ICEbox,IML,和PDP中的R; 以及Python中的PDPbox和PyCEbox。
  • 随机攻击:将模型暴露于大量随机输入数据中,并观察它们的反应。随机攻击可以揭示各种意外的软件和数学错误。如果您不知道从哪里开始调试ML系统,那么随机攻击是上手的好地方。

残差分析

残差分析是另一种著名的模型调试技术系列。残差是模型误差的数字度量,本质上是模型预测与已知真实结果之间的差异。小残差通常表示模型正确,而大残差通常表示模型错误。残差图将输入数据和预测放入二维可视化中,在该可视化中,经常可以清楚地看到有影响的异常值,数据质量问题和其他类型的错误。残差分析的主要缺点是要计算残差,需要真实的结果。这意味着在某些实时模型监视设置中很难处理残差,但是残差分析应该始终在模型训练时就可以进行。

像图2一样,许多判别检测技术也考虑模型误差,尤其是在不同的人口统计群体之间。 这种基本的偏差检测练习有时称为“不同的影响分析”。 Gender Shades系列研究就是一个很好的例子,说明了影响人口模型的跨人口群体错误分析的必要性。还有许多其他工具可用于歧视检测。要了解有关测试ML模型以进行区分的更多信息,请检出aequitas,AIF360,Themis等软件包,以及更一般而言,由ML的公平性,问责制和透明度(FATML)社区创建的内容。

图2:在示例信用违约模型中,分析了男性和女性的多种错误类型。这是一个很好的信号,表明男性和女性的错误相似,但这并不意味着该模型没有歧视。图由Patrick Hall和H2O.ai提供。

基准模型

基准模型是可以与ML模型进行比较的可信、简单或可解释的模型。检查新的复杂ML模型是否确实优于简单的基准模型总是一个好主意。一旦ML模型通过此基准测试,该基准模型就可以用作可靠的调试工具。基准模型可用于提出以下问题:“基准模型正确,我的ML模型做了哪些预测错误?为什么?”实时比较基准模型和ML模型的预测也可以帮助您了解准确性,公平性或安全异常发生时。

ML安全审核

有几种已知的针对机器学习模型的攻击,它们可能导致更改的,有害的模型结果或暴露敏感的训练数据。此外,传统的模型评估措施不告诉我们很多关于一个模型是否安全。除了其他调试步骤外,谨慎的做法是将一些或所有已知的ML攻击添加到组织已在进行的任何白帽黑客攻击或红队审核中。

我们发现了问题;我们做什么?

因此,您已经实现了一些系统的方法,可以在我们讨论过的基于ML的系统中查找准确性,公平性和安全性问题。您甚至发现了ML模型的一些问题。你能做什么?这就是补救策略的用武之地。我们在下面讨论七种补救策略。

可解释的ML模型和可解释的ML

我们提出的调试技术应该适用于几乎所有基于ML的预测模型。但是它们将更易于在可解释的模型或可解释的ML上执行。因此,对于高风险的用例,我们建议使用可解释的ML。幸运的是,近年来,为此目的已取得了技术进步。对于可解释和准确的ML模型,有很多选择,并且有很多解释和描述它们的方法。

模型编辑

某些ML模型被设计为可解释的,因此可以了解它们的工作方式。这些模型中的某些模型,例如决策树或GA2M的变体(即可解释的增强机),可以由人类用户直接编辑。如果GA2M模型的内部运作中存在令人反感的问题,找到它并更改最终模型方程式以摆脱它并不是很困难。其他模型可能不像GA2M或决策树那样容易编辑,但是如果它们生成人类可读的计算机代码,则可以对其进行编辑。

模型断言

模型断言可以实时改善或覆盖模型预测。[14]模型断言是根据模型预测本身起作用的业务规则。例如,可以检查模型推荐向其推荐广告的酒精饮料客户的年龄,或者检查是否有大笔预付款,以表明高净值个人即将违约。

歧视补救

有很多方法可以解决ML模型中的歧视问题。许多非技术解决方案涉及在数据科学团队中促进专业知识和经验的多样化,并确保在模型构建的所有阶段都涉及多种知识。组织应尽可能要求所有重要的数据科学项目包括在道德,隐私,社会科学或其他相关学科方面具有专长的人员。

从技术角度来看,歧视补救方法可分为三大类:数据预处理,模型训练和选择以及预测后处理。对于预处理,仔细的特征选择以及对行进行采样和重新称重以最大程度地减少训练数据中的歧视可能会有所帮助。

对于模型训练和选择,我们建议在选择超参数和决策截止阈值时考虑公平性指标。这也可能涉及通过学习AIF360中的公平表示(LFR)和对抗性偏差来直接训练公平模型,或者使用同时考虑准确性和公平性指标的双重目标函数。最后,对于预测后处理,训练后更改模型预测,例如AIF360或Themis ML中的拒绝选项分类,也可以帮助减少不必要的偏差。

模型监控

模型调试不是一项一劳永逸的任务。ML模型的准确性,公平性或安全性不是一成不变的。根据模型的操作环境,它们可能会随时间发生重大变化。我们建议在部署ML模型后,定期定期监视ML模型的准确性,公平性和安全性问题。

异常检测

奇怪的,异常的输入和预测值在ML中总是令人担忧,并且可以指示对ML模型的对抗性攻击。幸运的是,可以使用多种工具和技术实时捕获并纠正异常输入和预测:输入数据流上的数据完整性约束,输入和预测上的统计过程控制方法,通过自动编码器和隔离林进行异常检测,以及通过将ML预测与基准模型预测进行比较。

结论和进一步阅读

每个人都想要值得信赖的ML模型。这意味着随着ML被更广泛地采用,模型调试的重要性只会随着时间的推移而增加。从Kagglers到一线数据科学家到法律和风险管理人员,以及ML消费者和决策者,这都是正确的。那些对更多细节感兴趣的人可以更深入地研究GitHub上用于创建本文示例的代码。或者,您可以通过查看2019年国际学习表示会议(ICLR)调试机器学习模型研讨会的会议记录,来了解ML研究社区中有关模型调试的更多信息。希望其中一些技巧对您和您的团队有用。如果是这样,请调试愉快!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# 一、项目介绍 **项目名称:天气预测和天气可视化** 天气预测和天气可视化是一个基于python机器学习(ml)的长春地区的天气预报项目,它实现了天气数据的爬取,预测和可视化。 项目结构如下: ![img](image/wps26.jpg) * 天气数据的来源 GetData文件使用python爬虫技术,爬取长春和全国的天气信息数据 爬取网站:http://tianqi.2345.com/wea_history/54161.htm ProcessDate文件对爬取的天气数据进行了预处理 几个CSV文件保存的是爬取后并经过处理的数据 * 天气数据的预测 GetModel文件通过训练预测模型来预测长春近一周的天气,该文件利用Joblib将模型保存到本地 Main文件是项目主文件,通过运行该文件即可运行整个项目,该文件前部分获取保存到本地的预测模型来进行预测,并将预测结果打印到控制台 * 天气数据的可视化 Main文件后部分实现了天气数据的可视化 # 二、详细介绍 本项目分为三个部分,即爬取和处理数据,数据预测(包含评价方法)和数据可视化 ## 1. 爬取和处理数据 数据爬取代码: ````py resq = requests.get(url, headers=headers, params=params) data = resq.json()["data"] # data frame df = pd.read_html(data)[0] ```` 即使用python爬取网站的json数据 ### **数据预处理:** 获取到的天气信息包括最高温,最低温都不是int格式的数字,通过对数据截取,将部分指标的数据变换为int类型 并对缺失值进行了处理 ````py my_imputer = SimpleImputer() imputed_X_train = pd.DataFrame(my_imputer.fit_transform(X_train)) imputed_X_valid = pd.DataFrame(my_imputer.transform(X_valid)) ```` 通过SimpleImputer ,可以将现实数据中缺失的值通过同一列的均值、中值、或者众数补充起来,本项目使用了SimpleImputer的fit_transform对缺失值进行填充 ## 2. 数据预测和模型评价方法 预测数据采用了机器学习算法——线性回归 模型使用过程: ### A. 提取数据 ````py 获取测试集、训练集、验证集 [X_train, X_valid, y_train, y_valid, X_test] = ProcessData.ProcessData() ```` 其中ProcessData()函数里使用了如下语句: ````py X_train, X_valid, y_train, y_valid = train_test_split(X, y, train_size=0.8, test_size=0.2, random_state=0) ```` train_test_split()是sklearn包的model_selection模块中提供的随机划分训练集和验证集的函数;使用train_test_split函数将完整的数据集和验证集以同等的比例分成2组不同的数据集和验证集 ### B. 训练模型 选择了随机树森林模型(randomforest),然后用fit来训练模型 ````py # 随机树森林模型 model = RandomForestRegressor(random_state=0, n_estimators=1001) # 训练模型 model.fit(X_train, y_train) ```` ### C. 根据数据预测 ````py # 最终预测结果 preds = model.predict(r[1]) -------- 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值