【问题标题】:ARIMA forecast gives different results with new python statsmodelsARIMA 预测使用新的 python statsmodels 给出不同的结果
【发布时间】:2021-03-16 08:19:53
【问题描述】:

我正在使用 ARIMA(0,1,0) 进行(样本外)预测。

在python的statsmodels最新稳定版0.12。我计算:

import statsmodels.tsa.arima_model as stats

time_series = [2, 3.0, 5, 7, 9, 11, 13, 17, 19]
steps = 4
alpha = 0.05

model = stats.ARIMA(time_series, order=(0, 1, 0))
model_fit = model.fit(disp=0)

forecast, _, intervals = model_fit.forecast(steps=steps, exog=None, alpha=alpha)

导致

forecast = [21.125, 23.25, 25.375, 27.5]
intervals = [[19.5950036, 22.6549964 ], [21.08625835, 25.41374165], [22.72496851, 28.02503149], [24.44000721, 30.55999279]]

还有一个未来警告,它表明:

FutureWarning: 
statsmodels.tsa.arima_model.ARMA and statsmodels.tsa.arima_model.ARIMA have
been deprecated in favor of statsmodels.tsa.arima.model.ARIMA (note the .
between arima and model) and
statsmodels.tsa.SARIMAX. These will be removed after the 0.12 release.

在新版本中,正如未来警告中所暗示的,我计算:

import statsmodels.tsa.arima.model as stats

time_series = [2, 3.0, 5, 7, 9, 11, 13, 17, 19]
steps = 4
alpha = 0.05

model = stats.ARIMA(time_series, order=(0, 1, 0))
model_fit = model.fit()

forecast = model_fit.get_forecast(steps=steps)
forecasts_and_intervals = forecast.summary_frame(alpha=alpha)

给出不同的结果:

forecasts_and_intervals =
y  mean   mean_se  mean_ci_lower  mean_ci_upper
0  19.0  2.263842      14.562951      23.437049
1  19.0  3.201556      12.725066      25.274934
2  19.0  3.921089      11.314806      26.685194
3  19.0  4.527684      10.125903      27.874097

我想获得与以前相同的结果。 我是否正确使用了新界面?

我需要预测和间隔。 我已经尝试使用不同的功能,就像forecast 新界面提供的一样。

我特别想知道为什么整个列表的预测结果是 19。

非常感谢您的每一个帮助。

这里是 statsmodels 0.12.2 的文档:https://www.statsmodels.org/stable/generated/statsmodels.tsa.arima_model.ARIMA.html?highlight=arima#statsmodels.tsa.arima_model.ARIMA

以下是 Arima 较新版本的文档: https://www.statsmodels.org/stable/generated/statsmodels.tsa.arima.model.ARIMA.html?highlight=arima#statsmodels.tsa.arima.model.ARIMA

【问题讨论】:

    标签: python statsmodels arima


    【解决方案1】:

    差异在于模型是否包含“常数”项。对于第一种情况,即较旧的statsmodels.tsa.arima_model.ARIMA,它会自动包含一个常数项(并且没有打开/关闭的选项)。如果您有差异,它也包含它,但在差异域中这样做(否则无论如何它都会被消除)。所以这里是它的 ARIMA(0, 1, 0) 模型:

    y_t - y_{t-1} = c + e_t
    

    这是“随波逐流”。

    对于新的statsmodels.tsa.arima.model.ARIMA,正如您链接的文档所述,当涉及差异时,不包括任何类型的趋势项(包括常数,即c),您就是这种情况。所以这里是它的 ARIMA(0, 1, 0) 模型:

    y_t - y_{t-1} = e_t
    

    这是“随机游走”,正如我们所知,它的预测对应于幼稚的预测,即重复最后一个值(在您的情况下为 19)。

    那么,怎样做才能让新的工作正常呢?

    它包含一个名为trend 的参数,您可以指定它来获得相同的行为。由于您使用的是差分 (d=1),因此传递 trend="t" 应该给出与旧模型相同的模型。 ("t" 表示线性趋势,但由于d = 1,它将在差分域中减少为常数):

    import statsmodels.tsa.arima.model as stats
    
    time_series = [2, 3.0, 5, 7, 9, 11, 13, 17, 19]
    steps = 4
    alpha = 0.05
    
    model = stats.ARIMA(time_series, order=(0, 1, 0), trend="t")   # only change is here!
    model_fit = model.fit()
    
    forecast = model_fit.get_forecast(steps=steps)
    forecasts_and_intervals = forecast.summary_frame(alpha=alpha)
    

    这是我得到的forecasts_and_intervals

    y       mean   mean_se  mean_ci_lower  mean_ci_upper
    0  21.124995  0.780622      19.595004      22.654986
    1  23.249990  1.103966      21.086256      25.413724
    2  25.374985  1.352077      22.724962      28.025008
    3  27.499980  1.561244      24.439997      30.559963
    

    【讨论】:

    • 非常感谢trend 的提示。不幸的是,当我运行与您建议的完全相同的代码时,我会收到:y mean mean_se mean_ci_lower mean_ci_upper 0 2.000040 0.780621 0.470050 3.530030 1 4.125035 1.103965 1.961303 6.288767 2 6.250030 1.352076 3.600010 8.900050 3 8.375025 1.561243 5.315046 11.435005
    • @katya_ava 有意思,你做了什么小改动?
    • 你好!我将一行改为:model = stats.ARIMA(time_series, order=(0, 1, 0), trend="t") # only change is here!
    • 天啊!!!事实上,我搞砸了 conda 环境,我有一个“开发”和一个“development385”,我将第一个更新为 statsmodels 0.12.2,但将第二个与 statsmodels 0.12.1 一起使用!所以我刚刚更新到 statsmodels 0.12.2 并且我收到了与您的答案相同的结果!非常感谢!!!
    • 祝你有美好的一天,堆栈溢出的神秘帮手,愿你与你同在!
    【解决方案2】:

    我认为这引发了另一个问题。我不确定在新的 arima.model 版本中外生变量的处理方式相同。我相信在旧版本 arima_model 中,它们适用于差异的顺序。对于 (0,0,0) Y=mx+b 或如果 (0,1,0),则 dy=mx+b。

    【讨论】:

      猜你喜欢
      • 2018-01-17
      • 2021-03-01
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 2017-09-13
      相关资源
      最近更新 更多