基于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 ...
随机推荐
- 2.掌握numpy数组
一.改变数组形态 reshape()--通过改变数组的维度改变数组形态 import numpy as np Array=np.arange(1,17,1) Array Array_1=np.aran ...
- 在Windows10搭建WebAssembly开发环境
最近研究WebAssembly技术,准备用WebAssembly编译C/C++代码供前端调用.网上看了很多文章,收获很大,现在就遇到的问题做一个记录. 官网关于windows开发环境搭建基本上几句话, ...
- Mybatis日志源码探究
一.项目搭建 1.pom.xml <dependencies> <dependency> <groupId>log4j</groupId> <ar ...
- PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642
PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642 题目描述: Shuffling is a procedure us ...
- 【oracle学习笔记02】Oracle Architecture —— Process Structure
Oracle中有三类进程: 1 User Process 2 Server Process Server Process is a program that directly interacts wi ...
- docker之镜像配置
以管理员sudo执行以下命令 docker ps -a 查看镜像的id docker exec -it 镜像id /bin/bash -i表示交互模式 -t表示启动容器进入命令行 加入这两参数,容器创 ...
- Java中获取类的运行时结构
获取运行时类的完整结构 通过反射获取运行时类的完整结构 Field(属性).Method(方法).Constructor(构造器).Superclass(父类).Interface(接口).Annot ...
- 前端 JS 问题记录
立即执行函数 !function(){}() function 前面增加符号 ! ~ + - 之类,都是告诉浏览器自动执行这个匿名函数,因为这些符号的运算级别都是高的 (function(){... ...
- SHA256sum系列命令检测文件完整性
1 sha256sum sha256sum是一个检测文件完整性的命令,一般下载的文件都会附带一个哈希值,使用sha256sum计算下载文件的哈希值再与目标哈希值比较即可确定文件是否完整,类似的命令还有 ...
- .ts 视频文件 .m3u8视频文件合并 转换为mp4
1. 先把 .m3u8.zip 格式文件解压到文件夹D:\a. 2. 将文件夹内的 .ts文件名处理好. 一般均为按顺序排列. (殊情况需要根据.m3u8文件记录处理.) 举例,根据实际情况处理. ( ...