《异常检测——从经典算法到深度学习》

  • 0 概论
  • 1 基于隔离森林的异常检测算法
  • 2 基于LOF的异常检测算法
  • 3 基于One-Class SVM的异常检测算法
  • 4 基于高斯概率密度异常检测算法
  • 5 Opprentice——异常检测经典算法最终篇
  • 6 基于重构概率的 VAE 异常检测
  • 7 基于条件VAE异常检测
  • 8 Donut: 基于 VAE 的 Web 应用周期性 KPI 无监督异常检测
  • 9 异常检测资料汇总(持续更新&抛砖引玉)
  • 10 Bagel: 基于条件 VAE 的鲁棒无监督KPI异常检测
  • 11 ADS: 针对大量出现的KPI流快速部署异常检测模型
  • 12 Buzz: 对复杂 KPI 基于VAE对抗训练的非监督异常检测
  • 13 MAD: 基于GANs的时间序列数据多元异常检测
  • 14 对于流数据基于 RRCF 的异常检测
  • 15 通过无监督和主动学习进行实用的白盒异常检测
  • 16 基于VAE和LOF的无监督KPI异常检测算法
  • 17 基于 VAE-LSTM 混合模型的时间异常检测
  • 18 USAD:多元时间序列的无监督异常检测
  • 19 OmniAnomaly:基于随机循环网络的多元时间序列鲁棒异常检测
  • 20 HotSpot:多维特征 Additive KPI 的异常定位
  • 21 Anomaly Transformer: 基于关联差异的时间序列异常检测)

相关:

  • VAE 模型基本原理简单介绍
  • GAN 数学原理简单介绍以及代码实践
  • 单指标时间序列异常检测——基于重构概率的变分自编码(VAE)代码实现(详细解释)

20. HotSpot:多维特征 Additive KPI 的异常定位

论文名称:HotSpot: Anomaly Localization for Additive KPIs with Multi-Dimensional Attributes
论文下载:netman | ieee.org 下载后排版有一定偏差,但内容相同。
论文发表于 IEEE Access 2018
源码地址:暂时没有找到源码

20.1 论文概述

首先必须说明的是,该论文提出的算法与本系列其他算法有很大的不同,包括:

  • 相对与异常检测 工作,更加注重的是 异常定位
  • 数据对象为 Additive多维特征 KPI 数据 (什么事 Additive KPI 在后面介绍)

20.1.1 论文提出算法的动机是什么?应用于什么场景?(Motivation)

当异常发生后,我们需要找到异常发生的根因(root cause),也就是定位到具体哪个KPI表现出异常,即找出根本原因。

这里举个例子,对于某一个特定业务,需要用到的中间件包括 mysql, redis, es,对应的微服务包括 service1, service2,我们对提供服务的各个阶段都采集 KPI 数据,当异常发生时,我们需要快速找到究竟是谁出了问题。这里需要强调 root cause 的含义,当我们发现某个服务模块有问题而这个服务模块包括 redis 与 mysql 以及服务提供逻辑代码,我们需要进一步确定到底哪块出问题,而不是笼统地回答。

因此,算法的应用场景也比较清楚,该场景满足以下三个条件:

  • 场景具有多个流程。类似于我们求的是多项式计算入 (1+2*4 - 7) / 3,而不是只有一个流程,如 1 + 3。
  • 场景中每个流程都可以量化,即使用 KPI 表示健康情况。
  • 场景中各个流程中具有一定的相关性。如果每个流程都相互独立,那就不存在寻找 root cause 的需求了。比如三个相互独立的房间中有三个人,哪个房间的灯亮了一定就是那个房间的人干的事情,不需要一个一个步骤调查分析了。

20.1.2 论文提出了什么算法,是如何找到 root cause ?

论文用到的最核心的算法应当包括:

  • 蒙特卡罗搜索树 Monte Carlo tree search (MCTS),用来搜索定位异常发生地。
  • Potential Score (ps) 用来评估每个元素的潜在风险程度的方法。

关于这两个方法如何应用在论文中在后面做详细介绍,目前给一个粗略的答复。

  1. 论文通过 Potential Score 评估每个结点的异常程度;
  2. 论文通过 Monte Carlo Tree Search 定位异常根因。

20.1.3 总体概述论文内容

论文提出了采用 MCTS 方法 的 HotSpot 框架(在异常定位文献中首次出现),可以捕捉异常是如何从根本原因在整个聚合层次结构中传播的(确定异常根因),并且论文提出了一种分层剪枝的方法来进一步缩小搜索空间以节省搜索时间,提高算法速率。

20.2 相关技术背景介绍

20.2.1 additive KPI

比如 page view, revenue, traffic volume,大概可以理解为数值类型的。事实上后来的很多KPI异常检测论文默认数据对象就是数值类型的。

20.2.2 多特征 additive KPI 数据的异常定位

多特征additive KPI 异常定位问题是识别最有可能导致总 KPI 值异常变化的模块及其元素。论文原文使用的是长方体(cuboid)来表示模块的概念,如图一所示:

20.2.3 Monte Carlo Tree Search(MCTS)蒙特卡罗搜索

蒙特卡洛树搜索(MCTS)是一种启发式搜索算法,适用于某些类型的决策过程,尤其是游戏中使用的决策过程(例如AlphaGo)。

这部分的资料比较多,感兴趣的可以自行搜索,可以参考一下 https://blog.csdn.net/qq_24178985/article/details/121803376。

不过也可以不急着深入理解这个方法,继续看其他部分。

20.3 论文阅读

这里跳几个比较重要的部分进行介绍

20.3.1 Contribution

  • 为了处理根源的巨大搜索空间,HotSpot 采用了 MCTS 方法(文献中首次应用在异常定位)。
  • 在采用 MCTS 中的动作值是我们基于“涟漪效应(ripple effect)”的新颖的潜在得分(potential score),其捕获了对于多维 additive KPI,一个属性组合的KPI值的改变(作为原因)如何能够引起其他属性组合的KPI值改变(作为结果)。
  • 我们提出了一种分层剪枝方法(在精神上类似于 Apriori 原理)来进一步减少搜索空间。
  • 我们使用一个顶级全球搜索引擎的真实世界数据,表明 HotSpot 在有效性和鲁棒性方面都比现有的两种方法有了很大的改进,HotSpot对所有类型的案例的95%实现了超过90%的F-score,而对于现有方法,所有类型的案例中只有不到15%具有超过90%的F-score。
  • 我们的实践经验表明,HotSpot 可以将手动工作的本地化时间从 1 小时以上缩短到 20秒以内。

20.3.2 问题定义

此部分描述了论文解决的是一个什么样的问题,先从定义出发:


这里是指接下来的论文、实验中可能用到的条目(term)的介绍说明,在公式中也会用到,这里我们详细介绍一下:

条目 定义 标识 举例
属性 每条PV记录的信息类别 - Province (P), ISP(I), DC(D), Channel(C) \text{Province (P), ISP(I), DC(D), Channel(C)} Province (P), ISP(I), DC(D), Channel(C)
属性值 每个属性的候选值 - Beijing, Shanghai, Guangdong for Province(P) \text{{Beijing, Shanghai, Guangdong} for Province(P)} Beijing, Shanghai, Guangdong for Province(P)
元素 每个属性的不同值的组合向量 e = ( p , i , d , c ) e=(p,i,d,c) e=(p,i,d,c) (Beijing,*,*,*), (*,Mobile,*,*), (Beijing, Mobile,*,*) \text{(Beijing,*,*,*), (*,Mobile,*,*), (Beijing, Mobile,*,*)} (Beijing,*,*,*), (*,Mobile,*,*), (Beijing, Mobile,*,*)
PV值 根据元素的访问日志数 v ( e i ) v(e_i) v(ei​) v ( Beijing,*,*,* ) v(\text{Beijing,*,*,*}) v(Beijing,*,*,*)
数据立方体 多维数据的数据结构 n − d c u b e {n-d} \ cube n−d cube 维度为{P,I,D,C}的四维数据立方体
长方体Cuboids 长方体是一个数据立方体,其维度在所有给定维度的子集中 B i B_i Bi​ { B P , B P , I , B P , I , D , . . . } \{B_P, B_{P,I}, B_{P,I,D},...\} {BP​,BP,I​,BP,I,D​,...} for the 4-d data cube with the dimensions {P, I, D, C} \text{\{P, I, D, C\}} {P, I, D, C}
潜在得分Potential Score 衡量一组元素成为根本原因的潜力的概念 p s ps ps p s ( S ) ps(S) ps(S), S = { (Beijing, *, *, *), (*, Mobile, *, *) } S=\{\text{(Beijing, *, *, *), (*, Mobile, *, *)}\} S={(Beijing, *, *, *), (*, Mobile, *, *)}

下面的两个表用来表示 PV 例子,网站上的PV记录可以有几个属性。 例如,“10:00:01(时间戳); 北京、移动、DC1、Channel1“为记录,北京、移动、DC1、Channel1分别根据地区§、ISP(I)、数据中心(D)和频道©四个属性为候选值,其中 P = { p } P=\{p\} P={p}、 I = { i } I=\{i\} I={i}、 D = { d } D=\{d\} D={d}、 C = { c } C=\{c\} C={c} 分别为地区、ISP、数据中心和 ADS 频道的36、10、6、10个不同值的集合。 P P P 和 I I I 的值基于客户端 IP,并分别使用 IP 到地理定位数据库和 BGP 表进行解析。 每个地区的 ISP 都是一个独立的公司,因此相同的 ISP 名称在不同的地区往往表现不同。 渠道是不同广告市场的标签,如医疗或教育。 表2 显示了PV记录的一些示例。

不同属性值组合的向量在本文中称为元素(element),表示为 e = ( p , i , d , c ) e=(p,i,d,c) e=(p,i,d,c),其中 p ∈ P p\in P p∈P 或者 p = ∗ p = * p=∗, i ∈ I i \in I i∈I 或者 i = ∗ i = * i=∗, d ∈ D d\in D d∈D 或者 d = ∗ d = * d=∗, c ∈ C c\in C c∈C 或者 c = ∗ c = * c=∗, 这里的 ∗ * ∗ 是通配符,当 e = ( p , i , d , c ) e=(p, i, d, c) e=(p,i,d,c)在每一个时间尺度(如本文中的尺度为每分钟)中,我们根据一个元素 e e e 来计算 PV 记录的数目,并将这个数字称为该元素的 PV 值,用 v ( e ) v(e) v(e) 表示,即 v ( e ) = v(e)= v(e)= 在特定时间尺度上的#个记录。 表3 显示了与表2中的PV记录相对应的PV值。

所有这些最细粒度元素的集合,如表3 中的元素,用叶子表示: LEAF = { e ∣ e = ( p , i , d , c ) , p ≠ ∗ , i ≠ ∗ , d ≠ ∗ , c ≠ ∗ } \text{LEAF}=\{e|e=(p,i,d,c), p \neq*, i \neq *, d \neq * , c \neq * \} LEAF={e∣e=(p,i,d,c),p=∗,i=∗,d=∗,c=∗}。当一个或多个属性值为 * 时,其他元素都可以基于 Leaf 中的元素求和。例如,对于表 3 中 10:00(从10:00:00到10:00:59) 的三个元素,我们可以获得更粗粒度元素的值,例如:

v ( Beijing, Mobile,  D C 1 , ∗ ) = 2 + 1 = 3 , v ( Bei jing  , ∗ , ∗ , ∗ ) = 2 + 1 + 3 = 6. \begin{array}{c} v\left(\text { Beijing, Mobile, } D C_{1}, *\right)=2+1=3, \\ v(\text { Bei jing }, *, *, *)=2+1+3=6 . \end{array} v( Beijing, Mobile, DC1​,∗)=2+1=3,v( Bei jing ,∗,∗,∗)=2+1+3=6.​

根据聚集程度的不同,我们将元素划分为不同的集合,每个集合对应一个长方体。 长方体是数据立方体的子立方体,数据立方体是一种数据结构,允许在多维度上建模和查看数据[3],例如,叶的元素构成一个4-D数据立方体,如图所示 1. 长方体表示为 B i B_i Bi​( i i i 可以是 P P P、 I I I、 D D D 和 C C C 中的任意组合),例如, B P B_P BP​ 是一维长方体, B P , I , D B_{P,I,D} BP,I,D​ 是三维长方体。 长方体的元素集 B i B_i Bi​ 用 E ( B i ) E(B_i) E(Bi​) 来表示,比如, E ( B P ) = { e ∣ e = ( p , ∗ , ∗ , ∗ ) , p ≠ ∗ } E\left(B_{P}\right)=\{e \mid e=(p, *, *, *), p \neq *\} E(BP​)={e∣e=(p,∗,∗,∗),p=∗}, E ( B P , I , D ) = { e ∣ e = ( p , i , d , ∗ ) , p ≠ ∗ , i ≠ ∗ , d ≠ ∗ } E\left(B_{P, I, D}\right)=\{e \mid e=(p, i, d, *), p \neq *, i \neq *, d \neq *\} E(BP,I,D​)={e∣e=(p,i,d,∗),p=∗,i=∗,d=∗}, L E A F = E ( B P , I , D , C ) LEAF=E\left(B_{P, I, D, C}\right) LEAF=E(BP,I,D,C​)。

此外,我们构造长方体并为其标记层ID,如图所示 2. 另外,我们让 B P B_P BP​ 或 B I B_I BI​ 是 B P I B_{PI} BPI​ 的父长方体, B P , I B_{P,I} BP,I​ 是 B P B_P BP​ 或 B I B_I BI​ 的子长方体。 因此,长方体的元素都具有父子结点关系,比如 ( p , ∗ , ∗ , ∗ ) ( ∈ E ( B P ) ) (p, *, *, *)\left(\in E\left(B_{P}\right)\right) (p,∗,∗,∗)(∈E(BP​)) 和 ( p , i , ∗ , ∗ ) ( ∈ E ( B P , I ) ) (p, i, *, *)\left(\in E\left(B_{P, I}\right)\right) (p,i,∗,∗)(∈E(BP,I​))。

论文中使用 e ′ = ( p ′ , i ′ , d ′ , c ′ ) e^{\prime}=\left(p^{\prime}, i^{\prime}, d^{\prime}, c^{\prime}\right) e′=(p′,i′,d′,c′) 表示 e = ( p , i , d , c ) e=(p,i,d,c) e=(p,i,d,c) 的后代,其中 e ≠ e ′ e\neq e^{\prime} e=e′, p ′ = p p^{\prime} = p p′=p 或者 p = ∗ p=* p=∗ , i ′ = i i^{\prime} = i i′=i 或者 i = ∗ i=* i=∗ , d ′ = d d^{\prime} = d d′=d 或者 d = ∗ d=* d=∗ , c ′ = c c^{\prime} = c c′=c 或者 c = ∗ c=* c=∗ 。 D e s c ( e ) = { e ′ ∣ e ′ Desc(e)=\{e^{\prime} | e^{\prime} Desc(e)={e′∣e′ 是 e e e 的后代 } \} }, D e s c ′ ( e ) = { e ′ ∣ e ′ = ( p , i , d , c ) ∈ L E A F , p ≠ ∗ , i ≠ ∗ , d ≠ ∗ , c ≠ ∗ } {Desc}^{\prime}(e)=\{ e^{\prime} | e^{\prime} =(p,i,d,c) \in LEAF, p\neq *, i \neq *, d \neq *, c \neq *\} Desc′(e)={e′∣e′=(p,i,d,c)∈LEAF,p=∗,i=∗,d=∗,c=∗}。如果 e ∈ L E A F e \in LEAF e∈LEAF,PV 值 v ( e ) v(e) v(e)可以直接评估,否则

v ( e ) = ∑ e ′ ∈ Desc ⁡ ′ ( e ) v ( e ′ ) (1) v(e)=\sum_{e^{\prime} \in \operatorname{Desc}^{\prime}(e)} v\left(e^{\prime}\right) \tag{1} v(e)=e′∈Desc′(e)∑​v(e′)(1)

比如,

v ( Beijing  , ∗ , ∗ , ∗ ) = ∑ j , k , h v ( Beijing  , i j , d k , c h ) (2) v(\text { Beijing }, *, *, *)=\sum_{j, k, h} v\left(\text { Beijing }, i_{j}, d_{k}, c_{h}\right) \tag{2} v( Beijing ,∗,∗,∗)=j,k,h∑​v( Beijing ,ij​,dk​,ch​)(2)

Total  P V = v ( ∗ , ∗ , ∗ , ∗ ) = ∑ i , j , k , h v ( p i , i j , d k , c h ) (3) \text { Total } P V=v(*, *, *, *)=\sum_{i, j, k, h} v\left(p_{i}, i_{j}, d_{k}, c_{h}\right) \tag{3}  Total PV=v(∗,∗,∗,∗)=i,j,k,h∑​v(pi​,ij​,dk​,ch​)(3)

20.3.3 问题陈述

addictive KPI(多维属性)异常定位问题是识别最有可能导致总KPI值异常变化的长方体及其元素。

为了陈述清楚这个问题,我们在表4 和 表5 中举了一个简单的例子。表4表示了一个2维属性 PV 结构。 存在两个一维长方体, B P B_P BP​和 B I B_I BI​,一个二维长方体 B P I B_{PI} BPI​。 每个长方体包含一组元素,即 E ( B P ) = { B e i j i n g , ∗ ) , ( S h a n g h a i , ∗ ) , ( g u a n g d o n g , ∗ ) } E(B_{P})=\{Beijing,*),(Shanghai,*),(guangdong,*)\} E(BP​)={Beijing,∗),(Shanghai,∗),(guangdong,∗)}, E ( B I ) = { ( ∗ , M o b i l e ), ( ∗ , U n i c o m ) } E(B_I)=\{(*, Mobile),(*, Unicom)\} E(BI​)={(∗,Mobile),(∗,Unicom)} , L e a f = E ( B P , I ) = { ( B e i j i n g , M o b i l e ) , ( S h a n g h a i , M o b i l e ) , ( g u a n g d o n g , M o b i n e ) , ( B e i j i n g , U n i c o m ) , ( S h a n g h a i , U n i c o m ) , ( G u a n g d o n g , U n i c o m ) } Leaf=E(B_{P,I})=\{(Beijing,Mobile),(Shanghai,Mobile),(guangdong,Mobine),(Beijing,Unicom),(Shanghai,Unicom),(Guangdong,Unicom)\} Leaf=E(BP,I​)={(Beijing,Mobile),(Shanghai,Mobile),(guangdong,Mobine),(Beijing,Unicom),(Shanghai,Unicom),(Guangdong,Unicom)}。 v ( p , i ) v(p,i) v(p,i) 显示在表格的单元格中,例如 v ( B e i j i n g , M o b i l e ) = 20 v(Beijing, Mobile)=20 v(Beijing,Mobile)=20, v ( B e i j i n g , ∗ ) = 30 v(Beijing, *)=30 v(Beijing,∗)=30。

当总PV异常时,PV变化如表5所示。在每个单元格中,第一个数字是预测PV值 f ( p , i ) f(p, i) f(p,i),第二个数字是实际PV值 v ( p , i ) v(p,i) v(p,i)(如何检测总PV和计算元素的预测值将在 第四节 A 中介绍)。总 PV 的预测值为100,而实际 PV 值仅为75(表5的右下角)。因此,由于总PV的异常变化 v ( ∗ , ∗ ) = 75 v(*,*)=75 v(∗,∗)=75 比触发异常定位的 f ( ∗ , ∗ ) = 100 f(*,*)=100 f(∗,∗)=100 小得多,因此触发异常定位。

对于 B P B_P BP​ B I B_I BI​ 和 B P , I B_{P,I} BP,I​ 三个长方体,它们可以从不同的角度表达 PV KPI。当总PV发生异常变化时,这三个长方体中的每一个都受到影响。如表5所示,每个长方体(阴影细胞)中都有一些异常元素。 在现实中,操作员需要确定哪个长方体和这个长方体的哪些元素是这种异常的最潜在的根本原因。 然后他们可以开始尝试修复异常并减轻损失。 因此,对于可加性KPI的异常定位问题可以重述如下:

有效和高效地识别总KPI值异常的最潜在的根本原因,即 一个特定长方体 B i B_i Bi​ 的元素子集。 根因集合 R S e t ⊆ E ( B i ) RSet \subseteq E\left(B_{i}\right) RSet⊆E(Bi​)。

注意,这个定义允许在同一个长方体中的多个元素作为根本原因集。 例如,表5 中示例的根本原因集是 R S e t = { ( Beijing  , ∗ ) , ( Shanghai  , ∗ ) } RSet =\{(\text { Beijing }, *),(\text { Shanghai }, *)\} RSet={( Beijing ,∗),( Shanghai ,∗)} 。但这一定义排除了多个长方体同时存在根源的情况,这在现实中极为罕见。 还要注意,我们只处理总KPI值异常的情况。

20.4 核心思路

论文提出了潜在得分(Potential Score)作为度量函数,并应用蒙特卡罗树搜索(MCTS)算法和分层剪枝策略克服了搜索空间过大的问题。

20.4.1 评估数据集中的潜在得分 Potential Score for measuring the potential of sets

在我们的异常定位问题中,一个可以用来“全局”比较不同元素集的根本原因“潜力”的度量。 然而,正如第一个挑战所示,这样的度量并不容易开发,简单的度量也不起作用。

我们对这个潜在得分的想法是基于以下直觉:当根原因元素的KPI值发生变化时,它的所有后代叶元素的KPI值也相应地发生变化。 因此,候选根本原因元素的“潜在得分”是用来衡量该元素的后代叶元素的预期变化和实际变化之间的差异。 详见§IV-B2。 另外,MCTS需要潜在分数作为一个价值函数来指导搜索。

20.4.2 高效搜索的MCTS和分层剪枝 MCTS and Hierarchical Pruning for efficiently searching

该问题的搜索空间巨大,需要一种有效的搜索算法。 本文的思路是采用一些已知的善于在大空间中搜索的先进算法,而不是像文献 [1]、[2] 那样在小得多的搜索空间中用它们更简单的异常定位来发展有机的启发式算法。 受 AlphaGo 在围棋中成功采用 MCTS 算法文献[4]、[5]的启发,本文的核心思想是将 MCTS 算法作为异常定位算法的基础。 然而,在采用 MCTS 方面仍然存在一个剩余的挑战,我们现在总结我们的核心思想来解决这些问题。

来自图 2我们可以看到,当我们从低层到高层时,长方体中元素 n n n 的数量变得越来越多。例如,在 B P B_P BP​ 中有36个元素, B P , I B_{P,I} BP,I​ 中有 36 ∗ 10 36*10 36∗10, B P , I , D , C B_{P,I,D,C} BP,I,D,C​ 中有 36 ∗ 10 ∗ 6 ∗ 10 36*10*6*10 36∗10∗6∗10。回想根本原因集是长方体的(2n-1)个子集之一。 即使对MCTS来说,搜索如此巨大的空间也不是一件容易的事情。

为了进一步缩小搜索空间,Hotspot 采用了分层剪枝策略。 基本思想是,在搜索较低层之后,HotSpot 会剪除一些不太可能是根本原因元素的元素(在较高层)。 直觉是,如果父元素有一个非常低的潜在得分,每个子元素不太可能是根本原因元素,因此可以剪枝。 这种方法在精神上与关联规则挖掘中的Apriori原理非常相似[3]。 我们称我们的剪枝方法为层次剪枝,因为它的剪枝策略利用了层的层次信息。

20.4.3 总体办法 Overall Approach

HotSpot的核心思想概括如下。 我们把这种异常定位看作是一个空间很大的搜索问题; 采用MCTS作为基本搜索算法; 提出了一个对异常定位具有物理意义的潜在得分度量作为每一集合的潜在度量和MCTS中的值函数; 应用分层剪枝方法(类似于Apriori原则)来减少搜索空间。 搜索从第1层开始,逐层进行,在每个长方体内应用MCTS,如图所示 3.

20.5 HotSpot 的设计

本部分介绍了Hotspot的详细设计。 HotSpot逐层搜索长方体的集合,即从第1层到第L层(L为层数)。 对于给定层的每一个长方体,Hotspot应用MCTS寻找其具有最大潜在得分(PS)的子集,称为该长方体的最佳集(缩写为BSet)。 当从一层到下一层时,使用分层剪枝。我们重复这个过程,直到层 L L L 被搜索,或者得到根本原因集 R S e t RSet RSet ( p s ( R S e t ) > P T ps(RSet) > PT ps(RSet)>PT),其中 P T PT PT 是指 p s ps ps 的阈值。当 p s > P T ps > PT ps>PT 时,我们认为它足够大,可以被视为根本原因集。最终输出 R S e t RSet RSet 是算法生成的所有 B S e t BSet BSet 中 p s ps ps 最大的 B S e t BSet BSet 。接下来,我们描述一种检测总KPI和预测本节中元素的方法。 然后给出了热点的各个组成部分,即潜在得分、MCTS和分层剪枝。

20.5.1 异常检测与预报 Anomaly Detection and Forecast

HotSpot 需要一个异常检测算法(1)来检测总KPI中的异常,算法(2)来计算其他元素的预测值。

我们采用了业界广泛使用的统计算法对总KPI进行异常检测文献 [6]。 均值 μ \mu μ 和标准差 σ \sigma σ 在一个周期中一个时间间隔进行计算(在我们的案例中间隔为 1 分钟),其中的 μ \mu μ 被视为预测值。阈值( T l T_l Tl​和T_u分别代表下限和上限)定义如下:

T l = μ − c × σ , T u = μ + c × σ (4) T_l = \mu - c \times \sigma ,\ T_u = \mu + c \times \sigma \tag{4} Tl​=μ−c×σ, Tu​=μ+c×σ(4)
其中 c c c 是确定上下限的程度的参数(通常设置为2.0)参考文献 [6]。请注意,阈值是定期更新的。 如果实际值超过阈值,则检测异常。 该算法适合于我们的场景,因为1)它非常适合于 addictive KPI数据,因为大多数加性KPI数据是周期性的;2)它计算效率高。

20.5.2 潜在得分 Potential Score


(1) 波纹效应(Ripple effect):我们在表VI中使用了一个新的异常案例来说明根本原因元素的KPI变化是如何根据我们总结的“涟漪效应”传播到其他元素的。 ( B e i j i n g , ∗ ) (Beijing, *) (Beijing,∗) 的 PV 值从 30( f ( B e i j i n g , ∗ ) f(Beijing, *) f(Beijing,∗))下降到 12,并且 ( B e i j i n g , ∗ ) (Beijing, *) (Beijing,∗) 是本例中唯一一个 根因元素(其他的没有变化)。由于 v ( B e i j i n g , ∗ ) v(Beijing,*) v(Beijing,∗) 是由它的后代元素 v ( B e i j i n g , M o b i l e ) v(Beijing,Mobile) v(Beijing,Mobile) 和 v ( B e i j i n g , U n i c o m ) v(Beijing, Unicom) v(Beijing,Unicom) 聚合而成的,它们一定发生了相应的变化。 注意它们的变化值, h ( B e i j i n g , ∗ ) = 18 h(Beijing, *) =18 h(Beijing,∗)=18, h ( B e i j i n g , M o b i l e ) = 12 h(Beijing, Mobile)=12 h(Beijing,Mobile)=12, h ( B e i j i n g , U n i c o m ) = 6 h(Beijing, Unicom) = 6 h(Beijing,Unicom)=6。我们通过公式 f ( B e i j i n g , M o b i l e ) − h ( B e i j i n g , ∗ ) × f ( B e i j i n g , M o b i l e ) f ( B e i j i n g , ∗ ) f(Beijing, Mobile)- h(Beijing,*)\times \frac{f(Beijing, Mobile)}{f(Beijing, *)} f(Beijing,Mobile)−h(Beijing,∗)×f(Beijing,∗)f(Beijing,Mobile)​ 可以得出实际值 v ( B e i j i n g , M o b i l e ) = 8 v(Beijing, Mobile)=8 v(Beijing,Mobile)=8 的比例份额。此外, h ( B e i j i n g , M o b i l e ) h(Beijing, Mobile) h(Beijing,Mobile) 反过来也促进了 v v v 的变化 v ( ∗ , M o b i l e ) v( *, Mobile) v( ∗,Mobile)。

上面的示例说明了根本原因元素是如何影响其后代元素(在LEAF中)和其他共享其共同后代元素的元素的。通常,当根本原因元素的值增加或减少时,它遵循如下波动效应特性:

设 x x x 表示不在 L E A F LEAF LEAF 中的元素,即 x ∉ L E A F x \notin LEAF x∈/LEAF。设 x i ′ x_{i}^{\prime} xi′​ 表示 x x x 在 L E A F LEAF LEAF 中的后代元素,即 x i ′ ∈ D e s c ′ ( x ) x_{i}^{\prime} \in {Desc}^{\prime}(x) xi′​∈Desc′(x)。当 x x x 的 PV 值通过 h ( x ) h(x) h(x) 改变以后,即 h ( x ) = f ( x ) − v ( x ) h(x)=f(x)-v(x) h(x)=f(x)−v(x), x i ′ x^{\prime}_i xi′​ 将根据他们的预测值的比例得到其 h ( x ) h(x) h(x) 的份额,即,

v ( x i ′ ) = f ( x i ′ ) − h ( x ) × f ( x i ′ ) f ( x ) , ( f ( x ) ≠ 0 ) . (5) v\left(x_{i}^{\prime}\right)=f\left(x_{i}^{\prime}\right)-h(x) \times \frac{f\left(x_{i}^{\prime}\right)}{f(x)},(f(x) \neq 0) . \tag{5} v(xi′​)=f(xi′​)−h(x)×f(x)f(xi′​)​,(f(x)=0).(5)

然后使用 公式 1 更新 x i ′ x_{i}^{\prime} xi′​ 祖先的所有其他元素 e e e。上面的涟漪效应描述了根本原因只包含一个元素的情况。 当涉及到一个集合(两个或多个元素)时,我们可以为每个元素重用该属性。

(2) 潜在得分(Potential Score): 涟漪效应揭示了根本原因集如何影响许多其他元素的值。 因此,为了衡量一个集合的潜在性是根本原因,我们建议1)假设集合 S S S 是根本原因,2) 根据波纹效应推导叶中后代元素的新PV值,3) 将所有实际PV值与新推导的叶元素PV值进行比较。 两种值越接近,该集合就越有可能成为根本原因集。

设 y 1 , y 2 , y 3 , … , y n y_{1}, y_{2}, y_{3}, \ldots, y_{n} y1​,y2​,y3​,…,yn​ 表达 L E A F LEAF LEAF 中所有元素。我们用 a ( y i ) a(y_i) a(yi​) 表示一个假定的根因集 S S S 的新推导的 PV 值。我们计算两种条件下的 a ( y i ) a(y_i) a(yi​) 的值:

  • S ⊈ L E A F S \nsubseteq LEAF S⊈LEAF: 如果 y i ∉ D e s c ′ ( S ) y_i \notin {Desc^{\prime}}(S) yi​∈/Desc′(S), a ( y i ) = f ( y i ) a(y_i) =f(y_i) a(yi​)=f(yi​) ;否则,根据公式5计算 a ( y i ) a(y_i) a(yi​) 的值。
  • S ⊆ L E A F S \subseteq LEAF S⊆LEAF: 如果 y i ∉ D e s c ′ ( S ) y_i \notin {Desc^{\prime}}(S) yi​∈/Desc′(S), a ( y i ) = f ( y i ) a(y_i) =f(y_i) a(yi​)=f(yi​) ;否则, a ( y i ) = v ( y i ) a(y_i)=v(y_i) a(yi​)=v(yi​)

设 a ⃗ \vec{a} a 表示 a ( y i ) a(y_i) a(yi​) 组成的向量,即 a ⃗ = [ a ( y 1 ) , a ( y 2 ) , … , a ( y n ) ] \vec{a} = [a(y_1), a(y_2), \ldots ,a(y_n)] a =[a(y1​),a(y2​),…,a(yn​)]。类似地,设 v ⃗ = [ v ( y 1 ) , v ( y 2 ) , … , v ( y n ) ] \vec{v} =[v(y_1), v(y_2), \ldots ,v(y_n)] v =[v(y1​),v(y2​),…,v(yn​)], f ⃗ = [ f ( y 1 ) , f ( y 2 ) , … , f ( y n ) ] \vec{f}=[f(y_1), f(y_2), \ldots ,f(y_n)] f ​=[f(y1​),f(y2​),…,f(yn​)]。

接着我们定义集合 S S S 的潜在得分(Potential Score, ps)为:
P o t e n t i a l S c o r e = max ⁡ ( 1 − d ( v ⃗ , a ⃗ ) d ( v ⃗ , f ⃗ ) , 0 ) (6) Potential Score =\max \left(1-\frac{d(\vec{v}, \vec{a})}{d(\vec{v}, \vec{f})}, 0\right) \tag{6} PotentialScore=max(1−d(v ,f ​)d(v ,a )​,0)(6)
其中, d ( u ⃗ , w ⃗ ) d(\vec{u}, \vec{w}) d(u ,w ) 表示向量 u ⃗ \vec{u} u 和 w ⃗ \vec{w} w 之间的距离。这里我们采用欧几里得距离:

d ( u ⃗ , w ⃗ ) = ∑ i ( u i − w i ) 2 (7) d(\vec{u}, \vec{w})=\sqrt{\sum_{i}\left(u_{i}-w_{i}\right)^{2}} \tag{7} d(u ,w )=i∑​(ui​−wi​)2 ​(7)

集合的潜在得分范围为0~1,即[0,1]。 如果一个集合有更高的得分,它将被认为有更高的潜力成为根本原因。

上述潜在分数的定义是“全局”的,即任意两个元素集都可以比较它们的潜在分数,以确定哪一个具有更大的潜在分数。 这在MCTS中起到了很好的价值函数的作用。

当两个元素集具有相同的潜在得分时,我们遵循一个“简洁”原则。 也就是说,元素数目较少的元素获胜,要么遵循奥卡姆剃刀原理[1],要么因为一个集合中的元素集体是另一个集合中的元素的祖先(首选为根本原因)。

(3) 一个示例:现在我们说明如何根据 表5 中案例的潜在得分来找到根本原因。长方体由 B p B_p Bp​, B I B_I BI​ 和 B P , I B_{P,I} BP,I​ 组成。 首先会找到每个长方体的最佳集合(这个长方体潜在得分最大的子集)。 接下来,我们通过比较最佳集合来选择根本原因集合。 y ⃗ \vec{y} y ​ 按照如下顺序代表:[(Bei jing;Mobile); (Shanghai;Mobile); (Guangdong;Mobile); (Bei jing;Unicom); (Shanghai;Unicom); (Guangdong;Unicom )], f ⃗ = ( 20 , 15 , 10 , 10 , 25 , 20 ) \vec{f}=(20,15,10,10,25,20) f ​=(20,15,10,10,25,20), v ⃗ = ( 14 , 9 , 10 , 7 , 15 , 20 ) \vec{v}=(14,9,10,7, 15, 20) v =(14,9,10,7,15,20)。对于长方体 B P B_P BP​,它包含三个元素(Beijing,*)、(Shanghai,*)和 (Guanguone,*),所以所有的子集都是 S p 1 = { ( B e i j i n g , ∗ ) } S_{p1}=\{(Beijing,*)\} Sp1​={(Beijing,∗)}, S p 2 = { ( S h a n g h a i , ∗ ) } S_{p2}=\{(Shanghai,*)\} Sp2​={(Shanghai,∗)}, S p 3 = { ( G u a n g d o n g , ∗ ) } S_{p3}=\{(Guangdong,*)\} Sp3​={(Guangdong,∗)},KaTeX parse error: Expected '}', got 'EOF' at end of input: …,(shanghai,*)\}, S p 5 = { ( B e i j i n g , ∗ ) , ( g u a n g u o n , ∗ ) } S_{p5}=\{(Beijing,*),(guanguon,*)\} Sp5​={(Beijing,∗),(guanguon,∗)}, S p 6 = { ( S h a n g h a i , ∗ ) , ( g u a n g u o n , ∗ ) } S_{p6}=\{(Shanghai,*),(guanguon,*)\} Sp6​={(Shanghai,∗),(guanguon,∗)} 和 S p 7 = { ( B e i j i n g , ∗ ) , ( s h a n g h a i , ∗ ) , ( g u a n g u o n , ∗ ) } S_{p7}=\{(Beijing,*),(shanghai,*),(guanguon,*)\} Sp7​={(Beijing,∗),(shanghai,∗),(guanguon,∗)}。 以集合 S p 1 S_{p1} Sp1​ 为例,根据公式 5 我们可以推导出 a ⃗ ( S p 1 ) ) = ( 14 , 15 , 10 , 7 , 25 , 20 ) \vec{a}(S_{p1})) =(14,15,10,7,25,20) a (Sp1​))=(14,15,10,7,25,20),从而可以计算 p s ( S p 1 ) = 0.13. ps(S_{p1})=0.13. ps(Sp1​)=0.13.。实际上,我们可以发现 S p 4 S_{p4} Sp4​ 和 S p 7 S_{p7} Sp7​ 都有最大的 p s ps ps 值, p s ( S p 4 ) = p s ( S p 7 ) = 1 ps(S_{p4})=ps(S_{p7})=1 ps(Sp4​)=ps(Sp7​)=1。 总而言之, S p 4 S_{p4} Sp4​ 是 B p B_p Bp​ 中最好的集合。类似地,可以得到 B I B_I BI​ 和 B P , I B_{P,I} BP,I​ 中的最佳集合, S i 3 = { ( ∗ , M o b i l e ) , ( ∗ , U n i c o m ) } S_{i3}=\{(*, Mobile), (*, Unicom)\} Si3​={(∗,Mobile),(∗,Unicom)}, p s ( S i 3 ) = 0.47 ps(S_{i3})=0.47 ps(Si3​)=0.47( a ⃗ ( S i 3 ) = ( 14 , 9 , 10 , 7 , 15 , 20 ) \vec{a}(S_i3)=(14,9,10,7,15,20) a (Si​3)=(14,9,10,7,15,20)), S p i 1 = { ( B e i j i n g , M o b i l e ) , ( B e i j i n g , U n i c o m ) , ( S h a n g h a i , M o b i l e ) , ( S h a n g h a i , U n i c o m ) } S_{pi1}=\{(Bei jing,Mobile), (Bei jing,Unicom), (Shanghai,Mobile), (Shanghai,Unicom)\} Spi1​={(Beijing,Mobile),(Beijing,Unicom),(Shanghai,Mobile),(Shanghai,Unicom)}, p s ( S p i 1 ) = 1 ps(S_{pi1})=1 ps(Spi1​)=1( a ⃗ ( S p i 1 ) = ( 14 , 9 , 10 , 7 , 15 , 20 ) \vec{a}(S_{pi1})=(14,9,10,7,15,20) a (Spi1​)=(14,9,10,7,15,20))。比较三个最优集, S p 4 S_{p4} Sp4​ 是 p s ps ps 最大、最简洁的结果集。

上面的例子说明了我们使用潜在分数来识别根本原因集的核心思想。 实际上,元素太多了,所以可能的集合数量非常大,尤其是在较高层的长方体中。 为了解决这个问题,我们采用了MCTS算法和层次剪枝策略,这将在下面介绍。 同时,利用这两种方法可以得到简洁的结果。

20.5.3 MCTS 算法

对于给定的长方体 B B B,我们想要获得最佳集(这个长方体潜在得分最大的子集)。 假定 E ( B ) E(B) E(B) 中有 n n n 个元素。 在B中对根原因集的搜索空间是2n-1,对于大 n n n 来说,这显然是非常大的。 HotSpot 采用 MCTS 主要是为了应对搜索空间爆炸的挑战。

MCTS是一种启发式方法,通过在决策空间中抽取随机样本,根据已有的随机样本的结果建立搜索树,在给定的决策域中搜索最优决策。 在很高的层次上,MCTS试图平衡沿着那些有希望的分支的开发和沿着那些未被开发的分支的开发。 它在人工智能(AI)领域被广泛应用于可以表示为顺序决策树的领域,特别是游戏和规划问题[4],如 AlphaGo[5]。

在MCTS中,每个节点代表一个状态 S S S(根可以看作是️ ∅ \varnothing ∅)。 一个行动空间 A ( S ) A(S) A(S) 包含在 S S S 上可以采取的所有法律行动。 通过采取合适的行动,算法可以经过路径 ( s , a ) (s, a) (s,a) 从一个状态 s s s 移动到另外一个,记作 a ∈ A ( s ) a \in A(s) a∈A(s)。可以有与边相关联的变量,算法使用这些变量来指示在状态 s s s 采取行动 A A A 的 “value”。

我们采用MCTS来解决长方体的异常定位问题,如下所示。 我们首先对这个长方体中的每个 e e e 计算 p s ( e ) ps(e) ps(e) ,并根据 p s ( e ) ps(e) ps(e) 对所有 e e e 进行排序。每个状态 s s s 对应于当前正在探索的候选根本原因集 S ( s ) S(s) S(s)。 N ( s ) N(s) N(s) 是 s s s 被访问的次数。 我们为每个边 ( s , a ) (s,a) (s,a) 设置三个变量。 N ( s , a ) N(s,a) N(s,a) 是访问计数,即该边(s,a)被访问的次数。 p s ( S ( s ) ) ps(S(s)) ps(S(s)) 是集合 S ( s ) S(s) S(s) 的得分。 假定 S S S 在 ( S , A ) (S,A) (S,A) 之后跃迁到 S ′ S^\prime S′。 则边 ( S , A ) (S,A) (S,A) 的作用值 Q ( s , a ) = max ⁡ u ∈ { s ′ } ∪ descendent  ( s ′ ) p s ( S ( u ) ) Q(s, a)=\max _{u \in\left\{s^{\prime}\right\} \cup \text { descendent }\left(s^{\prime}\right)} p s(S(u)) Q(s,a)=maxu∈{s′}∪ descendent (s′)​ps(S(u)),该作用值等于树中 S ′ S^{\prime} S′ 及其子节点的最大潜在得分。 对于每个 S S S 将 Q ( s , a ) Q(s, a) Q(s,a) 初始化为 P S ( S ( s ) ) PS(S(s)) PS(S(s))。


现在我们来说明MCTS迭代在我们的异常定位中的四个步骤。 假设在当前迭代开始时,状态树如图所示 4(a)。

(a) 选择 此步骤的目标是从当前状态树中选择一个要展开的节点。 每次执行此步骤时,树遍历总是从根状态开始。 假设在这个选择步骤中我们已经前进到当前状态 s s s。如果 A ( s ) A(s) A(s) 中的所有动作都在以前的迭代中被访问过,则通过使用上限置信阈值(Upper Confidence thresholds, UCB)算法 [7],从可用动作 A ( s ) A(s) A(s) 的集合中选择动作 a a a,如公式8所示。

a = arg ⁡ max ⁡ a ∈ A ( s ) { Q ( s , a ) + C ln ⁡ N ( s ) N ( s , a ) } . (8) a=\underset{a \in A(s)}{\arg \max }\left\{Q(s, a)+C \sqrt{\frac{\ln N(s)}{N(s, a)}}\right\} . \tag{8} a=a∈A(s)argmax​{Q(s,a)+CN(s,a)lnN(s)​ ​}.(8)

Q ( s , a ) Q(s,a) Q(s,a) 是采取移动 a a a 的值。 Q ( s , a ) Q(s,a) Q(s,a) 值越高,在该选择步骤中选择移动 a a a 的机会越大,这是 MCTS 中的利用机制。 等式的第二部分只是用于探索的标准 UCB 机制。 可以通过修改 C C C 来改变利用与研究(exploitation and exploration)之间的平衡,一个常用的 C C C 值是 2 \sqrt{2} 2 ​ 文献[8],我们在本文中选择这个值,也可以在实践中根据经验选择这个值。

如果存在根本没有被用过的动作 a ∈ A ( s ) a \in A(s) a∈A(s),因为 N ( s , a = 0 N(s, a=0 N(s,a=0 所以不能应用公式 8 。相反,我们将采取未访问操作的概率指定为 R = ( 1 − Q ( s , a m a x ) ) R=(1-Q(s,a_{max})) R=(1−Q(s,amax​)),其中 a m a x = arg max ⁡ a ∈ A ( s ) ∩ N ( s , a ) = 0 Q ( s , a ) a_{max} = \argmax_{a\in A(s)\cap N(s,a)=0}Q(s,a) amax​=argmaxa∈A(s)∩N(s,a)=0​Q(s,a)。

选择步骤从树的根部开始,并在根据公式8选择叶子状态时停止或者选择一个未访问的动作。比如,在图4(a) 中的实线包含的部分,选择叶状态 { e 1 , e 3 } \{e_1,e_3\} {e1​,e3​} 时停止选择。

(b) 扩展 在选择步骤中选择状态 S S S 之后,我们通过添加一个新节点 S ′ S^\prime S′ 来扩展蒙特卡罗树, 其中 S ( s ′ ) = S ( s ) ∪ { e ∗ } S\left(s^{\prime}\right)=S(s) \cup\left\{e^{*}\right\} S(s′)=S(s)∪{e∗} , e ∗ = arg ⁡ max ⁡ e ∈ { e 1 , e 2 , … , e n } − S ( s ) p s ( e ) e^{*}=\arg \max _{e \in\left\{e_{1}, e_{2}, \ldots, e_{n}\right\}-S(s)} p s(e) e∗=argmaxe∈{e1​,e2​,…,en​}−S(s)​ps(e)。 我们选择 e ∗ e^{*} e∗使其具有剩余元素中最大的 p s ( s ) ps(s) ps(s) 值,而不是随机选择 e ∗ e^{*} e∗。比如,在图4(b)中, S ( s ) = { e 1 , e 3 } S(s)=\{e_1,e_3\} S(s)={e1​,e3​} 被选中后, e ∗ = e 4 e^{*}=e_4 e∗=e4​ 会被添加,得到 s ′ s' s′ ,并且 S ( s ′ = { e 1 , e 3 , e 4 } S(s'=\{e_1,e_3,e_4\} S(s′={e1​,e3​,e4​}。

( c ) 评估 为了初始化扩展后的新节点(如图4©中的 { e 1 , e 3 , e 4 } \{e_1,e_3,e_4\} {e1​,e3​,e4​}),我们计算其 p s ps ps, Q Q Q 和 N N N。

(d) Backup 从 S ′ S^{\prime} S′ 到根的路径上的所有节点上的动作值 Q Q Q 和访问计数 N N N 都将更新,如图4(d) 中的粗体箭头所示,回想 Q Q Q 的定义,沿着这条路径,我们只有当子节点的 Q Q Q 大于父亲的 Q Q Q 时才更新父亲的 Q Q Q。

在长方体中本地化根本原因集。 我们在每个长方体中应用MTCS,对此我们迭代执行上述四个步骤,直到至少出现以下三个条件之一:

  1. 找到了一个最佳集合,即如果 p s ( S ) ≥ P T ps(S)\ge PT ps(S)≥PT,满足条件 B S e t = S BSet=S BSet=S;
  2. 对集合的所有可用节点进行扩展;
  3. 迭代时间大于经验配置的最大数 M M M。

在第二个终止条件和第三个终止条件下,如果我们没有得到一个 P S PS PS 大于 P T PT PT 的集合,我们将返回 P S PS PS 最大的 B S e t BSet BSet 作为 R S e t RSet RSet。

20.5.4 分层剪枝 Hierarchical Pruning

为了进一步减少高层长方体的搜索空间,Hotspot采用了分层剪枝策略。 其基本思想是,Hotspot 逐层搜索长方体,即从第1层到第 L L L 层,在搜索到较低的一层后,在较高的一层中剪除一些不太可能是根本原因的元素。

对于层 L L L ( 1 ≤ l ≤ L 1\leq l \leq L 1≤l≤L) 中的每一个长方体 B B B,利用 MCTS 算法可以得到最优集(该长方体潜在得分最大的子集) B S e t l , B {BSet}_{l,B} BSetl,B​。 我们的直觉如下。 如果 l + 1 l+1 l+1 层中的一个元素 ( p 1 , i 1 , ∗ , ∗ ) (p_1,i_1,*,*) (p1​,i1​,∗,∗) 具有较高的潜在得分,那么它在 l l l 层中的父元素 ( P 1 , ∗ , ∗ , ∗ ) (P_1,*,*,*) (P1​,∗,∗,∗) 和 ( ∗ , i 1 , ∗ , ∗ ) (*,i_1,*,*) (∗,i1​,∗,∗) 也将具有相对较高的潜在得分。 因此,如果父元素的潜在得分很低,那么每个子元素都不太可能是根本原因元素,尽管可能有很少的情况,子元素 a a a 的潜在得分确实高于其父元素,但其他一些子元素 b b b 的 PV 变化抵消了 a a a 对父元素潜在得分的影响。 因此,如果层 l l l 中的一个元素不在 B S e t l , b BSet_{l,b} BSetl,b​ 中,HotSpot会选择剪除它的所有子元素。 这种方法在思路上与关联规则挖掘中的Apriori原理非常相似[3]。 我们称我们的剪枝方法为层次剪枝,因为它的剪枝策略利用了层的层次信息。

我们以表7中的一个例子来说明我们在图5的分层剪枝方法。假设我们在第1层,使用 MCTS 获得的最佳集合是 B S e t 1 , B P = { ( F u j i a n , ∗ ) , ( J i a n g s u , ∗ ) } BSet_{1,B_P}=\{(Fujian,*),(Jiangsu,*)\} BSet1,BP​​={(Fujian,∗),(Jiangsu,∗)} 和 p s ( B S s e t 1 , B l = { ( ∗ , M o b i l e ) , ( ∗ , U n i c o m ) } ps(BSset_{1,B_l}=\{(*,Mobile),(*, Unicom)\} ps(BSset1,Bl​​={(∗,Mobile),(∗,Unicom)} 其中, p s ( B S s e t 1 , B l = 0.32 ps(BSset_{1,B_l}=0.32 ps(BSset1,Bl​​=0.32 。 在第2层搜索长方体时,由于元素 ( Z h e j i a n g , U n i c o m ) (Zhejiang, Unicom) (Zhejiang,Unicom) 和 ( Z h e j i a n g , U n i c o m ) (Zhejiang, Unicom) (Zhejiang,Unicom) 的父元素 ( Z h e j i a n g , ∗ ) (Zhejiang, *) (Zhejiang,∗) 不在第1层的 BSets 中,所以我们对元素 ( Z h e j i a n g , U n i c o m ) (Zhejiang, Unicom) (Zhejiang,Unicom) 进行剪枝。 因此,我们只需要搜索剩下的四个元素来寻找 B P , I B_{P,I} BP,I​。 这样,潜在集的数量将从 63 减少到 15( 2 6 − 1 2^6-1 26−1 到 2 4 − 1 2^4-1 24−1)。 然后在第2层再次使用MCTS,得到 R S e t = B S e t 2 , B P , I = { ( F u j i a n , M o b i l e ) , ( J i a n g s u , U n i c o m ) } RSet=BSet_{2,B_{P,I}}=\{(Fujian, Mobile),(Jiangsu,Unicom)\} RSet=BSet2,BP,I​​={(Fujian,Mobile),(Jiangsu,Unicom)},其中 p s ( B S e t 2 , B P , I ) = 1 ps(BSet_{2,B_{P,I}})=1 ps(BSet2,BP,I​​)=1。

20.5.5 算法总览

我们现在总结我们的总体热点算法,其伪代码如算法1所示。 HotSpot以元素的 PV 值、潜在阈值 P T PT PT 和最大迭代次数 $M作为输入。 它从第1层开始,对于给定层的每个长方体,Hotspot应用MCTS来找到其最佳集合。 当从一层到下一层时,使用分层剪枝。 我们重复这个过程,直到搜索到层 L L L,或者得到根本原因集 R s e t ( P s ( R s e t ) > P T ) Rset(Ps(Rset)>PT) Rset(Ps(Rset)>PT)。 最终输出的 R S e t RSet RSet 是算法生成的所有 B S e t BSet BSet 中 P S PS PS 最大的 B S e t BSet BSet。

算法步骤描述清晰,代码中还添加了注解,容易理解,这里不复介绍。

20.6 论文结构

  1. 引言:

    • 引言部分介绍了异常检测在关键绩效指标(KPI)分析中的重要性和挑战。
    • 讨论了传统的异常检测方法在处理多维属性和异常定位方面的限制。
  2. 相关工作:

    • 综述了与异常检测和异常定位相关的研究工作。
    • 分析了现有方法在处理多维属性和异常定位问题上的优缺点。
  3. 方法:

    • 详细介绍了论文提出的 “HotSpot” 方法,用于多维属性的异常定位。
    • 解释了该方法的整体框架和关键步骤。
    • 描述了异常评分计算、热点位置确定和异常定位结果生成等关键技术。
  4. 实验设计:

    • 介绍了使用的数据集和评估指标。
    • 解释了实验设计和设置,包括参数调整和性能评估方法。
  5. 实验结果:

    • 展示了使用 “HotSpot” 方法进行异常定位的实验结果。
    • 通过性能指标和可视化效果评估了该方法的有效性和准确性。
  6. 讨论:

    • 对实验结果进行了讨论和分析。
    • 探讨了方法的局限性和未来改进的方向。
  7. 结论:

    • 总结了论文的主要贡献和实验结果。
    • 强调了 “HotSpot” 方法在多维属性异常定位方面的潜力和应用前景。
    • 提出了未来研究的展望。

20.7 实验部分

论文源码未公开,目前只能在 github 上找到一个相关的代码可以参考一下,https://github.com/junkfei/Multidimensional_root_cause_analysis/tree/4bf4865e8f633e88f3af91f684bbb12ac24d471c

代码并非论文源码,仅供参考。

20.8 总结

论文强调的是如何找到异常原因,并且定位到异常发生根因。这个与我们之前提到的论文均不相同,但这类型的算法是非常有意义的。工业场景下异常发生后除了及时修复问题,减少异常带来的损失,还应该定位到哪个步骤出了问题,并不断总结,优化常常出问题的步骤。

所以如果在其他方向上找不到可以发论文的点,不妨考虑这个方向。

没能找到合适的代码,给各位小伙伴们道歉 ~ 不过希望读者查查资料,了解论文原理,并且想想自己是否可以参考这个思路进行创新,创造属于自己的可靠方法。

Smileyan
2022.11.30 22:57

《异常检测——从经典算法到深度学习》20 HotSpot:多维特征 Additive KPI 的异常定位相关推荐

  1. 《异常检测——从经典算法到深度学习》5 Opprentice——异常检测经典算法最终篇

    <异常检测--从经典算法到深度学习> 0 概论 1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法 3 基于One-Class SVM的异常检测算法 4 基于高斯概率密度异常检测 ...

  2. 《异常检测——从经典算法到深度学习》15 通过无监督和主动学习进行实用的白盒异常检测

    <异常检测--从经典算法到深度学习> 0 概论 1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法 3 基于One-Class SVM的异常检测算法 4 基于高斯概率密度异常检测 ...

  3. 《异常检测——从经典算法到深度学习》18 USAD:多元时间序列的无监督异常检测

    <异常检测--从经典算法到深度学习> 0 概论 1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法 3 基于One-Class SVM的异常检测算法 4 基于高斯概率密度异常检测 ...

  4. 《异常检测——从经典算法到深度学习》9 异常检测资料汇总(持续更新抛砖引玉)

    <异常检测--从经典算法到深度学习> 0 概论 1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法 3 基于One-Class SVM的异常检测算法 4 基于高斯概率密度异常检测 ...

  5. 《异常检测——从经典算法到深度学习》16 基于VAE和LOF的无监督KPI异常检测算法

    <异常检测--从经典算法到深度学习> 0 概论 1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法 3 基于One-Class SVM的异常检测算法 4 基于高斯概率密度异常检测 ...

  6. 《异常检测——从经典算法到深度学习》7 基于条件VAE异常检测

    <异常检测--从经典算法到深度学习> 0 概论 1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法 3 基于One-Class SVM的异常检测算法 4 基于高斯概率密度异常检测 ...

  7. 《异常检测——从经典算法到深度学习》8 Donut: 基于 VAE 的 Web 应用周期性 KPI 无监督异常检测

    <异常检测--从经典算法到深度学习> 0 概论 1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法 3 基于One-Class SVM的异常检测算法 4 基于高斯概率密度异常检测 ...

  8. 目标检测与识别算法综述:从传统算法到深度学习(二)

    作   者:XJTU_Ironboy 时   间:2018年11月 联系方式:tzj19970116@163.com 本文结构: 摘要 介绍 2.1 大致框架 2.2 测试评价指标 2.3 相关比赛介 ...

  9. VisionBank AI实现4项技术突破----传统算法融合深度学习,重新定义“工业视觉检测大脑”

    机器视觉经过长时间的发展,技术不断取得重大突破并被广泛应用,当前已遍布工业生产的各个环节.而且机器视觉易于实现自动化集成,软件集成,是实现智能制造的基础技术.据统计,中国的机器视觉市场需求近几年处于持 ...

最新文章

  1. Zbrush2021写实人物肖像雕刻学习教程
  2. 80页笔记看遍机器学习基本概念、算法、模型,帮新手少走弯路
  3. apache laravel主页500_PS强大笔刷,插画师完美Hold住各种效果!(附500个笔刷)
  4. bugfree3.0.2版本升级--更新版
  5. html判断表单是否为空,layui判断表单是否为空
  6. Spark-core(核心)的基本介绍
  7. 修改autor后面邮箱_如何修改LOL手游昵称
  8. item name=android:width,Android:形状中的笔划创建笔划宽度的边距
  9. SQL 语句执行顺序
  10. bootstrap 导航菜单 折叠位置_教大家如何编写一个网页导航条
  11. ECCV 2020 论文大盘点-视频理解与分类篇
  12. ReferenceError: XXX is not defined 错误及解决办法
  13. 知识图谱组队学习Task05——图数据库查询
  14. 深挖基于 CSS 的变换与动画技术
  15. Concept Drift(概念漂移)
  16. java贪吃蛇代码_java贪吃蛇游戏实现代码
  17. 电商项目——分布式基础概念和电商项目微服务架构图,划分图的详解——第二章——上篇
  18. java FTP获取文件夹中所有文件
  19. client-go的使用及源码分析
  20. 不想在网易博客写技术文章了

热门文章

  1. 【精华】光纤项目系统概述
  2. MATLAB算法实战应用案例精讲-【优化算法】樽海鞘群算法(SSA)及其算法变种(附matlab代码实现)
  3. mescroll-uni上拉加载失效
  4. 信号完整性(SIPI)学习--22--传输线的损耗(1)
  5. 《信号与线性系统分析》第5版知识点总结——1.信号与系统
  6. 神经网络模型预测步骤_神经网络预测值范围
  7. CentOS 7.9的yum和rpm和tar和vi编辑器以及常用Linux命令使用
  8. DataGrip连接人大金仓数据库(kingbase)详细教程【超详细】
  9. 哈斯HASS驱动器电源维修HASS40HP/20HP
  10. “河北超生女婴被抱走”案二审驳回上诉维持原判