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

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

Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列(中):https://developer.aliyun.com/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。

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


相关文章
|
13天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品消费模式分析的深度学习模型
使用Python实现智能食品消费模式分析的深度学习模型
107 70
|
1月前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
15天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品消费习惯分析的深度学习模型
使用Python实现智能食品消费习惯分析的深度学习模型
117 68
|
11天前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费市场分析的深度学习模型
使用Python实现智能食品消费市场分析的深度学习模型
86 36
|
5天前
|
数据可视化 算法 数据挖掘
Python量化投资实践:基于蒙特卡洛模拟的投资组合风险建模与分析
蒙特卡洛模拟是一种利用重复随机抽样解决确定性问题的计算方法,广泛应用于金融领域的不确定性建模和风险评估。本文介绍如何使用Python和EODHD API获取历史交易数据,通过模拟生成未来价格路径,分析投资风险与收益,包括VaR和CVaR计算,以辅助投资者制定合理决策。
38 15
|
9天前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费趋势分析的深度学习模型
使用Python实现智能食品消费趋势分析的深度学习模型
58 18
|
18天前
|
测试技术 开发者 Python
使用Python解析和分析源代码
本文介绍了如何使用Python的`ast`模块解析和分析Python源代码,包括安装准备、解析源代码、分析抽象语法树(AST)等步骤,展示了通过自定义`NodeVisitor`类遍历AST并提取信息的方法,为代码质量提升和自动化工具开发提供基础。
32 8
|
2月前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
1月前
|
数据采集 存储 JSON
Python爬虫开发中的分析与方案制定
Python爬虫开发中的分析与方案制定
|
1月前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
108 7