Python数据分析:时序模型-ARIMA
AR(Autoregressive)模型
-
自回归模型描述的是当前值与历史值之间的关系
-
滞后p阶的AR模型
μ是常数,γ是t-p时刻滞后变量的系数,ε是误差 -
MA(Moving average)模型:
-
滑动平均模型描述的是自回归部分的误差累积
-
-
ARNA(Autoregressive moving average)模型:
- AR与MA的结合ARMA(p,q)
平稳性:
- ARMA模型要求时间序列是平稳的
- 一个时间序列,如果均值没有系统的变化(无趋势)、方差没有系统变化,且严格消除了周期性变化,就称为是平稳的
严平稳:
- 序列所有的统计性质不会随时间的推移而发生变化。
弱平稳:
- 序列均值和协方差不随时间而改变
- 现实中所处理的时序通常是弱平稳
差分:
- 通常非平稳序列可以经过d阶差分得到弱平稳或近似弱平稳的时间序列
- ARIMA(p,d,q):p阶自回归滞后项,q阶滑动平均滞后项,d阶差分
相关系数:
- 反映向量空间中两个向量之间相关关系密切程度的统计指标
- 两个向量平行且同向,系数为1;平行且相反,系数为-1
- 两个向量垂直,不相关,系数为0
- 向量间夹角越小,相关系数越接近1,相关性越高
自相关函数:
- 描述随机信号在任意两个不同时刻t1,t2的取值之间的相关程度
偏自相关函数:
- 阶次为k的偏自相关:去除信号中所有滞后期小于k的信号影响后,当前信号与滞后k阶的信号之间的关系
ARIMA模型参数选择:
-
检查序列是否平稳
若不平稳,使用差分平稳化序列,确定差分阶数d
-
ARMA定阶
通过PACF确定AR的阶数p
通过ACF确定MA的阶数q
-
根据参数偏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)