通用时间序列的异常值检测

机器算法验证 时间序列 自相关 异常值 增删改查
2022-03-14 14:47:43

在这种情况下,“通用”是私人和政府统计机构提出的宏观经济时间序列的全部挑战。

一些背景知识——我最近开始在一家数据提供商工作——我们收集数据发布并以一种可能对客户更方便、更易于访问的方式重新打包它们,我们拥有数以万计的数据系列(如果我们在百万,实际上)。作为 QA 流程的一部分,我们运行以下异常值检测:

XtXt1=Et
σ2的结果样本估计的,并且 z 分数是根据EtEtN(0,σ2)

我认为我们可以做得更好——对于不是随机游走的所有事情,数学显然都崩溃了。

我最初想根据序列的自相关/自协方差函数的峰值拟合 ARMA(m,n) 并检查残差。我对此的稳健性持谨慎态度,之前的问题似乎表明自相关并不是特别稳健。

2个回答

您说得对,您使用的 ARIMA 模型(一阶差异)可能不适合检测异常值。异常值可以是脉冲、电平转换、季节性脉冲或本地时间趋势。您可能想谷歌“时间序列中的干预检测”或谷歌“自动干预检测”以获取有关干预检测的一些阅读材料。请注意,这与干预建模不同,干预建模通常假设异常值的性质并且在经验上并不相同。在 mpkitas 的评论之后,将经验识别的异常值包括为虚拟预测变量系列,以适应它们的影响。在使用空过滤器识别异常值,然后识别适当的 ARIMA 模型方面已经做了大量工作。一些商业软件包假定您首先识别 arima 模型(可能因异常值而存在缺陷),然后再识别异常值。更一般的程序检查这两种策略。您当前的程序遵循“首先使用前置过滤器”的方法,但也存在前置过滤器假设的缺陷。

更多思考:要检测异常,您需要一个提供期望的模型。干预检测给出了以下问题的答案:“在我观察之前观察到的概率是多少?然后可以使用 ARIMA 模型来识别“不寻常的”时间序列观察。问题是你无法捕捉到异常值如果您的数据没有模型(至少是一个温和的模型)。否则您怎么知道某个点违反了该模型?事实上,不断增长的理解、发现和检查异常值的过程必须是迭代的。这不是一个新想法培根在大约 400 年前的 Novum Organum 中写道:“自然、运动和怪物的错误纠正了对普通事物的理解,并揭示了一般形式。因为谁知道自然之道,谁就会更容易注意到她的偏差;而且,另一方面,谁知道她的偏差,谁就会更准确地理解自然,你强加在你所有系列上的模型我显然是不合适的。

Winsorization 用较少的极端值替换极端数据值。 http://www.r-bloggers.com/winsorization/