摘要:RRCF是亚马逊提出的一个流式异常检测算法,是对孤立森林的改进,可对时序或非时序数据进行异常检测。本文是我从事AIOps研发工作时所做的基于RRCF的时序异常检测方案。

1.      数据格式

将时间序列以滑动窗口的形式转换为d维空间点。例如对于时间序列[1,2,3,4,5,6,7,8],d=5,那么可以将该时间序列转换为4个空间点[(1,2,3,4,5),(2,3,4,5,6),(3,4,5,6,7),(4,5,6,7,8)]。RCF以这样的高维空间点进行建模和检测。

2.      参数

点的维度d;

森林里树的数量tree_num;

单棵树的大小tree_size,即一棵树中包含多少点;

异常阈值thresh,即根据RCF异常得分判定是否异常的阈值。

3.      RCF原理

3.1树的构建

输入:数据集S,数据的维度d。

输出:一个包含branch和leaf的树。

  1. 计算每个维度上的跨度:
  2. 维度选择:按照的概率随机选择一个维度q.
  3. 切分点选择:对维度q,按照均匀概率分布,随机选择该维度的一个切分点.
  4. 维度q和对应切分点p构成一个branch.该branch将数据集S切分为两个子节点:
  5. 若或者集合中只有一个点,则将该子节点标记为这棵树的叶子节点(leaf)。
  6. 若或者集合中的点的数量大于1,则重复迭代1~5步骤。直到所有的点都变为叶子节点(leaf)。

3.2点的删除和插入

可以证明(论文引理4、6):

1、点的删除:将点p从由S构成的树T中删除,得到的树T’和直接从点集S-{p}构建的树T’’的概率分布是一致的。

2、点的插入:将点p插入到由S构成的树T中,得到的树T’和直接从点集S∪{p}构建的树T’’的概率分布是一致的。

这两个引理意味着,要计算点的加入和删除带来的树的复杂度的变化,只需要将点插入到原有的树中,或从原有的树中删除,而不需要使用新的点集重新构建树。这是RCF算法可用于流式检测的理论依据。

3.3异常得分codisp的计算

树的表示:树的每一个叶子节点都可以使用一个bit向量进行表示,如(0,0,1,0),0代表是父节点的左孩子,1代表是父节点的右孩子,同时向量的长度(即比特数)也就是该叶子节点在树中的深度。因此,一棵树可由所有叶子节点的bit向量来刻画。

树的复杂度:将树T的复杂度|M(T)|定义为,描述一棵树所需要的bit数。因此树的复杂度也等于所有叶子节点在树中的深度的和。

点的displacement:将一个叶子节点从树中删除,将导致树的结构发生改变,也会导致树的复杂度发生改变。将一个点删除后,树的复杂度的变化量(减少量)定义为该点的displacement。点的displacement表征了一个点的异常程度,displacement越大,该点越可能是异常。

点的co-displacement:displacement是计算删除一个点后树的复杂度的变化量,假如被删除的点是异常点,但如果树中还存和被删除点十分靠近的点,那么删除这个异常点将不会导致树的结构发生大的变化,因此其displacement就不会很大,因此很可能会把这个点误判为非异常点。这种现象在异常检测领域被称为masking。为解决masking问题,使用co-displacement作为点的异常评分。

在计算co-disp时,除了删除待检测目标点,还要考虑删除与目标点比较接近的点集,然后计算树的复杂度的变化量。

具体做法为(证明见引理2):

从待检测的叶子节点出发,沿着叶子节点到根节点的路径,分别尝试删除该叶子节点、该叶节点的父、祖父、曾祖父……节点,每删除一个节点(也就是一个点集),计算模型复杂度的变化量。该叶子节点的co-disp定义为所有变化量的最大值。

异常检测:检测时,将待检测点插入到森林中的每一棵树中,计算所有树对该点的异常评分co-disp,取其平均值作为该点的异常得分。

4.      异常检测过程

4.1热启动

4.1.1模型训练
  1. 将时间序列转化为空间点集S,且应保证|S|>=tree_num*tree_size;
  2. 如果|S|>tree_num*tree_size,对S进行下采样至 |S|=tree_num*tree_size;
  3. 对S进行分区,将其分为tree_num份,每份包含tree_size个点;
  4. 使用S的每一个分区构建一棵树,所有的树构成一个森林。
  5. 接收一个新点;
  6. 对该点是否异常进行判定:
4.1.2异常检测过程

i.            将新点插入到每一棵树中,并计算每一棵树对该点的异常评分co-disp;

ii.            计算所有树的异常评分的均值作为该点的异常得分;

iii.            异常得分与异常阈值比较,进行异常判定;

iv.            将新点从每棵树中删除;

  1. 将新点更新到模型中:

i.            随机选择一棵树;

ii.            将该树中最旧的点删除;

iii.            将新点插入该树;

4.2冷启动

也可以冷启动的方式运行,不事先训练模型,直接启动检测,为每个序列初始化一个模型(由若干空树构成的森林),随着数据的流入,树不断增长,直到达到设定的tree_size后,模型的大小不再改变,但仍然持续更新。这种工作方式可由引理6作支撑。过程类似:

a)       首先初始化tree_num棵空树;

b)      接收一个新点;

c)       对该点是否异常进行判定:

i.            将新点插入到每一棵树中,并计算每一棵树对该点的异常评分co-disp;

ii.            计算所有树的异常评分的均值作为该点的异常得分;

iii.            异常得分与异常阈值比较,进行异常判定;

iv.            将新点从每棵树中删除;

d)      将新点更新到模型中:

i.            随机选择一棵树;

ii.            如果树的大小已达到tree_size,则将该树中最旧的点删除,否则跳过;

iii.            将新点插入该树;

基于RRCF(robust random cut forest)的时间序列异常检测流程的更多相关文章

  1. 异常检测算法Robust Random Cut Forest(RRCF)关键定理引理证明

    摘要:RRCF是亚马逊发表的一篇异常检测算法,是对周志华孤立森林的改进.但是相比孤立森林,具有更为扎实的理论基础.文章的理论论证相对较为晦涩,且没给出详细的证明过程.本文不对该算法进行详尽的描述,仅对 ...

  2. 时间序列异常检测算法S-H-ESD

    1. 基于统计的异常检测 Grubbs' Test Grubbs' Test为一种假设检验的方法,常被用来检验服从正太分布的单变量数据集(univariate data set)\(Y\) 中的单个异 ...

  3. 基于变分自编码器(VAE)利用重建概率的异常检测

    本文为博主翻译自:Jinwon的Variational Autoencoder based Anomaly Detection using Reconstruction Probability,如侵立 ...

  4. AIOps探索:基于VAE模型的周期性KPI异常检测方法——VAE异常检测

    AIOps探索:基于VAE模型的周期性KPI异常检测方法 from:jinjinlin.com   作者:林锦进 前言 在智能运维领域中,由于缺少异常样本,有监督方法的使用场景受限.因此,如何利用无监 ...

  5. 异常检测-基于孤立森林算法Isolation-based Anomaly Detection-1-论文学习

    论文http://202.119.32.195/cache/10/03/cs.nju.edu.cn/da2d9bef3c4fd7d2d8c33947231d9708/tkdd11.pdf 1. INT ...

  6. 异常检测算法--Isolation Forest

    南大周志华老师在2010年提出一个异常检测算法Isolation Forest,在工业界很实用,算法效果好,时间效率高,能有效处理高维数据和海量数据,这里对这个算法进行简要总结. iTree 提到森林 ...

  7. 异常检测算法:Isolation Forest

    iForest (Isolation Forest)是由Liu et al. [1] 提出来的基于二叉树的ensemble异常检测算法,具有效果好.训练快(线性复杂度)等特点. 1. 前言 iFore ...

  8. 基于PySpark的网络服务异常检测系统 (四) Mysql与SparkSQL对接同步数据 kmeans算法计算预测异常

    基于Django Restframework和Spark的异常检测系统,数据库为MySQL.Redis, 消息队列为Celery,分析服务为Spark SQL和Spark Mllib,使用kmeans ...

  9. 基于PySpark的网络服务异常检测系统 阶段总结(二)

    在上篇博文中介绍了网络服务异常检测的大概,本篇将详细介绍SVDD和Isolation Forest这两种算法 1. SVDD算法 SVDD的英文全称是Support Vector Data Descr ...

随机推荐

  1. yolo训练数据集

    最近了解了下yolov3的训练数据集部分,总结了以下操作步骤:(基于pytorch框架,请预先装好pytorch的相关组件) 1.下载ImageLabel软件对图片进行兴趣区域标记,每张图片对应一个x ...

  2. 2019HDU多校第七场 HDU6656 Kejin Player H 【期望递归】

    一.题目 Kejin Player H 二.分析 因为在当前等级$i$,如果升级失败可能会退回到原来的某一等级$x$,相当于就是失败的期望就是$E + (Sum[i-1] - Sum[x-1]) + ...

  3. Python打包之setuptools

    参考链接1 参考链接2 参考链接3 一.setuptools介绍 Setuptools是Python Distutils的加强版,使开发者构建和发布Python包更加容易,特别是当包依赖于其他包时.用 ...

  4. 一招教你写博客,Typora+PicGo+阿里云oss,最好用的Markdown+最好用的图床工具!

    博客 写博客的好处 1.使自己变得更善于观察.一旦你养成了记博客的习惯,与此同时你也赋予了一个更好的机会给自己,让自己去更细致地观察生活.一个人的生活经历本就是价值连城的,从中学习到的知识,教训更是异 ...

  5. 2018ICPC南京Problem G. Pyramid

    题意: 询问类似于这样的三角形中:里面正三角形的个数是多少. 思路:打表找了个规律发现就是C4n+3     1 //#include<bits/stdc++.h> 2 #include& ...

  6. 策略枚举:消除在项目里大批量使用if-else的正确姿势

    文/朱季谦 想起刚开始接触JAVA编程的时候,若遇到大量流程判断语句,几乎满屏都是if-else语句,多得让自己都忘了哪里是头,哪里是尾,但是,纵然满屏是if-else,但彼时也没有觉得多别扭.等到编 ...

  7. Golang 基于Prometheus Node_Exporter 开发自定义脚本监控

    Golang 基于Prometheus Node_Exporter 开发自定义脚本监控 公司是今年决定将一些传统应用从虚拟机上迁移到Kubernetes上的,项目多而乱,所以迁移工作进展缓慢,为了建立 ...

  8. 第20 章 : GPU 管理和 Device Plugin 工作机制

    GPU 管理和 Device Plugin 工作机制 本文将主要分享以下几个方面的内容: 需求来源 GPU 的容器化 Kubernetes 的 GPU 管理 工作原理 课后思考与实践 需求来源 201 ...

  9. SCIP:构造过程抽象--面向对象的解释

    心智的活动,除了尽力产生各种简单的认知之外,主要表现为如下三个方面:(1)将若干简单认知组合为一个复合的认识,由此产出各种复杂的认知.(2)将两个认知放在一起对照,不管他们如何简单或者复杂,在这样做时 ...

  10. 简单创建ASP.NET网站(1)

    闲话 公司员工辞职了,我从原来的Delphi开发转型到ASP.NET开发,接受同时的相关工作,因为网上搜了视频学习,还是不觉得有什么提升,一脸懵逼,所以就买了书籍自己慢慢学习,为了加深记忆,我就记录一 ...