基于RRCF(robust random cut forest)的时间序列异常检测流程
摘要: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的树。
- 计算每个维度上的跨度:
- 维度选择:按照
的概率随机选择一个维度q.
- 切分点选择:对维度q,按照均匀概率分布,随机选择该维度的一个切分点
.
- 维度q和对应切分点p构成一个branch.该branch将数据集S切分为两个子节点:
;
- 若或者集合中只有一个点,则将该子节点标记为这棵树的叶子节点(leaf)。
- 若或者集合中的点的数量大于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模型训练
- 将时间序列转化为空间点集S,且应保证|S|>=tree_num*tree_size;
- 如果|S|>tree_num*tree_size,对S进行下采样至 |S|=tree_num*tree_size;
- 对S进行分区,将其分为tree_num份,每份包含tree_size个点;
- 使用S的每一个分区构建一棵树,所有的树构成一个森林。
- 接收一个新点;
- 对该点是否异常进行判定:
4.1.2异常检测过程
i. 将新点插入到每一棵树中,并计算每一棵树对该点的异常评分co-disp;
ii. 计算所有树的异常评分的均值作为该点的异常得分;
iii. 异常得分与异常阈值比较,进行异常判定;
iv. 将新点从每棵树中删除;
- 将新点更新到模型中:
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)的时间序列异常检测流程的更多相关文章
- 异常检测算法Robust Random Cut Forest(RRCF)关键定理引理证明
摘要:RRCF是亚马逊发表的一篇异常检测算法,是对周志华孤立森林的改进.但是相比孤立森林,具有更为扎实的理论基础.文章的理论论证相对较为晦涩,且没给出详细的证明过程.本文不对该算法进行详尽的描述,仅对 ...
- 时间序列异常检测算法S-H-ESD
1. 基于统计的异常检测 Grubbs' Test Grubbs' Test为一种假设检验的方法,常被用来检验服从正太分布的单变量数据集(univariate data set)\(Y\) 中的单个异 ...
- 基于变分自编码器(VAE)利用重建概率的异常检测
本文为博主翻译自:Jinwon的Variational Autoencoder based Anomaly Detection using Reconstruction Probability,如侵立 ...
- AIOps探索:基于VAE模型的周期性KPI异常检测方法——VAE异常检测
AIOps探索:基于VAE模型的周期性KPI异常检测方法 from:jinjinlin.com 作者:林锦进 前言 在智能运维领域中,由于缺少异常样本,有监督方法的使用场景受限.因此,如何利用无监 ...
- 异常检测-基于孤立森林算法Isolation-based Anomaly Detection-1-论文学习
论文http://202.119.32.195/cache/10/03/cs.nju.edu.cn/da2d9bef3c4fd7d2d8c33947231d9708/tkdd11.pdf 1. INT ...
- 异常检测算法--Isolation Forest
南大周志华老师在2010年提出一个异常检测算法Isolation Forest,在工业界很实用,算法效果好,时间效率高,能有效处理高维数据和海量数据,这里对这个算法进行简要总结. iTree 提到森林 ...
- 异常检测算法:Isolation Forest
iForest (Isolation Forest)是由Liu et al. [1] 提出来的基于二叉树的ensemble异常检测算法,具有效果好.训练快(线性复杂度)等特点. 1. 前言 iFore ...
- 基于PySpark的网络服务异常检测系统 (四) Mysql与SparkSQL对接同步数据 kmeans算法计算预测异常
基于Django Restframework和Spark的异常检测系统,数据库为MySQL.Redis, 消息队列为Celery,分析服务为Spark SQL和Spark Mllib,使用kmeans ...
- 基于PySpark的网络服务异常检测系统 阶段总结(二)
在上篇博文中介绍了网络服务异常检测的大概,本篇将详细介绍SVDD和Isolation Forest这两种算法 1. SVDD算法 SVDD的英文全称是Support Vector Data Descr ...
随机推荐
- frameset、frame和div 、iframe
框架一般应用于首页的界面排版工作.把一个网页切割成多个页面管理.frame文件一般只包含框架的布局信息,不会包含其他内容,所有的页面效果都是在各个frameset页面内显示.他们都从属于frame文件 ...
- BZOJ_1503 [NOI2004]郁闷的出纳员 【Splay树】
一 题面 [NOI2004]郁闷的出纳员 二 分析 模板题. 对于全部员工的涨工资和跌工资,可以设一个变量存储起来,然后在进行删除时,利用伸展树能把结点旋转到根的特性,能够很方便的删除那些不符合值的点 ...
- EntityFrameworkCore之工作单元的封装
1. 简介 2. DbContext 生命周期和使用规范 2.1. 生命周期 2.2. 使用规范 2.3. 避免 DbContext 线程处理问题 3. 封装-工作单元 3.1. 分析 3.2. 设计 ...
- TEB 、TIB、PEB--Vista 32
TEB struct TEB typedef struct _TEB { NT_TIB NtTib; PVOID EnvironmentPointer; CLIENT_ID ClientId; PVO ...
- 文字变图片——GitHub 热点速览 v.21.14
作者:HelloGitHub-小鱼干 程序的力量,在 deep-daze 体现得淋漓尽致,你用一句话描述下你的图片需求,它就能帮你生成对应图片.同样的,appsmith 的力量在于你只要拖拽即可得到一 ...
- Python代码简化
让代码更Pythonic 当然不要过分追求简洁,不然阅读的人就遭殃了, 部分逻辑复杂的情况还应按照清晰的逻辑脉络去写方便阅读, 毕竟我们是用代码实现功能然后维护,而不是单单的炫技. ######### ...
- VS2019 自定义项目模板
前言: 使用"宇宙最强IDE"开发项目时,都需要根据不同情况选择一个项目模板,来满足开发需求:如下 VS为我们提供了基础的项目模板,但现有项目模板未包含基础功能如:日志输出.审计日 ...
- 前端 JS 问题记录
立即执行函数 !function(){}() function 前面增加符号 ! ~ + - 之类,都是告诉浏览器自动执行这个匿名函数,因为这些符号的运算级别都是高的 (function(){... ...
- 「最强」Lettuce 已支持 Redis6 客户端缓存
Redis 客户端缓存 缓存的解决方案一般有两种: [L1] 内存缓存(如 Caffeine.Ehcache) -- 速度快,进程内可用,但重启缓存丢失,出现缓存雪崩的问题. [L2]集中式缓存(如 ...
- 2021浙江省程序省赛(ACFGJLM题解)
A 签到,加起来就行了,记得等于属于先手赢(2A) C 题意 给八个点三维坐标,问是否在三维是立方体 思路 八个点的连成56条线,如果是立方体的话有8条,24条,24条相同的线,且都不相同 用map存 ...