如何预测周末和节假日的每日时间序列?

机器算法验证 r 时间序列 预测
2022-04-05 23:52:16

在考虑周末和国定假日等特殊日子时,我在尝试预测每日时间序列时无法选择采用哪种方法。我熟悉的两种方法是:

方法一:使用虚拟变量区分正常日和特殊日。方法2:将正常日和特殊日分开,分别预测每个时间序列。

第一种方法对我来说似乎是最直观和最自然的,但是当正常日子和特殊日子之间的差异很大时,它的表现很差......例如,当我们在周末有空值时。此外,要在 RI 中实现此方法,请使用 ARIMA 中的 xreg 属性,但我不知道如何为其他模型包括虚拟变量,例如:ETS、STRUCTURAL、BATS 和 TBATS、THETA。

第二种方法似乎太简单了,因为它假设我们在特殊日子和正常日子之间没有任何关系,而在大多数情况下并非如此。

还有其他我不知道的方法吗?如果没有,有没有办法改进这两种方法?如何在 R 中为 ARIMA 以外的模型使用虚拟变量?

4个回答

将所有数据保存在一个模型中:在我看来,为数据子集制作单独的模型通常不是一个好主意。最好创建一个能够充分描述整个数据集的模型。这有两个原因:(1)通过为数据子集创建单独的模型,增加了过度拟合的风险;(2) 通过将数据移出模型,您减少了两个模型中的信息,因此无法使用所有可用数据估计参数。

因此,在我看来,在周末和节假日使用虚拟变量的方法比将它们转移到单独的模型中要好得多。您将需要决定要使用多少个假人,这将需要您决定详细程度(例如,周末的两天是否被视为相同?)。即使有足够数量的虚拟变量,您有时也可能会遇到虚拟变量不足以很好地对数据点建模的情况,您可能需要交互效应。如果是这种情况,那么您应该考虑添加更多项来改善拟合,但我仍然建议您将所有数据保存在一个模型中。

您可以使用该rucmr来实现可以容纳假人的未观察组件模型。我没有使用过它,但我熟悉proc ucm在 SAS 中使用的方法。

我同意你的看法,最好不要拆分数据。假人可能也不起作用(并且可能没有必要)。如果您将季节性设置为 7 天(一周中的天数),那么虚拟变量将因季节性而变得多余。您可能会被限制在一个季节性频率上。您会每月或一年中的一周建模而不是一周中的一天吗?

对于特殊的日子,就我而言,我不得不处理假期(以及假期前后的日子)。我在预测之外建立了一个单独的统计程序,估计每个假期的影响,以及那个假期前后的日子,然后我用它来调整预测两次。

  1. 在假期之前,当它被预测时,对预测值和间隔进行调整(假设增加 25%)。
  2. 假期后将假期正常化以将其值调整回下调(减少 25%),以免造成过度预测。

这两种方法之间的区别是无关紧要的。使用与输入相同的信息,您应该具有与输出相同的信息。

我倾向于使用虚拟变量方法,因为置信度是由软件自动处理的,如果您使用方法 2(尤其是 NULL 观察值),这可能很快就会变成一场噩梦。

主要的例外是当不清楚如何将虚拟变量(或一般的外部变量)添加到模型中时。哪个接缝是你的情况。

https://autobox.com/capable.pdf(幻灯片 47 ...)将为您提供一个应该做什么的示例...本质上它是您的选项 1 的一个版本,其中识别并引入了领先和滞后效应具有诸如 week-of-the=month 、 day-of-the-month 、长周末、动态因果输入系列、month-of-the-year 、 week-of-the-year 、day-of-the-week 等因素, 节假日后的星期一 , 节假日前的星期五 , 水平变化 , 当地时间趋势 , 星期几模式的变化等。