时间序列中的异常值检测:如何减少误报?


11

我想自动离群值在时间序列检测和我使用的罗布海德门提出的解决方案的修改在这里

假设我衡量来自各个国家/地区的网站的每日访问量。对于某些日访问量只有几百或几千的国家,我的方法似乎工作合理。

但是,在一个国家每天只进行1或2次访问的情况下,该算法的范围非常狭窄(例如1±0.001),因此这2次访问被认为是异常值。我如何自动检测此类情况,以及如何处理它们以识别异常值?我不想设置一个手动的阈值,例如每天100次访问。

谢谢!


2
这是由于(至少部分地)到一个高度可变的方差- -可能解决问题自然,简单的方法是应用方差稳定转化,如安斯库姆或弗里曼-的Tukey变换,以将数据在寻找离群值之前。
ub

Answers:


3

对于少量离散的计数,不要期望太大。从1到2造访是100%的增长,从0到1造访是无限的增长。在低级别,您可能正在处理零膨胀模型,并且那里的噪声也很大。

以我的经验,对这样的数据进行大小计数混合会导致两个小问题:1)它们过于粗糙而无法处理大量数据; 2)它们是由不同的过程生成的。(想想农村的小型邮局与大城市的邮局)。因此,您至少需要将建模分为两部分:针对较大的数量执行成功的工作,并针对较小的数量执行不同的操作(更粗略,更近似)。但是不要指望太多。

好消息是,根据定义,大笔交易会包括您的更多交易,因此,即使您的模型无法涵盖您的大多数网站,您的更好模型也可以涵盖更多数据。

(我说“建模”是通用的,但是当然,离群值检测是在假设一个特定的模型,并且发现该模型的假设极不可能出现的点。)


1

时间序列中的每个值都是概率分布中的一个样本。您需要首先找到概率分布是什么,然后定义稀有一词在该分布中的含义。

因此,计算经验CDF,并计算95%置信区间。每当发生该区域以外的事件时,根据定义,您都知道这一定是罕见的事件。


0

以特定的置信度检测离群值是一回事,而放置第二个规范会进一步限制离群值的接受是另一回事。曾经有人问我以下问题:“ AUTOBOX能否以预先设定的置信度检测到xx个单位的平均移位”。本质上要求的是双重测试。AUTOBOX是我帮助开发的一款软件,您可能会发现它具有成本效益,因为没有免费软件实现了此双重测试。

谢谢尼克:我将级别转换用作“异常值”的一个特定示例,或者一般来说是根据经验确定的确定性影响。其他形式的“异常值”是脉冲,季节性脉冲和本地时间趋势,以及特定的组合,例如瞬时变化到新的水平。要点是,可能有两个假设在起作用,它们反映了统计意义和现实意义。最初引起我注意此问题的客户对这两者都感兴趣。


离群值不一定意味着均值漂移。...实际上,采用不同手段的政权之间的阶梯式或斜线式变化根本不需要离群值。您对此非常了解,但是我认为这意味着补充他人的观点对他人最有帮助。
尼克·考克斯

谢谢你们俩。我对现实世界的意义感兴趣。确定异常值后,我用访问量占总访问量的比例来权衡其重要性,以得出最终的重要性。尽管在2次访问的情况下该比例确实很小,但是由于期望值是1±0.001,所以实际点与期望限制的“距离”非常高(例如2 / 0.002,其中0.002是“ iqr”) 。因此,这一问题最终具有重要意义。有任何想法吗?
Stergios

我要指出的是,“局外人”在这里的广泛使用甚至比许多文献中对任何极端事物的慷慨感都更为广泛。经验丰富的读者会知道@IrishStat坚持他的强项,时间序列分析。
Nick Cox 2014年

0

您遇到了这个问题,因为您的数据远非正态分布。如果分布高度不对称,有颠簸,驼峰或尾巴太长/短,您将遇到问题。一个好主意是在使用您的方法之前应用Box Cox或Yeo-Johnson之类的转换。在您的示例中,如果使用F(x)= log(1 + x),则可以避免出现不同的幅度问题,并且可以使用以下公式进行转换:exp(z)-1

您可以使用多种过程来自​​动找到适合Box-Cox转换的lambda。我个人使用R中AID包中boxcoxnc函数所有方法的中位数。如果您的数据不是严格正数,则在使用前需要加1或其他正数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.