点赞、关注,养成良好习惯
Life is short, U need Python
量化投资基础系列,不断更新中
1 引言
时间序列经典模型主要有:
- 自回归模型(Auto Regressive,AR)
- 移动回归模型(Moving Average,MA)
- 移动自回归模型(Auto Regressive Moving Average,ARMA)
- 差分移动自回归模型(Auto Regressive Integrated Moving Average,ARIMA)
本案例主要介绍这四种模型的基本原理以及以沪深300指数收盘价数据为例,探讨如何使用Python对平稳时间序列进行建模和预测分析。
2 AR模型
2.1 理论介绍
自回归模型(Auto Regressive,AR)是一个线性模型,将时间序列变量当期值作为被解释变数、过去期的历史值当作解释变数,因此被称作自回归模型。
p
p
p 阶自回归模型,即 AR(
p
p
p) 的一般表达式为:
x
t
=
ϕ
0
+
ϕ
1
x
t
−
1
+
ϕ
2
x
t
−
2
+
…
+
ϕ
p
x
t
−
p
+
ε
t
x_t=\phi_0+\phi_1 x_{t-1}+\phi_2 x_{t-2}+\ldots+\phi_p x_{t-p}+\varepsilon_t
xt=ϕ0+ϕ1xt−1+ϕ2xt−2+…+ϕpxt−p+εt
其中,
{
ε
t
}
\left\{\varepsilon_t\right\}
{εt} 是一个零均值、独立、同分布的白噪声序列,即满足:
E
(
ε
t
)
=
0
;
Var
(
ε
t
)
=
σ
ε
2
;
E
(
ε
t
ε
s
)
=
0
,
∀
s
≠
t
\mathbb{E}\left(\varepsilon_t\right)=0 ; \quad \operatorname{Var}\left(\varepsilon_t\right)=\sigma_{\varepsilon}^2 ; \quad \mathbb{E}\left(\varepsilon_t \varepsilon_s\right)=0, \ \ \forall \ s \neq t
E(εt)=0;Var(εt)=σε2;E(εtεs)=0, ∀ s=t
且解释变数
x
s
x_s
xs 与残差项
ε
t
\varepsilon_t
εt 无相关性,即
E
(
x
s
ε
t
)
=
0
,
∀
s
<
t
\mathbb{E}\left(x_s \varepsilon_t\right)=0,\forall s<t
E(xsεt)=0,∀s<t 。为了研究 AR 模型的统计性质,假设平稳的时间序列
x
t
x_t
xt 可以用 AR(
2
2
2) 模型来刻画:
x
t
=
ϕ
0
+
ϕ
1
x
t
−
1
+
ϕ
2
x
t
−
2
+
ε
t
,
∣
ϕ
1
∣
<
1
,
∣
ϕ
2
∣
<
1
x_t=\phi_0+\phi_1 x_{t-1}+\phi_2 x_{t-2}+\varepsilon_t,\ \ \ |\phi_1|<1,\ |\phi_2|<1
xt=ϕ0+ϕ1xt−1+ϕ2xt−2+εt, ∣ϕ1∣<1, ∣ϕ2∣<1
由于平稳时间序列的均值不变,则
μ
=
E
(
x
t
)
=
ϕ
0
+
ϕ
1
E
(
x
t
−
1
)
+
ϕ
2
E
(
x
t
−
2
)
+
E
(
ε
t
)
\mu=\mathbb{E}\left(x_t\right)=\phi_0+\phi_1 \mathbb{E}\left(x_{t-1}\right)+\phi_2 \mathbb{E}\left(x_{t-2}\right)+\mathbb{E}\left(\varepsilon_t\right)
μ=E(xt)=ϕ0+ϕ1E(xt−1)+ϕ2E(xt−2)+E(εt)
即
μ
=
ϕ
0
+
ϕ
1
μ
+
ϕ
2
μ
+
0
μ
=
ϕ
0
1
−
ϕ
1
−
ϕ
2
\begin{aligned} \mu & =\phi_0+\phi_1 \mu+\phi_2 \mu+0 \\ \mu & =\frac{\phi_0}{1-\phi_1-\phi_2} \end{aligned}
μμ=ϕ0+ϕ1μ+ϕ2μ+0=1−ϕ1−ϕ2ϕ0
于是
x
t
−
μ
=
ϕ
0
+
ϕ
1
(
x
t
−
1
−
μ
)
+
ϕ
2
(
x
t
−
2
−
μ
)
+
(
ϕ
1
+
ϕ
2
−
1
)
μ
+
ε
t
=
ϕ
1
(
x
t
−
1
−
μ
)
+
ϕ
2
(
x
t
−
2
−
μ
)
+
ε
t
\begin{aligned} x_t-\mu & =\phi_0+\phi_1\left(x_{t-1}-\mu\right)+\phi_2\left(x_{t-2}-\mu\right)+\left(\phi_1+\phi_2-1\right) \mu+\varepsilon_t \\ & =\phi_1\left(x_{t-1}-\mu\right)+\phi_2\left(x_{t-2}-\mu\right)+\varepsilon_t \end{aligned}
xt−μ=ϕ0+ϕ1(xt−1−μ)+ϕ2(xt−2−μ)+(ϕ1+ϕ2−1)μ+εt=ϕ1(xt−1−μ)+ϕ2(xt−2−μ)+εt
将上式两边分别乘以
(
x
t
−
1
−
μ
)
\left(x_{t-1}-\mu\right)
(xt−1−μ) 并取期望再除以方差
γ
0
\gamma_0
γ0 之后,可以得到以下公式:
γ
1
γ
0
=
ϕ
1
γ
0
γ
0
+
ϕ
2
γ
1
γ
0
\frac{\gamma_1}{\gamma_0}=\phi_1 \frac{\gamma_0}{\gamma_0}+\phi_2 \frac{\gamma_1}{\gamma_0}
γ0γ1=ϕ1γ0γ0+ϕ2γ0γ1
其中,
γ
1
=
C
o
v
(
x
t
,
x
t
−
1
)
\gamma_1=Cov(x_{t},x_{t-1})
γ1=Cov(xt,xt−1),
γ
0
=
C
o
v
(
x
t
,
x
t
)
=
V
a
r
(
x
t
)
\gamma_0=Cov(x_{t},x_{t})=Var(x_t)
γ0=Cov(xt,xt)=Var(xt)。
即
ρ
1
=
ϕ
1
+
ϕ
2
ρ
1
\rho_1=\phi_1+\phi_2 \rho_1
ρ1=ϕ1+ϕ2ρ1
从而
ρ
1
=
ϕ
1
1
−
ϕ
2
\rho_1=\frac{\phi_1}{1-\phi_2}
ρ1=1−ϕ2ϕ1
同样的方式乘以
(
x
t
−
2
−
μ
)
\left(x_{t-2}-\mu\right)
(xt−2−μ) 并取期望再除以方差
γ
0
\gamma_0
γ0 可得:
ρ
2
=
ϕ
1
ρ
1
+
ϕ
2
\rho_2=\phi_1 \rho_1+\phi_2
ρ2=ϕ1ρ1+ϕ2
综上可知:
ρ
1
=
ϕ
1
1
−
ϕ
2
ρ
2
=
ϕ
1
ρ
1
+
ϕ
2
\begin{aligned} \rho_1 & =\frac{\phi_1}{1-\phi_2} \\ \rho_2 & =\phi_1 \rho_1+\phi_2 \end{aligned}
ρ1ρ2=1−ϕ2ϕ1=ϕ1ρ1+ϕ2
同样的方式时乘以 ( x t − k − μ ) , ∀ k ⩾ 3 \left(x_{t-k}-\mu\right), \forall k \geqslant 3 (xt−k−μ),∀k⩾3, 可得三阶以上(包含三阶)的自相关系数:
ρ k = ϕ 1 ρ k − 1 + ϕ 2 ρ k − 2 ( k ⩾ 3 ) \rho_k=\phi_1 \rho_{k-1}+\phi_2 \rho_{k-2}\ \ (k \geqslant 3) ρk=ϕ1ρk−1+ϕ2ρk−2 (k⩾3)
可以看出符合 A R ( 2 ) \mathrm{AR}(\mathrm{2}) AR(2) 模型的时间序列之 自相关系数 会随着阶数的增加而减小,但是很多阶数之后仍不等于 0 , 会呈现出所谓 拖尾 的现象。
现在将分析拓展至
A
R
(
p
)
\mathrm{AR}(\mathrm{p})
AR(p) 模型。如果时间序列是平稳的,可得:
μ
=
ϕ
0
1
−
ϕ
1
−
ϕ
2
−
⋯
−
ϕ
p
\mu=\frac{\phi_0}{1-\phi_1-\phi_2-\cdots-\phi_p}
μ=1−ϕ1−ϕ2−⋯−ϕpϕ0
两边减去均值
μ
\mu
μ 可得:
x
t
−
μ
=
ϕ
1
(
x
t
−
1
−
μ
)
+
ϕ
2
(
x
t
−
2
−
μ
)
+
…
+
ϕ
p
(
x
t
−
p
−
μ
)
+
ε
t
x_t-\mu=\phi_1\left(x_{t-1}-\mu\right)+\phi_2\left(x_{t-2}-\mu\right)+\ldots+\phi_p\left(x_{t-p}-\mu\right)+\varepsilon_t
xt−μ=ϕ1(xt−1−μ)+ϕ2(xt−2−μ)+…+ϕp(xt−p−μ)+εt
两边分别乘以
(
x
t
−
μ
)
\left(x_t-\mu\right)
(xt−μ) 、
(
x
t
−
1
−
μ
)
、
…
\left(x_{t-1}-\mu\right) 、 \ldots
(xt−1−μ)、… 并取期望再除以方差
γ
0
\gamma_0
γ0 可得:
1
=
ϕ
1
ρ
1
+
ϕ
2
ρ
2
+
…
+
ϕ
p
ρ
p
ρ
1
=
ϕ
1
+
ϕ
2
ρ
1
+
ϕ
3
ρ
2
+
⋯
+
ϕ
p
ρ
p
−
1
ρ
2
=
ϕ
1
ρ
1
+
ϕ
2
+
ϕ
3
ρ
1
+
⋯
+
ϕ
p
ρ
p
−
2
⋮
ρ
p
=
ϕ
1
ρ
p
−
1
+
ϕ
2
ρ
p
−
2
+
ϕ
3
ρ
p
−
3
+
⋯
+
+
ϕ
p
−
1
ρ
1
+
ϕ
p
\begin{aligned} 1 & =\phi_1 \rho_1+\phi_2 \rho_2+\ldots+\phi_p \rho_p \\ \rho_1 & =\phi_1+\phi_2 \rho_1+\phi_3 \rho_2+\cdots+\phi_p \rho_{p-1} \\ \rho_2 & =\phi_1 \rho_1+\phi_2+\phi_3 \rho_1+\cdots+\phi_p \rho_{p-2} \\ & \vdots \\ \rho_p & =\phi_1 \rho_{p-1}+\phi_2 \rho_{p-2}+\phi_3 \rho_{p-3}+\cdots++\phi_{p-1}\rho_{1}+\phi_p \end{aligned}
1ρ1ρ2ρp=ϕ1ρ1+ϕ2ρ2+…+ϕpρp=ϕ1+ϕ2ρ1+ϕ3ρ2+⋯+ϕpρp−1=ϕ1ρ1+ϕ2+ϕ3ρ1+⋯+ϕpρp−2⋮=ϕ1ρp−1+ϕ2ρp−2+ϕ3ρp−3+⋯++ϕp−1ρ1+ϕp
根据这些线性关系式,可以解得
ρ
1
,
ρ
2
,
…
,
ρ
p
\rho_1, \rho_2, \ldots, \rho_p
ρ1,ρ2,…,ρp,对于大于
p
p
p 阶的自相关系数
ρ
k
\rho_k
ρk,也有:
ρ k = ϕ 1 ρ k − 1 + ϕ 2 ρ k − 2 + … + ϕ p ρ k − p \rho_k=\phi_1 \rho_{k-1}+\phi_2 \rho_{k-2}+\ldots+\phi_p \rho_{k-p} ρk=ϕ1ρk−1+ϕ2ρk−2+…+ϕpρk−p
因此,符合 A R ( p ) \mathrm{AR}(\mathrm{p}) AR(p) 模型的平稳时间序列,其自相关系数在 p p p 阶之后依然可能不为 0 ,亦会呈现出所谓 拖尾 的现象。
AR( p p p) 模型的建模步骤
(1) 序列识别
- 判别序列是否是平稳的。若非平稳的,则需对其变换处理使得其平稳(比如,差分、平滑、变换、分解)。
- 判别平稳的序列是否是白噪声的。若白噪声的(白噪声序列无法构建ARMA模型),则建模结束;否则,进行下一步。
(2) 模型识别
- 确定 p p p 的值,选择最优的模型。通过平稳序列的偏自相关函数(PACF)确定 p p p。
- 如果偏自相关函数不是很明显的话,可以尝试建立几个备选模型,然后根据AIC或BIC指标进行选择(一般选择较小的AIC或BIC值)。
(3) 模型估计
- 模型估计即模型的参数估计,查看参数对应的 p p p 值是否显著为0。
(4) 模型诊断
- 对模型残差序列进行检验,确保其服从正态分布的白噪声序列(可以看残差的自相关图,也可以使用假设检验方法D-W检验、Box-Ljung检验、Ljung-Box检验)。当残差序列是白噪声序列时,表明序列中信息充分提取到模型中了。
常用平稳化的方法
(1)差分:差分可以去除序列中的趋势和季节性。一阶差分可以去除线性趋势,如果还有二次趋势,还可以继续二阶差分。二阶差分后还未平稳的话就要注意了,继续差分即便最终平稳了,但是多次差分后解释力下降,且有可能造成过度差分,最差为差分后的序列为白噪声,后面也没法分析了。对于
周期型
序列也可以用季节差分的方式去除时间序列季节性。
(2)平滑:对当前序列值减去平滑值得到一个残差序列,当平滑结果能比较好的描述原始序列趋势特征的时候,残差序列一般是平稳的,后续可对残差序列进行建模预测。计算平滑值的方法可以用简单移动平均
、加权移动平均
、一次指数平滑
、二次指数平滑
等。同类思想,还可以拟合一个回归方程,用回归方程描述原始序列的趋势特征。
(3)变换:如对数变换
,能够去除方差随时间增长的趋势。对数据进行取log处理,变换前的序列必须满足大于0。取对数后,原数据越大,缩小的幅度越大,可以使得方差随时间波动大的时间序列的方差变得更稳定,从而一定程度上使得序列平稳。但也不一定变换后即平稳,比如呈指数趋势
的序列,变换后只能将指数趋势转化为线性趋势
,此时再使用一阶差分即可将序列变得平稳,同时变换后的数据可以看成增长率的对数,解释性强。其它还有开根号
、Box-Cox变换
、Yeo-Johonson变换
等。这些变换试图将数据转换为正态分布,虽然对于平稳性来说并不总是必要的,但通常能够纠正序列的非线性问题。
(4)分解:可以将时间序列分解成3部分:长期趋势、季节变动、不规则波动。3种成分相加即加法模型,3种成分相乘即乘法模型,既加又乘即混合模型。分解目的为去除季节性的影响,分解后可对分解出的趋势项、季节项和余项分别进行预测。常用时间序列分解方法有朴素分解
、X11分解
、SEATS分解
、STL分解
等,其中STL分解
用的较多。
2.2 实证分析
- 本案例选取沪深300 收盘价(close)日线数据为研究对象!
读取数据
# 导入包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
import matplotlib
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
df = pd.read_csv('000300.csv',index_col='trade_date')
df.index = pd.to_datetime(df.index)
df.head()
(1)模拟AR(1) 过程(数据来源于扰动项 ε t \varepsilon_t εt为正态分布的时间序列:np.random.normal)
import statsmodels.api as sma
import scipy.stats as scs
# 先定义一个画图函数
def ts_plot(data,lags=None,title=''):
if not isinstance(data, pd.Series):
data = pd.Series(data)
# matplotlib官方提供了五种不同的图形风格,
# 包括:'bmh'、'ggplot'、'dark_background'、'fivethirtyeight'和'grayscale'
with plt.style.context('ggplot'):
fig = plt.figure(figsize=(8, 6))
layout = (3, 2)
ts_ax = plt.subplot2grid(layout, (0, 0), colspan=2)
acf_ax = plt.subplot2grid(layout, (1, 0))
pacf_ax = plt.subplot2grid(layout, (1, 1))
qq_ax = plt.subplot2grid(layout, (2, 0))
pp_ax = plt.subplot2grid(layout, (2, 1))
data.plot(ax=ts_ax)
ts_ax.set_title(title+'时序图')
sma.graphics.tsa.plot_acf(data, lags=lags, ax=acf_ax, alpha=0.5)
acf_ax.set_title('自相关系数')
sma.graphics.tsa.plot_pacf(data, lags=lags, ax=pacf_ax, alpha=0.5)
pacf_ax.set_title('偏自相关系数')
sma.qqplot(data, line='s', ax=qq_ax)
qq_ax.set_title('QQ 图')
scs.probplot(data, sparams=(data.mean(),data.std()), plot=pp_ax)
pp_ax.set_title('PP 图')
plt.tight_layout()
plt.show()
# 模拟AR(1) 过程:x_t = phi_0 + phi_1 * x_{t-1} + w_t
# 设置随机种子(括号里数字无意义,只是为了复现需要)
np.random.seed(1)
# 模拟次数
n = 5000
# AR模型的参数
a = 0.8 # phi_1 = 0.8
# 扰动项为正态分布
x = w = np.random.normal(size=n)
for t in range(1,n):
x[t] = a * x[t-1] + w[t] # phi_0 = 0
#画图
ts_plot(x,lags=20)
结论:模拟的 AR(1) 模型是正态的。自相关系数图(ACF)显示滞后值之间存在显著的序列相关性,偏自相关系数图(PACF)则显示在滞后1期时截尾(迅速降为0)。
- 假如模拟的AR(1)模型是正确的,那么估计的系数参数将很接近真实的系数0.8,选择的阶数也会等于1。
from statsmodels.tsa.ar_model import AutoReg
from statsmodels.tsa.ar_model import ar_select_order
省略代码详见资源包!
(2)利用 AR( p p p) 模型来拟合沪深300的收盘价(df.close)
省略代码详见资源包!
3 MA模型
3.1 理论介绍
MA( q q q) 模型与 AR( p p p) 模型非常相似。
不同之处在于,MA( q q q) 模型是对过去的白噪声误差项的线性组合,而不是过去观测值的线性组合。
MA 模型的动机是可以直接通过拟合误差项的模型来观察误差过程中的 “冲击”。在 AR 模型中,通过在一系列过去的观察中使用ACF间接观察到这些冲击。
MA(
q
q
q) 模型认为因变量序列
x
t
x_t
xt 与随机冲击项的当前值
ε
t
\varepsilon_t
εt 及
q
q
q 期滞后值
ε
t
−
1
,
ε
t
−
2
,
…
\varepsilon_{t-1}, \varepsilon_{t-2}, \ldots
εt−1,εt−2,…,
ε
t
−
q
\varepsilon_{t-q}
εt−q 有关, 而且是随机冲击项的加权平均, 因此被称作移动平均模型。一个
q
q
q 阶移动平均模型 MA(
q
q
q) 可以用数学表达为:
x t = μ + ε t + θ 1 ε t − 1 + θ 2 ε t − 2 + … + θ q ε t − q x_t=\mu+\varepsilon_t+\theta_1 \varepsilon_{t-1}+\theta_2 \varepsilon_{t-2}+\ldots+\theta_q \varepsilon_{t-q} xt=μ+εt+θ1εt−1+θ2εt−2+…+θqεt−q
其中 { ε t } \left\{\varepsilon_t\right\} {εt} 是均值为零、独立、同分布的白噪声序列, 满足:
E ( ε t ) = 0 ; Var ( ε t ) = σ ε 2 ; E ( ε t ε s ) = 0 , ∀ s ≠ t \mathbb{E}\left(\varepsilon_t\right)=0 ; \quad \operatorname{Var}\left(\varepsilon_t\right)=\sigma_{\varepsilon}^2 ; \quad \mathbb{E}\left(\varepsilon_t \varepsilon_s\right)=0, \forall s \neq t E(εt)=0;Var(εt)=σε2;E(εtεs)=0,∀s=t
由于 MA( q q q) 仅仅是白噪声过程的线性组合, 因此有:
E
(
x
t
)
=
μ
,
Var
(
x
t
)
=
γ
0
=
(
1
+
θ
1
2
+
θ
2
2
+
⋯
+
θ
q
2
)
σ
ε
2
,
ρ
l
=
{
1
,
l
=
0
θ
l
+
θ
l
+
1
θ
1
+
θ
l
+
2
θ
2
+
…
+
θ
q
θ
q
−
l
1
+
θ
1
2
+
θ
2
2
+
…
+
θ
q
2
,
∀
l
=
1
,
2
,
…
,
q
0
,
∀
l
>
q
\begin{aligned} & \mathbb{E}\left(x_t\right)=\mu, \\ & \operatorname{Var}\left(x_t\right)=\gamma_0=\left(1+\theta_1^2+\theta_2^2+\dots+\theta_q^2\right) \sigma_{\varepsilon}^2 \text {, } \\ & \rho_l= \begin{cases}1, & l=0 \\ \frac{\theta_l \ + \ \theta_{l+1} \ \ \theta_1 \ + \ \theta_{l+2} \ \ \theta_2 \ + \ \dots \ + \ \theta_q \ \theta_{q-l}}{1 \ + \ {\theta_1}^{2} \ + \ {\theta_2}^{2} \ + \ \dots \ + \ {\theta_q}^{2}}, & \forall l=1,2, \ldots, q \\ 0, & \forall l>q\end{cases} \\ & \end{aligned}
E(xt)=μ,Var(xt)=γ0=(1+θ12+θ22+⋯+θq2)σε2, ρl=⎩
⎨
⎧1,1 + θ12 + θ22 + … + θq2θl + θl+1 θ1 + θl+2 θ2 + … + θq θq−l,0,l=0∀l=1,2,…,q∀l>q
由以上公式可以得知 MA(
q
q
q) 模型一个很重要的统计性质:MA(
q
q
q) 模型自相关系数
q
q
q 阶截尾
。所谓的
q
q
q 阶截尾是指, 在
q
q
q 阶以后 MA(
q
q
q) 模型的自相关系数马上截止,
q
+
1
q+1
q+1 阶起就等于 0 (即上式
γ
l
=
0
,
∀
l
>
q
\gamma_l=0, \forall l>q
γl=0,∀l>q 所表达的内容)。考虑 AR 模型和 MA 模型自相关系数的性质, 可以根据自相关图(ACF), 来初步判断所研究的时间序列大致符合什么类型的模型。
3.2 实证分析
(1)模拟MA(1) 过程(数据来源于包:smt.arma_generate_sample)
省略代码详见资源包!
(2)利用 MA( q q q) 模型来拟合 沪深300 的收盘价(df.close)
序列识别
省略代码详见资源包!
模型识别(定阶)
- 通过自相关函数(ACF)可视化定阶!
- 根据最小化AIC准则确定 q q q。计算比较耗时,为了控制计算量,这里限制MA最大阶不超过3。大家可以尝试其它准则定阶(比如,BIC和HQIC)。
省略代码详见资源包!
模型估计
以MA(3)模型为例!
省略代码详见资源包!
模型诊断
可视化
残差
直方图、QQ图,看是否正态分布,可视化ACF看是否仍存有自相关性。
残差的白噪声检验(Ljung-Box检验)。
省略代码详见资源包!
4 ARMA模型
4.1 理论介绍
AR( p p p) 模型认为时间序列中当期的值与过去 p p p 期的滞后值有关,MA( q q q) 模型则用滞后 q q q 期的随机扰动项来解释当期的 x t x_t xt。不过在金融经济领域中,很多变量的值既会与自己过去期的表现有关系,又受到过去随机冲击的影响,ARMA模型表达的就是这个思想。ARMA模型全称为自回归移动平均(Autoregressive Moving Average,ARMA)模型,是研究时间序列的重要方法,由AR模型与MA模型混合构成。
ARMA( p p p, q q q)模型的一般表达式为:
x t = ϕ 0 + ϕ 1 x t − 1 + ⋯ + ϕ p x t − p + θ 1 ε t − 1 + ⋯ + θ q ε t − q + ε t . x_t = \phi_0 + \phi_1 x_{t-1} + \dots + \phi_p x_{t-p} + \theta_1 \varepsilon_{t-1} + \dots + \theta_q \varepsilon_{t-q} + \varepsilon_t. xt=ϕ0+ϕ1xt−1+⋯+ϕpxt−p+θ1εt−1+⋯+θqεt−q+εt.
其中, ε t {\varepsilon_{t}} εt是零均值、独立、同分布白噪声序列,满足:
E ( ε t ) = 0 ; Var ( ε t ) = σ ε 2 ; E ( ε t ε s ) = 0 , ∀ s ≠ t \mathbb{E}\left(\varepsilon_t\right)=0 ; \quad \operatorname{Var}\left(\varepsilon_t\right)=\sigma_{\varepsilon}^2 ; \quad \mathbb{E}\left(\varepsilon_t \varepsilon_s\right)=0, \forall s \neq t E(εt)=0;Var(εt)=σε2;E(εtεs)=0,∀s=t
很显然,相较于 AR( p p p) 和 MA( q q q) 模型, ARMA( p p p, q q q) 更具有普适性, AR( p p p)是 q = 0 q=0 q=0 时的 ARMA( p p p, q q q) 模型, MA( q q q) 模型是当 p = 0 p=0 p=0 时的 ARMA( p p p, q q q) 模型。
从金融的角度理解,AR 和 MA 模型的理论意义在于:AR( p p p)模型试图捕捉(解释)交易市场中经常观察到的动量和均值回复效应;MA( q q q)模型尝试捕捉(解释)在白噪声条件下观察到的冲击效应,这些冲击效应可以被认为是影响观察过程的意外事件。ARMA模型的弱点在于忽视了大多数金融时间序列中的波动聚集效应。
ARMA( p p p, q q q) 模型的建模过程
(1) 序列识别
- 判别序列是否是平稳的。若非平稳的,则需对其变换处理使得其平稳(比如,差分、平滑、变换、分解)。
- 判别平稳的序列是否是白噪声的。若白噪声的(白噪声序列无法构建ARMA模型),则建模结束;否则,进行下一步。
(2) 模型识别
- 确定 p p p 和 q q q 的值,选择最优的模型。通过序列的自相关(ACF)确定 q q q 和偏自相关函数(PACF)确定 p p p。
- 如果自相关和偏自相关函数不是很明显的话,可以尝试建立几个备选模型,然后根据AIC或BIC指标进行选择(一般选择较小的AIC或BIC值)。
(3) 模型估计
- 模型估计即模型的参数估计,查看参数对应的 p p p 值是否显著为0。
(4) 模型诊断
- 对模型残差序列进行检验,确保其服从正态分布的白噪声序列。当残差序列是白噪声序列时,表明序列中信息充分提取到模型中了。
4.2 实证分析
省略代码详见资源包!
模型检验
可视化
残差
直方图、QQ图,看是否正态分布,可视化ACF看是否仍存有自相关性。
残差的白噪声检验(Ljung-Box检验)。
省略代码详见资源包!
模型评估
- 利用拟合模型的 predict() 方法对沪深300的收盘价进行预测(拟合)。
省略代码详见资源包!
5 ARIMA模型
5.1 理论介绍
ARIMA模型全称是差分移动自回归模型(Autoregressive Integrated Moving Average Models,ARIMA),是ARMA模型的拓展。
由于现实中很多时间序列不是平稳的,但可以通过差分来实现平稳,即通过 一阶差分
可以将 非平稳
序列转化为 平稳
序列。
由于前三个模型都有时间序列平稳的假设,如果时间序列存在明显的上升或者下降趋势,模型预测的效果大大折扣。对于有明显下降或者上升趋势的数据集,可以使用差分的方式将其转化为平稳序列,然后使用ARMA模型进行拟合。
假设模型经过 d d d 次差分通过了时间序列平稳的检验,ARMA的系数为 p p p 和 q q q,则 ARIMA 模型为 ARIMA( p p p, d d d, q q q)。
5.2 实证分析
由于沪深300收盘价序列经过一阶差分后为平稳时间序列。因此, ARIMA( p p p, d d d, q q q)模型即为ARIMA( p p p,1, q q q)!特别提醒:是模型中研究对象为沪深300的收盘价序列(df.close)!
省略代码详见资源包!
6. 结束语
本文主要以沪深300指数收盘价数据为例,简要介绍了时间序列四大经典模型的基本原理和Python实证分析。不难发现,这些模型在拟合和预测沪深300指数收盘价上样本内拟合效果还不错,但样本外效果不是很好(读者可以结合资源包代码自己尝试)。
实际上,这些模型有一个潜在假设是干扰项的方差是固定不变的,但是研究者发现金融数据(如股票收益率)大都存在异方差现象,因此传统的时间序列模型无法获得可靠的估计结果。
为了解决金融资产收益率序列波动聚集的难题,学者们提出了 ARCH、GARCH 以及 协整模型,接下来将会对这些模型进行详细介绍并给出相应的Python实证分析。
7. 参考资料
- 蔡立耑. 量化投资以Python为工具[M]. 北京:电子工业出版社,2017.
- PyQuant. 量化投资基础[M]. 北京:科学出版社,2024.
8. 资源包下载
- 链接:https://pan.baidu.com/s/1oSH2088fgDMAo-keiwCbSA
- 提取码:1234
- 写作不易,切勿白剽
- 点赞关注,最大鼓励
- 持续更新,未完待续…