这是关于IT系统的智能运维的系列文章,采用机器学习深度学习技术进行异常检测,包含多篇文章,敬请浏览:
异常检测:基于集成学习 ( 待续 )
本文是第二篇.
首先让我们区分监督学习和无监督学习。
机器学习模型分为监督学习和无监督学习,如果输入模型的数据包含标签(也就是正确答案),那这类模型就是有监督学习,否则就是无监督学习。如下图所示,当输入苹果,并告诉模型“这是苹果”,模型来学习苹果长成什么样时,这种模型就是监督学习。当输入“苹果”和“香蕉”,让模型自己去学习什么是苹果,什么是香蕉时,这种模型叫做无监督学习。
图片源自 www.educba.com
异常检测有着广泛的应用场景,可用于银行异常交易,制造业设备异常, IT 系统故障等,通常待检测的异常通常极少发生,种类多样,例如 IT 系统异常,有各种类型的故障,但就硬件故障来看,也包含服务器、存储、网络设备、防火墙等,这导致使用监督学习来做分类时,类中样本的数据严重不均衡。这类问题通常使用无监督学习来做,我们将在下一篇介绍。
但还有一部分异常经常发生,并非稀有事件,例如网络入侵 检测, DDOS 攻击这类方法,这类事件会导致很多异常检测算法失效。机器学习特别擅长对标注数据进行分类,算法很多,可满足各种各样的场景,使用本文的监督学习算法便于处理该类问题。即使对于稀有异常事件,也可以通过混淆矩阵或成本矩阵来迫使算法积极地发现异常稀有事件,本文主要介绍处理该问题。
首先可以使用监督学习来将系统分为正常和异常,从而进行异常检测。在异常检测中,如果需要识别系统中的多个种类的故障如故障 A ,故障 B ,故障 C 等。那么整个过程分为数据采集、设计算法、训练和调优模型,上线运行等环节。在数据采集阶段,从系统中采集系统基本信息,例如操作系统类型,硬件资源的数量,资源利用率信息,系统运行信息,日志数据等。然后人工对这些数据进行标注,正常,故障 A ,故障 B ,故障 C 等。选择一个监督学习算法,训练模型。
对于数据不均衡的模型,不能仅仅使用模型的准确率来查看模型性能的高低,假设有一个模型在异常检测中的性能如下表所示:
该模型部署到生产系统之后,模型收到的数据后,进行预测,模型的预测结果如下:
此时模型准确率为:( 70+10000 ) /(70+10+20+10000)=99.7% 。
这其实不能准确反应模型的性能,特别漏报和误报造成的结果往往是不一样,核心生产系统异常的漏报,导致系统故障未及时发现,从而导致系统系统恢复时间的延长。所以通常需要仔细根据如下的混淆矩阵来评估模型的性能:
其中表中
模型的准确率为准确率accuracy = (TP + TN)/(TP+TN+FP+FN)
精确率(查准率)p recision = TP/(TP+FP)
召回率(查全率)R ecall = TP/(TP+FN)
F1 score = 2PR/(P+R)
使用召回率,查准率,或者 F1 score 来衡量模型的好坏。其中精确率衡量发现的所有异常中,有多少比例的异常是真正异常,召回率考察系统中有多少的异常被模型发现。针对上面例子,准确率,精确率,召回率分别为:
精确率 = 70/(70+20) = 77.8%, 表示预测的异常有 77.8% 是正确的。
召回率 = 70/(70+10) =87.5% ,表示系统的异常有 87.5% 被模型发现。
如下表所示, TP 和 FN 是模型预测正确的不惩罚,对于 FP (误报)惩罚 1 ,对于 FN( 漏报 ) 增大惩罚的倍数,对于核心系统设置一个大的值惩罚倍数,例如本例中的 10 ,这可以模型模型积极地发现更多异常,防止漏报,当然这样做会导致误报的升高。对于普通系统设置一个较小的惩罚倍数,例如 2 。
鉴于机器学习擅长于分类任务,一些场景确实需要使用监督学习来做,但使用这类方法有如下多个缺点:
在异常检测中,无监督方法可避免以上问题,这类方法人工在数据上标注系统是否异常,或者异常种类,这类方法不仅使用起来更加便利,且能够适用于更多场景 , 我们将在接下来文章介绍这类方法。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞1
添加新评论0 条评论