Press "Enter" to skip to content

基于VAE的波动率模型——NSVM模型浅析

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

对于不确定性的准确估计是金融领域一直追求的目标,而价格变化的波动率通常被用来作为不确定性的度量,因此波动率估计在投资、估值、风险管理和货币政策制定等金融领域中都是非常重要的。这篇文章将会介绍一种利用变分自动编码器(Variational Auto-Encoders,VAE)来估计波动率的模型——NSVM,其整体思路主要是参考我前一篇文章中介绍过的VRNN和SRNN模型,建议没看过文章的同学先看一下。

段易通:生成时间序列的VAE——VRNN与SRNN模型浅析 ​ zhuanlan.zhihu.com

波动率模型

 

在金融领域中,用来估计和预测波动率的模型被叫做 波动率模型 ,我们可以用它来描述波动率的动态变化。在介绍NSVM之前,我们先简单地总结一下金融领域中常见的波动率模型,一般按照确定性和随机性而分成两类:确定性波动率模型(Deterministic Volatility Models)和随机波动率模型(Stochastic Volatility Models)。

 

 

    1. 确定性波动率模型

 

 

这类模型认为未来的波动率与已知的历史信息具有确定的关系,例如非常经典的GARCH模型:

 

 

其中 是时间序列的第t步, 是第t步的波动率。

 

在GARCH的基础上还有很多衍生模型,这类模型都是确定性的波动率模型。

 

2. 随机波动率模型

 

这类模型认为波动率是并不是确定的,例如经典的Heston模型,模型的dynamic为:

 

 

其中 是对数收益率, 代表两个相关的Wiener过程,满足

 

可以看出,这类模型的波动率是由一个潜在的随机过程 来决定的。

 

一般形式

 

设时间序列为 ,潜在的随机过程(latent stochastic process)为 ,那幺波动率的process可以写做:

 

 

我们可以对 稍作一些限制,让它们在给定历史的条件下服从高斯分布,即有如下的自回归形式:

 

 

这里说一下采用这种自回归的潜在随机过程的原因:首先我们认为一支股票的波动率不会仅仅受到自身的影响,还会受到外部环境的作用,而且外部环境也是一直在变化的,因此我们用一个潜在随机过程 来表示它;另外相比于i.i.d,基于历史的自回归方式更适合于具有一定历史依赖性的时间序列。

 

Neural Stochastic Volatility Models

 

接下里就正式开始介绍NSVM,对于上面的自回归形式,其实看过之前那篇文章后就会发现,它其实就是序列VAE的生成过程:先从一个已知历史信息的 先验分布 中采样得到潜变量 ,再根据由历史信息和 确定的 条件生成分布 中采样得到生成样本 。这样一来,序列VAE自然而然地就可以作为一个波动率模型。

 

和前一篇文章类似,我们还是从 生成和推断 两部分来看:

 

1.生成过程

 

,序列的 联合概率分布 可以写为:

 

 

其中 代表生成网络的参数, 的联合概率分布可写做:

 

 

我们 用RNN的隐层状态 来代表历史信息 ,则可以得到生成网络:

 

 

生成过程如下图所示:

简单说一下两个子网络的流程:

自回归网络:如上图a所示,对于 ,首先通过 得到 (RNN的输入为 ),然后用 从中得到先验分布的均值和方差,最后采样得到
条件生成网络:如上图b所示,对于 ,首先通过 得到隐状态 (注意这里RNN的输入为 ),然后用 从中得到条件生成分布的均值和方差,最后采样得到

2.推断过程

 

对于潜变量 ,我们认为它 与历史 以及整个序列 都有关 ,因此近似后验分布可以写为:

 

 

其中 代表推断网络的参数。

 

为了能够捕捉到 的信息,我们用一个自回归RNN和一个双向RNN来构建推断网络:

 

 

推断过程如下图所示:

简单说一下流程:先用 捕捉到整个序列 的信息,然后通过包含有 信息的 得到隐状态 ,接着通过 得到近似后验分布的均值和方差,最后从该正态分布中采样得到 ,即推断出

 

3.目标函数

 

NSVM的目标函数如下,虽然形式不同,但其实将 展开后,与前一篇文章中的序列VAE的目标函数是一致的。

 

 

4.预测未来序列

 

作为一个波动率模型,NSVM除了要对时间序列进行建模以外,还需要能够基于历史信息来对未来做出 预测 ,接下来就利用NSVM,从历史序列 中生成未来一步的

 

思路也很简单,只需要计算:

 

 

其中 是后验分布,可以由推断网络来代替; 可以通过自回归网络得到;而 可以通过条件生成网络来得到。

 

具体步骤如下:

 

 

    1. 利用训练好的推断网络,得到

    1. 的S条采样路径

    1. 利用自回归网络,计算下一时间步的潜变量分布

    1. ,采样得到

    1. 利用条件生成网络,计算下一时间步的序列值分布

    1. 对所有路径求均值

 

这样我们就通过蒙特卡洛的方法估计出了 的概率分布,可以看出该分布是 由S个高斯分布混合而成的 。如果接下来继续要做多步预测的话,就从这个分布中采样得到 ,然后重复上面的步骤,如下面的算法所示。

实验

 

为了验证这个波动率模型的有效性,论文在真实的股票序列上进行了实验,这次稍微详细介绍一下实验。

 

数据处理

 

原始数据是162支来自中国A股的日频close价格序列,每个序列都是单变量的,选择的股票都是2006年或更早上市、且停牌时间小于50天的,这样就能尽可能地减小于由于序列不够长或数值缺失而引起的噪声;对于缺失的数据,这里用了stochastic regression imputation来进行填充(在前20天数据拟合出来的高斯分布中采样填充); 采用对数收益率,即 ,并对其做归一化。

 

现在我们把样本的序列变为多变量的,设定一个参数d,从162个单变量序列中选d个出来,组成一个 d维变量的时间序列 ,用它作为一个样本,实验中设定d=6,这样最多就有 个样本,当然这里并不会构造这幺多,大概只有2000条样本;时间序列的长度是2570(大约7年),其中前2000步作为训练集,剩下的570步作为测试集。

 

baseline模型

 

确定性波动率模型:

Quadratic models: ARCH(1)、 GARCH(1,1)、GJR-GARCH(1,1,1)
Absolute value models: AVARCH(1)、AVGARCH(1,1)、TARCH(1,1,1)
Exponential models: EARCH(1)、EGARCH(1,1)

随机波动率模型:

MCMC volatility model: stochvol
Gaussian process volatility model: GP-Vol

模型设定

 

具体参数这里就不说了,这里主要说一下模型在实验中是如何做训练和预测的。训练阶段的流程图如下

训练阶段可以分为3步:

 

 

    1. 把历史序列

    1. 输入到推断网络当中,然后从中采样得到潜变量序列

    1. 输入到条件生成网络当中,结合已知的前一步序列值

    1. ,逐时间步地给出重构序列的概率分布

 

    1. 计算真实序列在输出概率分布上的似然值,通过上文中的目标函数来对生成和推断网络进行训练。

 

 

预测阶段的流程图如下:

预测阶段可以分为3步:

 

 

    1. 把历史序列

    1. 输入到推断网络当中,然后从中采样得到潜变量序列

    1. 利用自回归网络,输入潜变量序列

    1. ,得到下一时间步的

    1. 利用条件生成网络,预测下一时间步的

 

 

在实验中模型会连续重复步骤20次,预测出未来20步的序列,然后再扩充训练集序列长度并重新训练模型。

 

结果

 

下图是NSVM与其它baseline模型在测试集上的预测结果,这里采用的评价指标是negative log-likelihood (NLL),其中-diag和-corr分别代表对角矩阵和rank-1 perturbation的两种协方差矩阵(即方差网络输出的协方差 可以取这两种形式)。可以看出,NSVM-corr的表现优于其它baseline模型。

下图模型在真实股票序列上的波动率建模结果,可以看出NSVM在适度价格波动(moderate price fluctuation)的区间上更稳定(如[1600,2250]),而在剧烈变化的地方更敏感(如2250之后),而且NSVM的非线性性质也令其能快速适应当前的波动水平,而GARCH则会衰退得慢一些(如[1000,2000])。

总结

 

对比前一篇文章中的那两个序列VAE模型,可以发现这次的NSVM其实就是VRNN和SRNN的融合版本,它的自回归网络来自于VRNN,而推断网络中的双向RNN则来自于SRNN。通过baseline中的随机波动率模型,可以看出潜变量在波动率模型当中是很常见的,因此序列VAE这种引入了潜变量序列的模型确实也比较贴合这个金融问题。

 

参考文献

 

[1] A neural stochastic volatility model

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注