网络KPI异常检测之时序分解算法

⽹络KPI异常检测之时序分解算法
时间序列数据伴随着我们的⽣活和⼯作。从⽛⽛学语时的“1, 2, 3, 4, 5, ……”到房价的⾛势变化,从⾦融领域的刷卡记录到运维领域的核⼼⽹性能指标。时间序列中的规律能加深我们对事物和场景的认识,时间序列中的异常能提醒我们某些部分可能出现问题。那么如何去发现时间序列中的规律、出其中的异常点呢?接下来,我们将揭开这些问题的⾯纱。
什么是异常
直观上讲,异常就是现实与⼼理预期产⽣较⼤差距的特殊情形。如2020年春节的新型肺炎(COVID-19,coronavirus disease 2019),可以看到2⽉12⽇有⼀个明显的确诊病例的升⾼,这就是⼀个异常点,如下图:
从统计上讲,严重偏离预期的点,常见的可以通过3-sigma准则来判定。
从数学上讲,它就是⼀个分段函数:
那么我们有哪些⽅法来发现异常呢?异常分析的⽅法有很多,在本⽂中,我们主要讲解时间序列分解的算法。接下来,我们先从时间序列的定义开始讲起。
什么是时间序列
高清数字电视机顶盒前⾯章节,我们列举了⽣活和⼯作中的⼀些时间序列的例⼦,但是并没有给出定义。在本节中,我们将⾸先给出时间序列的定义,然后给出时间序列的分类⽅法,最后再给⼤家展⽰常见的时间序列。
防辐射材料
1.时间序列的定义
时间序列是不同时间点的⼀系列变量所组成的有序序列。例如北京市2013年4⽉每⽇的平均⽓温就构成了⼀个时间序列,为了⽅便,我们⼀般认为序列中相邻元素具有相同的时间间隔。
时间序列可以分为确定的和随机的。例如,⼀个1990年出⽣的⼈,从1990年到1999年年龄可以表述为{0,1,2,…,9},这个序列并没有任何随机因素。这是⼀个确定性的时间序列。现实⽣活中我们所⾯对的序列更多的是掺杂了随机因素的时间序列,例如⽓温、销售量等等,这些是带有随机性的例⼦。我们说的时间序列⼀般是指带有随机性的。
那么对于随机性的时间序列,⼜如何进⾏分类呢?
2.时间序列的分类
从研究对象上分,时间序列分为⼀元时间序列和多元时间序列,如新冠肺炎例⼦中,只看确诊病例的变化,它是⼀元时间序列。如果把确诊病例和疑似病例联合起来看,它是⼀个多元时间序列。
从时间参数上分,时间序列分为离散时间的时间序列和连续时间的时间序列。例如⽓温变化曲线,通常是按照天、⼩时进⾏预测、计算的,这个采集的时间是离散的,因此,它是⼀个离散时间的时间序列。再如花粉在⽔中呈现不规则的运动,它⽆时⽆刻不在运动,它是⼀个连续时间的时间序列,这就是⼤家众所周知的布朗运动。在我们的⼯作中,我们⼀般遇到的都是离散时间的时间序列。
从统计特征上分,时间序列分为平稳时间序列和⾮平稳时间序列。平稳序列从直观上讲,均值和标准差不随着时间发⽣变化,⽽⾮平稳序列均值或者标准差⼀般会随着时间发⽣变化。下⾯两个图分别给出平稳序列和⾮平稳序列的例⼦。
3.常见的时间序列
在本节,我们将给⼤家列举⼀些常见的时间序列,让⼤家对常见的时间序列有⼀个直观的概念。打印头校准
时间序列的分解
前⾯给⼤家讲了异常和时间序列的概念,本章将给⼤家讲解时间序列分解技术。
1.⽬的
时间序列分解是探索时序变化规律的⼀种⽅法,主要探索周期性和趋势性。基于时序分解的结果,我们可以进⾏后续的时间预测和异常检测。
2.主要组成部分
在时间序列分析中,我们经常要关注趋势和周期。因此,⼀般地,我们将时序分成三个部分:趋势部分、周期部分和残差部分。结合下图CO2含量的例⼦(见下图)对这三个主要部分进⾏解释:
推进式搅拌桨
1)趋势部分:展⽰了CO2含量逐年增加;
2)周期部分:反应了⼀年中CO2含量是周期波动的;
3)残差部分:趋势和周期部分不能解释的部分。
3.时序分解模型
时间序列分解基于分解模型的假设。通常,我们会考虑以下两种模型:
加法模型适⽤于以下场景:
1. 当周期性不随着趋势发⽣变化时,⾸选加法模型,如下图(a);
2. 当⽬标存在负值时,应选择加法模型;
乘法模型适⽤于以下场景:
1. 周期随着随时发⽣变化时,⾸选乘法模型,如下图(b);
2. 经济数据,⾸选乘法模型(增长率、可解释)。
另外,当我们不清楚选择哪个模型时,可以两个模型都使⽤,选择误差最⼩的那⼀个。
由于乘法模型与加法模型可以相互转化,我们后⾯仅以加法模型来进⾏介绍。
4.时序分解算法
基于周期、趋势分解的时序分解算法主要有经典时序分解算法、Holt-Winters算法和STL算法。经典时序分解算法起源于20世纪20年代,⽅法较简单。Holt-Winters算法于1960年由Holt的学⽣ Peter Winters 提出,能够适应随着时间变化的季节项。STL(Seasonal and Trend decomposition using Loess)分解法,由Cleveland 等于1990年提出,⽐较通⽤,且较为稳健。三者之间的关系,如下图所⽰:
4.1经典时序分解算法
经典时序分解算法是最简单的⼀种分解算法,它是很多其他分解算法的基础。该算法基于“季节部分不随着时间发⽣变化”这⼀假设,且需要知道序列的周期。另外,该算法基于滑动平均技术。
其中,m=2k+1. 也就是说,时刻t的趋势项的估计值可以通过前后k个时刻内的平均值得到。阶数 m 越⼤,趋势越光滑。由上⾯的公式可以看出,m⼀般取奇数,这保证了对称性。但是在很多场景下,周期是偶数,例如⼀年有4个季度,则周期为4,是偶数。此时,需要做先做⼀个4阶滑动平均(4-MA),再对所得结果做⼀个2阶滑动平均(2-MA),整个过程记为。这样处理后的结果是对称的,即加权的滑动平均,数学表达如下:
下⾯我们将讲解经典时序分解算法的计算步骤。
经典时序分解算法虽然简单、应⽤⼴泛,但是也存在⼀些问题:
1) ⽆法估计序列最前⾯⼏个和最后⾯⼏个的趋势和周期部分,例如若m=4,则⽆法估计前2个和后2个观测的趋势和周期的部分;
2) 严重依赖“季节性部分每个周期都是相同的”这⼀假设;
3) 过度光滑趋势部分。
4.2Holt-Winters算法
在上⼀节中,我们介绍了经典时序分解算法,但是它严重依赖“季节性部分每个周期都是相同的”这⼀
假设。为了能够适应季节部分随时间发⽣变化,Holt-Winters算法被提出。Holt-Winters算法是基于简单指数光滑技术。⾸先,我们先介绍简单指数光滑技术。
简单指数光滑的思想主要是以下两点:
强的松龙注射液
1. 对未来的预测:⽤当前的⽔平对下⼀时刻的点进⾏预测;
2. 当前⽔平的估计:使⽤当前时刻的观测值和预测值(基于历史观测数据的预测值,即上⼀时刻的⽔平)的加权平均作为当前⽔平的估
计。
简单指数光滑的模型⽐较简单,如下:
Holt-Winters算法是简单指数光滑在趋势(可理解为⽔平的变化率)和季节性上的推⼴,主要包括⽔平(前⽂中的趋势项)、趋势项和季节项三个部分。
4.3 STL算法
STL(Seasonal and Trend decomposition using Loess)是⼀个⾮常通⽤的、稳健性强的时序分解⽅法,其中Loess是⼀种估算⾮线性关系
的⽅法。STL分解法由 Cleveland et al. (1990) 提出。
STL算法中最主要的是局部光滑技术 (locally weighted scatterplot smoothing, LOWESS or LOESS),有时也称为局部多项式回归拟合。它是对两维散点图进⾏平滑的常⽤⽅法,它结合了传统线性回归的简洁性和⾮线性回归的灵活性。当要估计某个响应变量值时,先从其预测点附近取⼀个数据⼦集(如下图实点是要预测的点,选取周围的需点来进⾏拟合),然后对该⼦集进⾏线性回归或⼆次回归,回归时采⽤加权最⼩⼆乘法(如下图,采⽤的是⾼斯核进⾏加权),即越靠近估计点的值其权重越⼤,最后利⽤得到的局部回归模型来估计响应变量的值。⽤这种⽅法进⾏逐点运算得到整条拟合曲线。
STL算法的主要环节包含内循环、外循环和季节项后平滑三个部分:
内循环:
外循环:
外循环主要作⽤则是引⼊了⼀个稳健性权重项,以控制数据中异常值产⽣的影响,这⼀项将会考虑到下⼀阶段内循环的临近权重中去。
季节项后平滑:
趋势分量和季节分量都是在内循环中得到的。循环完后,季节项将出现⼀定程度的⽑刺现象,因为在内循环中平滑时是在每⼀个截⼝中进⾏的,因此,在按照时间序列重排后,就⽆法保证相邻时段的平滑了,为此,还需要进⾏季节项的后平滑,后平滑基于局部⼆次拟合,并且不再需要在loess中进⾏稳健性迭代。
异常判断的准则
对于异常的判断,我们常⽤的有 n-sigma 准则和boxplot准则(箱线图准则)。那这些准备是如何计算的,有哪些区别和联系呢?
1.n-sigma 准则
n-sigma准则有计算简单、效率⾼且有很强的理论⽀撑,但是需要近似正态的假设,且均值和标准差的计算⽤到了全部的数据,因此,受异常点的影响较⼤。
2.boxplot 准则
为了降低异常点的影响,boxplot准则被提出。boxplot(箱线图)是⼀种⽤作显⽰⼀组数据分散情况的统计图,经常⽤于异常检测。BoxPlot的核⼼在于计算⼀组数据的中位数、两个四分位数、上限和下限,基于这些统计值画出箱线图。
根据上⾯的统计值就可以画出下⾯的图,超过上限的点或这个低于下限的点都可以认为是异常点。
从上⾯的计算上可以看出,boxplot对异常点是稳健的。
基于时序分解的异常检测算法钢板桩支撑
在前⾯的章节,我们了解了时序分解的算法,也学习了异常判断的准则,那么如何基于时序分解进⾏异常检测呢?在本章,我们将⾸先给出异常检测算法的原理,再给出基于时序分解的异常检测算法步骤。
1.异常检测算法原理
回顾⼀下异常的定义,它是⼀个分段函数:
我们可以看到预测值(拟合值)和阈值是不知道的。对于预测值,我们可以通过规律来猜这个预测值是多少,本章我们可以通过时序分解周期和趋势的规律,进⽽得到预测值。对于阈值,我们可以看到阈值是针对真实值和预测值的差值设置的,⽬的是把异常值到,因此我们只要到正常值的残差和异常值的残差的边界即可。⽽我们n-sigma准则和boxplot准则就可以根据残差把边界出来,即阈值。这个思考和实现的过程⽰意图如下:
2.基于时序分解的异常检测算法
本⽂主要是想记录基于时间序列的异常检测⽅法,希望能够帮到你。

本文发布于:2024-09-21 03:11:26,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/99266.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:时间   序列   分解   部分   算法
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议