时间序列模型-ARIMA和LSTM

4,261 阅读10分钟

1. 时间序列定义及分类

定义:时间序列是指建立了观察结果与时间变化的关系,能保预测未来一段时间内的结果和变化情况。数学定义为一个随机变量序列:

{xt,t=2,1,0,1,2,...,T}\left \{ x_{t},t=-2,-1,0,1,2,...,T \right \}

其中xtx_t是一个随机变量,也可以写作{Xt}\left \{ X_{t}\right \}

  1. 时间序列按照有没有趋势分为:

    • 平稳序列:不存在趋势的序列,各观察值在固定水平上波动。
    • 非平稳序列:包含趋势,季节性或周期性的序列,可包含一种或多种。
  2. 通常时间序列模型会按照周期的长短分成四个影响因子:

    • 趋势(Trend):在长时期呈现出的单调上升或者下降的趋势,如长期经济增长,某新兴行业的规模。
    • 季节性(seasonality):这个是指在一年内重复出现的周期波动,并在每一年同一时期都出现相似的趋势,如春夏秋冬,上下半年,淡旺季。
    • 周期性(cyclicity):通常是由经济环境变化引起的,而且不同于趋势变动的涨落交替波动。周期性变动时长经常超过一年。
    • 随机性(Irregular):由偶然因素影响的不规则变动,这种影响因子在时间序列中是不可预估的,通常为噪声。

    影响因子在time series analysis工具包中可以用下列python语句来分析:

    result = sm.tsa.seasonal_decompose(data, freq=365)
    

2. 时间序列模型

现在常用的时间序列模型分为两种,一种是基于统计学的线性模型,一种是神经网络模型。

2.1 线性模型

2.1.1 自回归模型(AR)

Auto Regressive模型是线性时间序列模型中最简单的的模型,他是通过前面部分的数据与后面部分的数据之间的相关关系来建立回归方程的。由线性回归发展而来。当一个时间序列 x1x_1, x2x_2, x3x_3, ...xnx_n ,则其p阶AR模型 AR(p)AR(p) 的数学表达式为:

xt=ϕ1xt1+ϕ2xt2+...+ϕpxtp+utx_{t}=\phi _{1}x_{t-1}+\phi _{2}x_{t-2}+...+\phi _{p}x_{t-p}+u_{t}

其中ϕ\phi 为自回归系数,utu_t 表示白噪声,是时间序列中的随机波动。当tt等于1时就是一阶自回归模型。

  • AR模型对偏自相关函数截尾,对自相关函数拖尾(截尾表示从某阶开始均为(接近)0,拖尾指并不存在某阶突然跳变0而是逐渐衰减到0,而时间序列自相关衡量得失序列自身在不同时刻随机变量的相关性,偏自相关测提出了两时刻之间其他随机变量的干扰,是更纯粹的相关。)。

  • 在AR模型建模的过程中,确定p阶数的问题叫做定阶,一般常用偏自相关函数和AIC准测。具体做法为用PACF画图来判断其截尾性,以选取最好的阶数p。

  • 模型参数估计方法可用最小二乘法,最大似然估计。

  • AR模型在金融模型中主要是对金融序列过去进行建模。

2.1.2 滑动平均模型(MA)

Moving Average也是线性时间序列模型中的一种,与AR模型不同的地方在于,它并非是时间历史序列值的线性组合,而是历史白噪声的线性组合来影响当前时刻点的预测值。他的原理是历史白噪声是通过影响历史时序值,从而间接影响到当前时刻点的预测值。如果一段白噪声序列u1u_1,u2u_2,u3u_3,...unu_n,则q阶MA模型MA(q)MA(q)的数学表达式为:

xt=ut+θ1ut1+θ2ut2+...+θqutqx_{t}=u_{t}+\theta _{1}u_{t-1}+\theta _{2}u_{t-2}+...+\theta _{q}u_{t-q}

其中θ\theta 为移动回归系数,utu_t 为不同时期的白噪声。

  • MA的定阶理论在自相关系数在q后截尾,所以查看ACF图最后一个显著不等于0的位置可以暂定为MA的阶。实际可以用AIC定阶。
  • MA的参数估计可以用矩估计法,逆相关函数法,条件最大似然估计法和精确最大似然估计法。
  • 在金融模型中MA通常用来描述冲击效应。

2.1.3 自回归滑动平均模型(ARMA)

如果将两个模型结合起来,则同时拥有AR的偏自相关函数截尾和MA的相关函数截尾性质,则可以处理一些不能在低阶实现偏自相关函数截尾或者相关函数截尾的因果时间序列。由此ARMA模型出现可以在对数据拟合优度相近的情况下得到的模型同时可以解决当前数据与后期数据之间的关系以及随即变动,并且不要求偏自相关函数截尾和相关函数截尾。其数学表达形式为:

xt=ϕ1xt1+ϕ2xt2+...+ϕpxtp+ut+θ1ut1+θ2ut2+...+θqutqx_{t}=\phi _{1}x_{t-1}+\phi _{2}x_{t-2}+...+\phi _{p}x_{t-p}+u_{t}+\theta _{1}u_{t-1}+\theta _{2}u_{t-2}+...+\theta _{q}u_{t-q}

其中ARMA有两个阶数(p,q)(p,q),分别表示AR和MA的阶数。

  • ARMA的定阶通常是在一个范围内通过观察搜索最小AIC以及BIC的方式来选取阶数组合,可以用网格搜索的方法来求。

2.1.4 差分自回归滑动平均模型(ARIMA)

ARMA模型可以处理平稳时间序列,但是对于非平稳时间序列,则需要引入差分来解决这个问题,所以ARIMA模型出现。其数学表达形式为:

(1i=1pϕiLi)(1L)dXt=(1+i=1qθiLi)εt\left ( 1-\sum_{i=1}^{p}\phi _{i}L^{i} \right )\left ( 1-L \right )^{d}X_{t}=\left ( 1+\sum_{i=1}^{q}\theta _{i}L^{i} \right )\varepsilon _{t}

其中,LL为滞后算子,dZd\in Z

差分算子:

Δdxt=(1L)dXt\Delta ^{d}x_{t}=\left ( 1-L \right )^{d}X_{t}

wtwt 等于:

wt=Δdxt=(1L)dxtw_{t}=\Delta ^{d}x_{t}=\left ( 1-L \right )^{d}x_{t}

则ARIMA公式可变形为:

wt=ϕ1wt1+ϕ2wt2+...+ϕpwtp+δ+ut+θ1ut1+θ2ut2+...+θqutqw_{t}=\phi _{1}w_{t-1}+\phi _{2}w_{t-2}+...+\phi _{p}w_{t-p}+\delta +u_{t}+\theta _{1}u_{t-1}+\theta _{2}u_{t-2}+...+\theta _{q}u_{t-q}

并引入了第三个参数 dd 作为差分阶数,所以ARIMA的模型阶数组合为 (p,q,d)(p,q,d)。差分的引入用于消除线性趋势,把非平稳列变成平稳列。而多阶差分也可以解决低阶差分仍然不平稳的状态。

ARIMA的开发流程为

  1. 数据可视化,识别平稳性。
  2. 对非平稳的时间序列数据做差分,得到平稳序列。
  3. 建立合适的模型:
    • 平稳化处理后,若PACF是截尾的,而ACF是拖尾的,则建立AR模型;
    • 若PACF是拖尾的,而ACF是截尾的,则建立MA模型;
    • 若PACF和ACF均是拖尾的,则序列适合ARMA模型;
  4. 模型的阶数在确定之后,对ARMA模型进行参数估计,比较常用是最小二乘法进行参数估计。
  5. 假设检验,判断(诊断)残差序列是否为白噪声序列。
  6. 利用已通过检验的模型进行预测。

项目代码基本步骤

  1. 用pandas读取和加载数据,并同时做好数据预处理,处理空值以及时间点缺失。
  2. 使用可视化对数据进行探索,通过图表了解基本的统计和可能存在的季节性趋势。
  3. 选择模型,规定网格搜寻的参数范围,以最低AIC得分穷举最佳参数组合。
  4. 设置需要预测的时间段,然后用最优模型来做predict。

2.1.5 季节性ARIMA(SARIMA)

SARIMA:因为时间序列中定义了季节性,而含有季节性差异的ARIMA模型。季节性差异和常规差异相似,但是可以通过从上一个季节中减去该值而不是减去连续项来实现。SARIMA的阶数组合为:

(p,q,d)×(P,Q,D,m)\left ( p,q,d \right )\times \left ( P,Q,D,m \right )

其中(P,Q,D)\left ( P,Q,D \right )是SAR,SMA和季节性差分的阶数,m是时间频率范围一般附为12。

SARIMAX:而再SARIMA上再加入外生变量。

2.1.6 模型评估

AIC:从预测角度衡量统计模型拟合优良性标准,AIC越小,模型越好,通常选择AIC最小的模型

AIC=2k2ln(L)=(2k2L)nAIC=2k-2\ln \left ( L \right )=\frac{\left ( 2k-2L \right )}{n}
  • k是参数数量,k小意味着模型简洁;
  • L是似然函数,L=(n2)ln(2π)(n2)ln(ssen)n2L=-\left ( \frac{n}{2} \right )\ln \left ( 2\pi \right )-\left ( \frac{n}{2} \right )\ln \left ( \frac{sse}{n} \right )-\frac{n}{2},sse是残差平方和。L大意味着模型精确;
  • n是观测值数目;

BIC:贝叶斯信息准则,从拟合角度衡量模型对数据拟合的优良,同样也是BIC越小模型越好

BIC=kln(n)2ln(L)BIC=k\ln\left ( n \right )-2\ln \left ( L \right )

HQBIC=kln(ln(n))2ln(L)BIC=k\ln\left ( \ln(n) \right )-2\ln \left ( L \right )

一般情况下都会通过判定AIC和BIC得分来确定最佳参数组合。

2.2 非线性模型LSTM

这里主要总结一下长短期记忆网络(LSTM)的原理,LSTM是根据循环神经网络(RNN)改进而来,主要是为了解决RNN中出现的梯度消失问题以及序列过长时会丢失较早期的数据的情况。其主要的内部机制是通过三个门调节信息流,了解序列中哪些数据需要保存或者丢弃。

核心概念:LSTM 的核心概念是细胞状态,三个门和两个激活函数。细胞状态充当高速公路,在序列链中传递相关信息。门是不同的神经网络,决定在细胞状态上允许那些信息。有些门可以了解在训练期间保持或忘记那些信息。

lstm1.png

上图为一个LSTM的cell单元,其中他的输入段的上层是ct1c_{t-1}为上一个单元的状态,下层为ht1h_{t-1}即上一个单元输出的隐藏状态。而经过整个单元之后上层输出这个单元的状态ctc_t,下层输出这个单元的隐藏状态hth_t

2.2.1 遗忘门(forget gate)

遗忘门决定应该丢弃或保留那些信息。来自先前隐藏状态的信息和来自当前输入的信息通过sigmoid函数传递。值接近0和1之间,越接近0意味着忘记,越接近1意味着要保持。

lstm_forget_gate.png

如上图所示,上一层单元的隐藏层输出ht1h_{t-1}和这个单元的输入xtx_{t}相加,进入遗忘门,经过一个sigmoid函数得到ftf_t,而这个值的大小决定这个组合的信息是否需要被丢掉,同时输入到上层的单元状态与ct1c_{t-1}进行点乘。

2.2.2 输入门(input gate)

输入门可以更新细胞状态,将先前的隐藏状态和当前输入分别传递sigmoid函数和tanh函数。然后将两个函数的输出相乘。

lstm_input_gate

如上图所示,ht1+xth_{t-1}+x_t在输入门分别经过两个激活函数映射之后的结果再次相乘,将得到的结果和前面ct1×ftc_{t-1} \times f_t再相加得到这个单元的状态ctc_t

lstm_cell_state

2.2.3 输出门(output gate)

输出门可以决定下一个隐藏状态应该是什么,并且可用于预测。首先将先前的隐藏状态和当前的输入ht1+xth_{t-1}+x_t传给sigmoid函数,然后将新修改的细胞状态ctc_t传递给tanh函数,最后就结果相乘。输出的是隐藏状态,然后将新的细胞状态和新的隐藏状态移动到下一个时间序列中。

lstm_output_gate

2.2.4 数学表示

lstm_math

根据之前的图解操作,我们课题来总结下LSTM的数学描述:

ct=zfct1+zizc^{t}=z^{f}\odot c^{t-1}+z^{i}\odot z

其中ctc^t为当前细胞状态,zfz^f为遗忘门,ziz^izz为输出门的两个操作。表示LSTM的遗忘阶段,对上一届点传进来的输入进行选择性忘记。

ht=zotanh(ct)h^{t}=z^{o}\odot tanh(c^{t})

其中hth^t表示当前隐藏状态,zoz^o表示输出门中前一操作。表示LSTM的选择记忆阶段,对输入的xtx^t进行选择记忆。哪些重要则着重记录下来,那些不重要则少记一些。

yt=σ(Wht)y^{t}=\sigma \left ( W{}'h^{t} \right )

表示LSTM的输入阶段,通过当前隐藏状态hth^t的一些变化得到。

LSTM时序项目开发流程

  1. 数据预处理,并将数据集变成滑动窗口形式的时序数据;
  2. 搭建lstm模型(lstm层,dense层,优化器,损失函数);
  3. 拟合模型,最好设置定时保存模型,以获得最佳拟合模型;
  4. 对未来时间数据进行预测。

参考文章

  1. cloud.tencent.com/developer/a…
  2. www.jianshu.com/p/f547bb4b5…