使用适合的 pmdarima ARIMA 模型进行预测
Predict using fit pmdarima ARIMA model
我可以使用 pmdarima
.
将 SARIMA 模型拟合到某些数据
import pmdarima as pm
from pmdarima.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt
# Load/split
y = pm.datasets.load_wineind()
train, test = train_test_split(y, train_size=150)
# Fit
model = pm.auto_arima(train, seasonal=True, m=12)
我可以根据这些数据进行预测,我什至可以看到我可以计算残差的样本内预测。
N = test.shape[0] # predict N steps into the future
forecasts = model.predict(N)
in_sample_forecasts = model.predict_in_sample()
但是SARIMA只是一个数学模型(据我所知)。所以我希望能够使用拟合模型参数来完全预测其他一些系列。我可以这样做吗?
例如:
# Some other series entirely
some_other_series = train + np.random.randint(0, 5000, len(train))
# The following method does not exist but illustrates the desired functionality
forecasts = model.predict_for(some_other_series, N)
我已经找到了解决办法。诀窍是 运行 另一个拟合,但让优化器在引擎盖下基本上对已经拟合的参数执行空操作。我发现 method='nm'
实际上服从了 maxiter=0
,而其他人则没有。下面是 pmdarima
模型的代码,但同样的想法也适用于 statsmodels
.
中的 SARIMAX
模型
from copy import deepcopy
# Some other series entirely
some_other_series = train + np.random.randint(0, 5000, len(train))
# Deep copy original model for later comparison
new_model = deepcopy(model)
new_model.method = 'nm'
new_model.fit(some_other_series, maxiter=0, start_params=new_model.params())
new_model.params()
new_model.predict(12)
# Note that the params have stayed the same and predictions are different
model.params()
model.predict(12)
我可以使用 pmdarima
.
import pmdarima as pm
from pmdarima.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt
# Load/split
y = pm.datasets.load_wineind()
train, test = train_test_split(y, train_size=150)
# Fit
model = pm.auto_arima(train, seasonal=True, m=12)
我可以根据这些数据进行预测,我什至可以看到我可以计算残差的样本内预测。
N = test.shape[0] # predict N steps into the future
forecasts = model.predict(N)
in_sample_forecasts = model.predict_in_sample()
但是SARIMA只是一个数学模型(据我所知)。所以我希望能够使用拟合模型参数来完全预测其他一些系列。我可以这样做吗?
例如:
# Some other series entirely
some_other_series = train + np.random.randint(0, 5000, len(train))
# The following method does not exist but illustrates the desired functionality
forecasts = model.predict_for(some_other_series, N)
我已经找到了解决办法。诀窍是 运行 另一个拟合,但让优化器在引擎盖下基本上对已经拟合的参数执行空操作。我发现 method='nm'
实际上服从了 maxiter=0
,而其他人则没有。下面是 pmdarima
模型的代码,但同样的想法也适用于 statsmodels
.
SARIMAX
模型
from copy import deepcopy
# Some other series entirely
some_other_series = train + np.random.randint(0, 5000, len(train))
# Deep copy original model for later comparison
new_model = deepcopy(model)
new_model.method = 'nm'
new_model.fit(some_other_series, maxiter=0, start_params=new_model.params())
new_model.params()
new_model.predict(12)
# Note that the params have stayed the same and predictions are different
model.params()
model.predict(12)