# ARIMA模型实例讲解：时间序列预测需要多少历史数据？

● 加载标准数据集并输入 ARIMA 模型；

● 对历史数据年份进行敏感性分析；

● 分析敏感性分析的结果。

## 加载数据集

# line plot of time series
from pandas import Series
from matplotlib import pyplot
# display first few rows
# line plot of dataset
series.plot()
pyplot.show()

## 搭建 ARIMA 预测模型

# seasonal difference
differenced = series.diff(365)
# trim off the first year of empty data
differenced = series[365:]

# fit model
model = ARIMA(differenced, order=(7,0,0))
model_fit = model.fit(trend='nc', disp=0)
print(model_fit.summary())

## 历史数据的敏感性分析

train, test = differenced[differenced.index < '1990'], differenced['1990']

# split
train, test = differenced[differenced.index < '1990'], differenced['1990']
years = ['1989', '1988', '1987', '1986', '1985', '1984', '1983', '1982']
for year in years:
# select data from 'year' cumulative to 1989
dataset = train[train.index >= year]

# walk forward over time steps in test
values = dataset.values
history = [values[i] for i in range(len(values))]
predictions = list()
test_values = test.values
for t in range(len(test_values)):
# fit model
model = ARIMA(history, order=(7,0,0))
model_fit = model.fit(trend='nc', disp=0)
# make prediction
yhat = model_fit.forecast()[0]
predictions.append(yhat)
history.append(test_values[t])
rmse = sqrt(mean_squared_error(test_values, predictions))
print('%s-%s (%d values) RMSE: %.3f' % (years[0], year, len(values), rmse))

1989-1989 (365 values) RMSE: 2.336
1989-1988 (730 values) RMSE: 2.333
1989-1987 (1095 values) RMSE: 2.326
1989-1986 (1460 values) RMSE: 2.321
1989-1985 (1825 values) RMSE: 2.320
1989-1984 (2190 values) RMSE: 2.320
1989-1983 (2555 values) RMSE: 2.318
1989-1982 (2920 values) RMSE: 2.316

from matplotlib import pyplot
x = [365, 730, 1095, 1460, 1825, 2190, 2555, 2920]
y = [2.336, 2.333, 2.326, 2.321, 2.320, 2.320, 2.318, 2.316]
pyplot.plot(x, y)
pyplot.show()

## 局限性和扩展

1. 模型参数未调试。本例中我们使用的 ARIMA 模型并未针对问题域进行过任何的参数调节。在理想状态下，一个针对历史数据量的敏感性分析应该基于一个经过参数调节的 ARIMA 模型。

2. 统计学意义。上文中提到的，针对不同的历史数据，模型的不同预测表现是否具有统计学意义，目前尚不清楚。但 Pairwise 统计学显着性检验可用于评估 RMSE 的差异是否有意义。

3. 其他模型。本例中我们使用了 ARIMA 模型来进行历史数据的系数拟合。感兴趣的朋友可以换用其他模型进行类似的研究，各个模型对历史数据的敏感性和处理方式也各不相同。

4. 其他时间间隔。本例中我们以一年为时间间隔，但实际上也可以选择其他间隔。例如几个星期、几个月或者几年，要根据不同的问题域灵活选择。另外，如上文所述，还要考虑相邻时间段之间数据的相似性，这也是一个很重要的影响因素。

+ 订阅