Python数据分析:时序模型-ARIMA

Python数据分析:时序模型-ARIMA

AR(Autoregressive)模型
  • 自回归模型描述的是当前值与历史值之间的关系

  • 滞后p阶的AR模型
    A R ( p ) : y t = μ + i = 1 p γ i y t i + ϵ t \mathrm{AR}(\mathrm{p}) : y_{t}=\mu+\sum_{i=1}^{p} \gamma_{i} y_{t-i}+\epsilon_{t}
    μ是常数,γ是t-p时刻滞后变量的系数,ε是误差

  • AR ( 1 ) : y t = μ + γ y t 1 + ϵ t \operatorname{AR}(1) : \quad y_{t}=\mu+\gamma y_{t-1}+\epsilon_{t}

MA(Moving average)模型:
  • 滑动平均模型描述的是自回归部分的误差累积

  • M A ( q ) : y t = μ + ϵ t + i = 1 q θ i ϵ t i \mathrm{MA}(\mathrm{q}) : \quad y_{t}=\mu+\epsilon_{t}+\sum_{i=1}^{q} \theta_{i} \epsilon_{t-i}

  • M A ( 1 ) : y t = μ + ϵ t + θ ϵ t 1 \mathrm{MA}(1) : \quad y_{t}=\mu+\epsilon_{t}+\theta \epsilon_{t-1}

ARNA(Autoregressive moving average)模型:
  • AR与MA的结合ARMA(p,q)
    y t = μ + i = 1 p γ i y t i + ϵ t + i = 1 q θ i ϵ t i y_{t}=\mu+\sum_{i=1}^{p} \gamma_{i} y_{t-i}+\epsilon_{t}+\sum_{i=1}^{q} \theta_{i} \epsilon_{t-i}
平稳性:
  • ARMA模型要求时间序列是平稳的
  • 一个时间序列,如果均值没有系统的变化(无趋势)、方差没有系统变化,且严格消除了周期性变化,就称为是平稳的
严平稳:
  • 序列所有的统计性质不会随时间的推移而发生变化。
弱平稳:
  • 序列均值和协方差不随时间而改变
  • 现实中所处理的时序通常是弱平稳
差分:
  • 通常非平稳序列可以经过d阶差分得到弱平稳或近似弱平稳的时间序列
  • ARIMA(p,d,q):p阶自回归滞后项,q阶滑动平均滞后项,d阶差分
相关系数:

ρ X , Y = cov ( X , Y ) σ X σ Y = E [ ( X μ X ) ( Y μ Y ) ] σ X σ Y \rho_{X, Y}=\frac{\operatorname{cov}(X, Y)}{\sigma_{X} \sigma_{Y}}=\frac{E\left[\left(X-\mu_{X}\right)\left(Y-\mu_{Y}\right)\right]}{\sigma_{X} \sigma_{Y}}

  • 反映向量空间中两个向量之间相关关系密切程度的统计指标
    • 两个向量平行且同向,系数为1;平行且相反,系数为-1
    • 两个向量垂直,不相关,系数为0
    • 向量间夹角越小,相关系数越接近1,相关性越高
自相关函数:

A C F ( k ) = ρ k = Cov ( y t , y t k ) Var ( y t ) A C F(k)=\rho_{k}=\frac{\operatorname{Cov}\left(y_{t}, y_{t-k}\right)}{\operatorname{Var}\left(y_{t}\right)}

  • 描述随机信号在任意两个不同时刻t1,t2的取值之间的相关程度
偏自相关函数:

ρ k = Corr [ y t E ( y t y t 1 , , y t k + 1 ) , y t k ) ] \rho_{k}^{*}=\operatorname{Corr}\left[y_{t}-E^{*}\left(y_{t} | y_{t-1}, \ldots, y_{t-k+1}\right), y_{t-k}\right) ]

  • 阶次为k的偏自相关:去除信号中所有滞后期小于k的信号影响后,当前信号与滞后k阶的信号之间的关系
ARIMA模型参数选择:
  1. 检查序列是否平稳

    若不平稳,使用差分平稳化序列,确定差分阶数d

  2. ARMA定阶

    通过PACF确定AR的阶数p

    通过ACF确定MA的阶数q

  3. 根据参数偏p,d,q建立ARIMA(p,d,q)

AR§ MA(q) ARNA(p,q)
ACF 趋势衰减 q阶后截尾 趋势衰减
PACF p阶后截尾 趋势衰减 趋势衰减
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

# 构造时间时间序列
df_obj = pd.DataFrame(np.random.randn(1000, 1), 
                       index=pd.date_range('20190101', periods=1000),
                       columns=['data'])
df_obj['data'] = df_obj['data'].cumsum()

# 一阶差分处理
df_obj['diff_1'] = df_obj['data'].diff(1)

# 二阶差分处理
df_obj['diff_2'] = df_obj['diff_1'].diff(1)

# 查看图像
df_obj.plot(subplots=True, figsize=(18, 12))

运行:
在这里插入图片描述

利用ACF和PACF作图来分别求出阶数q和p:

from scipy import  stats
import statsmodels.api as sm

sm.graphics.tsa.plot_acf(df_obj['data'], lags=20)
sm.graphics.tsa.plot_pacf(df_obj['data'], lags=20)

猜你喜欢

转载自blog.csdn.net/weixin_41792682/article/details/89679812
今日推荐