目录
- 平稳序列
- 判断样本的平稳性
- 时间序列模型
- 参数选择
- 实验代码
1. 平稳序列
时间序列是一列观测值
X
t
X_t
Xt的集合, 其中每个观测值是在时段
t
t
t观测所得(
t
t
t是自然数 ). 给定时间序列
{
X
t
}
t
=
1
n
\{X_t\}_{t=1}^n
{Xt}t=1n, 如果对任意的
t
=
1
,
…
,
n
t=1,\ldots,n
t=1,…,n, 它满足下列条件:
i.
var
(
X
t
)
<
∞
\text{var}(X_t)<\infty
var(Xt)<∞
ii.
E
(
X
t
)
=
μ
\mathbb{E}(X_t) = \mu
E(Xt)=μ
iii.
cov
(
X
r
,
X
s
)
=
cov
(
X
r
+
t
,
X
s
+
t
)
,
∀
r
,
s
=
1
,
.
.
.
,
n
\text{cov}(X_r, X_s) = \text{cov}(X_{r+t}, X_{s+t}), \forall r,s = 1, ..., n
cov(Xr,Xs)=cov(Xr+t,Xs+t),∀r,s=1,...,n
我们把它叫做(弱)平稳(weakly stationary)序列.(下文我们简称平稳序列.)
通俗地讲, 平稳序列的期望, 方差, 协方差不随时间变化. 例如, X t X_t Xt服从同一个分布时, 它是平稳的.
例1 下图中的时间序列由
X
t
∼
N
(
2
,
1
)
X_t\sim N(2, 1)
Xt∼N(2,1)生成. 从直观上看, 这个序列是"平稳的".
例2 下图的中的时间序列由
X
t
=
2
+
0.9
X
t
−
1
+
W
t
X_t= 2 + 0.9X_{t-1}+W_t
Xt=2+0.9Xt−1+Wt生成, 其中
X
0
=
0
X_0=0
X0=0,
W
t
=
N
(
0
,
1
)
W_t= N(0, 1)
Wt=N(0,1). 它起初有明显地增长, 然后趋于平稳. 利用ADF检验(详情见下文), 我们发现该序列是平稳的(p-value < 0.01).
Remark 弱平稳性的"弱"主要体现在时间序列在全局上是平稳的, 即,时间序列局部是波动的,但整体上看是平稳的, 或者随着时间的变化其样本的均值收敛.
2. 判断样本的平稳性
我们用统计学中假设检验的方法来判断样本的平稳性. 常用的是Augmented Dickey-Fuller(ADF)检验1.
- Null Hypothesis ( H 0 ) (H_0) (H0): 样本中存在unit root2. 如果接受 H 0 H_0 H0, 则意味着样本是非平稳的.
- Alternate Hypothesis ( H 1 ) (H_1) (H1): 样本中不存在unit root. 如果拒绝 H 0 H_0 H0, 则意味着样本是平稳的.
在显著水平 α = 0.05 \alpha=0.05 α=0.05的条件下, 我们可以通过计算p-value来接受或者拒绝 H 0 H_0 H0:
- p-value > 0.05 \text{p-value} > 0.05 p-value>0.05: 接受 H 0 H_0 H0.
- p-value ≤ 0.05 \text{p-value} \leq 0.05 p-value≤0.05: 拒绝 H 0 H_0 H0.
Python3中statsmodels.tas.stattools
中的adfuller
函数3实现了ADF检验. 使用方法如下所示.
from statsmodels.tsa.stattools import adfuller
def test_stationarity(data, alpha=0.05, print_detail=True):
""" Test stationarity of time series data.
:param data: time series data, formatted as list
:param alpha: significance level.
:param print_detail: if True print additional information.
"""
result = adfuller(data)
is_stationary = True if result[1] <= alpha else False
if print_detail:
print('ADF statistic: %f' % result[0])
print('p-value: %f' % result[1])
print('critical values:')
for key, value in result[4].items():
print('\t%s: %.3f' % (key, value))
return is_stationary
3. 时间序列模型
前面之所以介绍平稳序列的概念及检验方法, 是因为它是很多基础的时间序列模型的前提假设. 在本节我们介绍一些常见的时间序列模型(更多内容可以参考4, 5).
AR(p)
AR代表自回归(Autoregression). 假设时间序列
{
X
t
}
\{X_t\}
{Xt}是平稳的, 它可以被表示成如下形式:
X
t
=
δ
+
∑
i
=
1
p
ϕ
i
X
t
−
i
+
W
t
.
X_t = \delta + \sum_{i=1}^p \phi_iX_{t-i} + W_t.
Xt=δ+i=1∑pϕiXt−i+Wt.
- δ \delta δ是常数.
- W t ∼ iid N ( 0 , σ 2 ) W_t\overset{\text{iid}}{\sim} N(0, \sigma^2) Wt∼iidN(0,σ2), 它表示时段 t t t的误差(随机变量).
- p p p代表自回归阶数.
MA(q)
MA代表移动平均(Moving Average). 假设时间序列
{
X
t
}
\{X_t\}
{Xt}是平稳的, 它可以被表示成如下形式:
X
t
=
δ
+
∑
i
=
1
q
θ
i
W
t
−
i
+
W
t
.
X_t = \delta + \sum_{i=1}^q \theta_iW_{t-i} + W_t.
Xt=δ+i=1∑qθiWt−i+Wt.
- δ \delta δ是常数.
- W t ∼ iid N ( 0 , σ 2 ) W_t\overset{\text{iid}}{\sim} N(0, \sigma^2) Wt∼iidN(0,σ2), 它表示时段 t t t的误差(随机变量).
- q q q代表移动平均阶数.
ARMA(p,q)
ARMA模型是AR和MA的组合. 假设同上. 它可以被表示为如下形式:
X
t
=
δ
+
∑
i
=
1
p
ϕ
i
X
t
−
i
+
∑
i
=
1
q
θ
i
W
t
−
i
+
W
t
.
X_t = \delta + \sum_{i=1}^p \phi_iX_{t-i} + \sum_{i=1}^q \theta_iW_{t-i} + W_t.
Xt=δ+i=1∑pϕiXt−i+i=1∑qθiWt−i+Wt.
- p p p是自回归阶数
- q q q是移动平均阶数
ARIMA(p,d,q)
ARIMA模型是ARMA模型的推广, 全称是Autoregressive Integrated Moving Average. 当时间序列 { X t } \{X_t\} {Xt}不满足平稳性时, 我们通常使用差分的技巧把序列变得平稳, 然后再应用ARMA模型.
参数 d d d代表差分的阶数. 下面是差分的计算公式( Δ \Delta Δ为差分算子):
- 一阶差分 Δ X t = X t − X t − 1 \Delta X_t = X_t - X_{t-1} ΔXt=Xt−Xt−1
- 二阶差分 Δ ( 2 ) X t = Δ ( X t − X t − 1 ) = X t − 2 X t − 1 + X t − 2 = ( 1 − Δ ) 2 X t \Delta^{(2)} X_t = \Delta(X_t-X_{t-1}) = X_t - 2X_{t-1}+X_{t-2} = (1-\Delta)^2X_t Δ(2)Xt=Δ(Xt−Xt−1)=Xt−2Xt−1+Xt−2=(1−Δ)2Xt
- d d d阶差分 Δ ( d ) X t = ( 1 − Δ ) d X t \Delta^{(d)} X_t = (1-\Delta)^dX_t Δ(d)Xt=(1−Δ)dXt
例3 下图是原始的时间序列. 通过观察, 它的均值有明显的上升趋势且不收敛, 因此不是平稳序列(ADF检验的p-value为0.94).
对该序列进行一阶差分后, 我们得到如下平稳的时间序列(p-value为0.00).
ARIMA(p,d,q) × \times ×(P,D,Q,s)
该记号代表季节性(或周期性)ARIMA模型, 详细的表达式可以参考4(4.1 Seasonal ARIMA models), 其中
- p , d , q p,d,q p,d,q的意义同上.
- P P P代表周期性自回归阶数(前 P P P个周期对应观测值的自回归).
- D D D代表周期性差分阶数.
- Q Q Q代表周期性移动平均阶数(前 Q Q Q个周期对应的移动平均).
- s s s代表一个周期的长度.
我们可以把它看成两阶段模型: 第一阶段在全局使用ARIMA(p,d,q); 第二阶段通过指定周期长度 s s s, 再利用ARIMA(P,Q,D)模型考虑周期之间的关系.
例4 考虑如下周期性的平稳时间序列( s = 18 s=18 s=18).
对序列进行周期性差分: Y t = X t − X t − 18 Y_t = X_t - X_{t-18} Yt=Xt−Xt−18得到新的时间序列 { Y t } \{Y_t\} {Yt}如下图所示(红色部分)
通过使用周期性差分, 我们可以把原有时间序列的周期性移除. 同理, 通过采用周期性的自回归和移动平均系数, 我们可以把周期之间的依赖关系考虑进模型.
例5 考虑周期s=18的数据(蓝色曲线). 用 ARIMA ( 1 , 0 , 0 ) \text{ARIMA}(1,0, 0) ARIMA(1,0,0)和 ARIMA ( 1 , 0 , 0 ) × ( 0 , 1 , 0 , 18 ) \text{ARIMA}(1, 0, 0)\times(0, 1, 0, 18) ARIMA(1,0,0)×(0,1,0,18)分别进行预测的结果如下.
不考虑周期性的ARIMA模型的预测结果(灰色曲线)逐渐收敛到时间序列的均值. 由于序列是平稳的, 这样的预测结果符合我们的期望. 考虑到该时间序列有比较强的周期性, 且通过观察发现周期 s = 18 s=18 s=18. 在本例中, 我们仅使用周期差分, 最终得到了如图所示(红色曲线)的周期性预测结果.
ARCH(p)
ARCH的全称是Autoregressive Conditionally Heteroscedasticity, 它可以用来考虑样本的方差随着时间变化(或震荡)的时间序列. 设时间序列 { X t } \{X_t\} {Xt}是平稳的, ARCH ( p ) \text{ARCH}(p) ARCH(p)模型可以被表示成如下形式:
X
t
=
σ
t
W
t
,
W
t
∼
iid
N
(
0
,
1
)
X_t = \sigma_tW_t,\quad W_t \overset{\text{iid}}{\sim} N(0,1)
Xt=σtWt,Wt∼iidN(0,1)
其中
σ
t
2
=
α
0
+
∑
i
=
1
p
α
i
X
t
−
i
2
.
\sigma_t^2 = \alpha_0 + \sum_{i=1}^p \alpha_iX_{t-i}^2.
σt2=α0+i=1∑pαiXt−i2.
- p p p代表 X t 2 X_t^2 Xt2的自回归阶数.
GARCH(p,q)
GARCH即Generalized ARCH, 是ARCH模型的推广6. 设时间序列
{
X
t
}
\{X_t\}
{Xt}是平稳的,
GARCH
(
p
,
q
)
\text{GARCH}(p,q)
GARCH(p,q)模型可以被表示成如下形式:
X
t
=
σ
t
W
t
,
W
t
∼
iid
N
(
0
,
1
)
X_t = \sigma_tW_t,\quad W_t \overset{\text{iid}}{\sim} N(0,1)
Xt=σtWt,Wt∼iidN(0,1)
其中
σ
t
2
=
α
0
+
∑
i
=
1
p
α
i
X
t
−
i
2
+
∑
i
=
1
q
β
i
σ
t
−
i
2
.
\sigma_t^2 = \alpha_0 + \sum_{i=1}^p \alpha_iX_{t-i}^2 + \sum_{i=1}^q \beta_i\sigma^2_{t-i}.
σt2=α0+i=1∑pαiXt−i2+i=1∑qβiσt−i2.
- p p p代表 X t 2 X_t^2 Xt2的自回归阶数.
- q q q代表 σ t 2 \sigma_t^2 σt2的移动平均阶数.
Remark ARCH/GARCH随机过程产生的数据是什么样的? 前面提到它们允许样本的方差随时间变化, 但是由于 { X t } \{X_t\} {Xt}必须满足平稳性(前提假设), 因此样本的方差从局部看是变化(震荡)的, 但从整体看应该是"平稳的"序列. 例如下图是一个 GARCH ( 1 , 1 ) \text{GARCH}(1,1) GARCH(1,1)过程生成的时间序列( α 0 = 5 , α 1 = β 1 = 0.5 \alpha_0=5, \alpha_1=\beta_1=0.5 α0=5,α1=β1=0.5).
VAR(p)
VAR即Vector Autoregression, 它是多变量的自回归模型. 类似地, 我们有 VARMA ( p , q ) \text{VARMA}(p, q) VARMA(p,q), 它是 ARMA ( p , q ) \text{ARMA}(p,q) ARMA(p,q)的向量版本. 需要注意的是, VARMA模型处理的时间序列可以有趋势. 我们不做详细的展开, 感兴趣的读者可以参考4章节11.2: Vector Autoregressive models VAR§ models.
4. 参数选择
给定时间序列的观测样本, 选定预测模型之后如何确定模型的参数? 本节我们介绍两种常用的方法: 1. 画出ACF/PACF图, 然后观察出 p , q p,q p,q的值; 2. 通过计算相关的统计指标, 自动化地选择参数.
4.1 观察ACF/PACF
ACF
ACF的全称是Autocorrelation Function. 对变量
h
=
1
,
2
,
.
.
.
h=1,2, ...
h=1,2,..., ACF的值代表
X
t
X_t
Xt与
X
t
−
h
X_{t-h}
Xt−h之间的相关性.
ACF
(
h
)
=
cov
(
X
t
,
X
t
−
h
)
var
(
X
t
)
\text{ACF}(h) = \frac{\text{cov}(X_t, X_{t-h})}{\text{var}(X_t)}
ACF(h)=var(Xt)cov(Xt,Xt−h)
PACF
PACF的全称是Partial Autocorrelation Function. 对变量
h
=
1
,
2
,
.
.
.
h=1,2,...
h=1,2,..., PACF的值代表已知
X
t
−
1
,
.
.
.
X
t
−
h
+
1
X_{t-1}, ... X_{t-h+1}
Xt−1,...Xt−h+1的条件 下,
X
t
X_t
Xt与
X
t
−
h
X_{t-h}
Xt−h之间的相关性.
PACF
(
h
)
=
cov
(
X
t
,
X
t
−
h
∣
x
t
−
1
,
.
.
.
x
t
−
h
+
1
)
var
(
X
t
∣
x
t
−
1
,
.
.
.
x
t
−
h
+
1
)
var
(
X
t
−
h
∣
x
t
−
1
,
.
.
.
x
t
−
h
+
1
)
\text{PACF}(h) = \frac{\text{cov}(X_t,X_{t-h}|x_{t-1}, ... x_{t-h+1})}{\sqrt{\text{var}(X_t|x_{t-1}, ... x_{t-h+1})\text{var}(X_{t-h}|x_{t-1}, ... x_{t-h+1})}}
PACF(h)=var(Xt∣xt−1,...xt−h+1)var(Xt−h∣xt−1,...xt−h+1)cov(Xt,Xt−h∣xt−1,...xt−h+1)
例6 设 W t ∼ N ( 0 , 1 ) W_t\sim N(0, 1) Wt∼N(0,1). 考虑下面三个模型生成的时间序列, 并计算相应的ACF/PACF.
-
AR ( 1 ) : X t = 2 + 0.5 X t − 1 + W t \text{AR}(1): X_t=2 + 0.5X_{t-1}+W_t AR(1):Xt=2+0.5Xt−1+Wt
-
MA ( 1 ) : X t = 2 + 0.5 W t − 1 + W t \text{MA}(1): X_t=2 + 0.5W_{t-1}+W_t MA(1):Xt=2+0.5Wt−1+Wt
-
ARMA ( 1 , 1 ) : X t = 2 + 0.5 X t − 1 + 0.5 W t − 1 + W t \text{ARMA}(1,1): X_t=2 + 0.5X_{t-1}+ 0.5W_{t-1}+W_t ARMA(1,1):Xt=2+0.5Xt−1+0.5Wt−1+Wt
指导原则(参考4)
模型 | ACF | PACF | 说明 |
---|---|---|---|
AR§ | 逐渐趋近于0或像正弦曲线一样收敛到0 | 前 p p p个值非常显著, 其余的值不显著 | p p p值主要参考PACF |
MA(q) | 前 q q q个值非常显著, 其余的值不显著 | 逐渐趋近于0或像正弦曲线一样收敛到0 | q q q值主要参考ACF |
ARMA(p,q) | 逐渐趋近于0或像正弦曲线一样收敛到0 | 逐渐趋近于0或像正弦曲线一样收敛到0 | p , q p,q p,q值靠猜 |
4.2 自动化地决定参数
基本思想是通过计算一些指标, 并选择参数使得相关的指标值尽可能小. 下面我们介绍一些常用的指标.
为方便描述, 我们先定义一些记号.
- n n n = 样本的大小
- k k k = 模型中需要拟合的参数数量(例如正态分布有的数量是2: μ \mu μ和 σ \sigma σ)
- L max L_{\max} Lmax = 通过最大似然估计得到的最大Likelihood
AIC(Akaike Information Criterion)7
AIC = 2 k − 2 ln ( L max ) \text{AIC} = 2k - 2\ln(L_{\max}) AIC=2k−2ln(Lmax)
AICc8
(AIC的改良版, 解决小样本过拟合的问题)
AICc
=
AIC
+
2
k
2
+
2
k
n
−
k
−
1
\text{AICc} = \text{AIC} + \frac{2k^2 + 2k}{n-k-1}
AICc=AIC+n−k−12k2+2k
BIC(Bayesian Information Criterion)9
(也称为Schwartz Criterion, SBC, SBIC)
BIC = ln ( n ) k − 2 ln ( L max ) \text{BIC} = \ln(n)k - 2\ln(L_{\max}) BIC=ln(n)k−2ln(Lmax)
HQIC(Hannan–Quinn Information Criterion)10
HQIC = 2 k ln ( ln ( n ) ) − 2 ln ( L max ) \text{HQIC} = 2k\ln(\ln(n)) -2\ln(L_{\max}) HQIC=2kln(ln(n))−2ln(Lmax)
Remark 建议在实际中综合考虑这些指标.
5. 实验代码
参考文献
Wikipedia. Augmented Dickey-Fuller test. ↩︎
Dickey, D. A.; Fuller, W. A. Distribution of the Estimators for Autoregressive Time Series with a Unit Root. Journal of the American Statistical Association. 74(366): 427–431, 1979. ↩︎
https://www.statsmodels.org/dev/generated/statsmodels.tsa.stattools.adfuller.html ↩︎
Lecture notes of Applied Time Series Analysis (SATA 510). The Pennsylvania State University. ↩︎ ↩︎ ↩︎ ↩︎
Jan Grandell. Time series analysis (lecture notes). ↩︎
Bollerslev, T. Generalized autoregressive conditional heteroscedasticity. Journal of Econometrics, 31, 307–327, 1986. ↩︎
Hirotugu Akaike. A new look at the statistical model identification, IEEE Transactions on Automatic Control, 19 (6): 716–723, 1974. ↩︎
Wikipedia. https://en.wikipedia.org/wiki/Akaike_information_criterion#AICc. ↩︎
Schwartz E.S. The Stochastic Behavior of Commodity Prices: Implications for Valuation and Hedging’. J Finance 52(3) Papers and Proceedings Fifty-Seventh Annual Meeting, American Finance Association, New Orleans, Louisiana, 923-973, 1997. ↩︎
Hannan, E. J. and B. G. Quinn. The Determination of the order of an autoregression, Journal of the Royal Statistical Society, Series B, 41: 190–195, 1979. ↩︎