时间序列模型arima小结
- 数据集介绍
- 时间序列*稳性
- 统计时间序列模型
- 自回归模型AR
- 移动*均模型MA
- 自回归移动*均模型ARMA
- 差分自回归移动*均模型ARIMA
数据集介绍
本文用到的数据集为中国银行股票数据,我们先来导入一下我们的数据:
import pandas as pd
import matplotlib.pyplot as plt
ChinaBank = pd.read_csv('ChinaBank.csv',usecols=['Date','Open','High','Low','Close','Volume'],
index_col = 'Date',parse_dates=['Date'])
ChinaBank.head()
ChinaBank.info()
temp = ChinaBank.loc['2014-01':'2014-06','Close']
train = temp.loc['2014-01':'2014-03']
test = temp.loc['2014-04':'2014-06']
print(train)
下面,我们画出收盘价数据的折线图:
plt.figure(figsize=(15,5))
plt.plot(train)
plt.show()
时间序列*稳性
*稳性就是要求,经由样本时间序列所得到的拟合曲线,在未来一段时间内,仍能顺着现有的形态,惯性地延续下去。*稳性要求序列的均值和方差不发生明显变化。
- 严*稳:严*稳表示的分布不随时间的改变而改变。如白噪声(正太),无论怎么取,都是期望为0,方差为1.
- 宽*稳:期望与相关系数(依赖性)不变。未来某时刻\(t\)的值\(X_t\)就要依赖于它的过去信息,所以需要依赖性。这种依赖性不能有明显的变化。
使用差分法可以使得数据更*稳,常用的方法就是一阶差分法和二阶差分法。时间序列差分值的求解可以直接通过pandas中的diff函数得到:
ChinaBank['Close_diff_1'] = ChinaBank['Close'].diff(1)
ChinaBank['Close_diff_2'] = ChinaBank['Close_diff_1'].diff(1)
fig = plt.figure(figsize=(30,6))
ax1 = fig.add_subplot(131)
ax1.plot(ChinaBank['Close'])
ax2 = fig.add_subplot(132)
ax2.plot(ChinaBank['Close_diff_1'])
ax3 = fig.add_subplot(133)
ax3.plot(ChinaBank['Close_diff_2'])
plt.show()
可以看到,基本上时间序列在一阶差分的时候就已经接*于*稳序列了。
统计时间序列模型
自回归模型AR
自回归模型描述当前值与历史值之间的关系,用变量自身的历史时间数据对自身进行预测。自回归模型必须满足*稳性的要求。
自回归模型首先需要确定一个阶数p,表示用几期的历史值来预测当前值。p阶自回归模型的公式定义为:
上式中\(y_t\)是当前值,\(\mu\)是常数项,\(p\)是阶数 \(\gamma_i\)是自相关系数,\(\epsilon_t\)是误差。
自回归模型有很多的限制:
- 自回归模型是用自身的数据进行预测
- 时间序列数据必须具有*稳性
- 自回归只适用于预测与自身前期相关的现象
移动*均模型MA
\(t\)时间点的序列值为误差项\(\epsilon_t\)的加权之和,那么该时间序列服从\(q\)阶的移动*均方程:
移动*均法能有效地消除预测中的随机波动。
其实移动*均方程是对自回归模型的一个补充。两者组合组合就能得我们下一步要说的ARMA(p,q)模型。该模型解决了随机变动项的求解问题。
自回归移动*均模型ARMA
自回归模型AR和移动*均模型MA模型相结合,我们就得到了自回归移动*均模型ARMA(p,q),计算公式如下:
差分自回归移动*均模型ARIMA
AR/MA/ARMA用于分析*稳时间序列,接下来所说的ARIMA通过差分可以用于处理非*稳时间序列。参数d为差分的次数。相比于ARMA模型,该模型需要将不*稳数据进行d次差分形成一个稳定的时间序列数据,然后采用ARMA模型