15

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

 3 years ago
source link: https://zhuanlan.zhihu.com/p/279307120
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

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

波动率模型

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

  1. 确定性波动率模型

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

YBZBZf.png!mobile

其中 367FZjI.png!mobile 是时间序列的第t步, fi6vIja.png!mobile 是第t步的波动率。

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

2. 随机波动率模型

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

eia6737.png!mobile

其中 uQZRZf3.png!mobile 是对数收益率, ia2uayJ.png!mobileNN7nIjM.png!mobile 代表两个相关的Wiener过程,满足 YrUzyum.png!mobile

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

一般形式

设时间序列为 RfaARvF.png!mobile ,潜在的随机过程(latent stochastic process)为 IzyqMjJ.png!mobile ,那么波动率的process可以写做:

zmmM7rJ.png!mobile

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

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

Neural Stochastic Volatility Models

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

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

1.生成过程

7nm6nae.png!mobile2Yv6vq.png!mobile ,序列的 联合概率分布 可以写为:

其中 VfAvie2.png!mobile 代表生成网络的参数, Y3IJfyZ.png!mobile 的联合概率分布可写做:

VvAbayu.png!mobile

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

生成过程如下图所示:

AnMVrun.jpg!mobile

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

  • 自回归网络:如上图a所示,对于 ZfIZR3.png!mobile ,首先通过 aUJnAnm.png!mobile 得到 QraiAf7.png!mobile (RNN的输入为 EzQ7ram.png!mobile ),然后用 eQjMJre.png!mobile 从中得到先验分布的均值和方差,最后采样得到 ZfIZR3.png!mobile
  • 条件生成网络:如上图b所示,对于 367FZjI.png!mobile ,首先通过 ZJFriqV.png!mobile 得到隐状态 yeyYvuu.png!mobile (注意这里RNN的输入为 bMNre2F.png!mobile ),然后用 fQfyMjV.png!mobile 从中得到条件生成分布的均值和方差,最后采样得到 367FZjI.png!mobile

2.推断过程

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

其中 Q7beMfe.png!mobile 代表推断网络的参数。

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

推断过程如下图所示:

zyiymmz.jpg!mobile

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

3.目标函数

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

Nv6zimV.png!mobile

4.预测未来序列

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

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

MjqUFbj.png!mobile

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

具体步骤如下:

  1. 利用训练好的推断网络,得到 IzyqMjJ.png!mobile 的S条采样路径 yy6fmaq.png!mobile
  2. 利用自回归网络,计算下一时间步的潜变量分布 Azii63v.png!mobile ,采样得到 zum6F3Y.png!mobile
  3. 利用条件生成网络,计算下一时间步的序列值分布 bYb6nu.png!mobile
  4. 对所有路径求均值 R3Qbyyq.png!mobile

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

2EBZVnB.jpg!mobile

实验

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

数据处理

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

现在我们把样本的序列变为多变量的,设定一个参数d,从162个单变量序列中选d个出来,组成一个 d维变量的时间序列 ,用它作为一个样本,实验中设定d=6,这样最多就有 bYJNVrm.png!mobile 个样本,当然这里并不会构造这么多,大概只有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

模型设定

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

eYj6fif.jpg!mobile

训练阶段可以分为3步:

  1. 把历史序列 AFJryaZ.png!mobile 输入到推断网络当中,然后从中采样得到潜变量序列 vIRfauv.png!mobile
  2. vIRfauv.png!mobile 输入到条件生成网络当中,结合已知的前一步序列值 fa2Mreb.png!mobile ,逐时间步地给出重构序列的概率分布
  3. 计算真实序列在输出概率分布上的似然值,通过上文中的目标函数来对生成和推断网络进行训练。

预测阶段的流程图如下:

ueaaa2n.jpg!mobile

预测阶段可以分为3步:

  1. 把历史序列 AFJryaZ.png!mobile 输入到推断网络当中,然后从中采样得到潜变量序列 vIRfauv.png!mobile
  2. 利用自回归网络,输入潜变量序列 vIRfauv.png!mobile ,得到下一时间步的 JjERBnA.png!mobile
  3. 利用条件生成网络,预测下一时间步的 367FZjI.png!mobile

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

结果

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

B7nYzmj.jpg!mobile

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

qMjMNjr.jpg!mobile

总结

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

参考文献

[1] A neural stochastic volatility model


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK