前言
在量化金融中,我学习了各种时间序列分析技术以及如何使用它们。
通过发展我们的时间序列分析 (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)
Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列2:https://developer.aliyun.com/article/1485071