victorylee
作者victorylee·2021-04-24 17:05
软件开发工程师·浪潮商用机器有限公司

异常检测:基于分类模型

字数 2278阅读 10865评论 0赞 1

这是关于IT系统的智能运维的系列文章,采用机器学习深度学习技术进行异常检测,包含多篇文章,敬请浏览:

首先让我们区分监督学习和无监督学习。
机器学习模型分为监督学习和无监督学习,如果输入模型的数据包含标签(也就是正确答案),那这类模型就是有监督学习,否则就是无监督学习。如下图所示,当输入苹果,并告诉模型“这是苹果”,模型来学习苹果长成什么样时,这种模型就是监督学习。当输入“苹果”和“香蕉”,让模型自己去学习什么是苹果,什么是香蕉时,这种模型叫做无监督学习。

图片源自 www.educba.com

在异常检测中,什么时候选择监督学习,什么时候使用无监督学习呢?

异常检测有着广泛的应用场景,可用于银行异常交易,制造业设备异常, IT 系统故障等,通常待检测的异常通常极少发生,种类多样,例如 IT 系统异常,有各种类型的故障,但就硬件故障来看,也包含服务器、存储、网络设备、防火墙等,这导致使用监督学习来做分类时,类中样本的数据严重不均衡。这类问题通常使用无监督学习来做,我们将在下一篇介绍。

但还有一部分异常经常发生,并非稀有事件,例如网络入侵 检测, DDOS 攻击这类方法,这类事件会导致很多异常检测算法失效。机器学习特别擅长对标注数据进行分类,算法很多,可满足各种各样的场景,使用本文的监督学习算法便于处理该类问题。即使对于稀有异常事件,也可以通过混淆矩阵或成本矩阵来迫使算法积极地发现异常稀有事件,本文主要介绍处理该问题。

监督学习分类算法来异常检测。

首先可以使用监督学习来将系统分为正常和异常,从而进行异常检测。在异常检测中,如果需要识别系统中的多个种类的故障如故障 A ,故障 B ,故障 C 等。那么整个过程分为数据采集、设计算法、训练和调优模型,上线运行等环节。在数据采集阶段,从系统中采集系统基本信息,例如操作系统类型,硬件资源的数量,资源利用率信息,系统运行信息,日志数据等。然后人工对这些数据进行标注,正常,故障 A ,故障 B ,故障 C 等。选择一个监督学习算法,训练模型。

使用混淆矩阵类评估模型的性能。

对于数据不均衡的模型,不能仅仅使用模型的准确率来查看模型性能的高低,假设有一个模型在异常检测中的性能如下表所示:

该模型部署到生产系统之后,模型收到的数据后,进行预测,模型的预测结果如下:

  • 系统异常发生了 70 次,其中 60 次被模型发现,另外 10 次模型错误地认为系统正常(漏报)。
  • 收到数据中 10020 个数据时,系统正常,其中 10000 次模型认为系统正常, 20 次模型错误地认为系统处于异常状态(误报)。

此时模型准确率为:( 70+10000 ) /(70+10+20+10000)=99.7% 。

这其实不能准确反应模型的性能,特别漏报和误报造成的结果往往是不一样,核心生产系统异常的漏报,导致系统故障未及时发现,从而导致系统系统恢复时间的延长。所以通常需要仔细根据如下的混淆矩阵来评估模型的性能:

其中表中

  • TP :系统异常,模型也预测该系统异常。
  • TN :系统正常无故障,模型预测该系统正常。
  • FP :系统正常无故障,模型预测该系统异常。统计学上第二类错误( Type II Error ),系统监控中这类错误为误报告警。
  • TN :系统异常,模型预测该系统正常。该类错误影响。统计学上的第一类错误( Type I Error )。这类错误将漏报告警。通常这类错误的影响更大 , 使用橘色来表示。

模型的准确率为准确率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 条评论

Ctrl+Enter 发表

作者其他文章

X社区推广