时间序列系列的相关介绍,从零梳理时序概念、相关技术、和实战案例,欢迎订阅 👉玩转时间序列 跟踪全部内容。
ARMA基本形式
wold分解定理:任何平稳序列都可以分解为确定性序列(多项式确定趋势)和随机序列(平稳的零均值误差)之和。它是现代时间序列分析理论的灵魂,是构造 ARMA 模型拟合平稳序列的理论基础。[1]
是时间序列方法中最经典的模型之一,全称为自回归移动平均模型(Autoregressive moving average model),根据wold分解定理,模型有以下三种形式:
自回归模型()
移动平均模型()
自回归移动平均模型()
模型和模型均为模型的特殊形式,即对于,若阶数, 则退化为自回归模型;若阶数, 则退化为移动平均模型。
更直白地理解就是,模型是把随机序列简化,保留历史序列;对偶地,模型则是将历史序列简化,保留随机序列。和分别对应这wold分解定理中的确定性序列和随机序列。
AR模型
AR模型主要是根据历史观测值来预测未来时序。
具体为时间序列历史时点的线性组合加上当前白噪声的形式,它是随机游走的一个简单扩展,公式如下:
其中, 为 阶滞后的时序,为预测误差,为自回归系数。
1、平稳性判断
模型并不都是平稳的。有两种判断方法:特征根、平稳域
特征根判断
模型平稳的充要条件是它的 个特征根都在单位圆内,即。单位根假设检验方法及Python实现可以参考:时间序列平稳性检验方法
平稳域判断
平稳域是使得特征根都在单位圆内的系数集合,即
单位根都在单位圆内
对于低阶的模型可采用平稳域的办法判定平稳性。
2、统计特性
如果模型是平稳定的,那么有以下几个统计特性。
均值为常数
方差为常数
自相关系数有拖尾性,呈负指数衰减
此特性说明平稳时序具有短期相关性,即只有近期序列值对现时值的影响比较明显,间隔越远的过去值对现时值的影响越小。
证明过程不详细展开,感兴趣可以参考AR自相关系数拖尾[2]
偏自相关系数具有p步截尾性
下面通过一组实例分析AR模型的特性。
首先根据AR的公式我们手动制造几组数据,造出滞后1/2/3/4阶的时序数据,如下:
# 生成N(0,1)随机正态分布(白噪声)
np.random.seed(12)
noise = np.random.randn(200)
wnoise = (noise-np.mean(noise))/np.std(noise)
# AR(1):X(t)=0.5X(t-1)
AR1 = [1] # 初始值
for i in range(200):
x = 0.5*AR1[i]+wnoise[i]
AR1.append(x)
# AR(2):X(t)=-0.4X(t-1)+0.5X(t-2)
AR2 = [1,0.8] # 初始值
for i in range(200):
x = -0.4*AR2[i+1]+0.5*AR2[i]+wnoise[i]
AR2.append(x)
# AR(3):X(t)=0.1X(t-1)-0.4X(t-2)+0.5X(t-3)
AR3 = [1,0.8,0.9] # 初始值
for i in range(200):
x = 0.1*AR3[i+2] - 0.4*AR3[i+1] + 0.5*AR3[i] + wnoise[i]
AR3.append(x)
# AR(4):X(t)=-0.1X(t-1)+0.1X(t-2)-0.4X(t-3)+0.5X(t-4)
AR4 = [1,0.8,0.9,1] # 初始值
for i in range(200):
x = -0.1*AR4[i+2] + 0.1*AR4[i+2] - 0.5*AR4[i+1] + 0.5*AR4[i] + wnoise[i]
AR4.append(x)
对以上4组数据进行可视化。
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(15, 8))
fig.subplots_adjust(hspace=0.5)
ax1.plot(AR1)
ax1.set_title('AR(1): X(t)=0.5X(t-1)')
ax2.plot(AR2)
ax2.set_title('AR(2): X(t)=-0.4X(t-1)+0.5X(t-2)')
ax3.plot(AR3)
ax3.set_title('AR(3): X(t)=0.1X(t-1)-0.4X(t-2)+0.5X(t-3)')
ax4.plot(AR4)
ax4.set_title('AR(4): X(t)=-0.1X(t-1)+0.1X(t-2)-0.4X(t-3)+0.5X(t-4)')
plt.show()
从图中大致来看都是平稳的,我们进一步通过ADF假设检验再进行平稳性的确认。
from arch.unitroot import ADF
ar1_adf = ADF(AR1)
ar2_adf = ADF(AR2)
ar3_adf = ADF(AR3)
ar4_adf = ADF(AR4)
print(ar1_adf.summary().as_text())
print(ar2_adf.summary().as_text())
print(ar3_adf.summary().as_text())
print(ar4_adf.summary().as_text())
4组数据的检验结果p值均为0(这里只展示一组结果),拒绝原假设,所以可判断数据都是平稳的。
接着我们进行ACF和PACF的可视化分析。
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
fig, ax = plt.subplots(4, 2, figsize=(15, 12))
fig.subplots_adjust(hspace=0.5)
plot_acf(AR1, lags=40, ax=ax[0][0])
ax[0][0].set_title('ACF(AR(1))')
plot_pacf(AR1, lags=40, ax=ax[0][1])
ax[0][1].set_title('PACF(AR(1))')
plot_acf(AR2, lags=40, ax=ax[1][0])
ax[1][0].set_title('ACF(AR(2))')
plot_pacf(AR2, lags=40, ax=ax[1][1])
ax[1][1].set_title('PACF(AR(2))')
plot_acf(AR3, lags=40, ax=ax[2][0])
ax[2][0].set_title('ACF(AR(3))')
plot_pacf(AR3, lags=40, ax=ax[2][1])
ax[2][1].set_title('PACF(AR(3))')
plot_acf(AR4, lags=40, ax=ax[3][0])
ax[3][0].set_title('ACF(AR(4))')
plot_pacf(AR4, lags=40, ax=ax[3][1])
ax[3][1].set_title('PACF(AR(4))')
plt.figure(figsize=(20, 6))
plt.show()
通过以上可视化发现:
ACF 拖尾:不管是滞后多少阶,自相关性ACF都是在较短的滞后期中丝滑地下降至蓝色区域(置信区间)并稳定在该范围内浮动,这种特性我们称之为拖尾特性。
PACF p阶截尾:PACF会在对应的滞后期突然截断,然后迅速下降至蓝色区间,中间没有任何连续性,我们称之为截尾特性。比较有意思的是,对于不同阶的数据,截断的位置不一样。例如,对于AR(1)模型截断发生在滞后一阶的位置,所以也叫做1阶截尾,对于AR(2)模型就是2阶截尾,其他同理。
MA模型
MA模型主要是根据历史预测误差来预测未来时序的。
它并非像模型一样是历史时序值的线性组合,而是历史白噪声的线性组合,公式如下:
以上结构称为阶移动平均模型,简记模型。
其中,为当前的白噪声干扰项,为滞后阶的白噪声干扰项,为干扰项系数。
模型是基于历史白噪声的线性组合,因为白噪声本身是平稳的,所以 MA模型天生就是平稳的,不需要判断。但是是有可逆性的。
1、可逆性
什么是可逆性?
定义:如果一个模型能表示成收敛的模型形式,那么该模型就是可逆模型,一个自相关系数唯一对应一个可逆模型。
我们用滞后算子来表示和两个模型。
模型:,
模型:,
如果模型可逆,即存在 ,那么模型可以写成 ,这和模型的算子形式 是一样的,也就是前面说的可以表示成收敛的模型形式。[3]
通过以上我们也可以发现模型和模型是存在内在联系的, 模型的可逆概念和模型的平稳概念是完全对偶的概念。
模型的可逆性判断条件是:,或者模型的系数多项式的根都在单位圆外,二者等价。
为什么要判断可逆性?
为了得到唯一解。如果可逆,过程可以用当前期和往期数据来表达模型;如果不可逆,过程是用当前期和未来期数据来表达的模型,大部分情况下非常不方便,因为未来期的数据我们是得不到的。
此外,如果可逆,一些参数估计和预测的算法才会有效。例如,使用条件最大似然法求解模型系数时会假设往期误差为零,如果不可逆(参数绝对值大于1),那么假设误差为零显然会带来似然函数和精确似然函数相差太大,导致条件似然方法不再有效。[4]
2、残差序列
模型根据历史时序数据进行预测,历史时序数据可以直接观测到的。但是历史的残差我们是无法观测到的,这里就产生一个问题:历史的残差序列是如何获取的?
好多初学时间序列的朋友都有这样的疑问。关于这个问题《时间序列分析:预测与控制(第3版)》一书[5] 给出了答案,通过以下公式递归计算出来。
对于 ,有
可以通过相关系数公式求得,而可以通过似然函数求得,这样就估算出了 ,然后再基于得到的结果递归求 最后得整个残差序列。
具体计算过程不详细展开,感兴趣的可以参考一下这个帖子或者原书籍:
https://stats.stackexchange.com/questions/26024/moving-average-model-error-terms
3、统计特性
模型的统计特征与模型正好成对偶关系,我们还是先抛出结论:
当时,模型一定为平稳模型
模型的偏自相关系数拖尾,自相关系数阶截尾
下面通过一组实例分析模型的ACF和PACF特性。
我们假设已经获取了一组白噪声序列,通过公式造出了1/2/3/4阶的4组模型数据,如下:
num = 500
np.random.seed(32)
noise = np.random.randn(num)
wnoise = (noise-np.mean(noise))/np.std(noise)
MA1 = [-0.9*wnoise[i] + wnoise[i+1] for i in range(num) if i<num-1]
MA2 = [-0.2*wnoise[i] + 0.5*wnoise[i+1] + wnoise[i+2] for i in range(num) if i<num-2]
MA3 = [-0.4*wnoise[i] + 0.9*wnoise[i+1] + 0.8*wnoise[i+2] + wnoise[i+3] for i in range(num) if i<num-3]
MA4 = [-0.7*wnoise[i] + 0.5*wnoise[i+1] + 0.8*wnoise[i+2] + 0.4*wnoise[i+3] + wnoise[i+4] for i in range(num) if i<num-4]
同样对4组模型数据进行ACF和PACF的可视化。
通过观察发现:
ACF q阶截尾:自相关系数在对应阶数位置出现突然截断,之后进入蓝色区域保持稳定。
PACF 拖尾:偏自相关系数会平滑降低至蓝色区域(2倍标准差)并保持在该范围之内,是明显的拖尾特征。
ARMA模型
模型结合了和模型,是模型和模型的线性函数,公式如下:
引入延迟算子,模型简记为:
,为阶自回归系数多项式
,为阶移动平均系数多项式
如前面介绍,
当时,退化成了
当时,退化成了
所以,和都是的特例,都属于模型。
由于是个混合体,因此继承了和两个模型的体质,在平稳性上继承了模型,在可逆性上继承了模型,判断过程与各模型一样。
1、统计特性
模型的自相关系数和偏自相关系数均为拖尾的特性。
至此,模型的三种形式均已介绍完毕,其统计特性总结如下。
截尾:从某阶开始均为(接近)0的性质
拖尾:指数级逐渐衰减为(接近)0的性质
了解三种模型的统计特性对于时序建模定阶有很大帮助,关于平稳时序的建模我们下一篇继续介绍。
完整代码请移步知识星球👇
参考
[1]百度百科: wold分解定理
[2]王燕.应用时间序列分析[M].中国人民大学出版社.201907: AR自相关系数拖尾公式推导
[3]应用时间序列分析笔记: https://zhuanlan.zhihu.com/p/349855440
[4]为什么MA过程要求可逆: https://zhuanlan.zhihu.com/p/520118295
[5]时间序列分析:预测与控制-3rd: 如何得到时序残差序列
往期精彩回顾
适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑机器学习交流qq群955171419,加入微信群请扫码