Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于统计的异常检测方法S-H-ESD[twitter]

基于统计的异常检测方法S-H-ESD[twitter]

作者头像
Ai学习的老章
发布于 2020-12-08 06:36:20
发布于 2020-12-08 06:36:20
2.1K00
代码可运行
举报
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Automatic Anomaly Detection in the Cloud Via Statistical Learning[1]

原文主要介绍了twitter云系统中利用统计学习实现异常检测的自动化,下面直接介绍相关方法。

Grubbs Test

表示一组时间序列,Grubbs test 检测单变量数据集的“最异常点“。前提假设数据分布是正态的。Grubbs test假设定义如下:

:数据集中没有异常点

: 数据集中有至少一个异常点

Grubbs‘ test 统计量定义如下

其中

分别表示数据集的均值和方差。对于双边检验,当满足式(2)时,以显著性水平

拒绝原假设

其中

表示自由度

,显著性水平

分布的上临界值。对于单边检验,

变为

[2]。但是缺点是数据集中存在多个异常点则不适合,因为

分布表不会更新。下面介绍多异常点的检测算法ESD(Extreme Studentized Deviate)[3]。

ESD

ESD可以检测时间序列数据的多异常点。需要指定异常点比例的upper bound是k,最差的情况是至多49.9%。实际中,数据集的异常比例一般不超过5%。ESD假设定义如下:

:数据集中没有异常点

: 数据集中有至多

个异常点

检验统计量和临界值分别定义如下

其中

,ESD会重复

次检验,当

时,则有至少

个异常点。对于Grubbs Test和ESD的区别[4],主要两点:一是ESD会根据不同的离群值调整临界值;二是ESD一直会检验

个离群点,而Grubbs test可能会提前结束检验(当“最异常点”检验时

成立)。比如下面Rosner paper中的数据,设置

,第一次和第二次检验接受原假设,由于剔除前两个值之后临界值

的变化,在第三次检验拒绝了原假设,因此最终得到三个异常点。

前10离群点中第三个点检测为异常,则至少有3个异常点

S-ESD

考虑ESD有如下两个限制:一是对于具有季节性的时间序列异常不能很好的识别,下图1中很多周期性变化的点并非异常点;二是多峰分布的数据点,一些低峰异常数据点不能被识别出来,如图2。

图1 时间序列图

图2 数据分布图

因此介绍S-ESD(Seasonal-ESD),Algorithm 1 中主要的不同是对时间序列数据进行STL分解,剔除其中的季节项,中位数做为趋势项(STL Variant),对残差项进行ESD检验。STL variant不同于STL主要考虑图3的情形,(a)中的STL分解得到的残差项,其中红色阴影部分存在spurious anomalies(这些点在原时间序列中并非异常)。

图3 STL和变形STL分解对比图

(局部异常和全局异常可识别性)S-ESD通过分解之后对残差项进行ESD检验,不仅可检验全局异常点,而且可以检验出如图4的局部异常点,这些异常点在原始数据中介于季节项的最大值和最小值之间,直接对原始数据ESD检验则无法识别。

图4 局部异常和全局异常对比

S-H-ESD

但是S-ESD也有局限性,就是对于数据中含有异常点数量较多时,很难识别较多的异常点。因此下面介绍Seasonal Hybrid ESD (S-H-ESD),首先介绍MAD。

MAD

考虑到ESD的检验统计量中的均值和方差对于过大的异常值较为敏感,于是选择利用MAD(Median Absolute Deviation)进行代替,如下

更一般的可以使用

或者

因此S-H-ESD相比S-ESD,是把ESD中的均值方差计算的统计量替换成MAD,图5比较了两种方法的效果,S-H-ESD对于异常点的识别率更高,同时由于计算中位数,时间复杂度也相对会更高。

图5 S-ESD和S-H-ESD对比

python实现

推荐pyculiarity,原文的github地址是R的实现。

Pyculiarity是twitter时序数据异常检测AnomalyDetection[1]的python实现版本。主要是基于ESD(Extreme Studentized Deviate test)原理的异常检测算法。ESD的主要思想就是检验最大值、最小值偏离均值的程度是否为异常,具体可参考[2]。通过阅读pyculiarity的源码[3],了解其主要包含两个方法:

  • detect_ts:用于时序数据,输入的DataFrame需要两列数据,其中一列为时间,另一列为该时间点对应的值
  • detect_vec:用于向量数据,可以不包含是时间列,时间索引按照DataFrame长度自动生成。

主要参数:

  • df:包含时间和值的DataFrame
  • max_anoms=0.10:发现异常数据的量(占总体的百分之多少)
  • direction=’pos’:’pos’是发现数据突增点,’neg’是发现数据突降点,’both’是包含突增与突降
  • alpha=0.05:接受或拒绝显著性水平,即p-value
  • only_last=None:仅再时间序列最后1天(’day’)或1小时(’hr’)寻找异常
  • threshold=None:仅报告高于指定阈值的正向异常。选项有:
    • med_max:每日最大值的中位数
    • p95:每日最大值的95%
    • p99:每日最大值的99%
  • e_value=False:返回数据中新增一列期望值
  • longterm=False:当时间序列超过一个月时,设置此值,
  • piecewise_median_period_weeks=2:当设置longterm后需要设置该值,设置滑动窗口的大小,注意这里需要>=2
  • plot=False:输出图像,已经不支持
  • y_log=False:对Y轴值取对数
  • xlabel = ”:添加输出到图形的X轴标签
  • ylabel = ‘count’:添加输出到图形的Y轴标签
  • title=None:输出图像的标签
  • verbose=False:是否输出debug信息

示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//data为包含[时间,数值]两列的dataframe
results=detect_ts(data,max_anoms=0.4,alpha=0.05,direction='both',only_last=None,longterm=True, piecewise_median_period_weeks=2)
//结果可视化
data['timestamp'] = pd.to_datetime(data['timestamp'])
data.set_index('timestamp', drop=True)

f, ax = plt.subplots(2, 1, sharex=True)
ax[0].plot(data['timestamp'], data['value'], 'b')
ax[0].plot(results['anoms'].index, results['anoms']['anoms'], 'ro')
ax[0].set_title('Detected Anomalies')
ax[1].set_xlabel('Time Stamp')
ax[0].set_ylabel('Count')
ax[1].plot(results['anoms'].index, results['anoms']['anoms'], 'b')
ax[1].set_ylabel('Anomaly Magnitude')
plt.show()

参考

  1. ^Hochenbaum J, Vallis O S, Kejariwal A. Automatic anomaly detection in the cloud via statistical learning[J]. arXiv preprint arXiv:1704.07706, 2017.
  2. ^Francisco Augusto Alcaraz Garcia. Tests to identify outliers in data series. Pontifical Catholic University of Rio de Janeiro, Industrial Engineering Department, Rio de Janeiro, Brazil, 2012.
  3. ^Bernard Rosner. On the detection of many outliers. Technometrics, 17(2):221–227, 1975.
  4. ^https://www.itl.nist.gov/div898/handbook/eda/section3/eda35h3.htm
  5. ^https://github.com/twitter/AnomalyDetection
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习与统计学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【时间序列】时序预测竞赛之异常检测算法综述
本文将介绍在时间序列预测相关问题中常见的异常检测算法,可以很大程度上帮助改善最终预测效果。
黄博的机器学习圈子
2020/12/11
3.3K0
【时间序列】时序预测竞赛之异常检测算法综述
独家 | 在Python中使用广义极端学生化偏差(GESD)进行异常检测(附链接)
异常检测在生活中起着非常重要的作用。通常,异常数据可能与某种问题或罕见事件有关,例如 银行欺诈、医疗问题、结构缺陷、设备故障等。这种联系使得能够挑选出哪些数据点可以被视为异常值是非常有趣的,因为从商业角度识别这些事件通常是十分有趣的事情。
数据派THU
2021/07/16
1.8K0
收藏!14 种异常检测方法总结
来源:宅码本文约7800字,建议阅读10分钟本文收集整理了公开网络上一些常见的异常检测方法(附资料来源和代码)。 本文收集整理了公开网络上一些常见的异常检测方法(附资料来源和代码)。不足之处,还望批评指正。 一、基于分布的方法 1. 3sigma 基于正态分布,3sigma准则认为超过3sigma的数据为异常点。 图1: 3sigma def three_sigma(s):     mu, std = np.mean(s), np.std(s)     lower, upper = mu-3*std
数据派THU
2022/06/29
1.2K0
收藏!14 种异常检测方法总结
14种异常检测方法汇总(附代码)!
今天给大家分享一篇关于异常检测的文章,重点介绍了14种公开网络上一些常见的异常检测方法(附资料来源和代码)。
小白学视觉
2022/12/27
2.9K0
14种异常检测方法汇总(附代码)!
时间序列分解和异常检测方法应用案例
我们最近有一个很棒的机会与一位伟大的客户合作,要求Business Science构建一个适合他们需求的开源异常检测算法。业务目标是准确地检测各种营销数据的异常情况,这些数据包括跨多个客户和Web源跨越数千个时间序列的网站操作和营销反馈。输入anomalize:一个整洁的异常检测算法,该算法基于时间(建立在之上tibbletime)并可从一个到多个时间序列进行扩展!我们非常高兴能够为其他人提供这个开源R软件包以使其受益。在这篇文章中,我们将概述anomalize它的作用和方式。
拓端
2020/08/02
1.5K0
风控ML[14] | 风控中的异常检测原理与应用
今天来介绍一下风控中的异常检测,从最基础的概念开始讲起,因为本人对这块的内容平时工作也做得不多,更多滴偏向于“纸上谈兵”,有什么说得不对的地方,也欢迎各位朋友指正~谢谢。
Sam Gor
2022/04/12
3.2K0
风控ML[14] | 风控中的异常检测原理与应用
用于时间序列异常检测的学生化残差( studentized residual)的理论和代码实现
异常检测是指数据科学中可帮助发现数据集中的异常值有用的技术。异常检测在处理时间序列数据时特别有用。例如时间序列数据来自传感器测量结果(例如压力和温度),由于设备故障和瞬态现象等问题包含许多异常点, 异常检测有助于消除这些点异常值,以优化时间序列数据中的信号。对于销量预测等需求异常点也可以表示为活动或者营销的记录,可以进行重点分析。
deephub
2022/04/14
1.6K0
用于时间序列异常检测的学生化残差( studentized  residual)的理论和代码实现
2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
上一篇已经对赛题进行详细分析了,而且大方向和基本的模型已经确定完毕,数据集都已经找到了,现在最重要的就是要分析风暴数据集以及建立时序预测模型,使用气候模型预测的数据,评估气候变化对未来极端天气事件频率和强度的影响。来看极端天气频率是否会上升,以及如何利用历史气象数据来支撑我们的模型效果。
fanstuck
2024/02/04
7380
2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
14种数据异常值检验的方法!
来源:宅码 作者:AI 本文收集整理了公开网络上一些常见的异常检测方法(附资料来源和代码)。不足之处,还望批评指正。 一、基于分布的方法 1. 3sigma 基于正态分布,3sigma准则认为超过3sigma的数据为异常点。 图1: 3sigma def three_sigma(s):    mu, std = np.mean(s), np.std(s)    lower, upper = mu-3*std, mu+3*std    return lower, upper 2. Z-score
张俊红
2022/05/30
1.7K0
14种数据异常值检验的方法!
【时间序列】时间序列的智能异常检测方案
时间序列异常检测是学术界和工业界一直研究的热点和难点问题。比如腾讯内部开源的Metis项目,其实现思路是基于统计判决、无监督和有监督学习对时序数据进行联合检测。通过统计判决、无监督算法进行首层判决,输出疑似异常,其次进行有监督模型判决,得到最终检测结果。检测模型是经大量样本训练生成,可根据样本持续训练更新。Metis实现的时间序列异常检测学件在织云企业版本中已覆盖 20w+ 服务器,承载了 240w+ 业务指标的异常检测。经过了海量监控数据打磨,该学件在异常检测和运维监控领域具有广泛的应用性。
roganhuang
2020/07/29
23.4K2
【时间序列】时间序列的智能异常检测方案
【机器学习 | 假设检验系列】假设检验系列—卡方检验(详细案例,数学公式原理推导),最常被忽视得假设检验确定不来看看?
【机器学习 | 假设检验系列】假设检验系列—卡方检验(详细案例,数学公式原理推导),最常被忽视得假设检验确定不来看看? 作者: 计算机魔术师 版本: 1.0 ( 2023.8.27 )
计算机魔术师
2023/12/18
2.3K0
【机器学习 | 假设检验系列】假设检验系列—卡方检验(详细案例,数学公式原理推导),最常被忽视得假设检验确定不来看看?
基于机器学习算法的时间序列价格异常检测(附代码)
异常检测也称为异常值检测,是一种数据挖掘过程,用于确定数据集中发现的异常类型并确定其出现的详细信息。 在当今世界,由于大量数据无法手动标记异常值,自动异常检测显得至关重要。 自动异常检测具有广泛的应用,例如欺诈检测,系统健康监测,故障检测以及传感器网络中的事件检测系统等。
量化投资与机器学习微信公众号
2019/02/26
6.3K0
异常检测:季节性ESD Python pip安装sesd库报错解决
所有的功劳都归于 Twitter 公司的Jordan Hochenbaum、Owen S.Vallis和Arun Kejariwa。
叶庭云
2021/12/07
5530
异常检测:季节性ESD Python pip安装sesd库报错解决
时序异常检测 Anomaly transformer
a)学习时序数据点级别的表征,进而依靠重构或预测误差进行判定,例如RNN; b)通过图以显式关联建模,将具有不同时间点的时间序列表示为顶点,并通过随机游走检测异常。例如GNN。
数据STUDIO
2023/09/04
1.2K0
时序异常检测 Anomaly transformer
【机器学习笔记】:大话线性回归(三)
当回归模型中两个或两个以上的自变量彼此相关时,则称回归模型中存在多重共线性,也就是说共线性的自变量提供了重复的信息。
Python数据科学
2018/12/13
1.7K0
基于AI算法的数据库异常监测系统的设计与实现
总第532篇 2022年 第049篇 美团数据库平台研发组,面临日益急迫的数据库异常发现需求,为了更加快速、智能地发现、定位和止损,我们开发了基于AI算法的数据库异常检测服务。本文从特征分析、算法选型、模型训练与实时检测等维度介绍了我们的一些实践和思考,希望为从事相关工作的同学带来一些启发或者帮助。 1. 背景 2. 特征分析 2.1 找出数据的变化规律 3. 算法选型 3.1 分布规律与算法选择 3.2 案例样本建模 4. 模型训练与实时检测 4.1 数据流转过程 4.2 异常检测过程 5. 产品运营
美团技术团队
2022/09/06
7280
基于AI算法的数据库异常监测系统的设计与实现
【数据挖掘 & 机器学习 | 时间序列】时间序列必备工具箱: 自相关与偏相关检验
【数据挖掘 & 机器学习 | 时间序列】时间序列必备工具箱: 自相关与偏相关检验 作者: 计算机魔术师 版本: 1.0 ( 2023.11.18 )
计算机魔术师
2023/11/20
1.7K0
【数据挖掘 & 机器学习 | 时间序列】时间序列必备工具箱: 自相关与偏相关检验
《异常检测——从经典算法到深度学习》6 基于重构概率的 VAE 异常检测
论文总体结构为: Abstract: 我们提出了一种基于重构概率的异常检测方法 可变自动编码器。
全栈程序员站长
2022/11/17
1.7K0
《异常检测——从经典算法到深度学习》6 基于重构概率的 VAE 异常检测
干货 | 携程火车票异常检测和根因定位实践
携程火车票包含1000+的业务指标,人工监测指标的异常情况耗时费力,而由于业务差异,基于规则和简单统计学的检测方案只能覆盖到单个指标或者单类指标,并且不能随着新业务上线或者功能变动灵活动态的调整相应的规则,并不适用于大量不同业务线的指标。我们希望使用AI算法来代替人工,对指标进行全自动的监控,旨在发现指标的异常和导致异常的潜在原因。
携程技术
2023/10/24
1.2K0
干货 | 携程火车票异常检测和根因定位实践
手把手教你用Python处理非平稳时间序列(附代码)
预测一个家庭未来三个月的用电量,估计特定时期道路上的交通流量,预测一只股票在纽约证券交易所交易的价格……这些问题都有什么共同点?
数据派THU
2018/12/14
2.2K0
手把手教你用Python处理非平稳时间序列(附代码)
推荐阅读
【时间序列】时序预测竞赛之异常检测算法综述
3.3K0
独家 | 在Python中使用广义极端学生化偏差(GESD)进行异常检测(附链接)
1.8K0
收藏!14 种异常检测方法总结
1.2K0
14种异常检测方法汇总(附代码)!
2.9K0
时间序列分解和异常检测方法应用案例
1.5K0
风控ML[14] | 风控中的异常检测原理与应用
3.2K0
用于时间序列异常检测的学生化残差( studentized residual)的理论和代码实现
1.6K0
2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
7380
14种数据异常值检验的方法!
1.7K0
【时间序列】时间序列的智能异常检测方案
23.4K2
【机器学习 | 假设检验系列】假设检验系列—卡方检验(详细案例,数学公式原理推导),最常被忽视得假设检验确定不来看看?
2.3K0
基于机器学习算法的时间序列价格异常检测(附代码)
6.3K0
异常检测:季节性ESD Python pip安装sesd库报错解决
5530
时序异常检测 Anomaly transformer
1.2K0
【机器学习笔记】:大话线性回归(三)
1.7K0
基于AI算法的数据库异常监测系统的设计与实现
7280
【数据挖掘 & 机器学习 | 时间序列】时间序列必备工具箱: 自相关与偏相关检验
1.7K0
《异常检测——从经典算法到深度学习》6 基于重构概率的 VAE 异常检测
1.7K0
干货 | 携程火车票异常检测和根因定位实践
1.2K0
手把手教你用Python处理非平稳时间序列(附代码)
2.2K0
相关推荐
【时间序列】时序预测竞赛之异常检测算法综述
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验