使用每日数据进行时间序列预测:使用回归器的 ARIMA

机器算法验证 r 时间序列 预测 有马 多重季节性
2022-01-28 14:15:17

我正在使用包含大约 2 年每日数据点的每日销售数据时间序列。基于一些在线教程/示例,我试图确定数据中的季节性。似乎有每周、每月甚至每年的周期性/季节性。

例如,有发薪日,特别是在一周中持续几天的每月第一个发薪日。还有一些特定的假日效应,通过观察观察可以清楚地识别。

配备了其中一些观察结果,我尝试了以下方法:

  1. ARIMA(带有Arimaauto.arima来自 R-forecast 包),使用回归器(以及函数中需要的其他默认值)。我创建的回归量基本上是一个 0/​​1 值的矩阵:

    • 11 个月 (n-1) 变量
    • 12个假期变量
    • 无法弄清楚发薪日的部分......因为它的效果比我想象的要复杂一些。发薪日效应的工作方式不同,具体取决于每月 1 日的工作日。

    我使用 7(即每周频率)来模拟时间序列。我尝试了测试 - 一次预测 7 天。结果是合理的:预测 11 周的平均准确度达到每周平均 RMSE 为 5%。

  2. TBATS 模型(来自 R-forecast 包) - 使用多个季节性(7、30.4375、365.25)并且显然没有回归量。在每周平均 RMSE 3.5% 时,准确度比 ARIMA 模型好得惊人。

    在这种情况下,没有 ARMA 错误的模型表现得稍微好一些。现在,如果我将#1 中描述的 ARIMA 模型中的假日效应系数应用于 TBATS 模型的结果,每周平均 RMSE 提高到 2.95%

现在,在没有太多关于这些模型的基本理论的背景或知识的情况下,我陷入了两难境地,这种 TBATS 方法是否有效。尽管它在 11 周的测试中显着提高了 RMSE,但我想知道它是否能在未来保持这种准确性。或者即使将 ARIMA 的假日效果应用于 TBATS 结果也是合理的。任何/所有贡献者的任何想法都将受到高度赞赏。

测试数据链接

注意:执行“将链接另存为”以下载文件。

1个回答

您应该评估来自不同领域的不同来源的模型和预测,而不是一个单一的数字来衡量一种方法。

我假设您的数据来自美国。我更喜欢 3 年以上的每日数据,因为您可以在周末有两个假期登陆,而没有工作日阅读。看起来您的感恩节影响在 2012 年休息了一天,或者存在某种记录错误并导致模型错过了感恩节影响。

如果您查看一年中的百分比,1 月在数据集中通常较低。周末很热闹。假人反映了这种行为....MONTH_EFF01, FIXED_EFF_N10507,FIXED_EFF_N10607

我发现使用带有每日数据的 AR 组件假设一周中的最后两周是该模式的一般情况,这是一个很大的假设。我们从 11 个每月虚拟对象和 6 个每日虚拟对象开始。有些人退出了模型。B**1 表示节后第二天有滞后影响。这个月有 6 个特殊的日子(第 2、3、5、21、29、30----21 天可能是假的?)和 3 个时间趋势,2 个季节性脉冲(一周中的一天开始偏离典型的,此数据之前为 0,之后每 7 天为 1)和 2 个异常值(注意感恩节!)运行时间不到 7 分钟。在此处下载所有结果 www.autobox.com/se/dd/daily.zip

它包括一个快速而肮脏的 XLS 表,用于检查模型是否有意义。当然,XLS % 实际上很糟糕,因为它们是粗略的基准。

尝试估计这个模型:

Y(T) =  .53169E+06                                                                                        
       +[X1(T)][(+  .13482E+06B** 1)]                                       M_HALLOWEEN
       +[X2(T)][(+  .17378E+06B**-3)]                                       M_JULY4TH
       +[X3(T)][(-  .11556E+06)]                                            M_MEMORIALDAY
       +[X4(T)][(-  .16706E+06B**-4+  .13960E+06B**-3-  .15636E+06B**-2                                                 
       -  .19886E+06B**-1)]                                                 M_NEWYEARS
       +[X5(T)][(+  .17023E+06B**-2-  .26854E+06B**-1-  .14257E+06B** 1)]   M_THANKSGIVI
       +[X6(T)][(-  71726.    )]                                            MONTH_EFF01
       +[X7(T)][(+  55617.    )]                                            MONTH_EFF02
       +[X8(T)][(+  27827.    )]                                            MONTH_EFF03
       +[X9(T)][(-  37945.    )]                                            MONTH_EFF09
       +[X10(T)[(-  23652.    )]                                            MONTH_EFF10
       +[X11(T)[(-  33488.    )]                                            MONTH_EFF11
       +[X12(T)[(+  39389.    )]                                            FIXED_EFF_N10107
       +[X13(T)[(+  63399.    )]                                            FIXED_EFF_N10207
       +[X14(T)[(+  .13727E+06)]                                            FIXED_EFF_N10307
       +[X15(T)[(+  .25144E+06)]                                            FIXED_EFF_N10407
       +[X16(T)[(+  .32004E+06)]                                            FIXED_EFF_N10507
       +[X17(T)[(+  .29156E+06)]                                            FIXED_EFF_N10607
       +[X18(T)[(+  74960.    )]                                            FIXED_DAY02
       +[X19(T)[(+  39299.    )]                                            FIXED_DAY03
       +[X20(T)[(+  27660.    )]                                            FIXED_DAY05
       +[X21(T)[(-  33451.    )]                                            FIXED_DAY21
       +[X22(T)[(+  43602.    )]                                            FIXED_DAY29
       +[X23(T)[(+  68016.    )]                                            FIXED_DAY30
       +[X24(T)[(+  226.98    )]                                            :TIME TREND        1                   1/  1   1/ 3/2011   I~T00001__010311stack
       +[X25(T)[(-  133.25    )]                                            :TIME TREND      423                  61/  3   2/29/2012   I~T00423__010311stack
       +[X26(T)[(+  164.56    )]                                            :TIME TREND      631                  91/  1   9/24/2012   I~T00631__010311stack
       +[X27(T)[(-  .42528E+06)]                                            :SEASONAL PULSE  733                 105/  5   1/ 4/2013   I~S00733__010311stack
       +[X28(T)[(-  .33108E+06)]                                            :SEASONAL PULSE  370                  53/  6   1/ 7/2012   I~S00370__010311stack
       +[X29(T)[(-  .82083E+06)]                                            :PULSE           326                  47/  4  11/24/2011   I~P00326__010311stack
       +[X30(T)[(+  .17502E+06)]                                            :PULSE           394                  57/  2   1/31/2012   I~P00394__010311stack
      +                    +   [A(T)]