Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列(下)

简介: Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列

Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列(中):/article/1490525


我们绘制模型残差。

SPY最佳模型残差 ARMA(4, 4)

ACF 和 PACF 没有显示出显着的自相关。QQ 和概率图显示残差近似正态并带有重尾。然而,这个模型的残差看起来不像白噪声,可以看到模型未捕获的明显条件异方差(_条件波动性_)的突出显示区域。


自回归综合移动平均模型 - ARIMA(p, d, q)


ARIMA是ARMA模型类别的自然延伸。如前所述,我们的许多TS并不是平稳的,但是它们可以通过差分而成为平稳的。我们看到了一个例子,当我们采取Guassian随机游走的第一次差分,并证明它等于白噪声。换句话说,我们采取了非平稳的随机行走,并通过第一次差分将其转变为平稳的白噪声。

不用太深入地研究这个方程,只要知道 "d "是指我们对序列进行差分的次数。顺便提一下,在Python中,如果我们需要对一个序列进行多次差分,我们必须使用np.diff()函数。pandas函数DataFrame.diff()/Series.diff()只处理数据帧/序列的第一次差分,没有实现TSA中需要的递归差分。  

在下面的例子中,我们通过(p, d, q)订单的非显著数量的组合进行迭代,以找到适合SPY收益的最佳ARIMA模型。我们使用AIC来评估每个模型。最低的AIC获胜。

# 将ARIMA(p, d, q)模型适用于SPY收益
# 根据AIC选择最佳阶数和最终模型
for i in prng:
    for d in rng:
        for j in prng:
            try:
                tp_dl = ARIMAfit(lrs, orer=(i,d,j))
                if tpaic < betaic:
                    bestic = tmp_ic
                    bes_orer = (i, d, j)
                    bestl = tpmdl
# ARIMA模型的残差图
plot(resid, lags=30)

最好的模型的差值为 0 也就不足为奇了。回想一下,我们已经用对数价格的第一个差值来计算股票收益。下面,我绘制了模型残差。结果与我们上面拟合的 ARMA(4, 4) 模型基本相同。显然,这个 ARIMA 模型也没有解释序列中的条件波动!

拟合SPY收益的 ARIMA 模型


现在我们至少积累了足够的知识来对未来的收益进行简单的预测。这里我们使用我们模型的predict() 方法。作为参数,要预测的时间步数需要一个整数,alpha 参数需要一个小数来指定置信区间。默认设置为 95% 置信度。对于 99%,设置 alpha 等于 0.01。

# 创建一个具有95%、99%CI的21天SPY收益预测
n_steps = 21
fc9 =atFae(ncolmack(\[c99\])
                     inx=clus=\['wr\_ci99', upr\_ci_99')
fc_ll.head(

# 绘制21天的SPY收益预测图
ilc\[-500:\].cpy()
# 在样本预测中
prdct(side\[0\], t.id\[-1\])
plt(ax=x, stye=styes)

21 天SPY收益预测 - ARIMA(4,0,4)


自回归条件异方差模型 - ARCH(p)


ARCH(p) 模型可以简单地认为是应用于时间序列方差的 AR(p) 模型。另一种思考方式是,我们的时间序列 _在时间 t_的方差取决于对先前时期方差的过去观察。

ARCH(1) 模型公式


假设系列的均值为零,我们可以将模型表示为:

零均值的 ARCH(1) 模型


# 模拟ARCH(1)序列
# Var(yt) = a\_0 + a\_1\*y{t-1}\*\*2
# 如果a_1在0和1之间,那么yt就是白噪声
Y = np.epy_lik
for t in rng(ln()):
    Y\[t\] = w\[t * sqrt((a0 + a1\*y\[t-1\*\*2)
# 模拟的ARCH(1)序列,看起来像白噪声
plot(Y, lags=30)

模拟ARCH(1)过程


模拟ARCH(1)**2 过程


请注意 ACF 和 PACF 似乎在滞后 1 处显示显着性,表明方差的 AR(1) 模型可能是合适的。


广义自回归条件异方差模型 - GARCH(p,q)


简单地说,GARCH(p, q) 是一个应用于时间序列方差的 ARMA 模型,即它有一个自回归项和一个移动平均项。AR(p) 对残差的方差(平方误差)或简单地对我们的时间序列平方进行建模。MA(q) 部分对过程的方差进行建模。基本的 GARCH(1, 1) 公式是:

GARCH(1, 1) 公式


Omega (w) 是白噪声,alpha 和 beta 是模型的参数。此外 alpha\_1 + beta\_1 必须小于 1,否则模型不稳定。我们可以在下面模拟一个 GARCH(1, 1) 过程。

# 模拟一个GARCH(1, 1)过程
n = 10000
w = rnom.ral(sze=n)
eps = np.er_ike(w)
gsq =pzslie(w)
for i in rne1, n):
    sis\[i\] = a+ a1*(eps\[i-1\]\*\*2) + b1\*siq\[i-1\]
    es\[i\] = w\[i\] * srt(sisq\[i\])

模拟 GARCH(1, 1) 过程


再次注意到,总体上这个过程与白噪声非常相似,然而当我们查看平方的eps序列时,请看一下。

模拟 GARCH(1, 1) 过程平方


显然存在着自相关,ACF和PACF的滞后期的重要性表明我们的模型需要AR和MA。让我们看看我们是否能用GARCH(1, 1)模型恢复我们的过程参数。这里我们使用ARCH包中的arch_model函数。

# 将GARCH(1, 1)模型与我们模拟的EPS序列相匹配
# 我们使用arch函数
am = arch(ps)
fit(dae_freq=5)
summary())

GARCH 模型拟合摘要


现在让我们运行一个使用 SPY 收益的示例。过程如下:

  • 迭代 ARIMA(p, d, q) 模型的组合来拟合我们的时间序列。
  • 根据 AIC 最低的 ARIMA 模型选择 GARCH 模型阶数。
  • 将 GARCH(p, q) 模型拟合到我们的时间序列。
  • 检查模型残差和残差平方的自相关

另请注意,我选择了一个特定的时间段来更好地突出关键点。然而,根据研究的时间段,结果会有所不同。

for i in pq_g:
        for d in d_ng:
            for j in p_ng:
                try:
                    tpml = ARIMA(T,order(i,d,j).fi
                    
                    if tmp\_aic < best\_aic:
                        best_ic =mpac
                        best_oder = (i, d, j)
                        best\_ml =tm\_ml
# 注意我已经选择了一个特定的时间段来运行这个分析
bstmoel(TS)

拟合SPY收益的 ARIMA(3,0,2) 模型的残差


看起来像白噪声。

拟合SPY收益的 ARIMA(3,0,2) 模型的平方残差


平方残差显示自相关。让我们拟合一个 GARCH 模型。

# 现在我们可以使用最适合的arima模型参数来拟合arch模型
p_ = bst_dr
o= st_orde
q = bst_er
# 使用学生T分布通常能提供更好的拟合
arcd(TS, p=p_, o=o_, q=q_, 'StdensT')
fit(uat_eq=5, sp='ff')
summary

GARCH(3, 2) 模型拟合SPY收益


在处理非常小的数字时,会出现收敛警告。在必要时,将数字乘以10倍的系数以扩大幅度,可以起到帮助作用,但是对于这个演示来说,没有必要这样做。下面是模型的残差。

拟合SPY收益的 GARCH(3, 2) 模型残差


上面看起来像白噪声。现在让我们查看平方残差的 ACF 和 PACF。

我们已经实现了良好的模型拟合,因为平方残差没有明显的自相关。


相关文章
|
1天前
|
机器学习/深度学习 数据可视化 PyTorch
使用Python实现深度学习模型:自动编码器(Autoencoder)
使用Python实现深度学习模型:自动编码器(Autoencoder)
8 0
|
1天前
|
存储 数据挖掘 数据处理
使用Python将数据表中的浮点数据转换为整数:详细教程与案例分析
使用Python将数据表中的浮点数据转换为整数:详细教程与案例分析
7 2
|
1天前
|
前端开发 JavaScript TensorFlow
如何将训练好的Python模型给JavaScript使用?
本文介绍了如何将TensorFlow模型转换为Web格式以实现浏览器中的实际应用。首先,简述了已有一个能够检测扑克牌的TensorFlow模型,目标是将其部署到Web上。接着,讲解了TensorFlow.js Converter的作用,它能将Python API创建的GraphDef模型转化为TensorFlow.js可读取的json格式,用于浏览器中的推理计算。然后,详细说明了Converter的安装、用法及不同输入输出格式,并提供了转换命令示例。最后,文中提到了模型转换后的实践步骤,包括找到导出的模型、执行转换命令以及在浏览器端部署模型的流程。
17 3
|
1天前
|
索引 Python
【Python操作基础】——序列
【Python操作基础】——序列
|
1天前
|
机器学习/深度学习 TensorFlow API
Python深度学习基于Tensorflow(3)Tensorflow 构建模型
Python深度学习基于Tensorflow(3)Tensorflow 构建模型
70 2
|
1天前
|
语音技术 开发者 Python
python之pyAudioAnalysis:音频特征提取分析文档示例详解
python之pyAudioAnalysis:音频特征提取分析文档示例详解
16 0
|
1天前
|
数据可视化 大数据 Python
python大数据分析处理
python大数据分析处理
12 0
|
1天前
|
机器学习/深度学习 人工智能 大数据
AI时代Python金融大数据分析实战:ChatGPT让金融大数据分析插上翅膀
AI时代Python金融大数据分析实战:ChatGPT让金融大数据分析插上翅膀
|
1天前
|
机器学习/深度学习 自然语言处理 算法
Python遗传算法GA对长短期记忆LSTM深度学习模型超参数调优分析司机数据|附数据代码
Python遗传算法GA对长短期记忆LSTM深度学习模型超参数调优分析司机数据|附数据代码
|
1天前
|
Python Perl
Python中的字符串分析:判断字符串中是否包含字母
Python中的字符串分析:判断字符串中是否包含字母
11 0
http://www.vxiaotou.com