ARIMA步骤浅析

ARIMA步骤实现

  • 目录
    • 前言
    • 模型选择
    • arma原理
      • 模型表示
      • 模型求解
      • 模型阶数选择
      • 稳定性检验
      • 白噪声检验
    • 求解
      • 求解流程

目录

前言

最近项目需要对位移数据进行预测,尝试了比较流行的几种方法如:LSTMARMA等…。选来选去还是arma模型综合效果最好。写这篇文章的目的也是记录下arma的理论与解算过程。

模型选择

做时间序列的预测,拥有许多方法,从简单的说起,有线性回归法、灰色预测模型,arma方法,还有最近因机器学习而流行的神经网络以及各种变体方法如:rnn、lstm等。
在这些模型中,线性回归大致是从机理出发,以引起时间序列变化的因子作为自变量,以时间序列作为因变量,采用回归的方法拟合出因子与结果之间的一种函数映射关系,使用此种方法,需要较强的实际领域背景,且精度很大程度上依赖于选择的因子,然而有些因子难以获取,如位移预测,其因子有土壤含水、降雨等,并且位移与土壤质量等也有很大关系,有些参数难以获取,因而并未采用。
使用lstm做位移预测时,出现预测的值就是实际位移中前一秒的值这样的问题,如图:
ARIMA步骤浅析_第1张图片
看到有人说这是因为数据存在自相关性,进行差分运算可消除这样的问题,但是在我使用过程中,效果并不好,可能自己还未理解透吧!因而也并未采用此方法进行预测。
在经过测试后,arma综合效果最好,计算也较为简单,因而最终 采用了arma来做位移预测。

arma原理

模型表示

arma模型实际可分为三类,分别是AR、MA、ARMA。
AR模型(Auto-Regressive model)
r t = ϕ 0 + ϕ 1 r t − 1 + . . . + ϕ p r t − p + a t r_t=\phi_0+\phi_1r_{t-1}+...+\phi_pr_{t-p}+a_t rt=ϕ0+ϕ1rt1+...+ϕprtp+at
其中,p是自回归阶数, a t a_t at是白噪声序列, ϕ i \phi_i ϕi是ar系数,代表当前时刻的值可用前p个数据加权来表示,也即趋势蕴含在历史数据中。模型表示为为AR(p)。
MA模型(Moving Average model)
r t = a t + ∑ i = 1 q θ i a t − i r_t = a_t+\sum_{i=1}^{q}\theta_ia_{t-i} rt=at+i=1qθiati
其中,q是滑动回归阶数, a i a_i ai是白噪声序列, θ i \theta_i θi是ma系数,模型表示为MA(q)。
ARMA模型(Auto-Regressive and Moving Average model)
r t = ϕ 0 + ∑ i = 1 p ϕ i r t − i + ∑ i = 1 q θ i a t − i r_t=\phi_0+\sum_{i=1}^p\phi_ir_{t-i}+\sum_{i=1}^{q}\theta_ia_{t-i} rt=ϕ0+i=1pϕirti+i=1qθiati
参数定义如上,此模型可表示为ARMA(p,0,q)。

模型求解

在进行求解前,介绍一些求解中需要使用的参数。

自协方差:在统计学中,特定时间序列或者连续信号Xt的自协方差是信号与其经过时间平移的信号之间的协方差。也即信号 X t X_t Xt与其时间平移信号 X t − k X_{t-k} Xtk的协方差
自相关系数:用时间序列 X t X_t Xt X t − k X_{t-k} Xtk的协方差除以 X t X_t Xt的标准差和 X t − k X_{t-k} Xtk的标准差的乘积,就得到相关系数
偏自相关系数: 时间序列在两个时间随机变量之间,排除了其间各个时间随机变量影响的相关系数

AR模型
对于AR模型的求解,在我所看到的文献中,存在两种方法。

最小二乘法

ε ^ = x j − ( α 1 ^ x j − 1 + α 2 ^ x j − 2 + ⋯ + α p ^ x j − p ) , p + 1 ≤ j ≤ n \hat{\varepsilon}=x_j-(\hat{\alpha_1}x_{j-1}+\hat{\alpha_2}x_{j-2}+\cdots+\hat{\alpha_p}x_{j-p}),p+1\leq j \leq n ε^=xj(α1^xj1+α2^xj2++αp^xjp),p+1jn
使用最小二乘法求使 ∑ ε ^ \sum \hat{\varepsilon} ε^最小的 α i \alpha_i αi

Yue-Walker方法
先求序列偏自相关系数
ρ k k = c o r r ( Y t , Y t − 1 , ⋯   , Y t − k + 1 ) \rho_{kk}=corr(Y_t,Y_{t-1},\cdots, Y_{t-k+1}) ρkk=corr(Yt,Yt1,,Ytk+1)
而后构建Yule_Walker方程
[ 1 ρ 1 ⋯ ρ k − 1 ρ 1 1 ⋯ ρ k − 2 ⋮ ⋮ ⋱ ⋮ ρ k − 1 ρ k − 2 ⋯ 1 ] [ ρ k 1 ρ k − 2 ⋮ ρ k k ] = [ ρ 1 ρ 2 ⋮ ρ k ] \left [ \begin{matrix} 1 & \rho_1 & \cdots & \rho_{k-1}\\ \rho_1 & 1 & \cdots & \rho_{k-2}\\ \vdots & \vdots & \ddots & \vdots \\ \rho_{k-1} & \rho_{k-2} & \cdots & 1 \end{matrix} \right ] \left [ \begin{matrix} \rho_{k1} \\ \rho_{k-2} \\ \vdots \\ \rho_{kk} \end{matrix} \right] = \left [ \begin{matrix} \rho_1 \\ \rho_2 \\ \vdots \\ \rho_k \end{matrix} \right ] 1ρ1ρk1ρ11ρk2ρk1ρk21ρk1ρk2ρkk=ρ1ρ2ρk
其具体求解方式可查看相关文档
理论上,第二种方法的是优于第一种的,因为。。。
然而,在我实际使用过程中,第一种方法求解出的预测结果更加贴近于真实位移值,内部原因还需要思考。

MA模型
对于ma模型来说,MA(q)模型的自协方差函数为
γ k = { σ ε 2 ( 1 + θ 1 2 + ⋯ + θ q 2 ) 当 k = 0 σ ε 2 ( − θ k + θ 1 θ k + 1 + ⋯ + θ q − k θ q ) 当 1 ≤ k ≤ q 0 当 k > q \gamma_k= \begin{cases} \sigma^2_\varepsilon(1+\theta_1^2+\cdots+\theta_q^2) & {当k=0}\\ \sigma^2_\varepsilon(-\theta_k+\theta_1\theta_{k+1}+\cdots+\theta_{q-k}\theta_q) & {当1 \leq k \leq q} \\ 0 & {当k>q} \end{cases} γk=σε2(1+θ12++θq2)σε2(θk+θ1θk+1++θqkθq)0k=01kqk>q
自相关函数为
ρ k = γ k γ 0 = { θ k + θ k + 1 θ 1 + ⋯ + θ q 2 1 + θ 1 2 + ⋯ + θ q 2 k = 1 , ⋯   , q 0 k > q \rho_k=\frac{\gamma_k}{\gamma_0}=\begin{cases} \frac{\theta_k+\theta_{k+1}\theta_1+\cdots+\theta_q^2}{1+\theta_1^2+\cdots+\theta_q^2} & k=1,\cdots,q \\ 0 & k > q \end{cases} ρk=γ0γk=1+θ12++θq2θk+θk+1θ1++θq20k=1,,qk>q
首先利用样本数据计算出 γ k \gamma_k γk的估计值
γ k ^ = ∑ t = 1 n ( Y t − Y ‾ ) ( Y t + k − Y ‾ ) n \hat{\gamma_k}=\frac{\sum_{t=1}^n(Y_t-\overline{Y})(Y_{t+k}-\overline{Y})}{n} γk^=nt=1n(YtY)(Yt+kY)
现基于ma阶数求解系数
当q=1时,方程退化为
θ 1 = − 1 ± 1 − 4 ρ 1 2 2 ρ 1 \theta_1=\frac{-1\pm\sqrt{1-4\rho_1^2}}{2\rho_1} θ1=2ρ11±14ρ12
因系数绝对值小于1,则
θ 1 = − 1 + 1 − 4 ρ 1 2 2 ρ 1 \theta_1=\frac{-1+\sqrt{1-4\rho_1^2}}{2\rho_1} θ1=2ρ11+14ρ12
当q>1时,如仍使用求解析解的方式,将越来越困难,可使用迭代的方式求近似解。
把MA(q)模型的自协方差公式代入估计量,方程变形为
θ k ^ = − ( γ k ^ σ ^ ε 2 − θ 1 ^ θ ^ k + 1 − ⋯ − θ ^ q − k θ ^ q ) \hat{\theta_k}=-(\frac{\hat{\gamma_k}}{\hat{\sigma}_{\varepsilon}^2}-\hat{\theta_1}\hat{\theta}_{k+1}-\cdots-\hat{\theta}_{q-k}\hat{\theta}_q) θk^=(σ^ε2γk^θ1^θ^k+1θ^qkθ^q)
首先给出参数的一组初始值
σ ε 2 ( 0 ) = γ ^ 0 , θ 1 ^ ( 0 ) = θ ^ 2 ( 0 ) = ⋯ = θ ^ q ( 0 ) = 0 ^ \hat{\sigma_\varepsilon^2(0)=\hat{\gamma}_0,\hat{\theta_1}(0)=\hat{\theta}_2(0)=\cdots=\hat{\theta}_q(0)=0} σε2(0)=γ^0,θ1^(0)=θ^2(0)==θ^q(0)=0^
反复迭代,直到收敛,如此,ma参数已得。

在实际使用过程中,存在相关性系数大于0.25的,此时,模型不收敛,ma无法求解,需更换阶数。

ARMA模型
求解中,首先在忽略ma影响,直接求解ar系数,而后用ar系数来预测的结果的残差来求ma系数。ar、ma求解方法同上。

模型阶数选择

在使用arma模型时,需先指定p与q,而p与q的选择有两种思路,

看图法

具体的方法可自行查阅,这也是最直接的方法

AIC/BIC等模型选择法

p、q选择时,其思路是:使用枚举法,计算不同p、q的aic或bic准则值,选择最小准则值对应的阶数。
实际在查看StatsModel库的源码时,其阶数采用的同样是第二种方法,只是其ar、ma系数求解方法较我上节所讲要复杂,有兴趣的朋友可以去看一下

稳定性检验

在模型经典的时间序列分析中,往往做了一个假设:数据是平稳的
所以在对时间序列运用经典方法进行分析时,往往要先做稳定性检验。
在做稳定性检验之前,先介绍一下平稳性的定义:

假定某个时间序列是某一随机过程生成的,即假定时间序列{ X t X_t Xt}(t=1,2,…)的每一个数值都是从一个概率分布中随机得到,如果满足下列条件,则称该随机时间序列是平稳的,白噪声过程是平稳的。

  • 均值 E ( X t ) = μ E(X_t)=\mu E(Xt)=μ是与时间t无关的常数
  • 方差 V a r ( X t ) = σ 2 Var(X_t)=\sigma^2 Var(Xt)=σ2是与时间无关的常数
  • 协方差 C o v ( X t , X t + k ) = γ k Cov(X_t,X_{t+k})=\gamma_k Cov(Xt,Xt+k)=γk是只与时间间隔k有关,与时间t无关的常数

进行平稳性判断时,常用的方法为单位根(ADF)检验。ADF检验有三个检验模型,分别为:

  • Δ X t = δ X t − 1 + ∑ i = 1 m β i Δ X t − i + ε t \Delta X_t= \delta X_{t-1}+\sum_{i=1}^{m}\beta_i\Delta X_{t-i}+\varepsilon_t ΔXt=δXt1+i=1mβiΔXti+εt
  • Δ X t = α + δ X t − 1 + ∑ i = 1 m β i Δ X t − i + ε t \Delta X_t=\alpha+\delta X_{t-1}+\sum_{i=1}^{m}\beta_i\Delta X_{t-i}+\varepsilon_t ΔXt=α+δXt1+i=1mβiΔXti+εt
  • Δ X t = α + β t + δ X t − 1 + ∑ i = 1 m β i Δ X t − i + ε t \Delta X_t=\alpha+\beta t+\delta X_{t-1}+\sum_{i=1}^m\beta_i\Delta X_{t-i}+\varepsilon_t ΔXt=α+βt+δXt1+i=1mβiΔXti+εt

检验
零假设 H0: δ = 0 \delta=0 δ=0 (Xt为随机游走序列)
备择假设 H1: δ < 0 \delta<0 δ<0 (Xt为平稳序列)
进行检验时,从第三个模型开始,然后模型2、模型1
其检验方法可使用OLS(最小二乘法)下的t检验完成,值得注意的是,adf检验的t分布表与标准的t分布表并不一致,需寻找对应与adf检验的t分布表
对于不平稳的时间序列, 可使用差分方法使其“平稳”,而后使用经典方法进行分析。

白噪声检验

对于白噪声序列,虽然其是稳定的,但白噪声代表其变化无规律,无法从中学习到趋势,从而经典分析方法无法使用。在进行时间序列分析时,推荐进行白噪声检验。在白噪声检验的方法中,有Ljung-Box test(LBQ)。
LBQ检验的原假设和备择假设分别为:
H0: 原本的数据都是独立的,即总体的相关系数为0,能观察到的某些相关仅仅产生于随机抽样的误差。即 ρ ^ 1 = ρ ^ 2 = ⋯ = ρ ^ m = 0 \hat{\rho}_1=\hat{\rho}_2=\cdots=\hat{\rho}_m=0 ρ^1=ρ^2==ρ^m=0,其中m是人为给定的,有时我们在软件中仅仅给定一个上界,而不是具体的m。
H1: 原本的数据不是独立的,即至少存在某个 ρ ^ k ≠ 0 \hat{\rho}_k\neq0 ρ^k=0,其中k⩽mk⩽m。
构造的统计量是
Q ( m ) = T ( T + 2 ) ∑ i = 1 m ρ ^ i T − i Q(m)=T(T+2)\sum_{i=1}^m\frac{\hat{\rho}_i}{T-i} Q(m)=T(T+2)i=1mTiρ^i
其中,T是样本容量,m是认为选定的一个数, ρ ^ i \hat{\rho}_i ρ^i i i i阶滞后的自相关系数。在原假设成立的条件下,Q(m)服从自由度为m的卡方分布。给定显著性水平,则拒绝域是 Q > χ 1 − α , m 2 Q>\chi_{1-\alpha,m}^2 Q>χ1α,m2。接受原假设意味着认为原序列是白噪声序列,否则,则认为序列存在相关性。

求解

求解流程

开始
差分
稳定性判断
白噪声判断
无法预测
arma预测
结束

你可能感兴趣的:(arima,arima,python)