近年来,越来越多的安全厂家把机器学习或人工智能纳入到产品里,但
是实际真正购买或者试用后,往往效果并没有厂商宣称的那么好用,常
常出现大量误报,漏报的情况。如何去评估或者测试这些产品或者机器
学习模型是否能够满足上线的需求以及对现有的防控体系有多少提升,
往往是进行采购或者上线时需要对业务部门说明的基础信息。
本文讨论的是如何去评估以及量化一个机器学习模型的过程,为了方便
描述,本文虚构了一个采购智能识别恶意流量的软件的故事,注意的是
采购这类软件需要考虑的因数非常的多,但是本文只关注有效性以及对
其做出评估。
小明在一家证卷公司负责安全工作,公司使用的框架是struct2。
由于struct2的RCE漏洞大量被暴,导致了小明的部门常常需要加班进
行应急,在开发部门还是无法快速进行迁移到新框架前,部门的领导只
好提高了WAF拦截的力度,同时安排小明看看有没有比较好用的可以直
接鉴别异常流量的软件来进行辅助拦截应急。
机器学习基本围绕两大核心问题进行,回归和分类。而在安全领域,
大部分是属于分类问题:
当然也有回归,比如是不是符合用户使用的时间曲线之类判定。
不同的模型有不一样的估计方法。但是使用什么方法去评估之前,
我们得确定我们的问题是属于分类问题还是回归问题,如果是分类
问题是多分类问题还是二分类的问题。
小明需要采购的是可以识别正常流量和异常流量的软件。所以很明
显是属于分类问题。如果只是识别正常和异常两种类型流量,那么是
一个二分类的问题
注1:为了方便,后续的异常流量和正常流量分为成为正样本和负样本
注2:为啥称异常流量为正样本,因为触发了模型的规则,是我们需要
拦截的,是需要敏感关注的,而正常流量是我们不关心的,所以是负
样本
小明在和第三方厂商进行沟通时得到了测试软件,可以进行搭建线下的
测试环境,但是在准备数据的时候,却犯了愁,正常的流量的数据找,
随便上线上服务器抓包就有,但是异常数据却不知道如何获取。突然想
起前一阵刚做完众测,应该有不少白帽子留下的异常流量。于是两者结
合,构造测试数据。
由于打算正式部署在证卷交易的主站,涉及的接口主要是涉及用户数据
以及交易接口等,所以在构造前,小明特意随机抽取主站的几个重要数
据进行勘查,人工识别出来的异常流量大概占总流量的0.5%左右,基于
此构造数据集:
最后构建出共三组数据集
我们在确定问题类型后,在对模型或者软件测试时,我们还需要确定模
型或者软件的部署的范围,基于此来构建测试数据集。
一般来说数据分布对模型来说,会有比较大的影响。测试的数据集一般
围绕这五种类型构建
通常这几种数据集基本可以看得出一个模型的真实的准确率是多少。
分类指标常用的评估的方法就是使用混淆矩阵去计算各个指标
而回归的指标通常是MAE或者RMSE各种计算损失的函数之类。
下面来看一下 混淆矩阵 :
其中
TN 是指 实际为负样本 预测结果为负
根据上面的四个数据,可以得出以下的指标:
准确率就是考究一个模型所做的判断的准确度有多高
精准率考究模型判断为正样本的准确率有多高
召回率则是考究模型对正样本的敏感程度有多高
小明在和大数据部门的小红探讨后,决定采用F1来评估模型的好坏
F1是同时评估精准率P和召回率R的数据指标 计算的公式是:
在宣传的时候,大多数产品会含糊其辞其词的告诉你一个99.9x%的准确
率,并不会告诉你怎么测出来的。
但是在大多数的情况下,这个指标并没有太大的特点,就好比如上述的
常规数据集,全部的负样本都可以预测出来,但是就是检测不出来正样
本,也就是无法检测异常流量,也有99.95%的准确率。但是这么高的
准确率并没有实际的用途。
所以在产品没有告知它自身的测试环境情况下,需要自己准备好测试集
的同时,还要自己选好合适的度量指标,这样才可以准确的判断产品或
者模型的实际检测率。
另外,虽然 F1 同时评估了评估精准率P和召回率R,但是有时候实际上我们
可能更加关注精准率P或者是召回率R某一个,可以采取加权的方式来提升
某个指标的重要性
除此之外,还有根据P**R**还可以绘制PR曲线图,可以根据这个PR曲线图
来判断模型的优劣
简单的理解PR图,阈值越低,判断为正样本的数据越多,查全率越高,精准率越低,最终查全率为100%的时候,精准率是最低的时候。
由于PR图评估会受到数据分布变化而影响,当你的正样本非常多或者
非常少的时候,PR曲线完全会不一样。但是ROC曲线图则有更好的鲁棒
性,ROC曲线由真正率和假正率来绘制
简单的理解ROC图,阈值越低,越多的数据会被预测为正样本,预测为
错误就越低,但是预测负样本为正样本也会高,导致真正的负样本率会
降低查全率最终肯定会穿过点(1,1),当AUC越大,模型在最优
阈值下有更高的TPR以及更低的FPR
以下是两组图,左边是ROC曲线,右边是PR曲线,第一层的表格在正负
样本分布1:1,第二层的表格正负样本1:10,可以看到PR曲线对正负样
本分布十分敏感,而ROC曲线则几乎不变。
小明按照上述小红提供的方式对试用的产品用自己做好的测试数据进行
了评测,结果所有的产品都表现出来非常糟糕的结果,不过小明在和厂
商讨论后,有厂商愿意根据测试数据进行针对性的调整模型以及学习的
策略,厂商根据小明提供的测试数据重新训练了一份新的模型,小明导
入新的模型后,效果虽然还是欠缺了点,但是比一开始的表现好太多了
于是小明重新部署数据到测试环境,然后尝试把整个季度的流量日志导
入进行分析和处理,但是发现效果还是并不好,误报的情况还是非常的
多,小明单独审查了这些数据,发现大多数的数据都是周六周日,或者
是假期的数据,于是小明又再次联系厂商,询问是否可以针对这个时间
也做一下处理,厂商重新调整模型后,效果终于达到了宣传中的99%以
上。
其实准备了测试数据,也有了评估方法后,需要多次反复的对模型或者
产品进行测试,甚至还可能需要和厂商以及业务部门进行沟通,有时候
还会重新让厂商小修小改一下模型或者产品,使得评估的效果得到最优
的同时,也更加贴合实际业务的场景。
就评估方法而言,单一的评估方法是不合理的,需要结合多个评估的方
法来确认模型的有效性,就比如一开始可以直接用ROC曲线去评估模型,
但是用多种数据分布的时候,会尝试用PR的曲线去评估模型的稳定性等。
小明根据前面的测试结果,按照文档格式写了很多说明后,绘制了以下
的表格
常规数据集 | P | R | F1 | ROC | PR |
---|---|---|---|---|---|
产品A | x | x | x | x | x |
产品B | x | x | x | x | x |
平均数据集 | P | R | F1 | ROC | PR |
---|---|---|---|---|---|
产品A | x | x | x | x | x |
产品B | x | x | x | x | x |
...
递交给了部门领导进行下一步的审核
在最后考量的时候,还是要回归到问题本质,仅仅是分析异常流量这个
一个点,也可以衍生很多思考的点
在综合各种因素衡量后,99.99%准确率或者精准率才有了确切的意义。
在面对业务部门或者进行采购的时候,才可以量化考核的指标来进行衡
量,以上是在工作上使用机器学习后的一些思考和经验的感悟,假托了
一个虚拟的故事来展现了一次评估的过程。