1 基本概念

时间序列指的是按时间顺序排列的一组数字序列,而时间序列分析就是利用这组数列,应用数理统计方法加以处理,从而来预测未来事物的发展。该分析方法属于定量预测方法,既承认事物发展的延续性,应用历史数据即可推测事物发展趋势;其次也考虑了事物发展的随机性,为此要利用统计分析中各种方法对历史数据进行处理。目前该方法常应用在国民经济宏观控制、企业经营管理、区域综合发展规划、气象预报和环境污染控制等各个方面。

1.1 随机过程


BFAST时间序列分解算法 python 时间序列分析代码_协方差

是一列独立同分布的随机变量序列,令

BFAST时间序列分解算法 python 时间序列分析代码_差分_02

则随机变量序列

BFAST时间序列分解算法 python 时间序列分析代码_差分_03

为随机过程。

1.2 均值/协方差/方差函数

对于序列

BFAST时间序列分解算法 python 时间序列分析代码_差分_04

而言:

  • 均值函数:
  • 协方差函数:
  • 方差函数:

Note:
为弱平稳的描述做准备。

1.3 平稳性

平稳性:时间序列的行为不随时间改变。

Why stationary?

简化问题的假设:

  • 强平稳:对于一个时间序列与任意整数k,如果:
    与的联合分布一致,那么称该序列强平稳。
  • 弱平稳:对于一个序列,若其均值函数是常熟,协方差函数仅与时间差相关,那么称该序列弱稳定。

1.4 差分方程

一阶差分方程:

一个变量在t时刻的值记录为

BFAST时间序列分解算法 python 时间序列分析代码_协方差_05

,t时刻和t-1时刻的值可以由以下一阶线性差分方程刻画:

BFAST时间序列分解算法 python 时间序列分析代码_协方差_06


阶差分方程:

BFAST时间序列分解算法 python 时间序列分析代码_协方差_07

差分方程的递归解:

BFAST时间序列分解算法 python 时间序列分析代码_方差_08

动态乘子:

BFAST时间序列分解算法 python 时间序列分析代码_协方差_09

Note:
描述t时刻的扰动wt对于j时刻后的影响。
phi的取值以1为界对于过程的影响(消散,放大)。

1.5  延迟算子

令B为异步延迟算子,如果当前序列乘以一个延迟算子,表示把当前序列值的时间向过去拨一个时刻。使用延迟算子表示的一阶差分方程:

BFAST时间序列分解算法 python 时间序列分析代码_方差_10

延迟算子的性质如下:

BFAST时间序列分解算法 python 时间序列分析代码_协方差_11

(1)

BFAST时间序列分解算法 python 时间序列分析代码_差分_12

(2)若c为任意常数,则:

BFAST时间序列分解算法 python 时间序列分析代码_方差_13

(3)

BFAST时间序列分解算法 python 时间序列分析代码_协方差_14

2  线性平稳时间序列

2.1 自回归过程(AR)

一阶自回归过程AR(1):


BFAST时间序列分解算法 python 时间序列分析代码_方差_15

为平稳序列,且满足如下差分方程:

BFAST时间序列分解算法 python 时间序列分析代码_方差_16

其中系数表示对前一项的依赖程度,扰动为白噪声序列,则称

BFAST时间序列分解算法 python 时间序列分析代码_方差_15

满足一阶自回归模型。

平稳条件:

BFAST时间序列分解算法 python 时间序列分析代码_差分_18

的根的绝对值小于1,即


BFAST时间序列分解算法 python 时间序列分析代码_方差_19

Note:
这与差分方程中动态乘子的意义一致。

方差与均值:

BFAST时间序列分解算法 python 时间序列分析代码_差分_20

利用延迟算子,一阶自回归模型可以表示为:

BFAST时间序列分解算法 python 时间序列分析代码_差分_21

如果满足平稳条件,则可以表示为:

BFAST时间序列分解算法 python 时间序列分析代码_方差_22

Note:
类似于一个数列极限。平稳则扰动项必须收敛,否则与影响无限扩大。AR1是一个无限阶的移动平均过程。

2.2 移动平均过程

一阶移动平均过程MA(1):

BFAST时间序列分解算法 python 时间序列分析代码_方差_15

若满足如下方程:

BFAST时间序列分解算法 python 时间序列分析代码_差分_24

其中

BFAST时间序列分解算法 python 时间序列分析代码_方差_25

为常数,

BFAST时间序列分解算法 python 时间序列分析代码_协方差_26

为移动平均系数,

BFAST时间序列分解算法 python 时间序列分析代码_差分_27

为白噪声过程,则称

BFAST时间序列分解算法 python 时间序列分析代码_方差_15

满足一阶移动平均模型。

Note:
认为序列和前一时刻的扰动有关。

MA(1)的均值与方差:

BFAST时间序列分解算法 python 时间序列分析代码_方差_29

BFAST时间序列分解算法 python 时间序列分析代码_差分_30

2.3 自回归移动平均过程

ARMA(p,q)模型的一般表达式为:

BFAST时间序列分解算法 python 时间序列分析代码_方差_31

2.4 相关系数

2.4.1 自相关系数ACF

AR(1)的自协方差与自相关系数:

BFAST时间序列分解算法 python 时间序列分析代码_方差_32

BFAST时间序列分解算法 python 时间序列分析代码_方差_33

Note:

这里是中心化后的序列,自协方差受幅度影响,相关系数去除幅度影响。

AR(p)的自协方差与自相关系数:

BFAST时间序列分解算法 python 时间序列分析代码_方差_34

(Yule-Walker方程,系数阵正定,可解回归系数)

Note:
p1=1,自己和自己的相关系数。模型定阶后可以求p阶协方差,解方程组。

MA(1)的自协方差与自相关系数:


BFAST时间序列分解算法 python 时间序列分析代码_差分_35


高阶自相关系数均为0。

MA(q)的自协方差与自相关系数:

BFAST时间序列分解算法 python 时间序列分析代码_协方差_36

解非线性方程,可得滑动平均系数。

Note:
for j>q, gamma=0,p=0,解非线性方程,可得滑动平均系数

ARMA(p,q)的自协方差与自相关系数:

BFAST时间序列分解算法 python 时间序列分析代码_方差_37

先同乘以

BFAST时间序列分解算法 python 时间序列分析代码_方差_38

,求均值得自协方差,得到Yule-Walker方程,求回归系数,然后构造:

BFAST时间序列分解算法 python 时间序列分析代码_差分_39

BFAST时间序列分解算法 python 时间序列分析代码_协方差_40

为MA(q)序列,按MA(q)序列计算自协方差/自相关系数,解非线性方程得滑动回归系数。

2.4.2 偏相关系数PACF

BFAST时间序列分解算法 python 时间序列分析代码_方差_41

Note:
用于定阶。

BFAST时间序列分解算法 python 时间序列分析代码_方差_42

BFAST时间序列分解算法 python 时间序列分析代码_协方差_43

3 实际应用

3.1 模型(阶数)识别

BFAST时间序列分解算法 python 时间序列分析代码_协方差_43

序列

AR(p)

MA(q)

ARMA(p,q)





ACF

拖尾

q阶截尾

拖尾

PACF

p阶截尾

拖尾

拖尾


BFAST时间序列分解算法 python 时间序列分析代码_差分_45

AIC/BIC准则:

BFAST时间序列分解算法 python 时间序列分析代码_方差_46

选择最大阶数

BFAST时间序列分解算法 python 时间序列分析代码_协方差_47

,计算使AIC或者BIC最小的p、q,作为模型阶数。

Note:
耗时,每次要计算出模型,再计算拟合残差,MAXLAG^2次计算。

3.2 参数估计

  • 矩估计
  • 极大似然估计
    Note:
    矩估计:Yuler-Walker方程等。

极大似然估计:

以AR(1)为例:


BFAST时间序列分解算法 python 时间序列分析代码_协方差_48

序列观测值:

BFAST时间序列分解算法 python 时间序列分析代码_方差_15


BFAST时间序列分解算法 python 时间序列分析代码_方差_50

为白噪声,参数为

BFAST时间序列分解算法 python 时间序列分析代码_差分_51

。对于第一个样本,

BFAST时间序列分解算法 python 时间序列分析代码_方差_52

,即

BFAST时间序列分解算法 python 时间序列分析代码_协方差_53

的概率分布:

BFAST时间序列分解算法 python 时间序列分析代码_方差_54

Note:

假设X1的期望与方差,与2.3中分析的一致。如果认为初始值也服从

BFAST时间序列分解算法 python 时间序列分析代码_协方差_55

则忽略了初始值之前的影响。考察,第二个样本

BFAST时间序列分解算法 python 时间序列分析代码_差分_56


BFAST时间序列分解算法 python 时间序列分析代码_协方差_57

已知条件下的概率分布,由于


BFAST时间序列分解算法 python 时间序列分析代码_差分_58

BFAST时间序列分解算法 python 时间序列分析代码_协方差_59

根据贝叶斯公式,

BFAST时间序列分解算法 python 时间序列分析代码_协方差_60

的联合分布为:

BFAST时间序列分解算法 python 时间序列分析代码_差分_61

Note:

BFAST时间序列分解算法 python 时间序列分析代码_差分_62

。常数

BFAST时间序列分解算法 python 时间序列分析代码_差分_63

。在前t-1个值已知的条件下,实际上

BFAST时间序列分解算法 python 时间序列分析代码_方差_15

仅与

BFAST时间序列分解算法 python 时间序列分析代码_方差_65

有关:

BFAST时间序列分解算法 python 时间序列分析代码_方差_66


BFAST时间序列分解算法 python 时间序列分析代码_方差_67

的联合分布为:

BFAST时间序列分解算法 python 时间序列分析代码_方差_68

对数似然函数为:


BFAST时间序列分解算法 python 时间序列分析代码_差分_69

Note:
求偏导数=0的点。

向量形式:

BFAST时间序列分解算法 python 时间序列分析代码_差分_70

BFAST时间序列分解算法 python 时间序列分析代码_协方差_71

BFAST时间序列分解算法 python 时间序列分析代码_差分_72

MA(1)的似然函数:


BFAST时间序列分解算法 python 时间序列分析代码_方差_73

BFAST时间序列分解算法 python 时间序列分析代码_差分_74

Note:

epsilon序列可表示为

BFAST时间序列分解算法 python 时间序列分析代码_协方差_75

的函数,非线性函数。

向量形式:

BFAST时间序列分解算法 python 时间序列分析代码_方差_76

BFAST时间序列分解算法 python 时间序列分析代码_方差_77

ARMA(p,q)的极大似然估计:


BFAST时间序列分解算法 python 时间序列分析代码_协方差_78

,似然函数为:

BFAST时间序列分解算法 python 时间序列分析代码_差分_79

BFAST时间序列分解算法 python 时间序列分析代码_方差_80

Note:
参数包含在epsilon序列中。

4 一个实验

data:601000.ss, from 2014-8-9 to 2017-4-20,BIC准则定阶,前300个作为训练集,ARMA(4,0)。结果:

RMSE:
0.30651974757
MAPE:
0.012358387122

BFAST时间序列分解算法 python 时间序列分析代码_差分_81

BFAST时间序列分解算法 python 时间序列分析代码_差分_82

BFAST时间序列分解算法 python 时间序列分析代码_协方差_83

BFAST时间序列分解算法 python 时间序列分析代码_差分_84

BFAST时间序列分解算法 python 时间序列分析代码_差分_85