时间序列建模流程

  • 时间序列的建模分析流程
  • 时间序列可视化
  • 序列平稳
  • 严平稳、平稳的区别
  • 差分法处理非平稳数据
  • 模型
  • 自回归模型(AR)
  • 移动平均模型(MA)
  • 自回归平均模型(ARMA)
  • 差分自回归移动平均模型(ARIMA)
  • 通过ACF/PACF找最优参数
  • 自相关函数ACF(autocorrelation function)
  • 偏自相关函数PACF(partial autocorrelation function)
  • ARIMA(p,d,q)阶数确定
  • 拖尾和截尾的概念
  • BIC的定义
  • 模型建立和评价


时间序列的建模分析流程

时间序列建模 python 时间序列如何建模_时间序列

时间序列可视化

直接画图就好了,没什么好讲的

序列平稳

从稳定性的角度可以把序列划分成三种:非平稳、严平稳、弱平稳。
平稳的时间序列具有均值和方差不发生明显变化的性质,严平稳、弱平稳的序列都具备。

严平稳、平稳的区别

严平稳:严平稳表示的分布不随时间的改变而改变
如:白噪声(正态),无论怎么取,都是期望为0,方差为1。(PS:现实中一般没有这种信号)
弱平稳:期望与相关系数(依赖性不变)
未来某时刻的t的值xt就要依赖于他的过去信息,所以需要依赖性

差分法处理非平稳数据

差分法:时间序列在t与t-1时刻的差值
用python的pandas来处理一下,超简单,代码如下:

# 一阶差分
data['diff_1'] = data['sequence'].diff(1)  # diff()括号中的参数填入的是想要差分的时间间隔
# 二阶差分
data['diff_2'] = data['diff_1'].diff(1)

一般不做三阶差分,做完差分后大致效果如下:

时间序列建模 python 时间序列如何建模_建模_02


时间序列建模 python 时间序列如何建模_差分_03

时间序列建模 python 时间序列如何建模_时间序列建模 python_04

模型

自回归模型(AR)

自回归的自体现在哪?
预测未来的值,用的自变量都是自己的历史值,即用变量自身的历史时间数据对自身进行预测,所以叫自回归。
条件

  • 序列必须满足平稳性的要求
  • 必须具有自相关性,如果自相关系数小于0.5,则不宜采用

定义公式
p阶自回归过程的公式定义:
时间序列建模 python 时间序列如何建模_时间序列建模 python_05
时间序列建模 python 时间序列如何建模_建模_06是当前值,时间序列建模 python 时间序列如何建模_机器学习_07是常数项,P是阶数(可理解为参考过去历史值的个数),时间序列建模 python 时间序列如何建模_时间序列_08是自相关系数,时间序列建模 python 时间序列如何建模_时间序列建模 python_09是误差

移动平均模型(MA)

特点
移动平均模型关注的是自回归模型中的误差项的累加
能有效地消除预测中的随机波动
定义公式
q阶自回归过程的公式定义:
时间序列建模 python 时间序列如何建模_时间序列_10

自回归平均模型(ARMA)

就是把AR and MA combine
定义公式
q阶自回归过程的公式定义:
时间序列建模 python 时间序列如何建模_时间序列_11
这样,该模型就有d(差分次数)、p和q三个待指定的超参数,还有 时间序列建模 python 时间序列如何建模_时间序列建模 python_12两个待求解参数。

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

模型函数为
时间序列建模 python 时间序列如何建模_差分_13
其中,AR是自回归,p为自回归项;MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所做的差分次数。

原理
原理:将非平稳时间序列转化为平稳时间序列然后将因变量仅对它的滞后值以及随机误差项的现值和滞后值进行回归所建立的模型。

通过ACF/PACF找最优参数

通过上面的模型介绍,我们知道了要指定超参数(d, p, q)。那该怎么确定具体的数值呢?

自相关函数ACF(autocorrelation function)

概念

有序的随机变量序列与自身相比较

自相关函数反映了同一序列在不同时序的取值之间的相关性,即时间序列建模 python 时间序列如何建模_机器学习_14时间序列建模 python 时间序列如何建模_机器学习_15比,时间序列建模 python 时间序列如何建模_时间序列建模 python_16

公式

时间序列建模 python 时间序列如何建模_时间序列建模 python_17

如图,是某ACF图,横坐标为阶数,纵坐标是ACF值。

时间序列建模 python 时间序列如何建模_时间序列_18

偏自相关函数PACF(partial autocorrelation function)

偏自相关函数偏在哪呢?
原来,对于一个平稳AR§模型,用ACF求出滞后k自相关系数p(k)时,实际上得到并不是x(t)与x(t-k)之间单纯的相关关系,同时还夹杂着x(t-1),x(t-2),…,x(t-k+1)对x(t)的影响。
所以,PACF就是剔除了中间k-1个随机变量x(t-1),x(t-2),…,x(t-k+1)的干扰之后x(t)与x(t-k)影响的相关程度。

ARIMA(p,d,q)阶数确定

模型

ACF

PACF

AR( p )

衰减趋于零(拖尾)(几何型或振荡型)

p阶后截尾

MA( q )

q阶后截尾

衰减趋于零(拖尾)(几何型或振荡型)

ARMA(p,q)

q阶后衰减趋于零(拖尾)(几何型或振荡型)

p阶后衰减趋于零(拖尾)(几何型或振荡型)

通过上表,在下图中确认阶数

时间序列建模 python 时间序列如何建模_时间序列_19

拖尾和截尾的概念

拖尾:始终有非零取值,不会在k大于某个常数后就恒等于零(或在0附近随机波动)

截尾:在大于某个常数k后快速趋于0为k阶截尾。

落在置信区间内(95%的点都符合该规则)

时间序列建模 python 时间序列如何建模_时间序列建模 python_20

若没办法从图中得到最好的p和q,那么我们就暴力的遍历(p,d,q)三个参数可能的组合。然后用AIC、 BIC指标判断。

BIC的定义

时间序列建模 python 时间序列如何建模_差分_21


类似机器学习中的 目标函数=损失函数+正则项,AIC和BIC越小,代表准确度越高且模型更简单。

模型建立和评价

参数确认后,就可以进行构建模型,并且进行训练了。
最后需要对ARIMA进行模型残差检验:

  • ARIMA模型的残差是否是平均值为0且方差为常数的正态分布
  • QQ图:是否为线性,线性则为正态分布