量化投资基础(四)之AR、MA、ARMA与ARIMA模型

点赞、关注,养成良好习惯
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+ϕ1xt1+ϕ2xt2++ϕpxtp+ε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)=0s<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+ϕ1xt1+ϕ2xt2+ε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(xt1)+ϕ2E(xt2)+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(xt1μ)+ϕ2(xt2μ)+(ϕ1+ϕ21)μ+εt=ϕ1(xt1μ)+ϕ2(xt2μ)+εt
将上式两边分别乘以 ( x t − 1 − μ ) \left(x_{t-1}-\mu\right) (xt1μ) 并取期望再除以方差 γ 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,xt1) γ 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) (xt2μ) 并取期望再除以方差 γ 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 (xtkμ),k3, 可得三阶以上(包含三阶)的自相关系数:

ρ 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ρk1+ϕ2ρk2  (k3)

可以看出符合 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(xt1μ)+ϕ2(xt2μ)++ϕp(xtpμ)+εt

两边分别乘以 ( x t − μ ) \left(x_t-\mu\right) (xtμ) ( x t − 1 − μ ) 、 … \left(x_{t-1}-\mu\right) 、 \ldots (xt1μ) 并取期望再除以方差 γ 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ρp1=ϕ1ρ1+ϕ2+ϕ3ρ1++ϕpρp2=ϕ1ρp1+ϕ2ρp2+ϕ3ρp3+++ϕp1ρ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ρk1+ϕ2ρk2++ϕpρkp

因此,符合 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 εt1,εt2,, ε t − q \varepsilon_{t-q} εtq 有关, 而且是随机冲击项的加权平均, 因此被称作移动平均模型。一个 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εt1+θ2εt2++θqεtq

其中 { ε 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 θql,0,l=0l=1,2,,ql>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+ϕ1xt1++ϕpxtp+θ1εt1++θqεtq+ε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指数收盘价上样本内拟合效果还不错,但样本外效果不是很好(读者可以结合资源包代码自己尝试)。

实际上,这些模型有一个潜在假设是干扰项的方差是固定不变的,但是研究者发现金融数据(如股票收益率)大都存在异方差现象,因此传统的时间序列模型无法获得可靠的估计结果。

为了解决金融资产收益率序列波动聚集的难题,学者们提出了 ARCHGARCH 以及 协整模型,接下来将会对这些模型进行详细介绍并给出相应的Python实证分析。

7. 参考资料

  • 蔡立耑. 量化投资以Python为工具[M]. 北京:电子工业出版社,2017.
  • PyQuant. 量化投资基础[M]. 北京:科学出版社,2024.

8. 资源包下载

  • 链接:https://pan.baidu.com/s/1oSH2088fgDMAo-keiwCbSA
  • 提取码:1234

  • 写作不易,切勿白剽
  • 点赞关注,最大鼓励
  • 持续更新,未完待续…
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PyQuant

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值