数据异常监测方法、装置、计算机设备和存储介质
技术领域
本申请涉及计算机
技术领域
,特别是涉及一种数据异常监测方法、装置、计算机设备和存储介质。背景技术
随着互联网技术的发展,大型互联网公司通过服务器向外提供大量的应用和网络服务。然而由许多原因造成的服务故障总是难以避免的,诸如网络延迟,服务器故障,恶意的网络攻击等。通常出现了这些服务故障,一些与业务相关的指标,如一些典型的时间序列数据,总是会出现异常的波动变化,例如业务失败量的突然增加、成功率的突然降低、响应延迟突然增加等。因而通过监测业务指标的突变等异常情况,运维人员能够跟更加及时更加准确地应对和解决服务故障。
传统的异常监测过程中,通过研究对象的数据分布特点,采用与之相匹配的概率分布函数来进行检测,这种监测方式,对于异常数据的监测准确性较低。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高异常监测准确性的数据异常监测方法、装置、计算机设备和存储介质。
一种数据异常监测方法,方法包括:
获取待分析数据;
根据待分类数据对应的历史数据,对待分析数据进行局部加权回归处理,得到待分析数据的拟合斜率;
基于拟合斜率,更新预设的斜率集合包含的斜率数据,得到更新的斜率集合,斜率集合按时间顺序存放固定数量的斜率数据;
根据基于历史数据预先确定的允许波动区间,得到更新的斜率集合中超过允许波动区间的异常斜率数据的数量;
根据异常斜率数据的数量与预设异常阈值,判定所述待分析数据是否存在异常。
一种数据异常监测装置,装置包括:
待分析数据获取模块,用于获取待分析数据;
拟合斜率处理模块,用于根据待分类数据对应的历史数据,对待分析数据进行局部加权回归处理,得到待分析数据的拟合斜率;
斜率集合更新模块,用于基于拟合斜率,更新预设的斜率集合包含的斜率数据,得到更新的斜率集合,斜率集合按时间顺序存放固定数量的斜率数据;
波动分析模块,用于根据基于历史数据预先确定的允许波动区间,得到更新的斜率集合中超过允许波动区间的异常斜率数据的数量;
异常判定模块,用于根据异常斜率数据的数量与预设异常阈值,判定所述待分析数据是否存在异常。
一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现以下步骤:
获取待分析数据;
根据待分类数据对应的历史数据,对待分析数据进行局部加权回归处理,得到待分析数据的拟合斜率;
基于拟合斜率,更新预设的斜率集合包含的斜率数据,得到更新的斜率集合,斜率集合按时间顺序存放固定数量的斜率数据;
根据基于历史数据预先确定的允许波动区间,得到更新的斜率集合中超过允许波动区间的异常斜率数据的数量;
根据异常斜率数据的数量与预设异常阈值,判定所述待分析数据是否存在异常。
一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
获取待分析数据;
根据待分类数据对应的历史数据,对待分析数据进行局部加权回归处理,得到待分析数据的拟合斜率;
基于拟合斜率,更新预设的斜率集合包含的斜率数据,得到更新的斜率集合,斜率集合按时间顺序存放固定数量的斜率数据;
根据基于历史数据预先确定的允许波动区间,得到更新的斜率集合中超过允许波动区间的异常斜率数据的数量;
根据异常斜率数据的数量与预设异常阈值,判定所述待分析数据是否存在异常。
上述数据异常监测方法、装置、计算机设备和存储介质,通过获取待分析数据,根据待分类数据对应的历史数据,对待分析数据进行局部加权回归处理,能够实现对待分析数据的平滑处理,得到待分析数据的拟合斜率,避免数据的偶然抖动造成的干扰,基于历史数据预先确定的允许波动区间,具有良好的波动范围参考,根据更新的斜率集合中超过允许波动区间的异常斜率数据的数量,基于超过允许波动区间的异常斜率数据的数量,能准确判断是否存在异常数据,提高了异常数据的监测准确性。
附图说明
图1为一个实施例中数据异常监测方法的应用环境图;
图2为一个实施例中数据异常监测方法的流程示意图;
图3为另一个实施例中数据异常监测方法的流程示意图;
图4为一个实施例中数据异常监测方法中LOWESS算法的原理图;
图5为再一个实施例中数据异常监测方法的流程示意图;
图6为一个实施例中数据异常监测方法中确定历史斜率的步骤的流程示意图;
图7(a)为一个实施例中数据异常监测方法的原始数据和平滑数据的分布示意图;
图7(b)为一个实施例中数据异常监测方法的拟合斜率和允许波动区间的分布示意图;
图8为一个实施例中数据异常监测方法中数据曲线起伏比较明显时斜率以及对应的决策边界的分布示意图;
图9为另一个实施例中数据异常监测方法的流程示意图;
图10为再一个实施例中数据异常监测方法的流程示意图;
图11为还一个实施例中数据异常监测方法的流程示意图;
图12为又一个实施例中数据异常监测方法的流程示意图;
图13为一个实施例中数据异常监测方法在监测对象的数据数值维持稳定的场景下的数据流程图;
图14为一个实施例中数据异常监测方法在监测对象的数据数值周期变化的场景下的数据流程图;
图15为一个实施例中数据异常监测装置的结构框图;
图16为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的数据异常监测方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。服务器104为终端102提供服务,并对提供给终端102的服务进行监测,服务器104通过获取待分析数据,根据待分类数据对应的历史数据,对待分析数据进行局部加权回归处理,得到待分析数据的拟合斜率,基于拟合斜率,更新预设的斜率集合包含的斜率数据,得到更新的斜率集合,斜率集合按时间顺序存放固定数量的斜率数据,根据基于历史数据预先确定的允许波动区间,得到更新的斜率集合中超过允许波动区间的异常斜率数据的数量,根据异常斜率数据的数量与预设异常阈值,判定所述待分析数据是否存在异常。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,如图2所示,提供了一种数据异常监测方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤202至步骤210。
步骤202,获取待分析数据。
待分析数据是指服务器对其提供服务的相关监测指标中的数据,其中,监测指标对应的监测数据一般是典型的时间序列数据。时间序列数据指一指标按照时间顺序记录的数据。日常中很多数据都是时序数据,例如某只股票的股价、笔记本的cpu使用率、室内温度等在一天的不同时刻的数值就构成了时间序列数据。
在实际应用过程中,服务故障造成的原因有很多,且总是难以避免的,诸如网络延迟,服务器故障,恶意的网络攻击等,会使得时间序列数据出现异常的波动变化,例如业务失败量的突然增加、成功率的突然降低、响应延迟突然增加等。因而,通过监测业务指标获得待分析数据,通过对该待分析数据进行分析,以确定监测数据中是否出现突变等异常情况。其中,成功率是指通过统计某一项业务在一定时间的请求总量、成功量和失败量,得到的成功量和请求总量的比值。
步骤204,根据待分类数据对应的历史数据,对待分析数据进行局部加权回归处理,得到待分析数据的拟合斜率。
历史数据是指已经获取到并完成监测分析的数据,与待分类数据对应的历史数据是指同一监测业务指标的历史数据。例如待分析数据为某项服务的成功率,则历史数据为该项服务的成功率对应的已有历史数据。
局部加权回归是指对时序数据进行逐点的局部线性(或者非线性)拟合,然后依据拟合的曲线计算该时序数据中的目标点的平滑后的数值的过程。局部加权回归(Lowess)是一种在回归分析中应用广泛的数据拟合手段。基本思想是,将待预测点附近的数据点给予不同的权重,再对这些点进行线性拟合或非线性拟合,可以解决线性回归的欠拟合问题。在实施例中,可以通过一阶局部加权回归(LOWESS)算法计算待分析数据的拟合斜率。
步骤206,基于拟合斜率,更新预设的斜率集合包含的斜率数据,得到更新的斜率集合。
其中,斜率集合按时间顺序存放固定数量的斜率数据。例如,斜率集合中可以存放10个斜率数据,当得到待分析数据对应的拟合斜率时,首先确定需要更新至斜率集合的斜率数据,该斜率数据可以是拟合斜率,也可以是与拟合斜率对应的其他斜率数据,如与其他拟合斜率的斜率差值等。然后将该确定的斜率数据更新至斜率集合,此时,斜率集合将更新的斜率数据作为最新数据,并丢弃存放时间最长的斜率数据,以使得斜率集合始终保持只存放固定数量的斜率数据,如一直存放10个斜率数据。
具体来说,更新至斜率集合中的斜率数据,需要与斜率集合中当前存放的斜率数据属于相同性质的数据。如,斜率集合中为拟合斜率,则更新至斜率集合的斜率数据也为拟合斜率,再例如,斜率集合中为斜率差值,则更新至斜率集合的斜率数据也为斜率差值。
步骤208,根据基于历史数据预先确定的允许波动区间,得到更新的斜率集合中超过允许波动区间的异常斜率数据的数量。
允许波动区间是指用于描述监测数据处于正常情况下的允许波动范围。需要说明的是,允许波动区间与斜率集合中的斜率数据的数据类型相同,如同为拟合斜率或同为斜率差值。
将更新的斜率集合中的斜率数据与允许波动区间进行比较,确定数值大小超出允许波动区间的异常斜率数据,并统计异常斜率数据的数量。
步骤210,根据异常斜率数据的数量与预设异常阈值,判定待分析数据是否存在异常。
预设异常阈值用于表征允许斜率集合中出现异常斜率数据的个数的最大值。预设异常阈值可以根据实际需要进行设定,具体可以直接设定允许斜率集中出现异常斜率数据的个数,也可以通过设置斜率集合中允许出现的异常斜率数据的个数与斜率集合中总个数的比例的方式,间接确定允许斜率集合中出现异常斜率数据的个数的最大值。
异常数据用于表征监测对象中出现了数据异常现象。以预设异常阈值为允许斜率集中出现异常斜率数据的个数为例。若异常斜率数据的数量大于预设异常阈值,则判定存在异常数据,若异常斜率数据的数量不大于预设异常阈值,则判定不存在异常数据。
在实际实时计算进行异常监测时,因为数据存在波动性,偶尔一两个异常值可能对应的是数据的偶然抖动,而不是系统真的发生故障。因而在实际计算时通常判定一定时间窗口内的异常点数,只有当异常点数大于设定的阈值才会认为该指标对应的系统产生了异常,进行告警。
上述数据异常监测方法,通过获取待分析数据,根据待分类数据对应的历史数据,对待分析数据进行局部加权回归处理,能够实现对待分析数据的平滑处理,得到待分析数据的拟合斜率,避免数据的偶然抖动造成的干扰,基于历史数据预先确定的允许波动区间,具有良好的波动范围参考,根据更新的斜率集合中超过允许波动区间的异常斜率数据的数量,基于超过允许波动区间的异常斜率数据的数量,能准确判断是否存在异常数据,提高了异常数据的监测准确性。此外,由于在分析过程中,在线上只需每次进行一次局部加权回归计算,再拉取生成好的允许波动区间即可进行异常值判定,计算量非常小,具有响应快的特点。
在一个实施例中,如图3所示,根据待分类数据对应的历史数据,对待分析数据进行局部加权回归处理,得到待分析数据的拟合斜率即步骤204包括步骤302至步骤306。
步骤302,以待分析数据所在时刻为实时拟合窗口的末位时刻,确定实时拟合窗口在待分析数据对应历史数据中的位置。
步骤304,根据实时拟合窗口的位置,从历史数据中获取待分析数据对应的拟合数据。
步骤306,基于拟合数据在实时拟合窗口中的位置以及实时拟合窗口的各个位置对应的加权参数,对待分析数据进行局部加权回归处理,得到待分析数据的拟合斜率。
实时拟合窗口是指在实时计算最新生成的数据对应的拟合斜率时所用的拟合窗口,拟合窗口是用于实现局部加权回归的滑动计算窗口。与实时拟合窗口相对应的,还有用于计算历史数据对应的拟合斜率时所用的历史拟合窗口。
通常局部加权回归处理通过LOWESS算法实现,LOWESS算法选择t时刻左右两边的数据[t-w0,t+w0]作为拟合数据,其中,w0为拟合窗口长度的一半。其实现原理如图4所示,图4中的离散点对应的是历史数据中的原始数据,曲线是拟合之后的平滑数据。以t时刻为目标时刻为例,为了获取t时刻的拟合斜率,需选定一个拟合窗口,对该拟合窗口内的数据进行带权重的线性拟合,即越远离目标点,权重越低。图中直线为拟合出来的直线,将t时刻带入该直线的直线方程,计算出对应的纵坐标,即可得到拟合后的点。与此同时,该直线的斜率对应的就是t时刻时序数据的变化率。滑动计算窗口即可计算不同时刻平滑后的值,即为图中的曲线。
然而,在实时计算时,由于无法获取t时刻未来的数据,因而以[t-2*w0,t]为拟合窗口,对t时刻的数据进行拟合计算,得到t时刻的斜率,为了保证斜率的的可比性,实时拟合窗口和历史拟合窗口采用的都是[t-2*w0,t]的窗口。
在实施例中,采用一阶LOWESS算法待分析数据进行局部加权回归处理,计算曲线的斜率。LOWESS是一种常用于平滑包含随机噪声的时间序列的数据分析技术。它是在线性(或非线性)拟合的基础上衍生出来的,能够更有效的减少随机噪声影响,并且改善了线性拟合产生的欠拟合问题。线性拟合的目标是找到一个全局最优的线性函数用来描述两个变量之间的线性关系。而LOWESS并不追求这样的一个全局最优函数,其基本思想是对时序数据进行逐点的局部线性(或者非线性)拟合,然后依据拟合的曲线计算该点的平滑后的数值。通过这种手段,即使采用简单的线性拟合也能够实现非线性的拟合效果,为了能够进一步反应数据的局部特征,做拟合时,不同的点依据其与目标点的距离远近给了不同的权重。例如,为了获取t时刻的拟合值,需选定一个实时拟合窗口,对该实时拟合窗口内的数据进行带权重的线性拟合,即越远离目标点,权重越低。根据拟合出来的直线,将t带入,计算出对应的纵坐标,即可得到拟合后的点,与此同时,该拟合出来的直线的斜率对应的就是t时刻的斜率。滑动计算窗口即可计算不同时刻平滑后的值。
通过实时拟合窗口选择拟合数据,基于局部加权回归处理得到待分析数据的斜率,采用了一定宽度的时间窗口,因而对偶尔的噪声并不敏感,能够自然的避过数据的偶然抖动这种不是系统真的发生故障的情况的异常告警,提高异常监测的准确性。
在一个实施例中,如图5所示,根据基于历史数据预先确定的允许波动区间,得到更新的斜率集合中超过允许波动区间的异常斜率数据的数量之前,还包括步骤502至步骤504。
步骤502,将历史数据按时刻逐点进行局部加权回归处理,得到历史数据各时刻对应的历史斜率。
步骤504,根据历史数据中各时刻对应的历史斜率,确定允许波动区间。
对于指标变化比较平缓,数值维持在一个稳定的区间范围之内,如成功率指标的监测,以拟合斜率为比较对象进行异常评估。其中,以拟合斜率为比较对象具体体现在斜率集合中存放的数据为拟合斜率,允许波动区间是基于历史数据的拟合斜率来确定的。
通过按时刻逐点对历史数据进行局部加权回归处理,能够对历史数据进行平滑处理,得到历史数据各时刻对应的拟合斜率,为区分对实时获取的待分析数据计算得到的拟合斜率和对历史数据进行计算得到的拟合斜率,将历史数据对应的拟合斜率称为历史斜率。
在确定允许波动区间的异常数据决策的过程中,正常的波动区间的选择直接决定了异常检测的效果好坏。具体来说,在一个实施例中,可以利用指标的历史斜率,计算其平均值μ和标准差σ,再结合统计学3-sigma方法计算一个合理的波动区间:[μ-3σ,u+3σ]。对于满足正态分布的数据,它有99.73%概率会落在这个区间内,根据逆否定律,可以认为落在区间外的数据则为异常数据。其中,3-sigma定律是指在统计学上,符合标准正态分布的随机变量观测值会按照一定的概率落在不同的区间。落在正负三个标准差之内的概率达到了99.73%,可以认为落于其他区间的情况是小概率事件。因此在异常检测中,通常将落于3个标准差之外的数据认为是异常数据。即使是随机变量不符合标准正态分布,依据切比雪夫不等式,落在3个标准差之间的概率也达到88.89%以上。
在另一个实施例中,也可以采用历史斜率的中位数(median)和中位数绝对偏差(MAD)来计算波动区间。相比于平均值和标准差,MAD和median对数据集中异常值的处理比均值和标准差更具有弹性。具体的,波动范围上下界可以是[median-6*MAD,median+6*MAD]。通过上述两种方法中的任意一种来设置允许波动区间,能够得到更为准确的异常监测结果。
在一个实施例汇总,将历史数据按时刻逐点进行局部加权回归处理,得到历史数据各时刻对应的历史斜率包括以下处理过程:
如图6所示,对历史数据中任一时刻对应的目标数据,执行以下步骤602至步骤606,以确定历史斜率。
步骤602,以待分析数据所在时刻为历史拟合窗口的末位时刻,确定历史拟合窗口在历史数据中的位置。
步骤604,根据历史拟合窗口的位置,从历史数据中获取目标数据对应的历史拟合数据。
步骤606,基于历史拟合数据在历史拟合窗口中的位置以及历史拟合窗口的各个位置对应的加权参数,对目标数据进行局部加权回归处理,得到与目标数据对应的历史斜率。
历史拟合窗口是指对历史数据进行拟合处理,得到拟合斜率的窗口。历史拟合窗口和实时拟合窗口,实质上都是一个滑动窗口,以相同的窗口大小,依次对历史数据中的各项数据按时间顺序进行拟合处理,得到拟合斜率。
在实施例中,为保证历史数据的拟合斜率与实时数据的拟合斜率具有较好的可比性。历史拟合窗口中的目标数据和实时拟合窗口中的待分析数据均对应拟合窗口中最后一个时刻即末位时刻。
对于某些系统异常情况,指标曲线会发生突变,例如图7(a)中变化较大的曲线表示的是某项业务的成功率,正常情况下该数值在80%范围内波动。而在T0时刻,系统发生故障,导致成功率突然降低到65%左右。通过一阶LOWESS算法,可以平滑该成功率曲线数据,效果如图7(a)中变化较平缓的曲线所示。从该平滑后的曲线中可以看出,曲线在T0时刻最明显的特征是变陡了很多,即曲线的斜率突然变成一个相对较大的负值。而通过LOWESS算法,每一时刻成功率的斜率都是可以计算得到的,如图7(b)中曲线所示。图7(b)中上下水平线所示T0时刻之前的历史数据计算出来的斜率正常波动区间,在T0时刻附近成功率斜率确实有较大的降低,对比历史斜率的正常波动区间,可以判断该时刻业务存在异常。
在实际实时计算进行异常检测时,因为数据存在波动性,偶尔一两个异常值可能对应的是数据的偶然抖动,而不是系统真的发生故障。因而在实际计算时通常判定一定时间窗口内的异常点数,只有当异常点数大于设定的阈值才会认为该指标对应的系统产生了异常,进行告警。值得一提的,LOWESS算法计算斜率时采用了一定宽度的时间窗口,因而对偶尔的噪声并不敏感,能够自然的避过这样的情形,如图7(a)所示,数据的偶然抖动并没有对斜率曲线产生太大影响。除此之外,该算法在成功率变化较大时候依然能够表现良好,如图8所示,即使历史的成功率起伏比较大,依然能在成功率陡降时产生告警。
在一个实施例中,如图9所示,根据历史数据中各时刻对应的历史斜率,确定允许波动区间即步骤502,包括步骤902至步骤904。
步骤902,根据历史数据中各时刻对应的历史斜率,得到历史斜率中的中位数和中位数绝对偏差。
步骤904,根据中位数和中位数绝对偏差,确定允许波动区间。
其中,在统计学中,绝对中位数MAD是对单变量数值型数据的样本偏差的一种鲁棒性测量。同时也可以表示由样本的MAD估计得出的总体参数。对于单变量数据集X1,X2,...,Xn,MAD定义为单变量数据集中各数据点到中位数的绝对偏差的中位数:MAD=median(∣Xi-median(X)∣)也就是说,先计算出数据与它们的中位数之间的残差(偏差),MAD就是这些偏差的绝对值的中位数。例如,考虑数据集(1,1,2,2,4,6,9),它的中位数为2。数据点到2的绝对偏差为(1,1,0,0,2,4,7),该偏差列表的中位数为1(因为排序后的绝对偏差为(0,0,1,1,2,4,7))。所以该数据的中位数绝对偏差为1。
采用中位数(median)和中位数绝对偏差(MAD)来计算允许波动区间。相比于平均值和标准差,MAD和median更加对数据集中异常值的处理比均值和标准差更具有弹性。图7(b)中上下水平线即为根据T0时刻之前该指标的斜率值计算的波动范围上下界:[median-6*MAD,median+6*MAD]。事实上,由于median和MAD相对比较稳定,在实际计算过程中,为了满足实时计算对计算量的要求,这两个数据可以基于离线数据计算得到,然后定时更新。
在实际的应用场景中,由于监测数据具有不同的数据特性,例如有的数据指标变化较为平缓,而有的数据指标呈周期性变化,针对数据指标周期性变化的情况,可以采用不同的方式实现。具体来说,对于数据指标变化比较平缓,数值维持在一个稳定的区间范围之内的场景下,采用基于拟合斜率的方式进行异常分析。对于指标变化比较明显,但是有具有一定的周期性的场景下,可以采用基于斜率差值的方式进异常行分析。在一个实施例中,如图10所示,提供了采用基于斜率差值的方式进行异常分析的一个实施例。根据基于历史数据预先确定的允许波动区间,得到更新的斜率集合中超过允许波动区间的异常斜率数据的数量之前,还包括步骤1002至步骤1006。
步骤1002,获取至少三个更新周期内的历史数据,确定历史数据对应的历史斜率。
步骤1004,确定历史数据在周期内的基线数据、以及基线数据对应的基线斜率,得到历史斜率与基线斜率在各个时刻的斜率差值。
由于历史数据中可能存在某个周期内出现异常数据的情况,通过将历史数据的周期设定为至少三个,以确保周期内的同一相对时刻至少有三个数据,可以有效减小或避免异常数据对确定基线数据的确定所造成的干扰,从而提高基线数据的可靠性。
具体来说,斜率差值可以是具有正负表示的数值差,例如,斜率差值可以通过斜率增量或斜率减量来体现。
在一个实施例中,确定历史数据在周期内的基线数据、以及基线数据对应的基线斜率,得到历史斜率与基线斜率在各个时刻的斜率差值包括:基于时刻与周期的相对时间关系,根据不同周期中的同一相对时刻对应的历史数据,确定相对时刻的基线数据。将基线数据按相对时刻逐点进行局部加权回归处理,得到相对时刻的基线斜率。将历史数据对应的历史斜率与对应相对时刻的基线斜率进行作差处理,得到斜率差值。
步骤1006,根据斜率差值的中位数和中位数绝对偏差,确定允许波动区间。
基于拟合斜率,更新预设的斜率集合包含的斜率数据,得到更新的斜率集合包括步骤1008。
步骤1008,将拟合斜率相对于基线斜率的斜率增量更新至预设的斜率集合,得到更新的斜率集合。
待分析数据呈周期性变化是指待分析目标所对应的业务指标是在周期内呈规律变化,也就是说,在不同周期中的同一相对时刻的业务指标具有相同或相近的数据特点。其中,相对时刻是指时刻与周期的相对时间关系。例如,第一周期中的第一时刻与第二周期中的第一时刻,就是不同周期中的同一相对时刻。
基线数据是指对历史数据按周期进行分析得到的、用于描述周期特性的数据。基线数据可以是对不同周期中同一相对时刻对应的数据进行取平均值或取中位数的方式得到的,或者更加准确地,基于时序分解算法计算得到的周期性部分数据。它的数据量与一个周期的数据量相同。
对于呈周期性变化的数据,以斜率差值为比较对象进行异常分析,以斜率差值为比较对象具体体现在斜率集合中存放的数据为拟合斜率相较于基线斜率的斜率差值,允许波动区间是基于历史数据的历史斜率相较于基线斜率的斜率差值来确定的。通过斜率差值的比较分析方式,能够适用于呈周期性变化的数据的异常监测,得到准确有效的异常监测结果。
在一个实施例中,如图11所示,提供了一种数据异常监测方法,可以应用在对于数据指标变化比较平缓,数值维持在一个稳定的区间范围之内的场景下,包括如下步骤1102至步骤1122。
步骤1102,对历史数据中任一时刻对应的目标数据,以待分析数据所在时刻为历史拟合窗口的末位时刻,确定历史拟合窗口在历史数据中的位置。
步骤1104,根据历史拟合窗口的位置,从历史数据中获取目标数据对应的历史拟合数据。
步骤1106,基于历史拟合数据在历史拟合窗口中的位置以及历史拟合窗口的各个位置对应的加权参数,对目标数据进行局部加权回归处理,得到与目标数据对应的历史斜率。
步骤1108,根据历史数据中各时刻对应的历史斜率,得到历史斜率中的中位数和中位数绝对偏差。
步骤1110,根据历史斜率中的中位数和中位数绝对偏差,确定允许波动区间。
步骤1112,获取待分析数据,以待分析数据所在时刻为实时拟合窗口的末位时刻,确定实时拟合窗口在待分析数据对应历史数据中的位置。
步骤1114,根据实时拟合窗口的位置,从历史数据中获取待分析数据对应的拟合数据。
步骤1116,基于拟合数据在实时拟合窗口中的位置以及实时拟合窗口的各个位置对应的加权参数,对待分析数据进行局部加权回归处理,得到待分析数据的拟合斜率。
步骤1118,基于拟合斜率,更新预设的斜率集合包含的斜率数据,得到更新的斜率集合。
步骤1120,根据允许波动区间,得到更新的斜率集合中超过允许波动区间的异常斜率数据的数量。
步骤1122,根据异常斜率数据的数量与预设异常阈值,判定所述待分析数据是否存在异常。
在一个实施例中,如图12所示,提供了一种数据异常监测方法,可以应用于指标变化比较明显,但是有具有一定的周期性的场景下,包括如下步骤1202至步骤1222。
步骤1202,获取至少三个更新周期内的历史数据,确定历史数据对应的历史斜率。
步骤1204,基于时刻与周期的相对时间关系,根据不同周期中的同一相对时刻对应的历史数据,确定相对时刻的基线数据。
步骤1206,将基线数据按相对时刻逐点进行局部加权回归处理,得到相对时刻的基线斜率。
步骤1208,将历史数据对应的历史斜率与对应相对时刻的基线斜率进行作差处理,得到斜率差值。
步骤1210,根据斜率差值的中位数和中位数绝对偏差,确定允许波动区间。
步骤1212,获取待分析数据,以待分析数据所在时刻为实时拟合窗口的末位时刻,确定实时拟合窗口在待分析数据对应历史数据中的位置。
步骤1214,根据实时拟合窗口的位置,从历史数据中获取待分析数据对应的拟合数据。
步骤1216,基于拟合数据在实时拟合窗口中的位置以及实时拟合窗口的各个位置对应的加权参数,对待分析数据进行局部加权回归处理,得到待分析数据的拟合斜率。
步骤1218,将拟合斜率相对于基线斜率的斜率增量更新至预设的斜率集合,得到更新的斜率集合。
步骤1220,根据允许波动区间,得到更新的斜率集合中超过允许波动区间的异常斜率数据的数量。
步骤1222,根据异常斜率数据的数量与预设异常阈值,判定所述待分析数据是否存在异常。
本申请还提供一种应用场景,该应用场景应用上述的数据异常监测方法。具体地,该数据异常监测方法在指标变化比较平缓应用场景的应用如下场景一所示:
场景一:监测对象的数据数值维持在一个稳定的区间范围之内,如率指标的监测,该场景下流程如图13所示,计算分为策略计算和实时计算两部分,更新频率分别为天和分钟。
参照图13,上面部分的虚线框内为策略计算部分,目的是为了计算允许波动区间。由于允许波动区间相对稳定,更新频率可以较低,按天或者半天为周期,其中Tupdate为更新时刻。
下面部分的虚线框内为实时计算部分,为了减少噪声的影响,内存内会缓存当前时刻之前10min内的斜率数据,依据10min窗口内处于波动区间外的点数进行异常与否判断,该斜率数据会实时更新,始终维持在10min长度。
具体来说,服务器按照1min的数据采集粒度,获取以各APP为监测对象的监测时序数据,对于允许波动区间的计算,以一天为一个周期,在线下处理完成。处理过程为:获取更新时刻之前一个周期内的历史数据,采用LOWESS算法逐点对历史数据进行斜率计算,得到1440个斜率,根据这1440个斜率的中位数(median)和中位数绝对偏差(MAD)来计算允许波动区间[median-6*MAD,median+6*MAD]。
以当前获取的最新待分析数据对应的时刻为t0为例,服务器根据t0时刻之前2w0范围内的历史数据,采用LOWESS算法计算t0时刻的斜率。服务器在t-1时刻内存内会缓存[k-10、k-9……k-1]对应的斜率,在t0时刻内存内会缓存[k-9、k-8……k0]对应的斜率。然后将缓存[k-9、k-8……k0]对应的斜率与允许波动区间[median-6*MAD,median+6*MAD]进行比较,当斜率在允许波动区间外的点数>7时,判定出现异常,否则为未出现异常。
本申请还另外提供一种应用场景,该应用场景应用上述的数据异常监测方法。具体地,该数据异常监测方法在指标变化比较明显,但是有具有一定的周期性的应用场景的应用如下场景二所示:
场景二,基于时序分解算法提取出周期性部分作为基线,再计算基线的斜率Slopeperodic(t),该斜率可以根据Slopeperodic(t)=Slopeperodic(t+T)推广到任意时刻,其中T是一个周期的长度。此时,可采用Slope(t)-Slopeperodic(t)作为统计量,替代场景一中的斜率指标Slope(t),该场景下计算流程如图14所示,在该流程中假设数据以天为周期。
参见图14,上面部分的虚线框内为策略计算部分,相比于场景一,由于指标数据具有周期性,可基于历史数据提取出基线,然后计算历史数据斜率相对于基线的偏离程度,得到波动区间。
下面部分的虚线框内为实时计算部分,它同样会计算当前时刻前10min内指标数据斜率,但是此时异常衡量的指标是该斜率相对于基线数据斜率的增量。此图中假设指标数据以天为周期,计算基线数据时采用了7个周期的历史数据。
具体来说,服务器按照1min的数据采集粒度,获取以各APP为监测对象的监测时序数据,对于允许波动区间的计算,以一天为一个周期,需要获取7个周期的数据,在线下处理完成。处理过程为:获取更新时刻之前7个周期内的历史数据,采用LOWESS算法逐点对7个周期内的历史数据进行斜率计算,得到7*1440个斜率。根据不同周期内同一个相同时刻的7个数据,通过取中位数,得到1400个基线数据,采用LOWESS算法逐点对基线数据进行斜率计算,得到1440个基线斜率,通过将7个周期内的7*1440个斜率与1440个基线斜率基于周期性作差,得到7*1440个斜率差值,根据这1440个斜率差值的中位数(median)和中位数绝对偏差(MAD)来计算允许波动区间[median-6*MAD,median+6*MAD]。
以当前获取的最新待分析数据对应的时刻为t0为例,服务器根据t0时刻之前2w0范围内的历史数据,采用LOWESS算法计算t0时刻的斜率。服务器在t-1时刻内存内会缓存[k-10、k-9……k-1]对应的斜率,在t0时刻内存内会缓存[k-9、k-8……k0]对应的斜率。然后将缓存[k-9、k-8……k0]对应的斜率与基线斜率中的对应时刻的斜率作差,得到t0时刻内存内会缓存[Δk-9、Δk-8……Δk0]对应的斜率差值,将缓存的斜率差值与允许波动区间[median-6*MAD,median+6*MAD]进行比较,当斜率差值在允许波动区间外的点数>7时,判定出现异常,否则为未出现异常。
可以看到无论是场景一还是场景二的计算,都是将耗费时间和计算量的部分放在线下进行,而且更新频率较低。而在线上只需每次进行一次LOWESS计算,再拉取生成好的策略数据即可进行异常值判定,计算量非常小。
应该理解的是,虽然上述各实施例中涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,上述各实施例中涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图15所示,提供了一种数据异常监测装置1500,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:待分析数据获取模块1502、拟合斜率处理模块1504、斜率集合更新模块1506、波动分析模块1508和异常判定模块1510,其中:
待分析数据获取模块1502,用于获取待分析数据。
拟合斜率处理模块1504,用于根据待分类数据对应的历史数据,对待分析数据进行局部加权回归处理,得到待分析数据的拟合斜率。
斜率集合更新模块1506,用于基于拟合斜率,更新预设的斜率集合包含的斜率数据,得到更新的斜率集合,斜率集合按时间顺序存放固定数量的斜率数据。
波动分析模块1508,用于根据基于历史数据预先确定的允许波动区间,得到更新的斜率集合中超过允许波动区间的异常斜率数据的数量。
异常判定模块1510,用于根据异常斜率数据的数量与预设异常阈值,判定所述待分析数据是否存在异常。
在一个实施例中,拟合斜率处理模块还用于以待分析数据所在时刻为实时拟合窗口的末位时刻,确定实时拟合窗口在待分析数据对应历史数据中的位置;根据实时拟合窗口的位置,从历史数据中获取待分析数据对应的拟合数据;基于拟合数据在实时拟合窗口中的位置以及实时拟合窗口的各个位置对应的加权参数,对待分析数据进行局部加权回归处理,得到待分析数据的拟合斜率。
在一个实施例中,数据异常监测装置还包括允许波动区间确定模块,用于将历史数据按时刻逐点进行局部加权回归处理,得到历史数据各时刻对应的历史斜率;根据历史数据中各时刻对应的历史斜率,确定允许波动区间。
在一个实施例中,允许波动区间确定模块,还用于对历史数据中任一时刻对应的目标数据,以待分析数据所在时刻为历史拟合窗口的末位时刻,确定历史拟合窗口在历史数据中的位置;根据历史拟合窗口的位置,从历史数据中获取目标数据对应的历史拟合数据;基于历史拟合数据在历史拟合窗口中的位置以及历史拟合窗口的各个位置对应的加权参数,对目标数据进行局部加权回归处理,得到与目标数据对应的历史斜率。
在一个实施例中,允许波动区间确定模块,还用于根据历史数据中各时刻对应的历史斜率,得到历史斜率中的中位数和中位数绝对偏差;根据中位数和中位数绝对偏差,确定允许波动区间。
在一个实施例中,待分析数据呈周期性变化;允许波动区间确定模块,还用于获取至少三个更新周期内的历史数据,确定历史数据对应的历史斜率;确定历史数据在周期内的基线数据、以及基线数据对应的基线斜率,得到历史斜率与基线斜率在各个时刻的斜率差值;根据斜率差值的中位数和中位数绝对偏差,确定允许波动区间;斜率集合更新模块还用于将拟合斜率相对于基线斜率的斜率增量更新至预设的斜率集合,得到更新的斜率集合。
在一个实施例中,允许波动区间确定模块,还用于基于时刻与周期的相对时间关系,根据不同周期中的同一相对时刻对应的历史数据,确定相对时刻的基线数据;将基线数据按相对时刻逐点进行局部加权回归处理,得到相对时刻的基线斜率;将历史数据对应的历史斜率与对应相对时刻的基线斜率进行作差处理,得到斜率差值。
关于数据异常监测装置的具体限定可以参见上文中对于数据异常监测方法的限定,在此不再赘述。上述数据异常监测装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图16所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储异常监测数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据异常监测方法。
本领域技术人员可以理解,图16中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。