【NCTS峰会回顾】融360艾辉:AI模型测试探秘
2019年10月26日,由Testin主办的第二届NCTS中国云测试行业峰会在京召开,此次峰会以“AI+未来”为主题,汇聚来自国内外测试领域的知名专家学者、领先企业决策者、高层技术管理者、媒体从业者等,共同探讨高端云测试技术,帮助测试从业者了解最前沿行业趋势,及最新的行业实践。
会上,融360高级技术经理艾辉做《AI模型测试探秘》主题演讲。艾辉分享了AI在金融科技的应用场景并指出,AI在金融行业的商业场景变现领域做的相对成熟,这主要得益于数据的质量,以及数据的丰富度,它们对模型的效果起着极其重要的作用。
以下为艾辉演讲实录:
很高兴和大家分享我们在过去一段时间里基于AI模型评估的测试实践。简短的做一下自我介绍,先后从事云计算云存储、跨境电商、O2O外卖、金融风控业务的质量保障与工程效率。
首先给大家介绍当下AI的主要应用场景。AI在金融领域的落地主要包括:物流、广告推荐、个性化推荐、仓储、无人驾驶等等。目前看来,AI在金融行业的商业场景变现领域做的相对成熟,这主要得益于数据的质量,以及数据的丰富度,它们对模型的效果起着极其重要的作用。AI在金融科技领域的主要场景包括:智能营销、智能欺诈、智能风控、理赔、支付场景指纹识别、人脸识别等等。
进一步解释一下AI的基础概念和交叉关系。通常来说,我们是模拟智能应用,机器学习只是AI的一个分支,如果是机器学习加图像识别,就是视觉领域的应用;如果是机器学习加语音识别,就是自然语言处理。假如说机器学习和其它稀奇古怪的应用结合,就是数据挖掘。
机器学习,就是我们在计算机协助下,统计学假设检验与分布函数搜索所谓的神经元,拿一个向量去点乘上一个向量,再把结果放进一个事先定好的变换函数。深度学习是做好几层的神经元网络,再换几个学习算法。关于机器学习的分类,金融领域还是偏向于监督学习,我们做一些分类问题,也就是偏预测。分类和回归比较直观的区分,如果做一个定性的预测,比如今天是阴天、晴天还是多云,它就是一个分类的问题;如果是我们预测明天是10-15度,还是0-5度,这就是回归问题。在金融风控领域,大部分是基于逻辑回归的模型方法来做训练的,主要使用信用评分卡。神经网络、深度学习等在金融风控领域应用,目应没有太多。要做好风控并不一定需要用最复杂的模型来做训练和预测。
前面说了那么多,大家会问机器学习在金融风控的应用有什么差异?金融风控的体系里存在一些特殊的东西,比如,谈到金融风控中的信贷风控,一般会聊到贷前、贷中、贷后。我们用的最多的是评分卡模型,评分卡模型应该有200、300年历史了,在机器学习应用没有如今这么发达的时候就已经在用了,尤其是在美国。什么是评分卡?信用评分卡用的就是逻辑回归的分类,预测好人坏人的概率,在0和1之间,基于这个概率映射到一个分数,如:1-100分,即信用评分。我们放贷可不可以放,看风险概率,用历史的数据去为未来一段时间的违约进行预测。它的评分越高代表越是安全,评分卡的稳定性和预测能力很强,我们常用的是逻辑回归。
我们用信用评分只是风控量化的工具,代表着信用风险。
刚开始接触AI相关业务的时候,我们遇到了很多挑战。之前对于整个数据、特征、模型,没有太深入的专项测试,如数据及特征效果有质量问题,会导致模型发生衰减和偏移,最直接的结果是,本应该把一个坏人给拦住,但是没有拦住,给他放贷了,就可能导致坏账,产生不良资产。
具体来看一下在数据质量方面我们做了哪些工作。主要考虑数据的完整性、一致性、及时性、准确性等等。想重点强调的是,在数据质量分析的维度上做了哪些事情,数据质量分析考虑的维度更丰富一点,比如数据的干扰分析,分析单列数据对应的准确性,分析单表数据,跨表数据,跨列数据。我们对数据整个特征分布,还有离散情况做了评估,上面的离群点,能够基于这个离群点发现数据异常的问题。
数据的完整性,从关系型数据库到数仓,数据有没有比较大的丢失。一致性,看对应的口径是不是一致的。准确性、及时性,很有可能前天晚上跑批失败了,如果没有监控可能导致对第二天的数据造成很大的影响,比较多的是离线任务,包括在线任务及时情况的监测。
既然数据有了这些问题,一定要做数据的修正。比如说数据确实缺失太多,没有做填充处理,到特征来没法用的,模型更没有办法用,还有重复的记录要删除。对于定性的数据和定量的数据,处理是不一样的,我们会基于特征进一步解释。
数据分析方法,看整个数据各表之间有什么关联性,做血缘基数分析。看数据是不是存在大的问题,做数据波动分析。评估某一个字段是否有问题,做值域分析、分布分析,也可以发现一些问题。评估数据是否一致,做一致性的对比diff来发现这些问题。
在项目中通过数据分析的血缘基数分析,直观发现的情况:A表的登陆账户比B表少了7000万,A、B存在600万的数据不一致。这种问题如果不做数量质量分析,基于模型问题倒推分析,影响很大。
再看一下值域的分析,分析最大值,最小值,比如说有一个字段,年龄是150岁,这可能超乎寻常了。包括看数据的分布,时间内最大值,最小值,还有异常的占比。中文异常的占比,特别是中文入库的字符格式。还有分布的分析,金额的占比,区间的域值,还有各种码值。
我们再简单看一下数据测试要点,我们在日常测试中做数据质量测试,就是按照这些来做的,金融的数据质量的要求很苛刻,可以说相对于互联网广告的数据更苛刻一点。比如说小明同学搜索的时候,给他推荐了一个女装,可能不太重要。但是因为数据质量问题导致信贷风险,可能会导致直接的金融损失,所以金融数据的质量要求是很高的。
再简单说一下数据质量平台设计,我这里放了一个架构图,整个数据质量平台关键核心的一点,对数据质量的规则引擎是怎么做的,数据质量把对应各种数据的对比,通过配制一些规则,定制开发,对应的报表或者触发告警,是基于自定义去写。还是基于其他的开源工具,有很多规则引擎的方案,比如Drools,原理大多相似。
关于特征模型的测试,我先是讲数据,再讲特征,再讲模型,为什么?我们在做模型训练的时候就是这样的流程和套路。我们聊到模型,做模型训练的时候有80%的任务在做特征工程,20%在做模型的训练。我们做一些名词的科普,过拟合和欠拟合,过拟合就是模型过于复杂学习到额外的数据属性,欠拟合就是没有捕捉数据特征。
到底什么是建模?建模与驯兽的相似点,我们做驯兽,比如给猴子输出口令,让它调整动作,直到这个过程预期和实际是一致的,从这个类比来看,我们建模和驯兽就是这样一个循环训练的过程。
我们反复聊到数据特征,到底数据和特征有什么区别?左侧是一个数据,右边是特征,把对应做了一些转换,180天内成功打车的笔数,180天内成功打车最小值,我们将数据转化为机器能够学习的属性,发现规律性的信息。机器学习大部分是解决预测的问题,用X去预测Y,这个X代表的是特征,不是数据,因为直接给模型灌最原始的数据,不能很好的把数据的规律和信息get到。但是特征是有价值的属性,这些特征是能够做模型的训练和拟合的。行业里面有行话,数据特征决定了机器学习的上限,我们所有模型只是逼近这个上限而已。如果你的数据,特征质量很差,再好的模型,训练效果也会打折扣。
从特征挖掘到模型建立,这个过程是我们在日常测试开发中需要频繁去关注的,我来简单解释一下。前面的这一块数据采集,数据分析,数据清洗,大部分是数仓来做,有的是特征挖掘也会做,前面是做数据的分析和入库。当数据清洗做完之后开始做特征挖掘,图中所有的特征,特征挖掘的过程,在数仓中挑出跟业务强相关比较好的数据,建立特征工程。发现了很多问题,比如缺失值特别多,要做一些填充,比如定量数据,可以基于平均数,中位数去填充。如果是一些定内的数据,直接转为NaN之类的。做完确认值之后,还要做定量特征值二化。还会做一些定型特征的哑编码,比如我们做疾病的预测,得某某疾病的概率高、中、低,就可以放到模型里,因为很多特征的标准是不一的,包括特征的选择和降维,我们要由高维降到低维,更好的吸收数据。
具体在信用卡评分模型中用到的关键指标,我们主要参考的是几点,一个是KS,风险区分能力,就是判断好用户和坏用户的差值,差值越大,就说明模型的效果越好,因为区分度高,可以区分张三是好人,李四是坏人。然后是卡方,样本偏离程度。PSI,这是模型稳定性很关键的指标,模型的预测值与实际值偏差大小的指标.PSI越小有说明模型是越稳定的,一般认为PSI小于0.1时候模型稳定性很高,0.1-0.25一般,大于0.25模型稳定性差,建议重做。IV(信息价值),这是我们模型在挑特征的时候很关注的一点,特征对于模型预测能力的贡献度,我们要挑对模型预测能力贡献度度强的特征,比如有100个特征,有年龄、学历、收入,籍贯等,其中年龄、学历、收入的特征对于信用贷风控模型贡献度强,籍贯特征是一般的。
具体特征测试要点分为几部分,一般特征有特征计算逻辑,还有特征调度,特征上线。对于特征计算,除了计算的时长,还会关心整个特征的分区,编码,以及异常处理。我重点想强调的是特征的回溯,回溯对于信用评分模型效果很关键。信贷风控,是用用户过去的时间窗,比如前一个月的数据去预测他未来的借贷风险,如果说用他最近的信贷数据去预测明天,或者说用今天预测今天,特征效果可能会比较高,但是它是虚高的,所以都有时间窗的概念,基于历史来预测未来。还有Shuffle乱序,有的模型对特征的排序性是有相关性的,如果有问题,模型效果也会有波动。还有特征调度异常的处理,还有特征上线,各种的一致,在线离线覆盖率,特征值等等,这个一致性是很关键的。我们基于特征也做各种专项的分析,大部分都在做一些特征指标类,特征分布,特征大小等等。
模型该怎么测?我们对模型测试有这么几个点可以关注,一个是蜕变,我们直接去构造输入看输出,可能很难发现问题,模型测试的是Oracle问题(未知问题),没有明确的标准,如果变换输入看输出的变化环境是否相对应,是能够发现模型的问题,比如把一些标签乱序,属性乱序,增加无信息的属性,看看对模型输出的问题。还有要看特征工程处理的情况。整个模型工程测试大部分都是偏白盒的,不像服务端可以暴露接口。还有小样本实验,这很有效,看看整个信用评分的分布情况,是否符合正态分布。
关于模型效果的评估设计,我们要控制算法版本为评测流程唯一变量。
模型的监控、模型的上线,监控的重要性和工程类的服务一样重要,模型会随着时间衰退,我们需要做各种监控,有关键指标,还有对覆盖率,准确率的监控。提取还款的样本,样本打标签,请求线上模型,计算KS。做金融风控的模型测试,比做互联网2 C的广告推荐模型等要相对困难,对于大部分互金平台来说信贷还款表现样本较难获取。
模型测试的痛点都有哪些?第一是难,门槛很高,我们传统工程测试的方法不能完全的复用,而且是很抽象的,模型是黑盒的,想定位一个问题,模型的效果不好,排查链路很长,发现原来是某某数据丢失了。它是强数据相关的,数据的特征质量决定了模型效果的上限,我们经常在聊做模型的评估,这里有一个很重要的一个环节,我们需要先把数据和特征质量给覆盖住,这是一个很重要的源头,80%的工作在特征工程。然后是慢,有的传统公司,像金融企业的,一个模型迭代可能半个月,一个月,甚至是两个月,因为要反复实验,还有环境的变化,客群的变化。它是一个不确定的问题,因为没法基于一个分数或者什么指标完全评估这个模型好还是坏,上线才刚刚开始。所以,综合的用各个数据指标来进行评估。
AI产品质量体系应该怎么做?分为线上和线下:线下三个模块,模型质量、数据质量、工程质量。线上做各种模型效果的监控,特征的监控,一致性监控的,覆盖率的还有业务表现的监控等。我们希望把线上线下模型的测试做得更专业和高效,还是需要做自动化,工具平台化,比如说把模型的评估做到可视化,充分参考已有开源的平台做的模型评估模块的功能,把数据分析,质量分析,基于统计的维度做可视化的展示和度量,让整个模型部署过程自动发布。。