APP下载

一种基于Grubbs和孤立森林的多维序列异常检测方法

2022-05-26王锐

移动通信 2022年4期
关键词:阈值维度森林

王锐

(中国移动通信集团广东有限公司,广东 广州 510623)

0 引言

异常检测[1-3]也称为离群检测,用于发现数据流中的异常类型并确定其发生的详细信息。但是随着移动通信的发展,整个通信业务急剧膨胀,为了适配多种终端、不同接入方式,运行场景日趋复杂,各类监控指标繁多且数据量巨大,海量多维序列数据给运维人员带来更高的挑战。

面对大数据场景,传统的单指标检测结果可能会出现片面性问题,且效率较低。文献[4]综述了多维时间序列异常检测算法,并指出了要注意尽量降低算法的复杂度以及开展实时监测的研究;文献[5-7]针对智能运维、安全驾驶和交易消费等领域,分别提出了基于VRNN、自动编码器和模糊孤立森林等算法,研究了多维序列异常检测算法及应用,并取得良好的效果。上述研究方法中部分算法复杂度较高,面对多样化的海量数据,算法模型的泛化能力和计算开销有一定局限。因此,本文提出了一种多维时间序列的异常检测算法,采用优化的孤立森林(iForest,isolation Forest)算法,实现了较好的异常检测效果。该算法易于理解,计算开销小,并且泛化能力和实用性较好。

1 单指标异常检测的局限

传统的单指标异常检测就是KPI异常检测[8],也是运维领域中的一个重要环节。KPI指的是对系统、服务等运维对象的监控指标(如访问量、利用率等),其数据是按发生的时间先后顺序排列而成的数列,也就是时间序列。

为了发现异常数据,建立了一个单指标的时间序列异常检测系统[9],基本遵循以下步骤:

(1)数据采集:数据流的持续采集;

(2)正常行为建模:识别异常的第一步是建立一个模型,设计一个统计测试来确定数据点,如果模型没有解释它们,则可能就是异常点;

(3)异常行为检测:通过对比正常模型发现异常的数据,并描述异常的各种属性。

时间序列异常检测系统通过观察度量行为的各个方面,假设数据变化满足一种分布(如高斯分布或者正态分布)来计算动态阈值模型,对数据按照一定的规律波动来判断异常是否有效,判别速度快。通过应用异常检测算法将每个时间点标记为正常/异常或者预测某个点的信号,然后测试该点实际值是否与预测值相差足够大以将其视为异常。

但是,一旦数据在某一段时间变化幅度加大,数据不够平滑,对于多指标(多维序列)数据来说,复杂度更高、无效和干扰信息更加严重。针对多维度时间序列,如果需要将每个维度指标单独进行检测,会存在效率低下的问题;另一方面,大多数检测只选取独立的维度进行分析,很难发现相关联的异常指标数据,不利于整体分析问题。

2 多维序列异常检测

2.1 孤立森林的简介

孤立森林(iForest)[10-11]属于集成学习方法,广泛应用于异常检测领域。iForest对数据集的适应能力很强,同时在训练样本以及样本属性的选择方面都是随机的,在处理多维序列存在一定的优势。其算法流程大致如下:

(1)从训练数据中随机选择φ个点作为子样本,放入一棵孤立树的根节点;

(2)随机指定一个维度,在当前节点数据范围内随机产生一个切割点p,切割点产生于当前节点数据中指定维度的最大值与最小值之间;

(3)此切割点的选取生成了一个超平面,将当前节点数据空间切分为2个子空间:把当前所选维度下小于p的点放在当前节点的左分支,把大于等于p的点放在当前节点的右分支;

(4)在节点的左分支和右分支节点递归步骤,不断构造新的叶子节点,直到叶子节点上只有一个数据(无法再继续切割)或树已经生长到了所设定的高度,此时获得了一个iTree。

获得t个iTree之后,iForest训练就结束,然后可以用生成的iForest来评估测试数据。对于一个训练数据X,令其遍历每一棵iTree,然后计算X最终落在每个树第几层(X在树的高度),可以得出X在每棵树的高度平均值。获得每个测试数据的高度平均值后,可以设置一个阈值(边界值),高度平均值低于此阈值的测试数据即为异常。

2.2 改进的孤立森林异常检测

孤立森林检测算法具有较大的随机性,且对噪声维度鲁棒性不够强,可靠性较低。在建立树的同时,可能会有部分维度的信息没有被完全利用,这些因素都影响了树的构建,导致在实际异常检测中一些检测点会被误判,使检测结果的准确率低下。

鉴于上述这些问题,本文提出一种基于格拉布斯准则(Grubbs算法)的孤立森林算法改进,该算法逻辑简洁且实用性强,通过引入格拉布斯准则,增加每个指标检测的正常值阈值,同时利用孤立森林进行离群点检测。实验结果表明,该算法具有较好的检测效果,与孤立森林相比,检测结果更加稳定,可以过滤一些无关维度造成的影响。改进的算法流程说明如下:

第一步:

对同一系统中多个设备所对应的指标同时进行检测,实时采集各个指标数据,每个指标即对应一个维度,各指标数据组成多维序列。对指标的采样时间粒度可根据实际需要进行设定,如5分钟。

预先获取多维序列的历史数据,选取的历史时间范围可以为一年或数月,通常是相对完整的时间周期。

进一步地,由于任一系统中各设备的运行状态在不同的时间片段内存在规律性的变化,如对于一个IT系统其各设备的使用率在每天白天和晚上会存在较大的差别,或者在一周中工作日与节假日也会存在差别,因此在获取各指标的正常阈值区间时,需要根据各时间片段内的规律进行划分。时间片段的划分规则可根据实际系统的运行规则进行设置,如一周的时间按照一天进行划片,得到的时间片段为周一、周二、……;也可以将一天的时间按一个小时进行划分,得到的时间片段为00:00~00:59、01:00~01:59、……、23:00~23:59;还可以将一天的时间按照白天和晚上进行划分等。

多维序列历史数据通过时间划片,建立了各个时间片段对应的多维序列组。在每个维度序列组内,通过预设的阈值计算方法,获得指标(即维度)在对应的时间片段内的正常阈值区间,从而得到各指标在不同的时间片段内的规律。本文采用阈值计算方法是Grubbs离群数据检测方法。

Grubbs离群数据检测方法[12]以任一维度i的采样值组成数据集Xi={Xij},寻找其中最大的z-score,也就是计算每一个采样值Xij对平均值偏离与标准差Si的比值,其中z-score的计算如下:

其中,zij即为z-score;为数据的均值;Si为数据的标准差。

如果z-score大于给定显著性水平a下的离群检测的临界值gc,则认定该数为离群值,并把这个值进行剔除。其中,tc是一个选定的值,它服从具有n-2个自由度的t分布。

通过上述Grubbs离群数据检测算法对数据集进行清洗后,所述数据集合中将不存在z-score大于所述临界值gc的采集值,从而得到该维度i对应的正常阈值区间Oseti。

第二步:

获取历史数据作为训练集,历史时间可为近期范围,如最近一个月内。从所述训练集中进行采样,通过孤立森林算法,构建异常检测模型。

上述异常检测模型是通过历史数据训练得到的,建议定期重新训练更新。

第三步:

将所有同一采样时间采集到的各指标数据组成待测的多维序列,输入到第二步训练得到异常检测模型,输出得到异常时间点集合,再结合各维度对应的正常阈值区间进行排除比对处理,最后得到改进算法的最终异常点集合。

综合以上三步,整体基于Grubbs和孤立森林的多维序列异常检测算法说明如下:

(1)对多维序列的历史数据中,按时间划片规则进行分组,分别针对每个时间片段中多维序列数据集使用Grubbs算法求得Oset,得到各个维度数据在每个时间片段内的正常阈值区间;

(2)将近期多维序列历史数据通过孤立森林算法,获得异常检测模型ForestModel;

(3)对待测的当前多维序列采用异常检测模型ForestModel进行检测,得到异常序列集合Anomaly;

(4)结合待测的多维序列的采样时间对应的时间片的Oset,对异常序列集合Anomaly进行排除比对,同一时间片段内异常序列集合Anomaly中存在Xij不在所对应维度的正常阈值区间,则标注为最终异常序列,Xij为异常数据值,最后遍历得到最终的异常序列集合Anomaly*。

3 实验过程

3.1 数据介绍

实验中采用的数据为某IT系统运行环境采集的CPU使用率、内存使用率、数据库等待事件等多个指标的一个数据集,时间跨度为2020年9月至11月共计8 000余条的数据集,时间粒度为15分钟。筛选了部分有价值的检测指标后,对数据进行预处理,将要进行训练的数据如表1所示:

表1 多维序列数据示例

多维时间序列数据展示图如图1所示。可以看出,时间序列的数据中有一些突增突降的点,这些点可能是异常值,而各个指标之间发生突增突降的时间是相近的,证明各个指标之间的异常情况是有关联的。

图1 多维时间序列数据展示图

3.2 结果对比

对数据进行了孤立森林算法训练,并得出相应的模型,然后用2020年11月23日至25日系统采集15分钟粒度总计288条的数据进行拟合,初步得出了异常结果。如表2所示,选取25日下午3点至6点的时间段进行展示,其中字段异常情况为0的时刻表示正常、-1的时刻表示异常。

表2 孤立森林算法检测结果

在实际情况中,这两天的时间段共有19处故障异常点。孤立森林算法找出的异常点共有43条,在展示的时间段中,部分模型找出的时间点与实际情况相吻合,但是与实际的结果相对比,有许多不关联的时间点也被认为是异常点,产生了误判的情况。为了检验模型的实际情况,画出了模型的ROC曲线进行模型评估。孤立森林ROC曲线图如图2所示。

图2 孤立森林ROC曲线图

ROC曲线被用于医学、无线电、生物学等领域中,在机器学习领域也有很好的发展。ROC曲线越靠近上方,曲线下面积AUC越大,则检测的准确率越高,否则检测准确率越低[13]。从图2可以看到,传统的孤立森林模型的预测模型结果为72.7%,检测效果一般。

接下来使用改进后的孤立森林算法,首先利用Grubbs算法进行建模,得到异常检测模型以及各个指标的正常阈值区间(为了便于计算比较,这里统一对应为一个时间分片,即白天)。各个维度的正常值区间范围如表3所示:

表3 各个维度的正常值区间范围

利用Grubbs算法得出各个指标的区间范围,与孤立森林算法的模型所求得的异常时间点进行比对排除,重新求得异常时间点。改进的孤立森林算法检测结果如表4所示。

表4 改进的孤立森林算法检测结果

经过改进算法后,异常时间点在原来的基础上缩减到了32个,每个指标中超出正常值的点也被标注了出来。同样,画出ROC曲线进行模型评估。改进的孤立森林ROC曲线图如图3所示。

从图3可以看出,AUC值提升至86.4%,整体效果比原来好了很多。如表5的两个时间段,系统中出现异常的指标为“Oracle连接数”与“数据库等待事件数”,这两个指标可能是引起异常的主要原因。在实际情况中,该时间点确实如此,可见算法的检测结果是准确的。

表5 实际情况说明

图3 改进的孤立森林ROC曲线图

4 结束语

本文提出的改进算法使用了基于孤立森林算法与Grubbs算法对多维序列数据进行异常检测,实验结果表明,该算法能够有效检测出多维时间序列中存在的异常数据,且在处理海量数据过程中效率较高。目前该检测方法已经逐步代替了原来的固定阈值方法,应用于业务开通领域IT系统运维场景中各类指标的监控,经过对比分析,面对海量数据计算效率更高,预警更加准确,减少了无效告警,可以得到较好的检测效果。同时,该方法也能广泛应用于移动通信的各个业务领域。

猜你喜欢

阈值维度森林
浅论诗中“史”识的四个维度
小波阈值去噪在深小孔钻削声发射信号处理中的应用
基于自适应阈值和连通域的隧道裂缝提取
比值遥感蚀变信息提取及阈值确定(插图)
哈Q森林
哈Q森林
哈Q森林
室内表面平均氡析出率阈值探讨
光的维度
“五个维度”解有机化学推断题