一种时间序列异常值快速检测方法

allin2022-11-03  122



1.本发明涉及时间序列异常值检测技术领域,尤其涉及一种时间序列异常值快速检测方法。


背景技术:

2.随着互联网的发展和大数据技术的提升,每天都会有大量的数据产生,其中,时间序列数据是最广泛的数据类型。时间序列数据,即带有时间戳标记的数据统计量,能够揭示环境的变化、设备的运行状态等与人类生活密切相关的特征。时间序列的异常检测问题在很多领域都具有重要的应用价值,例如智能交通,健康指标,网络入侵检测等。在上述提到的多个领域中,时间序列的异常值大多指的是一个时间点的数据超过了其所设定的阈值,而在一些特殊的日常背景下,不能够简单的依据单一的阈值来判断数据是否异常,例如以下背景。
3.我国法律统一规定的节假日包括元旦、春节、清明节、劳动节、端午节、中秋节、国庆节七种节日,其中春节和国庆节放假天数为7天,其余节日天数均大于或等于3天。根据百度地图提供的交通出行大数据报告我们可以看到法定节假日期间的交通出行量相对于平常工作日都会有一个小幅度或者大幅度的提升,其中春节和国庆长假前一天为去程人口迁徙高峰,交通出行量有一个大幅度的提升,节假日最后一天为返程人口迁徙高峰,交通出行量也会有一个大幅度的提升。若将时间划分为非节假日,一般节假日和长假三种情况,交通出行量划分为下、中、上三个区间。可以得出结论:非节假日期间,交通出行量一般处于下区间;一般节假日期间,交通出行量一般处于中区间或者上区间;长假期间,分为两种情况:1.国庆长假属于旅游旺季,期间交通出行量一般均为中/上区间;2.春节前期和后期为返乡离乡高峰期,届时交通出行量达到上区间,而春节中期,出行人数变少,交通出行量可能会处于中/下区间。
4.综上可以定义节假日期间交通出行量高峰期分为三种情况:1.连续四天或四天以上交通出行量处于中/上区间,则此期间定义为节假日交通出行高峰期;2.交通出行量达到上区间时,定义为节假日交通出行高峰期;3.交通出行量达到上区间时前后连续时间内交通出行量为中区间时,此时中区间也包含为节假日交通出行高峰期。特别指出的是,在一些旺季时刻,周末前一天以及周末两天也可能会出现交通出行量小幅度的提升,根据我们的方法,只会检测出节假日期间交通出行高峰期,不会被类似的非节假日期间的异常情况所出现的交通出行高峰期所影响。
5.本发明的方法可以解决类似上述背景下时间序列异常值的检测问题,目前没有发现同本发明类似技术的说明或报道,也尚未收集到国内外类似的资料。
6.如何解决上述技术问题为本发明面临的课题。


技术实现要素:

7.为了解决以上技术问题,本发明提供了一种时间序列异常值快速检测方法,该检
测方法基于一个自定义的二维数组,在减少计算成本的同时,达到了高效的异常检测效果,在一些非单一阈值的实际背景下,对时间序列异常值的检测。
8.为了更好地实现上述发明目的,本发明给出基本定义如下:
9.1、定义依据背景将时间序列数据依次归类为下区间、中区间、上区间,分别映射为1、 2、5,并且将1、1、1插入到映射后的序列首部,所得到的序列为本方法初始主序列;
10.2、定义序列中的异常情况分为三种情况:1.当序列中出现连续四个或四个以上的值为 2或5,如2、2、2、2为异常情况;2.序列中出现值为5,如1、5、1,其中5为异常情况; 3.序列中值为5前后连续出现的值为2,如2、5、2,其中2、5、2都为异常情况;
11.3、定义一个二维数组a[7][7],二维数组示意图如图3所示:
[0012]
4、定义一个窗口大小为3,移动步长为1的滑动窗口r(r1,r2,r3)在时间序列上向右滑动,其中r1,r2,r3分别对应滑动窗口中第一个值,第二个值和第三个值;
[0013]
5、定义一个窗口大小为3,移动步长为1的滑动窗口l(l1,l2,l3)在时间序列上向左滑动,其中l1,l2,l3分别对应滑动窗口中第一个值,第二个值和第三个值;
[0014]
6、定义sr1、sr2、sl1、sl2四个参数用来记录二维数组的行和列值;
[0015]
本发明具体是通过以下措施实现的,一种时间序列异常值快速检测方法,包括如下步骤:
[0016]
步骤一、将映射后的序列首部插入1、1、1,初始r为首部3个值,r窗口和减3的值赋值给sr1,a[sr1][sr2]=a[0][0]=0,r向右滑动一个步长,sr1=sr2;
[0017]
步骤二、a[sr1][sr2]=a[0][1]=0,r向右滑动1个步长;
[0018]
步骤三、a[sr1][sr2]=a[1][2]=0,r向右滑动1个步长;
[0019]
步骤四、a[sr1][sr2]=a[2][3]=0,r向右滑动1个步长;
[0020]
步骤五、a[sr1][sr2]=a[3][3]=1,r3标记为异常值;
[0021]
步骤六、将序列分割为左子序列和右子序列。
[0022]
左子序列删除首部添加的3个值,尾部插入2、2,初始l为尾部三个值,l窗口和减3 的值赋值给sl1;右子序列首部插入2、2、2作为主序列,初始r为首部3个值,r窗口和减3的值赋值给sr1;
[0023]
步骤七、a[sl1][sl2]=a[3][3]=1,l1标记为异常值,l、r向左滑动1个步长;
[0024]
步骤八、a[sl1][sl2]=a[3][3]=1,l1标记为异常值,l、r向左滑动1个步长;
[0025]
步骤九、a[sl1][sl2]=a[3][3]=1,l1标记为异常值,l滑动至序列首部;
[0026]
步骤十、左子序列标记结束,删除尾部添加的2个值;
[0027]
步骤十一、a[sr1][sr2]=a[3][2]=0,r向右滑动1个步长;
[0028]
步骤十二、a[sr1][sr2]=a[2][2]=0,r向右滑动1个步长;
[0029]
步骤十三、a[sr1][sr2]=a[3][5]=1,r3标记为异常值;
[0030]
步骤十四、将序列分割为左子序列和右子序列。
[0031]
左子序列删除首部添加的3个值,尾部插入2、2,初始l为尾部三个值,l窗口和减3 的值赋值给sl1
[0032]
r滑动至序列尾部,右子序列标记结束;
[0033]
步骤十五、a[sl1][sl2]=a[6][6]=1,l1标记为异常值,l、r向左滑动1个步长;
[0034]
步骤十六、a[sl1][sl2]=a[6][5]=0,左子序列标记结束;
[0035]
至此,左、右子序列标记结束,序列中所有异常值都被标记出来。
[0036]
与现有技术相比,本发明的有益效果在于:本发明提供的一种时间序列异常值快速检测方法,是一种可以解决类似上述背景技术所提到的某些特殊的实际背景下的异常值检测问题,包括某一时刻的异常值以及某一时间段的异常值检测,并且将实际背景中的具体值划分为三个区间分别映射为三个值,再基于一个事先定义好的二维数组,通过二维数组中的值来判断是否是异常值,属于牺牲空间复杂度来优化时间复杂度的方法,缩减了执行时间,保证了执行效率。
附图说明
[0037]
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。
[0038]
图1为本发明实施例提供的时间序列异常检测流程图。
[0039]
图2为本发明实施例提供的时间序列异常检测步骤示意图。
[0040]
图3为本发明中二维数组a[7][7]示意图。
具体实施方式
[0041]
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0042]
实施例1
[0043]
如图1至图3所示,本发明实施例提供一种时间序列异常值快速检测方法,包括如下步骤:
[0044]
步骤一、将映射后的序列首部插入1、1、1,初始r为首部3个值,r窗口和减3的值赋值给sr1,a[sr1][sr2]=a[0][0]=0,r向右滑动一个步长,sr1=sr2;
[0045]
步骤二、a[sr1][sr2]=a[0][1]=0,r向右滑动1个步长;
[0046]
步骤三、a[sr1][sr2]=a[1][2]=0,r向右滑动1个步长;
[0047]
步骤四、a[sr1][sr2]=a[2][3]=0,r向右滑动1个步长;
[0048]
步骤五、a[sr1][sr2]=a[3][3]=1,r3标记为异常值;
[0049]
步骤六、将序列分割为左子序列和右子序列。
[0050]
左子序列删除首部添加的3个值,尾部插入2、2,初始l为尾部三个值,l窗口和减3 的值赋值给sl1;右子序列首部插入2、2、2作为主序列,初始r为首部3个值,r窗口和减3的值赋值给sr1;
[0051]
步骤七、a[sl1][sl2]=a[3][3]=1,l1标记为异常值,l、r向左滑动1个步长;
[0052]
步骤八、a[sl1][sl2]=a[3][3]=1,l1标记为异常值,l、r向左滑动1个步长;
[0053]
步骤九、a[sl1][sl2]=a[3][3]=1,l1标记为异常值,l滑动至序列首部;
[0054]
步骤十、左子序列标记结束,删除尾部添加的2个值;
[0055]
步骤十一、a[sr1][sr2]=a[3][2]=0,r向右滑动1个步长;
[0056]
步骤十二、a[sr1][sr2]=a[2][2]=0,r向右滑动1个步长;
[0057]
步骤十三、a[sr1][sr2]=a[3][5]=1,r3标记为异常值;
[0058]
步骤十四、将序列分割为左子序列和右子序列。
[0059]
左子序列删除首部添加的3个值,尾部插入2、2,初始l为尾部三个值,l窗口和减3 的值赋值给sl1
[0060]
r滑动至序列尾部,右子序列标记结束;
[0061]
步骤十五、a[sl1][sl2]=a[6][6]=1,l1标记为异常值,l、r向左滑动1个步长;
[0062]
步骤十六、a[sl1][sl2]=a[6][5]=0,左子序列标记结束;
[0063]
至此,左、右子序列标记结束,序列中所有异常值都被标记出来。
[0064]
以上所述仅为本技术的优选实施例而已,并不用于限制本技术,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。

技术特征:
1.一种时间序列异常值快速检测方法,其特征在于:包括以下步骤:s1、根据实际背景,将采样得到的数据划分为下、中、上三个区间,分别映射为1、2、5三个值,将映射后得到的序列首部插入1、1、1作为初始主序列;s2、滑动窗口r初始值设为主序列首部三个值,滑动窗口r和减去3的值记为sr1,滑动窗口向右滑动一个步长,执行步骤s3;s3、滑动窗口r和减去3的值记为sr2;若a[sr1][sr2]=0,滑动窗口向右滑动,将sr2的值赋给sr1,重复执行步骤s3;若a[sr1][sr2]=1,r3标记为异常值,以r3为标志,将序列进行分割,得到一个以r3为尾部的左子序列,左子序列执行步骤s4;若序列剩余部分不为空,则序列剩余部分为右子序列,若序列剩余部分为空,则右子序列标记结束;当窗口r滑动至序列尾部时,右子序列标记结束,删除右子序列首部添加的3个值;否则将主序列定义为右子序列首部插入2、2、2后得到的序列,并执行步骤s2;s4、将2、2插入到左子序列尾部,删除左子序列首部添加的3个值,滑动窗口l初始值设为左子序列尾部三个值,滑动窗口l和减去3的值记为sl1,滑动窗口向左滑动一个步长,执行步骤s5;s5、滑动窗口l和减去3的值记为sl2;若a[sl1][sl2]=0或窗口l滑动至左子序列首部,则左子序列标记结束,删除尾部添加的2个值;若a[sl1][sl2]=1,l1标记为异常值,将sl2的值赋给sl1,滑动窗口向左滑动,重复执行步骤s5直至左子序列标记结束;至此,从步骤s1到步骤s5,左子序列和右子序列都标记结束,达到快速的时间序列异常值检测。

技术总结
本发明公开了一种时间序列异常值快速检测方法,属于时间序列异常值检测技术领域;解决了非单一阈值的情况下不能对时间序列异常值的检测的技术问题;其技术方案为:包括以下步骤:S1、滑动窗口R初始值设为主序列首部三个值;S2、滑动窗口R和减去3的值记为SR2;S3、将2、2插入到左子序列尾部,删除左子序列首部添加的3个值;S4、滑动窗口L和减去3的值记为SL2。本发明的有益效果是:本发明的检测方法是基于一个自定义的二维数组,在减少计算成本的同时,达到了高效的异常检测效果,在一些非单一阈值的实际背景下,对时间序列异常值的检测。对时间序列异常值的检测。对时间序列异常值的检测。


技术研发人员:王镇 顾翔
受保护的技术使用者:南通大学
技术研发日:2022.02.22
技术公布日:2022/7/5
转载请注明原文地址: https://www.8miu.com/read-4153.html

最新回复(0)