ARIMA 预测使用新的 python 统计模型给出不同的结果
ARIMA forecast gives different results with new python statsmodels
我正在使用 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
不同之处在于模型是否包含“常数”项。对于第一种情况,即较旧的 statsmodels.tsa.arima_model.ARIMA
,它会自动包含一个常数项(并且没有选项可以转 on/off)。如果您有差异,它也会包含差异,但会在差异域中包含差异(否则无论如何都会被消除)。所以这是它的 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
我认为这引发了另一个问题。我不确定在新的 arima.model 版本中是否对外生变量进行了相同的处理。我相信在旧版本中,arima_model,它们被应用于不同的顺序。对于 (0,0,0) Y=mx+b 或如果 (0,1,0),则 dy=mx+b.
我正在使用 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
不同之处在于模型是否包含“常数”项。对于第一种情况,即较旧的 statsmodels.tsa.arima_model.ARIMA
,它会自动包含一个常数项(并且没有选项可以转 on/off)。如果您有差异,它也会包含差异,但会在差异域中包含差异(否则无论如何都会被消除)。所以这是它的 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
我认为这引发了另一个问题。我不确定在新的 arima.model 版本中是否对外生变量进行了相同的处理。我相信在旧版本中,arima_model,它们被应用于不同的顺序。对于 (0,0,0) Y=mx+b 或如果 (0,1,0),则 dy=mx+b.