我正在尝试测试 ARMA 模型,并通过此处提供的示例进行操作:
http://www.statsmodels.org/dev/examples/notebooks/generated/tsa_arma_0.html
我不知道是否有一种直接的方法可以在训练数据集上训练模型,然后在测试数据集上对其进行测试。在我看来,您必须将模型拟合到整个数据集上。然后,您可以进行样本内预测,它使用与训练模型相同的数据集。或者您可以进行样本外预测,但这必须从训练数据集的末尾开始。我想做的是将模型拟合到训练数据集上,然后在不属于训练数据集的完全不同的数据集上运行模型,并获得一系列提前 1 步的预测。
为了说明这个问题,这里是来自上面链接的缩写代码。您会看到该模型正在拟合 1700-2008 年的数据,然后预测 1990-2012 年。我遇到的问题是 1990-2008 年已经是用于拟合模型的数据的一部分,所以我认为我正在预测和训练相同的数据。我希望能够获得一系列没有前瞻偏差的 1 步预测。
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
dta = sm.datasets.sunspots.load_pandas().data
dta.index = pandas.Index(sm.tsa.datetools.dates_from_range('1700', '2008'))
dta = dta.drop('YEAR',1)
arma_mod30 = sm.tsa.ARMA(dta, (3, 0)).fit(disp=False)
predict_sunspots = arma_mod30.predict('1990', '2012', dynamic=True)
fig, ax = plt.subplots(figsize=(12, 8))
ax = dta.ix['1950':].plot(ax=ax)
fig = arma_mod30.plot_predict('1990', '2012', dynamic=True, ax=ax, plot_insample=False)
plt.show()