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

● 加载标准数据集并输入 ARIMA 模型； ● 对历史数据年份进行敏感性分析； ● 分析敏感性分析的结果。

## █ 加载数据集

# line plot of time series from pandas import Series from matplotlib import pyplot # load dataset series = Series.from_csv('daily-minimum-temperatures.csv', header=0) # display first few rows print(series.head(20)) # 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. 其他时间间隔。本例中我们以一年为时间间隔，但实际上也可以选择其他间隔。例如几个星期、几个月或者几年，要根据不同的问题域灵活选择。另外，如上文所述，还要考虑相邻时间段之间数据的相似性，这也是一个很重要的影响因素。

1607 篇文章140 人订阅

0 条评论

## 相关文章

13130

### 19. 总结：基本错误分析

• 不要一开始就尝试设计和构建完美的系统，而是尽可能快的建立和训练一个基础的系统（几天之内），然后使用错误分析。帮助你找到最优的方向，并迭代改进你的算法。

34190

42840

26250

1.7K80

64720

### 资源 | 这是你要的Keras官方中文版（附文档链接）

Keras 是一个用 Python 编写的高级神经网络 API，它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。Keras 的作...

32560

66940

37430

11630