精华内容
下载资源
问答
  • 时序数据异常检测

    2019-02-15 10:33:47
    outlier detection for temporal data 的综述,时序数据异常检测
  • 神经网络是一种模拟生物学神经的机器学习模型,数据来源于输入层并流经具有各种激活阈值的节点。 递归神经网络是一种在输入被理解之前保持其内部记忆的神经网络,所以它们可以进行数据流中时间依赖的结构的学习。 ...
  • 摘要:异常检测是目前时序数据分析最成熟的应用之一,有效的异常检测被广泛用于现实世界的很多领域,例如量化交易,网络安全检测、自动驾驶汽车和大型工业设备的日常维护。本文主要对目前主流的异常检测算法进行汇总...

                       时序数据异常检测算法简述与分类

    摘要:异常检测是目前时序数据分析最成熟的应用之一,有效的异常检测被广泛用于现实世界的很多领域,例如量化交易,网络安全检测、自动驾驶汽车和大型工业设备的日常维护。本文主要对目前主流的异常检测算法进行汇总并将其分为基于统计的异常检测、基于预测的异常检测等类别,介绍各自的优缺点并寻找适合时序数据的异常检测算法。

    关键词:异常检测,时序数据分析

     

    1 引言

        异常检测是目前时序数据分析最成熟的应用之一,有效的异常检测被广泛用于现实世界的很多领域,例如量化交易,网络安全检测、自动驾驶汽车和大型工业设备的日常维护。本文主要对目前主流的异常检测算法进行汇总并将其分为基于统计的异常检测、基于预测的异常检测等类别,介绍各自的优缺点并寻找适合时序数据的异常检测算法。
     

    1.1 异常类型

        异常大致分为三种类型:点异常、上下文异常和集合异常。它们常见的表现形式如下:
    (1)点异常:离群点、孤立点、异常值;
    (2)上下文异常:值无异常,但在上下文环境中呈现异常(如时序数据);
    (3)集合异常:单点无异常,但子集相对于全集呈现异常;

     

    2 异常检测算法类别

        现有的异常检测算法大致可以分为以下四类:
    (1)基于统计的异常检测算法:通过历史同期的数据分布来确定当前数据的合理波动范围。例如基于3σ准则的异常检测算法。
    (2)基于预测的传统异常检测算法:比较预测值与真实值的差异,超出阈值则认为是异常点,例如ARIMA、指数平滑法。
    (3)直接异常检测算法:如LOF、孤立森林、One-class SVM算法等。
    (4)基于深度学习的异常检测算法:对数据降维再升维重构,不能良好复原的点认为是异常点。例如基于GAN,自编码器,变分自编码器等的异常检测算法。

     

    2.1 基于统计的异常检测算法


    1.  基于3σ准则的异常检测算法
        借助正态分布的优良性质,3σ准则常用来判定数据是否异常。由于正态分布关于均值μ对称,且数值分布在(μ-σ,u+σ)中的概率为0.6827,数值分布在(μ-3σ,u+3σ)中的概率为0.9973。即只有0.3%的数据会落在均值的±3σ之外,这是一个小概率事件。为了避免极端值影响到模型整体的鲁棒性,常将其判定为异常值并从数据中剔除。
        基于统计的异常检测算法优点为计算简单,缺点为要求数据分布近似正态,受异常点的影响较大。
    注:除了常见的正态分布,还存在幂律分布。在日常的数据分析中,订单数据和浏览数据都会呈现出近似幂律分布的状态,其特点为少数群体占有多数资源。

     

    2.2 基于预测的传统异常检测算法

    1.  ARIMA(p, d, q)数据预测模型
        ARIMA差分整合移动平均自回归模型,其中p为滞后值,d是非平稳序列转化为平稳序列所需的差分次数,q是预测误差的滞后值。AR模型描述的是当前值和历史值之间的关系。MA模型描述的是当前值与自回归部分误差累积的关系。对于非平稳序列,由于它的方差和均值不稳定,处理方法一般是将其转化成平稳序列。然后对它的滞后值以及随机误差值进行回顾来建立模型。 


    2. 指数平滑预测模型
        指数平滑兼容了全期平均和移动平均所长,不舍弃过去的数据,但是仅给予逐渐减弱的影响程度,即随着数据的远离,赋予逐渐收敛为零的权数。主要是通过计算指数平滑值,配合一定的时间序列预测模型对现象的未来进行预测。

     

    2.3 直接异常检测算法

    1.  LOF局部离群因子检测法(基于密度)
        该算法为数据集中的每个点计算一个离群因子,通过判断其是否接近于1来判定该点是否为离群点。若离群因子远大于1,则该点为离群点,若接近于1,则为正常点。

    2.  孤立森林
        该算法基于集成学习,适用于连续数据的异常检测,通过多棵iTree形成森林来判定是否有异常点。


    3.  One-class SVM算法
        寻找一个超平面将样本中的正例圈出来,预测就是用这个超平面做决策,在圈内的样本就认为是正样本。适用于已知样本绝大多数为正样本,仅有极少数为负样本的场景。它可以通过已知数据训练一个一类分类器,得到一个紧凑的分类边界,超出这个边界就认为是不合格产品。

     

    2.4 基于深度学习的异常检测算法

    1.  基于GAN网络的异常检测算法
        通过生成式对抗网络仅仅学习正常数据的数据分布,得到的模型G只能生成或者重建正常数据。将测试样本输入训练好的模型G,如果G经过重建后输出的数据和输入样本一样或者接近,表明测试的是正常数据,否则是异常数据。


    2.  基于AE(自编码器)的异常检测算法
        自编码器的输入层维度等于输出层维度,隐藏层维度小于输入层维度。通过自编码器学习数据分布最显著的特征,对原图进行重构并产生新图,新图与原图之间产生较大差异的点就是异常点。


    3.  基于VAE(变分自编码器)的异常检测算法
        使用训练数据训练好一个VAE,该VAE的encoder能够将输入数据X映射到隐变量Z,decoder将隐变量Z再映射回X。当训练好一个VAE之后,如果输入一个异常数据,该模型很大概率会将该异常数据重构成一个正常数据,因此我们就可以判别输入数据是否是一个正常数据。正常数据重构成正常数据的概率很高,而异常数据重构成异常数据的概率很低。
        AE与VAE的主要区别在于前者是一种没有概率基础的确定性判别模型,而后者是可以提供校准概率的随机生成模型。

     

    2.5 各类异常检测算法的优劣总结表


     

    3 不同异常检测算法的结合

        时间序列数据异常检测是指从正常的时间序列中识别不正常的事件或行为的过程,而由于时间序列数据具有周期性、趋势性、季节性、随机性,异常检测算法必须兼顾这些特性才能起到更好的检测效果,因此可以尝试不同类别异常检测算法组合,各取所长,从而提高检测的准确度。


    1.  基于预测与统计的时序数据异常检测
        该方法采用Prophet算法与3σ准则实现。在时间序列分析领域,有一种常见的分析方法叫做STL分解,它把时间序列分解为季节项(seasonal)、趋势项(trend)、残余项(residue)。即当t≥0时,满足下式:

                                                        

    而Prophet基于这种方法进行了必要的改进和优化,在上述三项的基础上又增加了节假日项,此时数据则满足下方的新公式:

                                                        

        其中g(t)为趋势项,表示时间序列在非周期上面的变化趋势;s(t)为周期项,或者称季节项,一般以周或者年为单位;h(t)为节假日项,表示在当天是否存在节假日;ϵt表示误差项或者称剩余项。Prophet 算法就是通过拟合这几项,然后进行累加就得到了时间序列的预测值。
        3σ准则借助历史的波动数据来估计并计算不同日期同一时刻的数值的标准差。
        最后,在Prophet预测上下界的基础上分别加减3σ得到数据波动的合理范围,当实际数据超过这个范围时则标注为异常数据。此算法训练快,效果好。


    2.  基于预测与直接异常检测的方法
        首先去除时间序列数据的趋势和周期性。用预测模型给出的预测值与真实值相减计算序列的残差,残差不包含周期性和趋势性,可以作为直接异常检测算法的输入。此算法效果较好,适用于离线、测试、生产三种场景。

     

    文末备注:本文是作者第一篇博客,如有不足之处,还请各位大佬海涵并提出修改意见,在下一定及时更正。内容来源于作者对百度和知乎上其他相关内容的汇总,涵盖了多数最基础的异常检测方法,如果各位有补充意见,请不吝赐教。谢谢大家的阅读!后续还会有其他关于异常检测的内容,愿与诸君共同进步!
     

    展开全文
  • Autoencoder异常检测 - Paddle2.0实现时序数据异常检测Autoencoder异常检测 - Paddle2.0实现时序数据异常检测1.Autoencoder简介2.Autoencoder无监督异常检测3.Paddle2.0基于AUTOENCODER实现异常时序检测4....

    Autoencoder异常检测 - Paddle2.0实现时序数据异常检测

    Autoencoder算法是一种常见的基于神经网络的无监督学习降维方法。

    1.Autoencoder简介

    Autoencoder,中文称作自编码器,是一种无监督式学习模型。本质上它使用了一个神经网络来产生一个高维输入的低维表示。Autoencoder与主成分分析PCA类似,但是Autoencoder在使用非线性激活函数时克服了PCA线性的限制

    Autoencoder包含两个主要的部分,**encoder(编码器)**和 decoder(解码器)

    • Encoder的作用是用来发现给定数据的压缩表示
    • decoder是用来重建原始输入

    在训练时,decoder 强迫 autoencoder 选择最有信息量的特征,最终保存在压缩表示中。最终压缩后的表示就在中间的coder层当中。

    以下图为例,原始数据的维度是10,encoder和decoder分别有两层,中间的coder共有3个节点,也就是说原始数据被降到了只有3维。Decoder根据降维后的数据再重建原始数据,重新得到10维的输出。从Input到Ouptut的这个过程中,autoencoder实际上也起到了降噪的作用。

    在这里插入图片描述

    2.Autoencoder无监督异常检测

    异常检测(anomaly detection)通常分为有监督和无监督两种情形。在无监督的情况下,我们没有异常样本用来学习,而算法基本上假设是异常点服从不同的分布。根据正常数据训练出来的Autoencoder,能够将正常样本重建还原,但是却无法将异于正常分布的数据点较好地还原,导致还原误差较大。

    如果样本的特征都是数值变量,我们可以用MSE或者MAE作为还原误差。

    3.Paddle2.0基于AUTOENCODER实现异常时序检测

    1. 训练数据

    在这里插入图片描述

    1. 预测数据(红色为检测到的异常数据)

    在这里插入图片描述

    gitee - Paddle2.0基于AUTOENCODER实现异常时序检测

    4.参考内容:

    利用Autoencoder进行无监督异常检测(Python)

    AIStudio - Paddle2.0基于AUTOENCODER实现异常时序检测

    展开全文
  • 在时间序列异常检测的研究中,对于检测对象而言,可分为点异常、子序列异常、模式异常这 3 类研究任务.对于异常检测方法而言,主要有基于统计模型(如 ARIMA,GARCH 等)、基于聚类(如 k-means,EM,SVM 模型等)、 基于相似...

    1 相关研究综述

    在时间序列异常检测的研究中,对于检测对象而言,可分为点异常、子序列异常、模式异常这 3 类研究任务.对于异常检测方法而言,主要有基于统计模型(如 ARIMA,GARCH 等)、基于聚类(如 k-means,EM,SVM 模型等)、 基于相似性度量、基于约束规则等.

    2 研究问题介绍

    2.1 基本定义

     

     本文提出的方法对所有维度时间序列相 关性的建模,识别相关性发生变动的子序列部位,通过对这类疑似异常子序列进行全局相关性分析,挖掘并识别 出真正发生异常的序列数据.

    对于某一个设备对应的K维传感器组,有K个时间序列。

    (1)计算K维时间序列上任意两条时间序列的相关性

    (2)根据(1)的相关性,对该设备的传感器组产生的待测数据集上的异常数据进行检测,得到有限个异常模式二元组:〈T[l:n],AD(Sm)〉,其中,T[l:n]记录发生异常的序列时间段,起始于时间点 l,结束于点 n;  AD(Sm)记录该时间段内所有发生异常的序列编号。

     2.2 方法概述

     我们提出基于时序相关图模型的异常检测方法,首先 对序列的相关性进行挖掘分析;在此基础上,提出基于相关性分析的异常检测算法,实现对所有真正的、隐匿性 强的异常数据进行有效识别处理.

    基于相关性计算的多维时间序列异常检测方法,如图所示:

    主要包括数据预处理、时序数据相关性计算以及异常检测 3 个部分.

    具体步骤,详见论文,论文中写的十分清晰。

     3 基于时间子序列组的序列相关性计算——第二部分:时序数据相关性计算部分的详细算法

    3.1 序列PAA处理(逐段聚集平均处理

    对数据进行预处理后,通过时间段划分,得到时间子序列组。对于每一段时间子序列组,每个时间点上的序列取值可看做该时间点上的一个实例.由于时间序列在较短的时间段内具有连续的序列取值变化范围不大的特性,首先利用逐段聚集平均(piecewise aggregate approximation,简称 PAA)处理每一条序列。进行必要的实例缩减,对序列的浮动特征进行提取,使得后续的计算更为方便、高效和精准.特征仍保留

    算法 1. 序列 PAA 处理.

    输入:分段后的一个时间子序列组 S={S1,S2,…,SK};重建后序列长度参数 w;

    输出:重建后的时间子序列组 S'={S'1,S'2,…,S'K}

     

     3.2 序列相关性矩阵计算

     

     

     3.3 时序相关性图模型

    对于一个给定传感器组 Sm上的 K 维时间序列数据,建立一个无向的时序相关性图 Gr(S)=(V,E),其顶点集合记录了所有序列,边集合记录 了序列间是否存在大于阈值的相关性信息.

    图的建立:详看论文中定义8

    例子:

     a) 将一个时序相关图上 K 条时间序列划分为若干个时序相关团

    b) 相关性计算(团内、团间)。

            团内:边权值计算得到

            团间:由于每个时序相关团内顶点间的边权值都很高,即同个团内时间序列均具有显著可靠的相关性,我们可以选取团上的特征序列代表该团进行计算。

            选取时序相关团内与其他时间序列相关性最强的时间序列作为代表序列。对于代表序列,建立相关性参数矩阵 SCM(v* )。

            再建立时序相关性图模型。

    4 基于时间序列图模型的异常检测——第三部分:异常检测部分

    本文的异常检 测任务主要是发现并识别那些持续一定时长的异常问题数据.

    时间子序列组作为基本分析单位,对于一个传感器组 S 的第 l 个时间段的 K 维时间序列进行分析。

    团内:

    根据时序相关图的定义,同一个团内的序列都是以很高的相关性阈值相连,因此若检测到边权低 于给定的相关性阈值θc,则认为异常存在于该边相连的两个点之中。将出现异常权值的边加入 GB。GB 与 Ci 有相同的顶点结构,且 GB 的边集合记录了候选的异常顶点。

    根据最小修复代价原则,图 GB 上的异常判定问题被转化为无向图的最小顶点覆盖问题。

    一般为二分图,所以判断是否为二分图;若不是利用贪心算法,找最小顶点覆盖

    删掉预测的异常值,对时序图进行再计算,避免错或漏。

    团间:同团内方法

    展开全文
  • 1. 检测整个数据集的整体均值与标准差,同时利用ks检验判断数据是否符合正态分布。 2. 3σ准则的代码实现(该算法需要数据符合正态分布) 3. 为检测结果图添加各种文字或直线标注,使数据更为直观 三、代码 ...

                  3σ算法检测离群点--实例

    一、原数据

    如下,共有六列,第一行为空,之后会修正,利用数据整体均值进行代替。

    二、文字流程

    1. 检测整个数据集的整体均值与标准差,同时利用ks检验判断数据是否符合正态分布。

    2. 3σ准则的代码实现(该算法需要数据符合正态分布)

    3. 为检测结果图添加各种文字或直线标注,使数据更为直观

    三、代码

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import numpy
    from scipy import stats
    from pylab import *
    import math
    
    #  对整个文件中的数据进行离群点检测
    def threesigma(str1, n):  # 3σ的3可以是n,自己根据数据来调整,选检测效果最好的。
        df = pd.read_csv(str1)
        # 第一部分,求dataframe所有列整体的均值和标准差,同时利用ks检验判断数据是否符合正态分布。
        sum = df.sum()
        sum = sum.sum()
        u = sum / (df.shape[0] * df.shape[1])
        # 计算整体均值
        # dataframe按列转list
        columns = df.columns
        print(df.shape)
        print(columns)
        df1 = []
        for c in columns:  # 把每列都转为list
            d = df[c].values.tolist()
            df1.append(d)
        print(df1)  # df1是大列表,内含六个小列表,每个列表对应我原数据的一列,共六列
        list = []
        for i in range(df.shape[1]):  # 把df1中的六个小列表合成一个大列表
            for j in range(df.shape[0]):
                if math.isnan(df1[i][j]):  # 如果值为空,则修正为所有数据的均值
                    df1[i][j] = u
                print(i, j, df1[i][j])
                list.append(df1[i][j])
        print(list)
        df2 = pd.DataFrame(list, columns=['value'])
        print(df2.shape)
        std = df2['value'].std()
        print("均值为:", u)
        print("标准差为:", std)
        print(stats.kstest(df2['value'], 'norm', (u, std)))
        # 打印出的pvalue大于0.05则该数据集符合正态分布,statistic为统计量, norm为参数cdf,代表此处是正态性检验
        # statistic即D,是根据两个样本对应经验分布函数的差所形成的的统计量,用于比较两个总体的真实分布是否相同,此处属于斯米尔诺夫检验。
        '''
        第二部分,3σ准则(数据需要符合正态分布)
        绘制目标数据散点图
        plt.plot(df2)
        plt.show()
        '''
        min = u - n * std  # 此处
        max = u + n * std
        error = df2[(df2['value'] < min) | (df2['value'] > max)]  # 寻找落在上下边界之外的异常值。
        print(error)
        if not error.empty:
            print("存在离群点")
        row = error.shape[0]
        print("离群点数量: "+str(row))
        index_list = error.index.tolist()  # 把error的索引转换成列表
        plt.plot(df2)
        print(index_list)
        for i in range(row):
            y = error.values[i][0]  # 获取列值
            x = index_list[i]  # 获取对应行索引,x和y即坐标
            plt.plot(x, y, 'rs-', markersize=20, markerfacecolor='none')
            plt.plot(x, y, 'ro-', markersize=5)
    
        # plt.plot(315, df2['value'][315], 'ks')
        plt.axhline(y=u, ls=":", c="black")  # 添加水平均值直线
        plt.axhline(y=min, ls="--", c="green")  # 添加下界
        plt.axhline(y=max, ls="--", c="green")  # 添加上界
        plt.text(2160, u + 0.05, "Average", fontsize=12, fontweight=60)
        plt.text(2160, min + 0.05, "Lower bound", fontsize=12, fontweight=60)
        plt.text(2160, max + 0.05, "Upper bound", fontsize=12, fontweight=60)
        mpl.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体显示
        plt.rcParams['axes.unicode_minus'] = False    # 防止负号无法正常显示
        plt.title("离群点数量为:"+str(row), c='black', fontsize=20)
    
        plt.show()
    
    
    str1 = r'C:\Users\Gaulle\Desktop\anomaly_Detection_Dataset/overall_fluctuation/data7.xls'
    threesigma(str1, 3)
    
    

    注:欢迎大家一起交流,如果各位有异常检测的微信或者QQ群,还请留言给我,我找不到学习团体啊,求队友。PS:有存疑的代码可以回复我,我尽量及时解答。

    展开全文
  • 1、MAD-GAN 2、VAE-GAN
  • 利用差分和一分类方法进行时序数据异常检测 (差分法针对时序数据的周期性进行处理) 一、文字流程 1. 读取数据,填充缺失值,设置时间序列长度,绘制原始数据曲线图。 2. 计算自相关系数,判断周期性...
  • awesome-TS-anomaly-detection List of tools & datasets foranomaly detection ontime-seriesdata. All lists are in alphabetical order.... 1 year old, or explicitly mentioned by th...
  • 行业分类-物理装置-时序数据异常检测方法、装置、设备及存储介质.zip
  • 数据异常检测是一个难题, 面临许多挑战, 其中包括: 定义一个正常表现的范围是比较困难的, 异常值和正常值有时候边界并不是特别明显 某些恶意行为会伪装成正常值, 难以发现 大多数领域的正常行为只能在一段时间内...
  • 时序数据异常检测(2)指数平滑方法

    千次阅读 2019-06-12 20:46:57
    上文我们使用LOF-ICAD方法实现了时序数据异常检测, 这次我们介绍一种更为常见的方法——-指数平滑. 指数平滑的方法, 其原理就是通过拟合出一个近似的模型来对未来进行预测, 我们可以通过这个预测来和实际的值进行...
  • 标签数据(也就是真实有效值)对于评估时序数据异常检测方法非常有必要。否则,我们无法轻松选择好检测方法,或者确定模型A好于模型B。Curve能让开发者在上面使用强大的自定义函数,高效标记数据。
  • EGADS(可扩展通用异常检测系统)是一个开源Java软件包,用于自动检测大规模时间序列数据中的异常。 EGADS旨在成为一个库,其中包含许多异常检测技术,这些异常检测技术适用于单个程序包中的许多用例,唯一的依赖...
  • 基于高异质/均匀时间序列多传感器数据的实时异常检测的无监督特征选择和/或无监督深度卷积神经网络和lstm自动编码器的原型。 内置时间序列预测器的可解释AI原型。 无监督特征选择的直观表示如下所示。 无监督实时...
  • Prophet时序数据异常检测方法

    千次阅读 2020-10-13 16:12:05
    通常app打点数据是有时间周期规律的时序数据,当打点数据出现异常时,需要有一种及时发现问题的方法。 二.发现规则变化的方法 2.1 传统方法 通过人工观察,当某段时间打点数据趋势突然异常的时候(明显增加或者减少...
  • 点上方人工智能算法与Python大数据获取更多干货在右上方···设为星标★,第一时间获取资源仅做学术分享,如有侵权,联系删除转载于 :内容:异常检测,来源:Coggle数据科学编辑:...
  • 异常检测所解决的问题2. 什么是正常3. 什么是异常4. 判定异常需要一定的指导5. 相关术语6. 如何学习“正常”7. 机器学习帮你自动挑选模型8. 模型与需要考虑任何的周期9. ES ML:单指标 / ES ML:单指标 / 种群分析...
  • 异常检测(Anomaly detection)是时序数据分析最成熟的应用之一,目的是从正常的时间序列中识别不正常的事件或行为的过程。 异常类型:点异常,上下文异常,集合异常。 异常检测方法 1)直接检测:针对点异常,...
  • 使用ARIMA时间序列算法+腾讯Metis开源的时间序列异常检测学件预测系统容量变化趋势以Oracle数据库表空间容量增长变化为例,用不同的数据分析算法来进行容量变化的预估,通过评估各种算法最终的效果,选用ARIMA算法和...
  • 多指标检测 ● 多个指标 ● 按照某个字段进行分类 ● 什么是影响因子 ○ 影响因子是一个字段 ○ 这个字段从逻辑分析上看,是可能造成异常的原因 ○ 不一定必须是一个检测器,但是这个字段通常能够被用于区分数据 ○...
  • 极值理论在时序数据异常检测中的应用 极值理论是用来对极值的分布进行建模的工具,该理论专注于尾部数据,即对数据的分布的尾部进行建模,尾部数据由于其数据量少,从而中心极限定理在这里不再适用。 一般来说,极值...
  • 异常检测-Seq2Seq-RNN 使用Seq2Seq RNN对时间序列数据进行异常检测-(单变量,多变量,多元回归)
  • 事实上,要实现一个(套)综合能力强大,能很好的适合通讯领域的要求的时序数据异常检测算法,挑战非常大。 1)一般性的挑战: a) 普适:能适用不同类型的指标,不同采样间隔,不同物理/业务含义,不同的曲线波形,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,435
精华内容 4,574
关键字:

时序数据异常检测