CN113204590B - 基于序列化自编码器的无监督kpi异常检测方法 - Google Patents
基于序列化自编码器的无监督kpi异常检测方法 Download PDFInfo
- Publication number
- CN113204590B CN113204590B CN202110597955.XA CN202110597955A CN113204590B CN 113204590 B CN113204590 B CN 113204590B CN 202110597955 A CN202110597955 A CN 202110597955A CN 113204590 B CN113204590 B CN 113204590B
- Authority
- CN
- China
- Prior art keywords
- module
- kpi
- value
- vector
- online
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2474—Sequence data queries, e.g. querying versioned data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/214—Generating training patterns; Bootstrap methods, e.g. bagging or boosting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/044—Recurrent networks, e.g. Hopfield networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/088—Non-supervised learning, e.g. competitive learning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Bioinformatics & Computational Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Fuzzy Systems (AREA)
- Probability & Statistics with Applications (AREA)
- Databases & Information Systems (AREA)
- Debugging And Monitoring (AREA)
- Testing And Monitoring For Control Systems (AREA)
Abstract
本发明公开了一种基于序列化自编码器的无监督KPI异常检测方法,目的是提高KPI异常检测的准确性和鲁棒性。技术方案是构建基于序列化自编码器的无监督KPI异常检测系统;输入模块提取KPI值向量;数据预处理模块对KPI值向量进行预处理;离线训练模块对标准化后的KPI值向量进行切分,构建异常检测模型并对模型进行训练;自动阈值选择模块计算阈值;有效检测窗口设置模块获取有效窗口值;输入模块、数据预处理模块、自动阈值选择模块、有效检测窗口设置模块、在线检测模块相互配合,对在线KPI序列进行检测,得到检测结果;显示模块显示检测结果。采用本发明可解决漏报率高、误报率高等问题,有效提高KPI异常检测的准确率。
Description
技术领域
本发明属于信息技术系统智能运维技术领域,具体涉及一种基于序列化自编码器(自编码器是一种特殊结构的深度神经网络,包括编码器和解码器两个对称的结构)的无监督KPI(Key Performance Indicator,关键性能指标)异常检测方法。
背景技术
近年来随着云计算业务的广泛部署、数据中心规模的不断扩大、网络和通信系统的不断发展,互联网企业、运营商、金融机构等内部的IT架构在数量和规模上不断扩展,IT系统的服务器、存储设备、网络设备等数量越来越多,系统结构也愈加复杂多样,而保障IT系统的稳定性、可用性和高效性的运维工作必不可少,且运维人员任务愈加繁重,时常处于“救火”状态。当前IT系统的运维人员面临极大的工作压力,传统的依靠人力的运维模式已难以适应大规模IT系统发展的需求。同时,相比于传统运维的方式,大数据时代的运维面临着集群规模更大、业务组件更多、监控可视化与智能化更为复杂等诸多难题。综上所述,从机器规模到数据规模的扩大,传统的运维方式和方法已经不能满足现今互联网产品快速迭代的需求,为了保障良好的用户体验和业务效果,亟需更高效、更智能化的系统运维技术。
人工智能是撬动IT系统智能化的支点。随着大数据时代的到来,在海量数据场景下,利用大数据和人工智能等技术赋能现代化IT运维管理是当前运维领域的研究热点。2016年Gartner正式提出了智能运维(Artificial Intelligence for IT Operations,AIOps)的概念,即利用人工智能技术赋能IT运维,旨在利用AI算法分析海量运维数据,自动、准确地发现和定位问题,提高运维效率。当大数据、人工智能等技术赋能传统行业、驱动变革时,运维结合AI技术则把IT行业中原来完全依靠人工经验、重复枯燥的工作,推向了自动化、智能化的运维,引领运维的下一步发展方向,极大减轻了运维和研发人员的负担。运维的技术体系伴随着IT系统的快速发展而愈加完善,从最开始的纯人工运维到脚本和开源工具的使用,再到平台建设,运维也紧跟时代的步伐,逐渐向智能化方向发展。在海量数据场景下,AIOps开始成为下一代运维技术发展的热点。
自动化、智能化的KPI(Key Performance Indicator,关键性能指标)异常检测工作是智能运维的首要和关键环节。KPI可以直观地反应系统的实时状态,因此,为保证系统的可用性、可靠性和稳定性,及时发现故障、解决故障,为用户提供更好的服务体验,运维系统收集和监测各类KPI。KPI可分为两种:一种是业务级KPI(Business-related KPI),比如页面访问量、APP连接错误数量等,此类KPI可以反应系统规模、质量等;另一种是机器级KPI(Machine-level KPI),包括CPU/内存使用率、网卡吞吐率等,此类KPI可以反应系统硬件(服务器、路由器等)的健康状态。
IT系统中的KPI异常检测工作是当前智能运维领域的研究热点,已有方法取得了一定的效果,但依然还有很多工作值得深入。现有KPI异常检测工作面临以下挑战:
1.大规模IT系统需要对海量KPI进行监控,运维人员亟需更加自动化、智能化的异常检测方法以迅速、准确地发现问题,进而进行故障的移除和定位;
2.实际环境中产生的KPI比较复杂,除故障导致的异常点外,还有缺失点、噪声点等,增加了对KPI建模的难度;
3.在KPI中,异常值的分布仅占整体数据的很小部分,这造成了KPI的正负样本不均衡。此外,对于海量KPI,人工标注成本过高。
无监督方法可以很好地处理KPI缺乏标签且正负样本不均衡的问题。目前,针对KPI的无监督异常检测方法在工业界主要使用Liu等人提出的iForest(Liu FT,Ting K M,Zhou Z H.Isolation forest[C]//2008Eighth IEEE International Conference onData Mining.IEEE,2008:413-422.译为:孤立森林算法)。该算法利用集成学习的方法构造“树”,通过计算各节点到根节点的距离进行异常点的判断,距离根节点越近,异常值越大,即是异常点的可能性也最大。iForest可以实现线性时间复杂度,但需要人工预先设置异常点比例。
现有的无监督KPI异常检测的研究点主要集中在深度生成模型的研究与应用上,其中的典型代表包括Xu等人提出的基于变分自编码器(Variational Autoencoder,VAE)的Donut算法(Xu H,Chen W,Zhao N,et al.Unsupervised Anomaly Detection viaVariational Auto-encoder for Seasonal KPIs in Web Applications[C]//Proceedings of the 2018World Wide Web Conference.2018:187-196.译为:基于变分自编码器适用于web应用的无监督异常检测)及其改进版Bagel算法(Li Z,Chen W,PeiD.Robust and Unsupervised KPI Anomaly Detection Based on ConditionalVariational Autoencoder[C]//2018IEEE 37th International Performance Computingand Communications Conference(IPCCC).IEEE,2018:1-9.译为:基于条件变分自编码器的鲁棒性无监督异常检测算法)。Bagel算法在Donut算法的基础上利用条件变分自编码器(Conditional Variational Autoencoder,CVAE)将时间信息作为条件,对原始数据进行重构。二者取得了一定的成果,但以上两种方法仅在周期型KPI数据上表现良好。
综上所述,现有无监督KPI异常检测方法主要存在以下问题:
1.KPI本质上是时间序列数据,时间信息是其本质属性,但现有方法将KPI数据当作非序列数据(non-sequential data)进行处理,导致检测准确率不理想;
2.需要人工设置异常检测的阈值,这与人工异常检测方法在本质上存在同样的问题:阈值设置过高则漏报率高,阈值设置过低则误报率高。
发明内容
本发明要解决的技术问题是提供一种基于序列化自编码器的无监督KPI异常检测方法。首先,该方法为KPI提供一种序列化的异常检测方法,通过对现有针对时间序列异常检测模型进行改进,将KPI作为序列数据进行训练和检测,可以实现较高的准确性和鲁棒性;其次,该方法在保证准确性的前提下,支持运维人员设置有效检测时间段,使运维人员可以更加灵活地按需设置有效检测时段,一定程度上减少系统告警数量,进而减缓告警风暴的发生;最后,该方法在数据预处理阶段利用线性插值(Linear Interpolation)方法对缺失点进行自动填充,在检测阶段之前利用极值理论(Extreme Value Theory,EVT)实现自动阈值选择功能,避免人工设置阈值带来的误报率/漏报率权衡的问题。
为解决上述技术问题,本发明的技术方案是:在利用自编码器重构数据的基础上,利用集成学习的方法,结合循环神经网络(Recurrent Neural Network,RNN)和残差网络(Residual Networks,ResNet)的思想,通过构造不同结构的序列化自编码器,对原始数据进行重构,在保留前序节点信息的同时保证自编码器结构的随机性,降低模型过拟合的风险,提高KPI异常检测的准确性和鲁棒性。在数据预处理阶段,由于缺失点是否恰当处理将直接影响模型的检测效果,本发明对原始KPI序列中的缺失点采用线性插值方法进行填充,线性插值填充可以避免缺失点直接补零或取中值等方法对数据整体分布的影响,且执行速度不影响系统整体性能。利用极值定理实现自动阈值的选择,可在检测阶段降低漏报率和误报率,提高检测结果的准确性。最后本发明允许在有效窗口内进行异常值的检测,进而在保证系统检测准确性的同时,有效降低告警数量。
本发明包括以下具体步骤:
第一步,构建基于序列化自编码器的无监督KPI异常检测系统(简称异常检测系统)。异常检测系统由历史KPI序列数据库、在线KPI序列数据库、输入模块、数据预处理模块、离线训练模块、自动阈值选择模块、有效检测窗口设置模块、在线检测模块、输出模块和显示模块组成。
历史KPI序列数据库与输入模块相连,该数据库存储历史KPI序列,用于训练模型。历史KPI序列的每一条由三元组(Time,Value,Label)表示,其中:Time=(t1,…,ti,…,tT)表示时间向量,按时间升序排列;Value=V=(v1,…,vi,…,vT)表示KPI值向量,vi表示第i个时刻历史KPI序列的值,若vi=NaN,即空值,则表示该点为缺失点,T为历史KPI序列长度;Label=(l1,…,li…,lT)表示标签向量。以一条KPI中的第i条记录为例,1≤i≤T,(ti,vi,li)表示在ti时刻的KPI值为vi,对应的标签为li,li取值为0或者1,0表示正常,1表示异常。标签的值由运维工程师进行标注得到,在无监督训练过程中并未使用,标签的值仅在衡量异常检测系统检测效果时使用。
在线KPI序列数据库与输入模块相连,该数据库用于存储在线KPI数据,由二元组(Time,Value)表示,其中Time向量和Value向量与历史KPI序列的含义相同。
输入模块与历史KPI序列数据库、在线KPI序列数据库和数据预处理模块相连,训练阶段输入模块从历史KPI序列数据库读取历史KPI序列,从中提取历史KPI值向量,将历史KPI值向量发送给数据预处理模块;检测阶段输入模块从在线KPI序列数据库读取在线KPI序列,从中提取在线KPI值向量,将在线KPI值向量发送给数据预处理模块。
数据预处理模块与输入模块、离线训练模块和在线检测模块相连,数据预处理模块从输入模块接收KPI值向量(包括历史KPI值向量和在线KPI值向量),首先采用线性插值方法对KPI值向量中的缺失点进行填充,然后对填充后的KPI值向量进行标准化处理,将标准化后的历史KPI值向量发送给离线训练模块,将标准化后的在线KPI值向量发送给在线检测模块。数据预处理模块包含缺失点线性插值填充模块和KPI值向量标准化模块。
缺失点线性插值填充模块从输入模块接收KPI值向量(包括历史KPI值向量和在线KPI值向量),处理KPI值向量中的缺失点,采用线性插值方法对KPI值向量中的缺失点进行填充,形成完整的KPI值向量,即填充后的KPI值向量,将填充后的KPI值向量发送给KPI值向量标准化模块。
KPI值向量标准化模块从缺失点线性插值填充模块接收填充后的KPI值向量,对填充后的KPI值向量进行标准化计算,获得标准化后的KPI值向量(包括标准化后的历史KPI值向量和标准化后的在线KPI值向量),并将标准化后的历史KPI值向量发送给离线训练模块,将标准化后的在线KPI值向量发送给在线检测模块。
离线训练模块(即基于序列化自编码器的KPI异常检测模型训练模块)与数据预处理模块、自动阈值选择模块和在线检测模块相连。离线训练模块从数据预处理模块接收标准化后的历史KPI值向量,将标准化后的历史KPI值向量作为输入对异常检测模型进行训练,得到异常分值和训练好的模型,将异常分值发送到自动阈值选择模块,同时将训练好的模型发送给在线检测模块。
自动阈值选择模块与离线训练模块和在线检测模块相连,采用极值理论进行计算并得到阈值,将阈值发送给在线检测模块。
有效检测窗口设置模块与在线检测模块相连,有效检测窗口设置模块接收运维人员设置的有效检测窗口值,将有效检测窗口值发送给在线检测模块。
在线检测模块与数据预处理模块、离线训练模块、自动阈值选择模块、有效检测窗口设置模块和输出模块相连。在线检测模块从数据预处理模块接收标准化后的在线KPI值向量,从离线训练模块接收训练好的模型,从自动阈值选择模块接收阈值,从有效检测窗口设置模块接收有效窗口值,根据这些输入对在线KPI序列进行异常检测并得到检测结果,将检测结果发送到输出模块。
输出模块与在线检测模块相连,从在线检测模块接收检测结果,将检测结果发送到显示模块。
显示模块与输出模块相连,动态显示检测结果,若有异常结果则发送告警信息,由运维人员进行处理。
第二步:输入模块访问历史KPI序列数据库,从读取到的历史KPI序列提取KPI值向量V,将V发送到数据预处理模块。
第三步:数据预处理模块采用缺失点线性插值填充和标准化处理方法对KPI值向量C进行预处理,方法是:
3.1缺失点线性插值填充模块采用线性插值方法对C中的缺失点按公式一进行填充,将填充后的KPI值向量V′发送给KPI值向量标准化模块。
V′=V.interpolate(method=′linear′) 公式一
interpolate()函数为pandas库(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.inter polate.html)提供的插值函数,参数method=′linear′表示使用线性方法进行插值计算。V′=(v′1,…,v′i,…,v′T),v′i是填充后的vi。
3.2KPI值向量标准化模块对V′进行标准化操作,得到标准化后的KPI值向量Vnorm。标准化公式如下:
其中:μ代表V′的均值,σ代表V′的方差,向量Vnorm代表标准化后的KPI值向量。
3.3KPI值向量标准化模块将Vnorm发送给离线训练模块。
第四步:离线训练模块对Vnorm进行切分;然后构建基于序列化自编码器的KPI异常检测模型并对模型进行训练。方法为:
4.1离线训练模块从KPI值向量标准化模块接收Vnorm;
4.2离线训练模块对Vnorm进行切分:令切分数为P,P为正整数,优选P=10,利用numpy库(https://numpy.org/)的array_split()函数(https://numpy.org/doc/stable/reference/generated/numpy.array_split.html)对Vnorm进行不均等划分,得到切分后的KPI值向量Vpart:
以为例,为第p个切分向量,1≤p≤P,表示中的第r个值,表示中的最后一个值,R为采用array_split()函数对Vnorm切分后的中的值的个数。array_split()函数的切分规则是:对于长度为T的Vnorm,前T%P(%是取模操作)个组的大小是剩下组的大小是其中表示对T/P下取整。
4.3离线训练模块采用基于随机跨步连接的RNN(Random Step Connection RNN,RSCR)方法构建由N个不同结构的序列化自编码器组成的无监督KPI异常检测模型;再对序列化自编码器组成的无监督KPI异常检测模型进行离线训练,其中N个序列化自编码器均接收Vpart作为输入,N为正整数,优选N=20。具体方法是:
4.3.1构建基于序列化自编码器的无监督KPI异常检测模型,方法是:
4.3.1.1构建N个序列化编码器,方法是:
4.3.1.1.1令变量j=0;
4.3.1.1.2如果j=0,构建第一个编码器并得到第一个编码器的输出第一元组,方法是:利用tf.nn.dynamic_rnn函数(https://www.tensorflow.org/api_docs/python/tf/compat/v1/nn/dynamic_rnn,tf.nn.dynamic_rnn函数是tensorflow封装的用来实现递归神经网络(RNN)的函数)构造一个隐藏层节点个数为h的LSTM(Long Short-Term Memory,长短时记忆网络),h=16,得到第一个编码器;第一个编码器以作为输入,输出第一元组(E1 p,Z1 p),并保存,其中表示第一神经元输出状态向量,为E1 p中第r个值,代表第一隐藏层状态,为Z1 p中第r个值;转4.3.1.1.6,如果j≠0,转4.3.1.1.3;
4.3.1.1.3如果j=1,构建第二个编码器并得到第二个编码器的输出第二元组,方法是利用tf.nn.dynamic_rnn函数构造一个隐藏节点个数为h个的Basic LSTM
(https://www.tensorflow.org/api_docs/python/tf/compat/v1/nn/rnn_cell/BasicLSTM Cell?hl=ko,遗忘偏置为1的LSTM,实现方法基于OED(Outlier EnsemblesDetection)方法:参见https://github.com/tungk/OED),h=16,得到第二个编码器;第二个编码器以作为输入:输出第二元组(E2 p,Z2 p),并保存,其中表示第二神经元输出状态向量,为E2 p中第r个值,代表第二隐藏层状态,为Z2 p中第r个值,转4.3.1.1.6;如果j≠1且j≠0转4.3.1.1.4;
4.3.1.1.4如果1<j<N,转4.3.1.1.5;如果j≥N,转4.3.1.1.7
4.3.1.1.5,构建第3到第N个编码器并得到第3到第N个编码器的输出,方法是:
4.3.1.1.5.1令变量q=3;
4.3.1.1.5.2如果q≤N,转4.3.1.1.5.3;否则转4.3.1.1.6;
4.3.1.1.5.3构建第q个编码器并以作为输入:利用tf.nn.dynamic_rnn函数构造一个基于RSCR的LSTM(简称RSCR-LSTM),隐藏节点个数h=16。得到第q个编码器;第q个编码器以作为输入:输出第q元组(Eq p,Zq p),并保存,其中表示第q神经元输出状态向量,为Eq p中第r个值,代表第q隐藏层状态,为Zq p中第r个值。此处实现也基于OED方法,但与OED方法不同的是隐藏层状态计算方法:由三个元素决定:当前时刻输入直接前序节点隐藏状态值L步前的节点隐藏状态值L表示跨步步长,取1到N之间的随机值,得到为:
其中M为随机数,M∈{0,1},0表示无连接,1表示有连接,tanh(·)为一种神经网络激活函数(https://www.tensorflow.org/api_docs/python/tf/math/tanh),sigmoid(·)为另一种神经网络激活函数(https://www.tensorflow.org/api_docs/python/tf/math/sigmoid)。
4.3.1.1.5.4令q=q+1,转4.3.1.1.5.2;
4.3.1.1.6令变量j=j+1,转4.3.1.1.2;
4.3.1.1.7输出N个元组{(E1 p,Z1 p),(E2 p,Z2 p),…,(Eq p,Zq p),…,(EN p,ZN p)}给共享层,(E1 p,Z1 p)为第一元组,其中表示第一神经元输出状态向量,为E1 p中第r个值,代表第一隐藏层状态,为Z1 p中第r个值;(E2 p,Z2 p)为第二元组,其中 表示第二神经元输出状态向量,为E2 p中第r个值,代表第二隐藏层状态,为Z2 p中第r个值;(Eq p,Zq p)为第q元组,表示第q神经元输出状态向量,为Eq p中第r个值, 代表第q隐藏层状态,为Zq p中第r个值;(EN p,ZN p)为第N元组,表示第N神经元输出状态向量,为EN p中第r个值,代表第N隐藏层状态,为ZN p中第r个值;
转4.3.1.2;
4.3.1.2构建共享层,方法是:
4.3.1.2.1共享层从N个编码器接收N个元组,即{(E1 p,Z1 p),(E2 p,Z2 p),…,(Eq p,Zq p),…,(EN p,ZN p)}。
4.3.1.2.2将权重矩阵W赋初值为0,矩阵大小为16×16;
其中concatenate(Zlast·Wlast)为numpy库的串联函数(https://numpy.org/doc/stable/reference/generated/numpy.concatenate.html), 表示将和相乘。
4.3.1.3.1令变量k=0;
4.3.1.3.2如果k=0,构造第一个解码器:利用tf.contrib.seq2seq.BasicDecoder函数(https://github.com/tensorflow/tensorflow/blob/r1.8/tensorflow/contrib/seq2seq/pyth on/ops/basic_decoder.py)构造一个隐藏节点个数为h′个的LSTM,此处h′=h×N,输出重构向量转4.3.1.3.6,如果k≠0,转4.3.1.3.3;
4.3.1.3.3如果k=1,构建第二个解码器,利用tf.contrib.seq2seq.BasicDecoder函数构建一个隐藏节点个数为h′的LSTM,此处h′=h×N,输出重构向量转4.3.1.3.6,如果k≠0且k≠1,转4.3.1.3.4;
4.3.1.3.4如果1<k<N,转4.3.1.3.5;如果k≥N,转4.3.1.3.7;
4.3.1.3.5构造第3到第N个解码器,方法是:
4.3.1.3.5.1令变量g=3;
4.3.1.3.5.2如果g≤N,转4.3.1.3.5.3;否则转4.3.1.3.6;
4.3.1.3.5.4令g=g+1,转4.3.1.3.5.2;
4.3.1.3.6令变量k=k+1,转4.3.1.3.2;
4.3.1.3.8定义损失函数和优化函数,方法为:
4.3.1.3.8.1定义损失函数loss:
其中:inputr表示输入向量的第r个值;outputr表示输出向量的第r个值;l1_regularizer(Zshare)表示对Zshare进行L1正则化的函数(https://github.com/tensorflow/tensorflow/blob/r1.8/tensorflow/contrib/layers/python/layers/regularizers.py)。
4.3.1.3.8.2采用Adam(https://www.tensorflow.org/swift/api_docs/Classes/Adam)作为模型训练的优化函数。
至此,基于序列化自编码器的KPI异常检测模型构建完毕,转4.3.2。
4.3.2对基于序列化自编码器的KPI异常检测模型进行离线训练,方法是:
4.3.2.1令变量p=1;
4.3.2.3创建tensorflow的会话(session,简称sess)(创建会话方法:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/client/session.py);
4.3.2.2.1令变量iter=0,令迭代次数ITER=50;
4.3.2.2.2利用sess.run()方法(参见https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/client/session.py)采用输入数据进行训练;
4.3.2.3计算异常分值,方法是:
4.3.2.3.1令变量b=0;
4.3.2.3.5如果p≤P,令变量p=p+1,转4.3.2.2;否则得到最终异常分值向量Score,至此,模型训练结束,得到训练后的基于序列化自编码器的无监督KPI异常检测模型(简称异常检测模型),转4.4;
4.4离线训练模块将Score发送给自动阈值选择模块,将异常检测模型发送给在线检测模块。
第五步:自动阈值选择模块根据Score计算阈值,方法是:
5.1自动阈值选择模块从离线训练模块接收Score;
5.2自动阈值选择模块采用EVT方法(EVT方法见文献Siffer A,Fouque P A,Termier A,et al.Anomaly detection in streams with extreme value theory[C]//Proceedings of the 23rd ACM SIGKDD International Conference on KnowledgeDiscovery and Data Mining.2017:极值理论流数据异常检测中的应用,第4页算法1)分析Score分布,得到阈值Threshold。
5.3自动阈值选择模块将阈值Threshold发送给在线检测模块;
第六步:有效检测窗口设置模块接收运维人员设置的模块检测有效窗口值w,w为正整数且1≤w≤10,优选取值1、5或10,将w发送给在线检测模块。
第七步:输入模块、数据预处理模块、自动阈值选择模块、有效检测窗口设置模块、在线检测模块相互配合,对在线KPI序列进行检测:
7.1输入模块读取在线KPI序列数据库,提取在线KPI值向量Vonline,用A表示Vonline长度,将Vonline发送到数据预处理模块。
7.3在线检测模块利用异常检测模型,利用第五步得到的阈值Threshold、第六步设置的有效窗口值w,对Vonline_norm进行检测,方法如下:
7.3.2在线检查模块分别计算N个序列化自编码器的重构误差,方法是:
7.3.2.1令x=1;
7.3.2.3令x=x+1,如果x≤N,转7.3.1.2,否则计算结束,输出N个自编码器的重构误差向量Errorrestore:
7.3.3根据Errorrestore计算异常检测模型的异常分值,方法是:
7.3.3.1令a=1;
7.3.3.2读取并保存N个重构误差,方法是:
7.3.3.2.1令u=1;
median()为numpy的中位数计算函数(https://numpy.org/doc/stable/reference/generated/numpy.median.html)。
7.3.3.3令a=a+1,如果a≤A,转7.3.2.2;否则输出异常检测模型的异常分值SCoreonline:
转7.3.4;
7.3.4将阈值Threshold与SCoreonline进行比较,方法是:
7.3.4.1令变量a=1;
7.3.4.2判断第a个KPI值是否异常,方法是:
7.3.4.3令a=a+1,如果a≤A,转7.3.3.2;否则比较完毕,输出检测结果向量Y,Y=(y1,…,ya,…,yA)。
7.3.5.1令d=1;
7.3.6将Yw发送给输出模块,转第八步。
第八步:输出模块从在线检测模块接收检测结果Yw,将检测结果发送到显示模块。
采用本发明可以达到以下技术效果:
1.本发明第一步设计了能够对不同分布特征的KPI序列进行准确检测的异常检测系统,第四步采用随机跨步连接方法构建了基于序列化自编码器的无监督KPI异常检测模型,将不同结构的序列化自编码器对历史KPI序列进行训练,能够有效提高KPI异常检测的准确率。
2.本发明第四步构建基于序列化自编码器的KPI异常检测模型,并对模型进行训练,通过计算重构误差进行异常值的判断,可解释性强,同时第五步提供了自动阈值选择功能,有效缓解了固定阈值方法带来的误报率或漏报率较高的问题。
3.本发明为运维人员提供了有效检测窗口值,运维人员通过有效检测窗口值对应的有效检测窗口可以根据需要灵活设置有效检测时间,从而降低系统告警数量,有效减缓告警风暴的产生。
附图说明
图1是本发明第一步构建的基于序列化自编码器的无监督KPI异常检测系统逻辑结构图。
图2是本发明总体流程图。
图3是本发明第四步离线训练模块对Vnorm进行切分并构建基于序列化自编码器的KPI异常检测模型并对模型进行训练的流程图。
图4是本发明第七步:输入模块、数据预处理模块、自动阈值选择模块、有效检测窗口设置模块、在线检测模块相互配合对在线KPI序列进行检测的流程图。
具体实施方式:
图2是本发明总体流程图。如图2所示,本发明包括以下步骤:
第一步,构建基于序列化自编码器的无监督KPI异常检测系统(简称异常检测系统)。异常检测系统如图1所示,由历史KPI序列数据库、在线KPI序列数据库、输入模块、数据预处理模块、离线训练模块、自动阈值选择模块、有效检测窗口设置模块、在线检测模块、输出模块和显示模块组成。
历史KPI序列数据库与输入模块相连,该数据库存储历史KPI序列,用于训练模型。历史KPI序列的每一条由三元组(Time,Value,Label)表示,其中:Time=(t1,…,ti,…,tT)表示时间向量,按时间升序排列;Value=V=(v1,…,vi,…,vT)表示KPI值向量,vi表示第i个时刻历史KPI序列的值,若vi=NaN,即空值,则表示该点为缺失点,T为历史KPI序列长度;Label=(l1,…,li…,lT)表示标签向量。以一条KPI中的第i条记录为例,1≤i≤T,(ti,vi,li)表示在ti时刻的KPI值为vi,对应的标签为li,li取值为0或者1,0表示正常,1表示异常。标签的值由运维工程师进行标注得到,在无监督训练过程中并未使用,标签的值仅在衡量异常检测系统检测效果时使用。
在线KPI序列数据库与输入模块相连,该数据库用于存储在线KPI数据,由二元组(Time,Value)表示,其中Time向量和Value向量与历史KPI序列的含义相同。
输入模块与历史KPI序列数据库、在线KPI序列数据库和数据预处理模块相连,训练阶段输入模块从历史KPI序列数据库读取历史KPI序列,从中提取历史KPI值向量,将历史KPI值向量发送给数据预处理模块;检测阶段输入模块从在线KPI序列数据库读取在线KPI序列,从中提取在线KPI值向量,将在线KPI值向量发送给数据预处理模块。
数据预处理模块与输入模块、离线训练模块和在线检测模块相连,数据预处理模块从输入模块接收KPI值向量(包括历史KPI值向量和在线KPI值向量),首先采用线性插值方法对KPI值向量中的缺失点进行填充,然后对填充后的KPI值向量进行标准化处理,将标准化后的历史KPI值向量发送给离线训练模块,将标准化后的在线KPI值向量发送给在线检测模块。数据预处理模块包含缺失点线性插值填充模块和KPI值向量标准化模块。
缺失点线性插值填充模块从输入模块接收KPI值向量(包括历史KPI值向量和在线KPI值向量),处理KPI值向量中的缺失点,采用线性插值方法对KPI值向量中的缺失点进行填充,形成完整的KPI值向量,即填充后的KPI值向量,将填充后的KPI值向量发送给KPI值向量标准化模块。
KPI值向量标准化模块从缺失点线性插值填充模块接收填充后的KPI值向量,对填充后的KPI值向量进行标准化计算,获得标准化后的KPI值向量(包括标准化后的历史KPI值向量和标准化后的在线KPI值向量),并将标准化后的历史KPI值向量发送给离线训练模块,将标准化后的在线KPI值向量发送给在线检测模块。
离线训练模块(即基于序列化自编码器的KPI异常检测模型训练模块)与数据预处理模块、自动阈值选择模块和在线检测模块相连。离线训练模块从数据预处理模块接收标准化后的历史KPI值向量,将标准化后的历史KPI值向量作为输入对异常检测模型进行训练,得到异常分值和训练好的模型,将异常分值发送到自动阈值选择模块,同时将训练好的模型发送给在线检测模块。
自动阈值选择模块与离线训练模块和在线检测模块相连,采用极值理论进行计算并得到阈值,将阈值发送给在线检测模块。
有效检测窗口设置模块与在线检测模块相连,有效检测窗口设置模块接收运维人员设置的有效检测窗口值,将有效检测窗口值发送给在线检测模块。
在线检测模块与数据预处理模块、离线训练模块、自动阈值选择模块、有效检测窗口设置模块和输出模块相连。在线检测模块从数据预处理模块接收标准化后的在线KPI值向量,从离线训练模块接收训练好的模型,从自动阈值选择模块接收阈值,从有效检测窗口设置模块接收有效窗口值,根据这些输入对在线KPI序列进行异常检测并得到检测结果,将检测结果发送到输出模块。
输出模块与在线检测模块相连,从在线检测模块接收检测结果,将检测结果发送到显示模块。
显示模块与输出模块相连,动态显示检测结果,若有异常结果则发送告警信息,由运维人员进行处理。
第二步:输入模块访问历史KPI序列数据库,从读取到的历史KPI序列提取KPI值向量V,将V发送到数据预处理模块。
第三步:数据预处理模块采用缺失点线性插值填充和标准化处理方法对KPI值向量V进行预处理,方法是:
3.1缺失点线性插值填充模块采用线性插值方法对V中的缺失点按公式一进行填充,将填充后的KPI值向量V′发送给KPI值向量标准化模块。
V′=V.interpolate(method=′linear′) 公式一
interpolate()函数为pandas库(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.inter polate.html)提供的插值函数,参数method=′linear′表示使用线性方法进行插值计算。V′=(v′1,…,v′i,…,v′T),v′i是填充后的vi。
3.2KPI值向量标准化模块对V′进行标准化操作,得到标准化后的KPI值向量Vnorm。标准化公式如下:
其中:μ代表V′的均值,σ代表V′的方差,向量Vnorm代表标准化后的KPI值向量。
3.3KPI值向量标准化模块将Vnorm发送给离线训练模块。
第四步:如图3所示,离线训练模块对Vnorm进行切分;然后构建基于序列化自编码器的KPI异常检测模型并对模型进行训练。方法为:
4.1离线训练模块从KPI值向量标准化模块接收Vnorm;
4.2离线训练模块对Vnorm进行切分:令切分数为P,P为正整数,优选P=10,利用numpy库的array_split()函数对Vnorm进行不均等划分,得到切分后的KPI值向量Vpart:
以为例,为第p个切分向量,1≤p≤P,表示中的第r个值,表示中的最后一个值,R为采用array_split()函数对Vnorm切分后的中的值的个数。array_split()函数的切分规则是:对于长度为T的Vnorm,前T%P(%是取模操作)个组的大小是+1,剩下组的大小是其中表示对T/P下取整。
4.3离线训练模块采用基于随机跨步连接的RNN方法构建由N个不同结构的序列化自编码器组成的无监督KPI异常检测模型;再对序列化自编码器组成的无监督KPI异常检测模型进行离线训练,其中N个序列化自编码器均接收Vpart作为输入,N为正整数,优选N=20。具体方法是:
4.3.1构建基于序列化自编码器的无监督KPI异常检测模型,方法是:
4.3.1.1构建N个序列化编码器,方法是:
4.3.1.1.1令变量j=0;
4.3.1.1.2如果j=0,构建第一个编码器并得到第一个编码器的输出第一元组,方法是:利用tf.nn.dynamic_rnn函数构造一个隐藏层节点个数为h的LSTM(Long Short-TermMemory,长短时记忆网络),h=16,得到第一个编码器;第一个编码器以作为输入,输出第一元组(E1 p,Z1 p),并保存,其中 表示第一神经元输出状态向量,为E1 p中第r个值,代表第一隐藏层状态,为Z1 p中第r个值;转4.3.1.1.6,如果j≠0,转4.3.1.1.3;
4.3.1.1.3如果j=1,构建第二个编码器并得到第二个编码器的输出第二元组,方法是利用tf.nn.dynamic_rnn函数构造一个隐藏节点个数为h个的Basic LSTM(https://www.tensorflow.org/api_docs/python/tf/compat/v1/nn/rnn_cell/BasicLSTM Cell?hl=ko,遗忘偏置为1的LSTM,实现方法基于OED方法:h=16,得到第二个编码器;第二个编码器以作为输入:输出第二元组(E2 p,Z2 p),并保存,其中表示第二神经元输出状态向量,为E2 p中第r个值,代表第二隐藏层状态,为Z2 p中第r个值,转4.3.1.1.6;如果j≠1且j≠0转4.3.1.1.4;
4.3.1.1.4如果1<j<N,转4.3.1.1.5;如果j≥N,转4.3.1.1.7;
4.3.1.1.5,构建第3到第N个编码器并得到第3到第N个编码器的输出,方法是:
4.3.1.1.5.1令变量q=3;
4.3.1.1.5.2如果q≤N,转4.3.1.1.5.3;否则转4.3.1.1.6;
4.3.1.1.5.3构建第q个编码器并以作为输入:利用tf.nn.dynamic_rnn函数构造一个基于RSCR的LSTM(简称RSCR-LSTM),隐藏节点个数h=16。得到第q个编码器;第q个编码器以作为输入:输出第q元组(Eq p,Zq p),并保存,其中表示第q神经元输出状态向量,为Eq p中第r个值,代表第q隐藏层状态,为Zq p中第r个值。此处实现也基于OED方法,但与OED方法不同的是隐藏层状态计算方法:由三个元素决定:当前时刻输入直接前序节点隐藏状态值L步前的节点隐藏状态值L表示跨步步长,取1到N之间的随机值,得到为:
其中M为随机数,M∈{0,1},0表示无连接,1表示有连接,tanh(·)为一种神经网络激活函数,sigmoid(·)为另一种神经网络激活函数。
4.3.1.1.5.4令q=q+1,转4.3.1.1.5.2;
4.3.1.1.6令变量j=j+1,转4.3.1.1.2;
4.3.1.1.7输出N个元组{(E1 p,Z1 p),(E2 p,Z2 p),…,(Eq p,Zq p),…,(EN p,ZN p)}给共享层,(E1 p,Z1 p)为第一元组,其中表示第一神经元输出状态向量,为E1 p中第r个值,代表第一隐藏层状态,为Z1 p中第r个值;(E2 p,Z2 p)为第二元组,其中 表示第二神经元输出状态向量,为E2 p中第r个值,代表第二隐藏层状态,为Z2 p中第r个值;(Eq p,Zq p)为第q元组,表示第q神经元输出状态向量,为Eq p中第r个值, 代表第q隐藏层状态,为Xq p中第r个值;(EN p,ZN p)为第N元组,表示第N神经元输出状态向量,为EN p中第r个值,代表第N隐藏层状态,为ZN p中第r个值;
转4.3.1.2;
4.3.1.2构建共享层,方法是:
4.3.1.2.1共享层从N个编码器接收N个元组,即{(E1 p,Z1 p),(E2 p,Z2 p),…,(Eq p,Zq p),…,(EN p,ZN p)}。
4.3.1.2.2将权重矩阵W赋初值为0,矩阵大小为16×16;
4.3.1.3.1令变量k=0;
4.3.1.3.2如果k=0,构造第一个解码器:利用tf.contrib.seq2seq.BasicDecoder函数构造一个隐藏节点个数为h′个的LSTM,此处h′=h×N,输出重构向量转4.3.1.3.6,如果k≠0,转4.3.1.3.3;
4.3.1.3.3如果k=1,构建第二个解码器,利用tf.contrib.seq2seq.BasicDecoder函数构建一个隐藏节点个数为h′的LSTM,此处h′=h×N,输出重构向量转4.3.1.3.6,如果k≠0且k≠1,转4.3.1.3.4;
4.3.1.3.4如果1<k<N,转4.3.1.3.5;如果k≥N,转4.3.1.3.7;
4.3.1.3.5构造第3到第N个解码器,方法是:
4.3.1.3.5.1令变量g=3;
4.3.1.3.5.2如果g≤N,转4.3.1.3.5.3;否则转4.3.1.3.6;
4.3.1.3.5.4令g=g+1,转4.3.1.3.5.2;
4.3.1.3.6令变量k=k+1,转4.3.1.3.2;
4.3.1.3.8.1定义损失函数loss:
其中:inputr表示输入向量的第r个值;outputr表示输出向量的第r个值;l1_regularizer(Zshare)表示对Zshare进行L1正则化的函数。
4.3.1.3.8.2采用Adam作为模型训练的优化函数。
至此,基于序列化自编码器的KPI异常检测模型构建完毕,转4.3.2。
4.3.2对基于序列化自编码器的KPI异常检测模型进行离线训练,方法是:
4.3.2.1令变量p=1;
4.3.2.3创建tensorflow的会话(session,简称sess);
4.3.2.2.1令变量iter=0,令迭代次数ITER=50;
4.3.2.3计算异常分值,方法是:
4.3.2.3.1令变量b=0;
4.3.2.3.5如果p≤P,令变量p=p+1,转4.3.2.2;否则得到最终异常分值向量Score,至此,模型训练结束,得到训练后的基于序列化自编码器的无监督KPI异常检测模型(简称异常检测模型),转4.4;
4.4离线训练模块将Score发送给自动阈值选择模块,将异常检测模型发送给在线检测模块。
第五步:自动阈值选择模块根据Score计算阈值,方法是:
5.1自动阈值选择模块从离线训练模块接收Score;
5.2自动阈值选择模块采用EVT方法分析Score分布,得到阈值Threshold。
5.3自动阈值选择模块将阈值Threshold发送给在线检测模块;
第六步:有效检测窗口设置模块接收运维人员设置的模块检测有效窗口值w,w为正整数且1≤w≤10,优选取值1、5或10,将w发送给在线检测模块。
第七步:如图4所示,输入模块、数据预处理模块、自动阈值选择模块、有效检测窗口设置模块、在线检测模块相互配合,对在线KPI序列进行检测:
7.1输入模块读取在线KPI序列数据库,提取在线KPI值向量Vonline,用A表示Vonline长度,将Vonline发送到数据预处理模块。
7.3在线检测模块利用异常检测模型,利用第五步得到的阈值Threshold、第六步设置的有效窗口值w,对Vonline_norm进行检测,方法如下:
7.3.2在线检查模块分别计算N个序列化自编码器的重构误差,方法是:
7.3.2.1令x=1;
7.3.2.3令x=x+1,如果x≤N,转7.3.1.2,否则计算结束,输出N个自编码器的重构误差向量Errorrestore:
7.3.3根据Errorrestore计算异常检测模型的异常分值,方法是:
7.3.3.1令a=1;
7.3.3.2读取并保存N个重构误差,方法是:
7.3.3.2.1令u=1;
median()为numpy的中位数计算函数。
7.3.3.3令a=a+1,如果a≤A,转7.3.2.2;否则输出异常检测模型的异常分值Scoreonline:
转7.3.4;
7.3.4将阈值Threshold与Scoreonline进行比较,方法是:
7.3.4.1令变量a=1;
7.3.4.2判断第a个KPI值是否异常,方法是:
7.3.4.3令a=a+1,如果a≤A,转7.3.3.2;否则比较完毕,输出检测结果向量Y,Y=(y1,…,ya,…,yA)。
7.3.5.1令d=1;
7.3.6将Yw发送给输出模块,转第八步。
第八步:输出模块从在线检测模块接收检测结果Yw,将检测结果发送到显示模块。
Claims (8)
1.一种基于序列化自编码器的无监督KPI异常检测方法,其特征在于包括以下步骤:
第一步,构建基于序列化自编码器的无监督KPI异常检测系统,简称异常检测系统;异常检测系统由历史KPI序列数据库、在线KPI序列数据库、输入模块、数据预处理模块、离线训练模块、自动阈值选择模块、有效检测窗口设置模块、在线检测模块、输出模块和显示模块组成;
历史KPI序列数据库与输入模块相连,该数据库存储历史KPI序列,用于训练模型;历史KPI序列的每一条由三元组(Time,Value,Label)表示,其中:Time=(t1,...,ti,...,tT)表示时间向量,按时间升序排列;Value=V=(v1,...,vi,...,vT)表示KPI值向量,vi表示第i个时刻历史KPI序列的值,若vi=NaN,即空值,则表示该点为缺失点,T为历史KPI序列长度;Label=(l1,...,li...,lT)表示标签向量;第i条记录(ti,vi,li)表示在ti时刻的KPI值为vi,对应的标签为li,li取值为0或者1,0表示正常,1表示异常;1≤i≤T;
在线KPI序列数据库与输入模块相连,该数据库用于存储在线KPI数据,由二元组(Time,Value)表示,其中Time向量和Value向量与历史KPI序列的含义相同;
输入模块与历史KPI序列数据库、在线KPI序列数据库和数据预处理模块相连,训练阶段输入模块从历史KPI序列数据库读取历史KPI序列,从中提取历史KPI值向量,将历史KPI值向量发送给数据预处理模块;检测阶段输入模块从在线KPI序列数据库读取在线KPI序列,从中提取在线KPI值向量,将在线KPI值向量发送给数据预处理模块;
数据预处理模块与输入模块、离线训练模块和在线检测模块相连,数据预处理模块从输入模块历史KPI值向量和在线KPI值向量,采用线性插值方法对KPI值向量中的缺失点进行填充,并对填充后的KPI值向量进行标准化处理,将标准化后的历史KPI值向量发送给离线训练模块,将标准化后的在线KPI值向量发送给在线检测模块;数据预处理模块包含缺失点线性插值填充模块和KPI值向量标准化模块;
缺失点线性插值填充模块从输入模块接收历史KPI值向量和在线KPI值向量,处理KPI值向量中的缺失点,采用线性插值方法对KPI值向量中的缺失点进行填充,形成完整的KPI值向量,即填充后的KPI值向量,将填充后的KPI值向量发送给KPI值向量标准化模块;
KPI值向量标准化模块从缺失点线性插值填充模块接收填充后的KPI值向量,对填充后的KPI值向量进行标准化计算,获得标准化后的历史KPI值向量和标准化后的在线KPI值向量,将标准化后的历史KPI值向量发送给离线训练模块,将标准化后的在线KPI值向量发送给在线检测模块;
离线训练模块即基于序列化自编码器的KPI异常检测模型训练模块与数据预处理模块、自动阈值选择模块和在线检测模块相连;离线训练模块从数据预处理模块接收标准化后的历史KPI值向量,将标准化后的历史KPI值向量作为输入对异常检测模型进行训练,得到异常分值和训练好的模型,将异常分值发送到自动阈值选择模块,同时将训练好的模型发送给在线检测模块;
自动阈值选择模块与离线训练模块和在线检测模块相连,采用极值理论进行计算并得到阈值,将阈值发送给在线检测模块;
有效检测窗口设置模块与在线检测模块相连,有效检测窗口设置模块接收运维人员设置的有效检测窗口值,将有效检测窗口值发送给在线检测模块;
在线检测模块与数据预处理模块、离线训练模块、自动阈值选择模块、有效检测窗口设置模块和输出模块相连;在线检测模块从数据预处理模块接收标准化后的在线KPI值向量,从离线训练模块接收训练好的模型,从自动阈值选择模块接收阈值,从有效检测窗口设置模块接收有效窗口值,根据这些输入对在线KPI序列进行异常检测并得到检测结果,将检测结果发送到输出模块;
输出模块与在线检测模块相连,从在线检测模块接收检测结果,将检测结果发送到显示模块;
显示模块与输出模块相连,动态显示检测结果,若有异常结果则发送告警信息,由运维人员进行处理;
第二步:输入模块访问历史KPI序列数据库,从读取到的历史KPI序列提取KPI值向量V,将V发送到数据预处理模块;
第三步:数据预处理模块采用缺失点线性插值填充和标准化处理方法对KPI值向量V进行预处理,方法是:
3.1缺失点线性插值填充模块采用线性插值方法对V中的缺失点进行填充,将填充后的KPI值向量V′发送给KPI值向量标准化模块;V′=(v′1,...,v′i,...,v′T),v′i是填充后的vi;
3.2 KPI值向量标准化模块对V′进行标准化操作,得到标准化后的KPI值向量Vnorm;
3.3 KPI值向量标准化模块将Vnorm发送给离线训练模块;
第四步:离线训练模块对Vnorm进行切分;然后构建基于序列化自编码器的KPI异常检测模型,并对模型进行训练;方法为:
4.1离线训练模块从KPI值向量标准化模块接收Vnorm;
4.2离线训练模块对Vnorm进行切分,得到切分后的KPI值向量Vpart:
4.3离线训练模块采用基于随机跨步连接的RNN方法构建由N个不同结构的序列化自编码器组成的无监督KPI异常检测模型;再对序列化自编码器组成的无监督KPI异常检测模型进行离线训练,其中N个序列化自编码器均接收Vpart作为输入,N为正整数;具体方法是:
4.3.1离线训练模块构建基于序列化自编码器的无监督KPI异常检测模型,得到基于序列化自编码器的KPI异常检测模型;
4.4离线训练模块将Score发送给自动阈值选择模块,将异常检测模型发送给在线检测模块;
第五步:自动阈值选择模块根据Score计算阈值,方法是:
5.1自动阈值选择模块从离线训练模块接收Score;
5.2自动阈值选择模块采用EVT方法分析Score分布,得到阈值Threshold;
5.3自动阈值选择模块将阈值Threshold发送给在线检测模块;
第六步:有效检测窗口设置模块接收运维人员设置的模块检测有效窗口值w,w为正整数且1≤w≤10,将w发送给在线检测模块;
第七步:输入模块、数据预处理模块、自动阈值选择模块、有效检测窗口设置模块、在线检测模块相互配合,对在线KPI序列进行检测:
7.1输入模块读取在线KPI序列数据库,提取在线KPI值向量Vonline,用A表示Vonline长度,将Vonline发送到数据预处理模块;
7.3在线检测模块利用异常检测模型,利用第五步得到的阈值Threshold、第六步设置的有效窗口值w,对Vonline_norm进行检测,方法如下:
7.3.2在线检查模块分别计算N个序列化自编码器的重构误差,方法是:
7.3.2.1令x=1;
7.3.2.3令x=x+1,如果x≤N,转7.3.1.2,否则计算结束,输出N个自编码器的重构误差向量Errorrestore:
7.3.3根据Errorrestore计算异常检测模型的异常分值,方法是:
7.3.3.1令a=1;
7.3.3.2读取并保存N个重构误差,方法是:
7.3.3.2.1令u=1;
median()为numpy的中位数计算函数;
7.3.3.3令a=a+1,如果a≤A,转7.3.2.2;否则输出异常检测模型的异常分值Scoreonline:
转7.3.4;
7.3.4将阈值Threshold与Scoreonline进行比较,方法是:
7.3.4.1令变量a=1;
7.3.4.2判断第a个KPI值是否异常,方法是:
7.3.4.3令a=a+1,如果a≤A,转7.3.3.2;否则比较完毕,输出检测结果向量Y,Y=(y1,…,ya,…,yA);
7.3.5.1令d=1;
7.3.6将Yw发送给输出模块,转第八步;
第八步:输出模块从在线检测模块接收检测结果Yw,将检测结果发送到显示模块;
2.如权利要求1所述的一种基于序列化自编码器的无监督KPI异常检测方法,其特征在于3.1步所述缺失点线性插值填充模块采用线性插值方法对V中的缺失点进行填充的方法是按公式一进行填充,得到填充后的KPI值向量V′:
V′=V.interpolate(method=′linear′) 公式一
interpolate()函数为pandas库提供的插值函数,参数method=′linear′表示使用线性方法进行插值计算;V′=(v′1,...,v′i,...,v′T)。
5.如权利要求1所述的一种基于序列化自编码器的无监督KPI异常检测方法,其特征在于4.2步所述切分数P=10;4.3步所述N为20;第六步所述w取值1、5或10。
6.如权利要求1所述的一种基于序列化自编码器的无监督KPI异常检测方法,其特征在于4.3.1步所述离线训练模块构建基于序列化自编码器的无监督KPI异常检测模型的方法是:
4.3.1.1.2如果j=0,构建第一个编码器并得到第一个编码器的输出第一元组,方法是:利用tf.nn.dynamic_rnn函数构造一个隐藏层节点个数为h的LSTM,h=16,得到第一个编码器;第一个编码器以作为输入,输出第一元组(E1 p,Z1 p),并保存,其中表示第一神经元输出状态向量,为E1 p中第r个值,代表第一隐藏层状态,为Z1 p中第r个值;转4.3.1.1.6,如果j≠0,转4.3.1.1.3;
4.3.1.1.3如果j=1,构建第二个编码器并得到第二个编码器的输出第二元组,方法是利用tf.nn.dynamic_rnn函数构造一个隐藏节点个数为h个的Basic LSTM,h=16,得到第二个编码器;第二个编码器以作为输入:输出第二元组(E2 p,Z2 p),并保存,其中表示第二神经元输出状态向量,为E2 p中第r个值,代表第二隐藏层状态,为Z2 p中第r个值,转4.3.1.1.6;如果j≠1且j≠0转4.3.1.1.4;
4.3.1.1.4如果1<j<N,转4.3.1.1.5;如果j≥N,转4.3.1.1.7;
4.3.1.1.5,构建第3到第N个编码器并得到第3到第N个编码器的输出,方法是:
4.3.1.1.5.1令变量q=3;
4.3.1.1.5.2如果q≤N,转4.3.1.1.5.3;否则转4.3.1.1.6;
4.3.1.1.5.3构建第q个编码器并以作为输入:利用tf.nn.dynamic_mn函数构造一个基于RSCR的LSTM,隐藏节点个数h=16,得到第q个编码器;第q个编码器以作为输入:输出第q元组(Eq p,Zq p),并保存,其中 表示第q神经元输出状态向量,为Eq p中第r个值,代表第q隐藏层状态,为Zq p中第r个值;
4.3.1.1.5.4令q=q+1,转4.3.1.1.5.2;
4.3.1.1.6令变量j=j+1,转4.3.1.1.2;
4.3.1.1.7输出N个元组{(E1 p,Z1 p),(E2 p,Z2 p),…,(Eq p,Zq p),…,(EN p,ZN p)}给共享层,(E1 p,Z1 p)为第一元组,其中表示第一神经元输出状态向量,为E1 p中第r个值,代表第一隐藏层状态,为Z1 p中第r个值;(E2 p,Z2 p)为第二元组,其中 表示第二神经元输出状态向量,为E2 p中第r个值,代表第二隐藏层状态,为Z2 p中第r个值;(Eq p,Zq p)为第q元组,表示第q神经元输出状态向量,为Eq p中第r个值, 代表第q隐藏层状态,为Zq p中第r个值;(EN p,ZN p)为第N元组,表示第N神经元输出状态向量,为EN p中第r个值,代表第N隐藏层状态,为ZN p中第r个值;
转4.3.1.2;
4.3.1.2构建共享层,方法是:
4.3.1.2.1共享层从N个编码器接收N个元组,即{(E1 p,Z1 p),(E2 p,Z2 p),…,(Eq p,Zq p),…,(EN p,ZN p)};
4.3.1.2.2将权重矩阵W赋初值为0,矩阵大小为16×16;
4.3.1.3.1令变量k=0;
4.3.1.3.2如果k=0,构造第一个解码器:利用tf.contrib.seq2seq.BasicDecoder函数构造一个隐藏节点个数为h′个的LSTM,h′=h×N,输出重构向量 转4.3.1.3.6,如果k≠0,转4.3.1.3.3;
4.3.1.3.3如果k=1,构建第二个解码器,利用tf.contrib.seq2seq.BasicDecoder函数构建一个隐藏节点个数为h′的LSTM,h′=h×N,输出重构向量 转4.3.1.3.6,如果k≠0且k≠1,转4.3.1.3.4;
4.3.1.3.4如果1<k<N,转4.3.1.3.5;如果若k≥N,转4.3.1.3.7;
4.3.1.3.5构造第3到第N个解码器,方法是:
4.3.1.3.5.1令变量g=3;
4.3.1.3.5.2如果g≤N,转4.3.1.3.5.3;否则转4.3.1.3.6;
4.3.1.3.5.4令g=g+1,转4.3.1.3.5.2;
4.3.1.3.6令变量k=k+1,转4.3.1.3.2;
4.3.1.3.8定义损失函数和优化函数,方法为:
4.3.1.3.8.1定义损失函数loss:
其中:inputr表示输入向量的第r个值;outputr表示输出向量的第r个值;l1_regularizer(Zshare)表示对Zshare进行L1正则化的函数;
4.3.1.3.8.2采用Adam作为模型训练的优化函数,基于序列化自编码器的KPI异常检测模型构建完毕。
8.如权利要求l所述的一种基于序列化自编码器的无监督KPI异常检测方法,其特征在于4.3.2步所述对基于序列化自编码器的KPI异常检测模型进行离线训练的方法是:
4.3.2.1令变量p=1;
4.3.2.3创建tensorflow的会话sess;
4.3.2.2.1令变量iter=0,令迭代次数ITER=50;
4.3.2.3计算异常分值,方法是:
4.3.2.3.1令变量b=0;
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110597955.XA CN113204590B (zh) | 2021-05-31 | 2021-05-31 | 基于序列化自编码器的无监督kpi异常检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110597955.XA CN113204590B (zh) | 2021-05-31 | 2021-05-31 | 基于序列化自编码器的无监督kpi异常检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113204590A CN113204590A (zh) | 2021-08-03 |
CN113204590B true CN113204590B (zh) | 2021-11-23 |
Family
ID=77023592
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110597955.XA Active CN113204590B (zh) | 2021-05-31 | 2021-05-31 | 基于序列化自编码器的无监督kpi异常检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113204590B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP4293457A1 (de) * | 2022-06-15 | 2023-12-20 | Siemens Aktiengesellschaft | Überwachungsverfahren, computerprogrammprodukt, überwachungsseinheit, gasanalysevorrichtung und verwendung einer künstlichen intelligenz |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108197011A (zh) * | 2018-01-29 | 2018-06-22 | 上海洞识信息科技有限公司 | 一种基于人工智能大数据平台的单指标预测和预警方法 |
CN109615019A (zh) * | 2018-12-25 | 2019-04-12 | 吉林大学 | 基于时空自动编码器的异常行为检测方法 |
US10505825B1 (en) * | 2014-10-09 | 2019-12-10 | Splunk Inc. | Automatic creation of related event groups for IT service monitoring |
CN111506637A (zh) * | 2020-06-17 | 2020-08-07 | 北京必示科技有限公司 | 一种基于kpi指标的多维异常检测方法、装置及存储介质 |
CN111858231A (zh) * | 2020-05-11 | 2020-10-30 | 北京必示科技有限公司 | 一种基于运维监控的单指标异常检测方法 |
CN112163624A (zh) * | 2020-09-30 | 2021-01-01 | 上海交通大学 | 基于深度学习和极值理论的数据异常判断方法及系统 |
US10887191B2 (en) * | 2014-10-09 | 2021-01-05 | Splunk Inc. | Service monitoring interface with aspect and summary components |
CN112686330A (zh) * | 2021-01-07 | 2021-04-20 | 中国农业银行股份有限公司 | Kpi异常数据检测方法及装置、存储介质及电子设备 |
CN112819386A (zh) * | 2021-03-05 | 2021-05-18 | 中国人民解放军国防科技大学 | 带有异常的时间序列数据生成方法、系统及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10531251B2 (en) * | 2012-10-22 | 2020-01-07 | United States Cellular Corporation | Detecting and processing anomalous parameter data points by a mobile wireless data network forecasting system |
-
2021
- 2021-05-31 CN CN202110597955.XA patent/CN113204590B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10505825B1 (en) * | 2014-10-09 | 2019-12-10 | Splunk Inc. | Automatic creation of related event groups for IT service monitoring |
US10887191B2 (en) * | 2014-10-09 | 2021-01-05 | Splunk Inc. | Service monitoring interface with aspect and summary components |
CN108197011A (zh) * | 2018-01-29 | 2018-06-22 | 上海洞识信息科技有限公司 | 一种基于人工智能大数据平台的单指标预测和预警方法 |
CN109615019A (zh) * | 2018-12-25 | 2019-04-12 | 吉林大学 | 基于时空自动编码器的异常行为检测方法 |
CN111858231A (zh) * | 2020-05-11 | 2020-10-30 | 北京必示科技有限公司 | 一种基于运维监控的单指标异常检测方法 |
CN111506637A (zh) * | 2020-06-17 | 2020-08-07 | 北京必示科技有限公司 | 一种基于kpi指标的多维异常检测方法、装置及存储介质 |
CN112163624A (zh) * | 2020-09-30 | 2021-01-01 | 上海交通大学 | 基于深度学习和极值理论的数据异常判断方法及系统 |
CN112686330A (zh) * | 2021-01-07 | 2021-04-20 | 中国农业银行股份有限公司 | Kpi异常数据检测方法及装置、存储介质及电子设备 |
CN112819386A (zh) * | 2021-03-05 | 2021-05-18 | 中国人民解放军国防科技大学 | 带有异常的时间序列数据生成方法、系统及存储介质 |
Non-Patent Citations (3)
Title |
---|
Label-Less: A Semi-Automatic Labelling Tool for KPI Anomalies;Nengwen Zhao 等;《 IEEE INFOCOM 2019 - IEEE Conference on Computer Communications》;20190502;1882-1890 * |
一种基于DBN-LR集成学习的异常检测模型;连超 等;《小型微型计算机系统》;20191215;第40卷(第12期);2637-2643 * |
智能运维中KPI异常检测的研究进展;王速 等;《电信科学》;20210520;第37卷(第5期);42-51 * |
Also Published As
Publication number | Publication date |
---|---|
CN113204590A (zh) | 2021-08-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111178456B (zh) | 异常指标检测方法、装置、计算机设备和存储介质 | |
Liu et al. | Communication-efficient federated learning for anomaly detection in industrial internet of things | |
WO2020077682A1 (zh) | 一种服务质量评估模型的训练方法及装置 | |
WO2020077672A1 (zh) | 一种服务质量评估模型的训练方法及装置 | |
Caceres et al. | A probabilistic Bayesian recurrent neural network for remaining useful life prognostics considering epistemic and aleatory uncertainties | |
CN111368888A (zh) | 基于深度动态贝叶斯网络的服务功能链故障诊断方法 | |
CN107133632A (zh) | 一种风电设备故障诊断方法及系统 | |
Li et al. | Federated anomaly detection on system logs for the internet of things: A customizable and communication-efficient approach | |
CN111431819A (zh) | 一种基于序列化的协议流特征的网络流量分类方法和装置 | |
CN114785666A (zh) | 一种网络故障排查方法与系统 | |
US20230133541A1 (en) | Alert correlating using sequence model with topology reinforcement systems and methods | |
Zhang et al. | Cause-aware failure detection using an interpretable XGBoost for optical networks | |
CN113204590B (zh) | 基于序列化自编码器的无监督kpi异常检测方法 | |
Chen et al. | Industrial edge intelligence: Federated-meta learning framework for few-shot fault diagnosis | |
Shi et al. | Graph embedding deep broad learning system for data imbalance fault diagnosis of rotating machinery | |
CN114416423A (zh) | 一种基于机器学习的根因定位方法和系统 | |
Wu et al. | Real-time monitoring and diagnosis scheme for IoT-enabled devices using multivariate SPC techniques | |
Hu et al. | Spatiotemporal generative adversarial imputation networks: An approach to address missing data for wind turbines | |
Su et al. | KPI anomaly detection method for Data Center AIOps based on GRU-GAN | |
Njoya et al. | Data prediction based encoder-decoder learning in wireless sensor networks | |
Valli et al. | A Study on Deep Learning Frameworks to Understand the Real Time Fault Detection and Diagnosis in IT Operations with AIOPs | |
CN113572639B (zh) | 一种载波网络故障的诊断方法、系统、设备和介质 | |
Lin et al. | Data-driven situation awareness of electricity-gas integrated energy system considering time series features | |
CN115658546A (zh) | 一种基于异质信息网络的软件故障预测方法及系统 | |
CN116955059A (zh) | 根因定位方法、装置、计算设备及计算机存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |