当前位置: 首页 > news >正文

量化投资基础(四)之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

  • 写作不易,切勿白剽
  • 点赞关注,最大鼓励
  • 持续更新,未完待续…

相关文章:

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

点赞、关注&#xff0c;养成良好习惯 Life is short, U need Python 量化投资基础系列&#xff0c;不断更新中 1 引言 时间序列经典模型主要有: 自回归模型&#xff08;Auto Regressive&#xff0c;AR&#xff09;移动回归模型&#xff08;Moving Average&#xff0c;MA&…...

LVS(Linux Virtual Server)详解

LVS&#xff08;Linux Virtual Server&#xff09;是一个用于负载均衡的开源软件项目&#xff0c;旨在通过集群技术实现高性能、高可用的服务器系统。它运行在Linux操作系统上&#xff0c;并且可以利用内核级的资源来提高性能和稳定性。 思维导图 LVS的工作原理 LVS主要基于Ne…...

uniapp版本更新除了plus.runtime.getProperty的解决办法

以下是展示图 带尺寸的图片: 首先把以下代码放到想要更新弹出的页面 //template部分<uni-popup ref"popup" background-color"#fff"><versionUp handleCloseVersion"closeVersion"></versionUp></uni-popup>//script…...

MySQL笔记-基础篇(二):多表查询

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 前言 MySQL的多表查询是一项非常实用的数据库操作技术&#xff0c;它能够通过关联不同表中的数据来提供更加丰富和准确的信息。在实际应用中&#xff0c;数据通常不是孤立存在的&#xff0c;而是分布在多个…...

备战秋招60天算法挑战,Day15

题目链接&#xff1a; https://leetcode.cn/problems/minimum-window-substring/ 视频题解&#xff1a; https://www.bilibili.com/video/BV1sJ4m1g727/ LeetCode 76. 最小覆盖子串 题目描述 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s …...

【学习笔记】Matlab和python双语言的学习(整数规划和0-1规划)

文章目录 前言一、整数规划和0-1规划二、典型示例1.背包问题2.指派问题 三、代码实现----Matlab1.Matlab 的 intlinprog 函数2.Matlab 代码背包问题指派问题 四、代码实现----python背包问题指派问题 总结 前言 通过模型算法&#xff0c;熟练对Matlab和python的应用。 学习视频…...

【连续4届EI检索,SPIE 出版】第五届信号处理与计算机科学国际学术会议(SPCS 2024,8月23-25)

第五届信号处理与计算机科学国际学术会议&#xff08;SPCS 2024) 将于2024年8月23-25日在中国哈尔滨举行。会议主要围绕信号处理与计算机科学等研究领域展开讨论。 会议旨在为从事信号处理与计算机科学研究的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技…...

Vue屏蔽Console.Log打印信息

Vue屏蔽打印信息 安装 npm install uglifyjs-webpack-plugin --save-dev 在vue.config.js文件或者webpack.prod.conf.js中配置 vue.config中 const UglifyJsPlugin require(uglifyjs-webpack-plugin) // 屏蔽打印数据 module.exports {optimization: {minimizer: [new Ugl…...

数据结构之《二叉树》(下)

在二叉树(中)了解了堆的相关概念后还实现了堆&#xff0c;并且还实现了堆排序&#xff0c;以及解决了TOP-K问题。接下来在本篇中将继续学习二叉树中的链式结构&#xff0c;会学习二叉树中的前、中、后三种遍历并实现链式结构的二叉树&#xff0c;接下来就开始本篇的学习吧&…...

用Python打造精彩动画与视频,9.3 项目案例分享与反思

第九章&#xff1a;综合项目 9.3 项目案例分享与反思 在本节中&#xff0c;我们将分享几个成功的项目案例&#xff0c;并进行反思总结。这些案例将展示如何将前面所学的Python技术运用于实际项目中&#xff0c;同时我们将讨论项目中的挑战和解决方案&#xff0c;以及从中得到…...

分布式主键 详解

文章目录 雪花算法结合分库分表的问题问题出现原因分析解决思路 分布式主键要考虑的问题主键生成策略雪花算法详解时间戳位问题工作进程位问题序列号位问题根据雪花算法扩展基因分片法 雪花算法结合分库分表的问题 问题出现 使用ShardingSphere框架自带的雪花算法生成分布式主…...

synchronzed为什么要升级为重量级锁,轻量级锁不好吗?

轻量级锁和重量级锁各有其适用场景和优缺点。轻量级锁旨在减少在无竞争情况下的同步开销&#xff0c;而重量级锁则在竞争激烈的情况下确保线程的同步。以下是为什么在某些情况下需要将轻量级锁升级为重量级锁的原因&#xff0c;以及轻量级锁的不足之处&#xff1a; 为什么需要…...

.NET 项目中发送电子邮件异步处理和错误机制的解决方案

在 .NET 中处理电子邮件&#xff0c;可以使用多种技术和库来实现高效的电子邮件发送、接收和管理。以下是一些常见的解决方案和最佳实践&#xff1a; 目录 1. 使用 SMTP 发送电子邮件 2. 使用 IMAP/POP3 接收电子邮件 3. 异步处理电子邮件 4. 处理大型邮件队列 5. 错误处…...

如何在银河麒麟操作系统上搭建 Electron (含 Electron 打包指南)

本次教程所用版本 Eletron版本&#xff1a;31.3.1 Electron-packager版本&#xff1a;17.1.2 VScode版本&#xff1a;1.92.0 Node版本&#xff1a;18.19.0 npm版本&#xff1a;10.2.3 前言&#xff1a; 随着跨平台应用开发的需求日益增长&#xff0c;Electron 和 Qt 成为…...

小怡分享之数据结构基础知识准备

前言&#xff1a; &#x1f308;✨之前小怡给大家分享了JavaSE的知识&#xff0c;今天小怡要给大家分享一下数据结构基础知识。 一、初识集合框架 1.什么是集合框架 Java集合框架Java Collection Framework&#xff0c; 又称为容器container&#xff0c;是定义在Java.util 包…...

Linux安全与高级应用(三)深入探索MySQL数据库:安装、管理与安全实践

文章目录 深入探索MySQL数据库&#xff1a;安装、管理与安全实践MySQL数据库简介MySQL的安装与配置编译安装MySQL配置MySQL服务 MySQL数据库的基本操作数据库的创建与删除表的创建与管理数据记录的增删改查 MySQL用户管理与权限设置MySQL数据库的备份与恢复数据库备份数据库恢复…...

基于jsp的宠物领养与服务管理系统(源码+论文+部署讲解等)

博主介绍&#xff1a;✌全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术栈介绍&#xff1a;我是程序员阿龙&#xff…...

基于STM32F407+NBIOT+华为云IOT平台设计的环境检测系统

基于STM32F407NBIOT华为云IOT平台设计的环境检测系统实现的功能&#xff1a; 【1】能够采集本地环境的温度、湿度、烟雾浓度&#xff0c;火光信息&#xff0c;在OLED显示屏上显示。 如果检测到烟雾、温度、火光超过阀值会触发蜂鸣器报警。 【2】能够通过NBIOT将本地设备采集的信…...

工具方法 - 如何表扬小孩子

赞扬小朋友的表现可以通过多种方法来进行&#xff0c;以鼓励他们的积极行为和努力&#xff0c;增强他们的自信心和动力。以下是一些有效的赞扬方法&#xff1a; 1. 具体表扬&#xff1a;指出具体的行为或成就&#xff0c;而不是泛泛地说“你很棒”。例如&#xff0c;“你今天很…...

【扒模块】DySample

逐行注释 import torch import torch.nn as nn import torch.nn.functional as F import warnings# 忽略警告信息&#xff0c;这通常用于开发过程中&#xff0c;避免警告干扰输出结果 warnings.filterwarnings(ignore)# 定义一个函数&#xff0c;用于对神经网络模块的权重进行…...

数学建模之数据分析【四】:变量及其分析

文章目录 一、单变量数据1.1 单变量数据1.2 单变量分析的要点&#xff1a; 二、双变量数据2.1 双变量数据2.2 双变量分析的要点 三、多元数据3.1 多元数据3.2 多元分析的要点 四、单变量&#xff0c;双变量和多变量数据之间的区别 公众号/小红书: 快乐数模 CSDN: 清上尘 本文&a…...

iOS ------ UIKit相关

UIView和CALayer UIView UIView表示屏幕上的一块矩形区域&#xff0c;它是基本上iOS中所有可视化控件的父类。UIView可以管理矩形区域里的内容&#xff0c;处理矩形区域的事件&#xff0c;包括子视图的管理以及动画的实现。 UIKit相关类的继承关系 UIView继承自UIResponde…...

24/8/9算法笔记 随机森林

"极限森林"&#xff08;Extremely Randomized Trees&#xff0c;简称ERT&#xff09;是一种集成学习方法&#xff0c;它属于决策树的变体&#xff0c;通常被归类为随机森林&#xff08;Random Forest&#xff09;的一种。极限森林的核心思想是在构建决策树时引入极端…...

如何在前后端分离项目中,使用Spring Security

使用 WebSecurityConfigurationAdapter 在前后端分离的架构中&#xff0c;通常使用 Token 进行认证和授权是一种常见的做法。Token 可以是 JSON Web Token&#xff08;JWT&#xff09;&#xff0c;用于在客户端和服务器之间传递身份信息和访问控制信息。下面我将详细介绍如何在…...

c#怎么折叠代码快捷

在C#中&#xff0c;‌你可以使用快捷键来折叠或展开代码&#xff0c;‌以便更好地管理和浏览代码。‌以下是一些常用的快捷键&#xff1a;‌ 折叠所有方法&#xff1a;‌使用Ctrl M O。‌折叠或展开当前方法&#xff1a;‌使用Ctrl M M。‌展开所有方法&#xff1a;‌使用…...

数据库篇--八股文学习第十七天| 什么是慢查询?原因是什么?可以怎么优化?;undo log、redo log、binlog 有什么用?

1、什么是慢查询&#xff1f;原因是什么&#xff1f;可以怎么优化&#xff1f; 答&#xff1a; 数据库查询的执行时间超过指定的超时时间时&#xff0c;就被称为慢查询。 原因&#xff1a; 查询语句比较复杂&#xff1a;查询涉及多个表&#xff0c;包含复杂的连接和子查询&…...

插件、cookie存储,json,ajax详解

1.插件 下载地址&#xff1a;http://github.com/carhartl/jquery-cookie/zipball/v1.4.1 使用文档&#xff1a;jquery-cookie(github.com) 2.存储 初学前端用的是localStorage和sessionStorage&#xff0c;后来又引入了cookie进行存储。 localStorage使用如下 sessionStor…...

快速上手Spring Boot

快速上手Spring Boot (qq.com)...

思路超清晰的 LVS-NAT 模式实验部署

目录 一、实验原理 1、实验基础配置图 2、实验原理 二、实验环境准备 1、准备四台红帽9的主机 2、四台主机的基础配置 &#xff08;1&#xff09;client 1&#xff09;配置主机名&#xff1a;client 2&#xff09;配置ip:172.25.254.200 &#xff08;2&#xff09;lv…...

Android实时通信:WebSocket与WebRTC的应用与优化

文章目录 一、WebSocket在Android中的应用1.1 简介1.2 示例 二、WebRTC在Android中的应用2.1 简介2.2 示例 三、Android实时通信的优化策略3.1 网络优化3.2 延迟降低 四、Android实时通信的安全问题五、实时通信协议的比较六、总结 在现代移动应用中&#xff0c;实时通信已经成…...