用于异常值检测的稳健时间序列回归

机器算法验证 回归 时间序列 异常值
2022-04-10 12:24:57

我正在浏览大量的回归模型,以找到某种形式的标准化残差,这些残差可以帮助根据观察的“异常性”对观察结果进行“评分”,以进行异常检测。

该数据是(每周)季节性时间序列(过度分散)每小时呼叫计数,因此提倡需要 GLM。预测变量(基线)是同一天,小时的历史中位数,并且观察到它紧跟当天,小时的呼叫计数。以下是 OLS 和 ANOVA 的结果:

Call:
lm(formula = observed ~ baseline, data = temp)

Residuals:
    Min      1Q  Median      3Q     Max 
-7183.7  -184.9    -2.9   273.2  5514.9 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 90.558071  40.358140   2.244    0.025 *  
baseline     1.009935   0.005434 185.838   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 814.4 on 1338 degrees of freedom
Multiple R-squared:  0.9627,    Adjusted R-squared:  0.9627 
F-statistic: 3.454e+04 on 1 and 1338 DF,  p-value: < 2.2e-16

Analysis of Variance Table

Response: observed
            Df     Sum Sq    Mean Sq F value    Pr(>F)    
baseline     1 2.2907e+10 2.2907e+10   34536 < 2.2e-16 ***
Residuals 1338 8.8748e+08 6.6329e+05                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

在此处输入图像描述

过度分散计数的示例:

10793.0
10277.0
8686.0
6189.0
4008.0
2398.0
1553.0
755.0
489.0
375.0
480.0
987.0
2423.0
4694.0
6950.0
8220.0
8904.0
9070.0
9313.0
9778.0
10129.0
10804.0
10529.0
10022.0
9838.0

您可以在此处找到数据样本,这些是从太平洋时间 2016 年 3 月 31 日 16:00:00 开始的每小时计数,已针对时区进行了调整。如果您无法在 google drive 上查看它,请下载该文件。

不出所料,误差为零均值,但非高斯和异方差(方差随着预测变量和拟合值的增加而增加)。

还观察到残差是自相关的,PACF 建议残差的 AR(1) 模型 (rho~0.6),这在时间序列数据的情况下是预期的。

我认为季节性没有任何作用,因为我们已经使用同一天、小时的中位数对其进行了调整。

因此存在以下限制:

  1. 过度分散的计数数据表明需要负二项式回归或对数据进行适当的转换,也许是半参数回归和条件方差的估计?
  2. 异常值的存在表明使用了稳健的回归方法。
  3. 残差中的自相关建议使用 AR(1) 模型,例如。用于调整估计值的 cochrane-orkutt 程序。
  4. “分数”可能是 pearson、偏差、anscombe 残差,也可能是异常统计数据,例如影响力等。

我想知道我对可用选项的评估是否正确,还是我遗漏了什么?如果有人也可以从过去的经验中分享他们对此类数据的智慧,那将非常有帮助。

PS:我更喜欢更“通用”的方法,这些方法可以处理潜在的不同时间序列分布(非参数方法)并且计算速度很快,因为有数百万个时间序列。

编辑:感谢@IrishStat 的有用评论和分析,我了解了当前开源堆栈中的必要工具及其(不)可用性。虽然,我仅限于开源,并且不得不稍微绕道使用任何可用的工具,但是,他使用 AUTOBOX 的分析(我从中借用了许多成分)对什么是建模这样的好方法很有见地数据。

1个回答

我收集了您 90 天的数据(每天 24 小时读数)并使用 AUTOBOX 进行分析,这是我帮助开发的一款使用 28 天预测范围的软件。该方法的文档可以在 AFS 网站上的用户指南中找到。我将尝试在这里为您提供一个总体概述。数据以父母对孩子的方式进行分析,最初为每日总数开发了一个模型在此处输入图像描述,在这里在此处输入图像描述结合记忆、每日影响和异常、水平变化、本地时间趋势等。这个“父模型”导致预测和置信限基于可能的不同每日误差方差,这些方差也因小时而异(以及异常发生的可能性)未来使用模拟程序。下一步是识别 24 个因果模型,使用父代作为可能的预测器,根据需要使用内存,根据需要进行电平转换,同时识别和纠正可能的异常/电平转换/本地时间趋势。作为一个例子,让我向您展示在此处输入图像描述我们的 0、6、9、15 和 18的图形输出在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述. 例如,考虑第 4 小时的模型。GROUPT,每日总序列与一周中的三天(2、3 和 4)一起显着。此外,在周期 89、55、19、78 和 2 发现了 5 个异常值(异常值)。在周期 20 存在水平偏移(平均值永久向上变化),并且从周期开始出现部分日效应(第 3 天) 19 在此处输入图像描述. 现在我们有 24 组孩子未来 28 天的预测和一组父母未来 28 天的预测。我们将这两者进行协调以获得 28 天预测的 24 小时最终预测。可以以父母对孩子或孩子对父母的方式进行协调。以下是这两个过程的快照。在此处输入图像描述 在此处输入图像描述. 显然 90 天的数据不足以捕捉到,每周效果,假期效果,一个月中的特定日期效果,长周末效果,月中一周效果,每月效果等。但是如果您有更长的系列,您可以获得想象什么是可能的。详细的输出可以通过与我联系提供给您或任何感兴趣的方,因为它是大量发布。有了这个分析,人们可能想用免费的 R 工具创造性地编程这种方法,但是有很多陷阱在等待这样的企业。希望这有助于您研究我认为关于检测异常事件并考虑它们在预测范围内的影响的非常重要的统计问题。