原文链接:http://tecdat.cn/?p=24092
前言
在量化金融中,我学习了各种时间序列分析技术以及如何使用它们。
通过发展我们的时间序列分析 (TSA) 方法组合,我们能够更好地了解已经发生的事情,_并对_未来做出更好、更有利的预测。示例应用包括预测未来资产收益、未来相关性/协方差和未来波动性。
在我们开始之前,让我们导入我们的 Python 库。
import pandas as pd import numpy as np
让我们使用pandas包通过 API 获取一些示例数据。
# 原始调整后的收盘价 daa = pdDatrme({sx(sm)for sm i syos}) # 对数收益率 ls = log(dta/dat.sit(1)).dropa()
基础知识
什么是时间序列?
时间序列是按时间顺序索引的一系列数据点。——Wikipedia
平稳性
为什么我们关心平稳性?
- 平稳时间序列 (TS) 很容易预测,因为我们可以假设未来的统计属性与当前的统计属性相同或成比例。
- 我们在 TSA 中使用的大多数模型都假设协方差平稳。这意味着这些模型预测的描述性统计数据(例如均值、方差和相关性)仅在 TS 平稳时才可靠,否则无效。
“例如,如果序列随着时间的推移不断增加,样本均值和方差会随着样本规模的增加而增长,并且他们总是会低估未来时期的均值和方差。如果一个序列的均值和方差是没有明确定义,那么它与其他变量的相关性也不是。”
话虽如此,我们在金融中遇到的大多数 TS 都不是平稳的。因此,TSA 的很大一部分涉及识别我们想要预测的序列是否是平稳的,如果不是,我们必须找到方法将其转换为平稳的。(稍后会详细介绍)
自相关
本质上,当我们对时间序列建模时,我们将序列分解为三个部分:趋势、季节性/周期性和随机。随机分量称为残差或误差。它只是我们的预测值和观察值之间的差异。序列相关是指我们的 TS 模型的残差(误差)彼此相关。
为什么我们关心序列相关性?
我们关心序列相关性,因为它对我们模型预测的有效性至关重要,并且与平稳性有着内在的联系。回想一下,根据定义,_平稳_TS的残差(误差)是连续_不相关_的!如果我们在我们的模型中没有考虑到这一点,我们系数的标准误差就会被低估,从而夸大了我们的 T 统计量。结果是太多的 1 类错误,即使原假设为真,我们也会拒绝原假设!通俗地说,忽略自相关意味着我们的模型预测将是胡说八道,我们可能会得出关于模型中自变量影响的错误结论。
白噪声和随机游走
白噪声是我们需要了解的第一个时间序列模型(TSM)。根据定义,作为白噪声过程的时间序列具有连续不相关的误差,这些误差的预期平均值等于零。对连续不相关的误差的另一种描述是,独立和相同分布(i.i.d.)。这一点很重要,因为如果我们的TSM是合适的,并且成功地捕捉了基本过程,我们模型的残差将是i.i.d.,类似于白噪声过程。因此,TSA的一部分实际上是试图将一个模型适合于时间序列,从而使残差序列与白噪声无法区分。
让我们模拟一个白噪声过程并查看它。下面我介绍一个方便的函数,用于绘制时间序列和直观地分析序列相关性。
我们可以轻松地对白噪声过程进行建模并输出 TS 图检查。
np.random.seed(1) # 绘制离散白噪声的曲线 ads = radooral(size=1000) plot(ads, lags=30)
高斯白噪声
我们可以看到该过程似乎是随机的并且以零为中心。自相关 (ACF) 和偏自相关 (PACF) 图也表明没有显着的序列相关。请记住,我们应该在自相关图中看到大约 5% 的显着性,这是由于从正态分布采样的纯偶然性。下面我们可以看到 QQ 和概率图,它们将我们的数据分布与另一个理论分布进行了比较。在这种情况下,该理论分布是标准正态分布。显然,我们的数据是随机分布的,并且应该遵循高斯(正常)白噪声。
p("nmean: {:.3f}\\{:.3f}\\stde: {:.3f}" .format(ademean(), nerva(), der.td()))
随机游走的意义在于它是非平稳的,因为观测值之间的协方差是时间相关的。如果我们建模的 TS 是随机游走,则它是不可预测的。
让我们使用“random”函数从标准正态分布中采样来模拟随机游走。
# 没有漂移的随机行走 np.rao.sed(1) n = 1000 x = w = np.aonral(size=n) for t in rnge(_sples): x\[t\] = x\[t-1\] + w\[t\] splt(x, las=30)
无漂移的随机行走
显然,我们的 TS 不是平稳的。让我们看看随机游走模型是否适合我们的模拟数据。回想一下随机游走是xt = xt-1 + wt。使用代数我们可以说xt - xt-1 = wt。因此,我们随机游走系列的第一个差异应该等于白噪声过程,我们可以在我们的 TS 上使用“ np.diff()” 函数,看看这是否成立。
# 模拟的随机游走的第一个差值 plt(p.dffx), las=30)
随机行走的一阶差分
我们的定义成立,因为这看起来与白噪声过程完全一样。如果我们对 SPY 价格的一阶差分进行随机游走会怎么样?
点击标题查阅往期内容
R语言ARIMA-GARCH波动率模型预测股票市场苹果公司日收益率时间序列
01
02
03
04
# SPY价格的一阶差分 plt(diff(dt.PY), lag=30)
将随机行走模型拟合到ETF价格
它与白噪声非常相似。但是,请注意 QQ 和概率图的形状。这表明该过程接近正态分布,但具有“重尾”。 ACF 和 PACF 在滞后 1、5?、16?、18 和 21 附近似乎也存在一些显着的序列相关性。这意味着应该有更好的模型来描述实际的价格变化过程。
线性模型
线性模型又称趋势模型,代表了一个可以用直线作图的TS。其基本方程为。
在这个模型中,因变量的值由β系数和一个单一的自变量--时间决定。一个例子是,一家公司的销售额在每个时间段都会增加相同的数量。让我们来看看下面的一个特制的例子。在这个模拟中,我们假设坚定的ABC公司在每个时间段的销售额为-50.00元(β0或截距项)和+25.00元(β1)。
# 模拟线性趋势 # 例子 公司ABC的销售额默认为-50元,在每个时间步长为+25元 w = n.anom.ann(100) y = nppt_lke(w) b0 = -50. b1 = 25. for t in rge(lnw)): y\[t\] = b0 + b1*t + w\[t\] plt(y, lags=ls)
线性趋势模型模拟
在这里我们可以看到模型的残差是相关的,并且作为滞后的函数线性减少。分布近似正态。在使用此模型进行预测之前,我们必须考虑并消除序列中存在的明显自相关。PACF 在滞后 1 处的显着性表明_自回归_ 模型可能是合适的。
对数线性模型
这些模型与线性模型类似,只是数据点形成了一个指数函数,代表了相对于每个时间步的恒定变化率。例如,ABC公司的销售额在每个时间步长增加X%。当绘制模拟的销售数据时,你会得到一条看起来像这样的曲线。
# 模拟ABC的指数式增长 # 日期 pdat_rge('2007-01-01', '2012-01-01', freq='M') # 假设销售额以指数速度增长 ale = \[exp( x/12 ) for x inage1, len(id)+1)\] # 创建数据框架并绘图 df = d.ataame(sals, ix=x) plt()
模拟指数函数
然后我们可以通过采用销售额的自然对数来转换数据。现在线性回归拟合数据。
# ABC对数销售 indexid.plot()
指数函数的自然对数
如前所述,这些模型有一个致命的弱点。它们假设连续不相关的误差,正如我们在线性模型的例子中看到的那样。在现实生活中,TS数据通常会违反我们的平稳假设,这使我们转向自回归模型。
自回归模型 - AR(p)
当因变量针对自身的一个或多个滞后值进行回归时,该模型称为自回归模型。公式如下所示:
AR (P) 模型
当您描述 模型的“阶”时,例如阶“p”的 AR 模型, p 表示模型中使用的滞后变量的数量。例如,AR(2) 模型或_二阶_自回归模型如下所示:
AR (2) 模型
这里,alpha (a) 是系数,omega (w) 是白噪声项。在 AR 模型中,Alpha 不能等于 0。请注意,alpha 设置为 1 的 AR(1) 模型是_随机游走_ ,因此不是平稳的。
AR(1) 模型,ALPHA = 1;随机漫步
让我们模拟一个 alpha 设置为 0.6 的 AR(1) 模型
# 模拟一个α=0.6的AR(1)过程 rndm.sed(1) n_sams = int(1000) a = 0.6 x = w = n.amma(siz=_apes) for t in rane(n_saps): x\[t\] = a*x\[t-1\] + w\[t\] plot(x, gs=lgs)
Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列(中):https://developer.aliyun.com/article/1490525?spm=a2c6h.13148508.setting.33.658d4f0eueN6WO