基于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 ...
随机推荐
- P3388 【模板】割点(割顶) 题解 (Tarjan)
题目链接 P3388 [模板]割点(割顶) 解题思路 最近学的东西太杂了,多写点博客免得自己糊里糊涂的过去了. 这个题求割点,感觉这篇文章写得挺好. 割点是啥?如果去掉这个点之后连通图变成多个不连通图 ...
- P1725 琪露诺 题解(单调队列)
题目链接 琪露诺 解题思路 单调队列优化的\(dp\). 状态转移方程:\(f[i]=max{f[i-l],f[i-l+1],...,f[i-r-1],f[i-r]}+a[i]\) 考虑单调队列优化. ...
- PTE 准备之 Repeat sentence
Repeat sentence After listening to a sentence ,repeat the sentence 3-9 seconds 15 seconds Strategies ...
- HYSBZ 1734 二分
传送门 题面: 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1 ...
- Nodejs学习笔记(1) Nodejs安装+借助express模块简单部署服务器
1 安装 1.1 下载和安装 1.2 什么是REPL?如何使用? 1.3 npm对单一模块的安装和删除功能 1.4 通过package.json自定义模块(安装模块) 1.5 设置全局目录 2 部署网 ...
- Android学习之CoordinatorLayout+FloatingActionButton+Snackbar
CoordinatorLayout •简介 CoordinatorLayout 协调布局,可以理解为功能更强大的 FrameLayout 布局: 它在普通情况下作用和 FrameLayout 基本一致 ...
- markdown的基础语法
一级标题,一个#加空格 二级标题,两个#加空格 三级标题,三个#加空格 四级标题,四个#加空格 五级标题,五个#加空格 六级标题(最多支持到六级),六个#加空格 字体 粗体,两边加两个星号 斜体,两边 ...
- 数栈SQL优化案例:隐式转换
MySQL是当下最流行的关系型数据库之一,互联网高速发展的今天,MySQL数据库在电商.金融等诸多行业的生产系统中被广泛使用. 在实际的开发运维过程中,想必大家也常常会碰到慢SQL的困扰.一条性能不好 ...
- python中栈的实现
栈是一种线性数据结构,用先进后出或者是后进先出的方式存储数据,栈中数据的插入删除操作都是在栈顶端进行,常见栈的函数操作包括 empty() – 返回栈是否为空 – Time Complexity : ...
- 《RT-Thread Studio开发STM32》第一章~第一节《配置STM32H743XIH6点亮LED灯》
安装RT-Thread Studio后添加相关芯片库文件,打开软件 打开SDK管理界面,安装相关的库文件,本次采用STM32H743XIH6芯片,野火开发板. 新建工程并设置相关的参数 先编译下下载到 ...