第二十八讲:波动率曲面在机器学习中的应用——预测曲面变化

各位同行,今天我们来聊一个我特别感兴趣的话题——怎么用机器学习去预测波动率曲面的变化。

说实话,我刚入行那会儿,曲面分析全靠手工画线、肉眼识别。后来数据量大了,手工根本搞不定。我记得2016年有一次,我盯着屏幕看了三个小时,就为了找曲面上的一个异常点。结果第二天市场就崩了,那个异常点其实是预警信号。从那以后,我就开始琢磨:能不能让机器替我们干这活?

为什么需要机器学习?

传统方法预测曲面,无非是参数化模型——比如SVI、SSVI这些。它们有理论支撑,但有个致命问题:假设太强

你想想看,市场情绪是活的,参数化模型却是死的。当市场出现极端行情时,那些模型往往第一个失效。我经历过几次,模型给出的曲面和实际交易价格差了十几个vega,那叫一个惨。

机器学习就不一样了。它不预设曲面长什么样,而是从数据中自己学。说白了,就是让数据说话。

核心思路:把曲面预测问题转化为时序预测问题。输入历史曲面数据,输出未来曲面形态。

数据准备——这一步最容易被忽视

我见过太多人一上来就调模型,结果数据都没洗干净。嗯,这里我要重点说一下。

曲面数据有几个特点:

  • 非均匀网格:不同期限、不同行权价的流动性不一样
  • 缺失值多:深度虚值、深度实值经常没报价
  • 噪声大:买卖价差、市场微观结构都会引入噪声

我个人习惯的做法是:

  1. 先用插值法把曲面映射到统一网格上(比如10个期限×10个行权价)
  2. 然后用PCA降维,提取主成分
  3. 最后把主成分序列作为模型的输入

为什么要降维?因为原始曲面有100个点,直接扔进模型,维度太高,容易过拟合。而且你想想看,曲面变化其实就几个自由度——水平、倾斜、曲率。PCA正好能抓住这些。

我的经验:前3个主成分通常能解释90%以上的方差。我一般只保留5个,再多就过拟合了。

模型选择——LSTM是主力

曲面变化是时序数据,所以RNN家族是首选。我个人最常用的是LSTM。

为什么是LSTM?因为曲面变化有长期依赖。比如VIX的均值回归特性,可能需要看过去60天的数据才能捕捉到。普通RNN记不住那么久。

下面是我常用的一个简单架构:

import torch
import torch.nn as nn

class SurfaceLSTM(nn.Module):
    def __init__(self, input_dim=5, hidden_dim=64, num_layers=2):
        super().__init__()
        self.lstm = nn.LSTM(
            input_size=input_dim,
            hidden_size=hidden_dim,
            num_layers=num_layers,
            batch_first=True,
            dropout=0.2
        )
        self.fc = nn.Linear(hidden_dim, input_dim)
        
    def forward(self, x):
        # x shape: (batch, seq_len, input_dim)
        out, _ = self.lstm(x)
        # 取最后一个时间步
        last_out = out[:, -1, :]
        pred = self.fc(last_out)
        return pred

这个模型输入的是过去N天的PCA主成分,输出的是未来一天的PCA主成分。然后再逆变换回曲面。

注意:我曾经犯过一个错误——直接用原始曲面数据训练。结果模型学到的全是噪声,预测的曲面平滑得跟假的一样。后来加了PCA降维,效果才正常。

特征工程——别只盯着曲面本身

曲面变化不是孤立的。它受很多因素影响:

特征类别 具体特征 我为什么用它
市场情绪 VIX、SKEW、PCR 反映恐慌和偏斜
流动性 买卖价差、成交量 价差大的地方,曲面容易失真
宏观 利率、汇率、原油 跨资产联动,不能忽视
技术指标 RSI、MACD、布林带 辅助判断趋势和反转

我建议把这些特征和PCA主成分拼接在一起,作为模型的输入。效果比只用曲面数据好不少。

训练策略——滚动预测

市场是时变的,模型也得跟着变。我不用固定训练集,而是用滚动窗口:

  • 窗口大小:252个交易日(一年)
  • 预测步长:1天、5天、20天
  • 重训练频率:每天收盘后

这样做的好处是模型能及时适应市场风格的变化。坏处是计算量大。不过现在GPU便宜,这点成本可以接受。

避坑指南:我曾经用固定训练集训练了一个模型,在2019年表现很好。结果2020年3月市场暴跌,模型完全失效。因为训练数据里没有包含类似的市场环境。从那以后,我再也不敢用固定训练集了。

评估指标——别只看MSE

MSE低不代表模型好用。我见过MSE很低的模型,但预测的曲面形态完全不对——比如把微笑预测成了 smirk。

我常用的评估指标:

  1. MSE/RMSE:基础指标,但不能只看这个
  2. MAE:对异常值更鲁棒
  3. 方向准确率:预测的曲面变化方向是否正确
  4. 交易模拟:用预测的曲面做Delta对冲,看实际盈亏

第4点最重要。模型好不好,最终要看能不能赚钱。我一般会做回测,模拟用预测曲面做期权交易,看夏普比率。

实战案例——预测VIX期货曲面

说个具体的。我曾经给一家对冲基金做过VIX期货曲面的预测模型。

VIX期货曲面有个特点:近月合约对现货敏感,远月合约更多反映预期。所以曲面形态变化很快。

我的做法是:

  • 输入:过去60天的VIX期货曲面(PCA降维到5维) + VIX现货 + 标普500指数
  • 模型:双层LSTM,隐藏层128
  • 输出:未来5天的曲面

效果怎么样?说实话,预测精度一般,MSE大概在0.3左右。但方向准确率有65%,用来做交易足够了。

我记得有一次,模型预测曲面会变陡(近月升水、远月贴水)。我当时不太信,因为市场很平静。结果第二天美联储突然放鹰,曲面果然变陡了。嗯,从那以后我对这个模型就多了几分信任。

局限性——机器学习不是万能的

说了这么多好处,也得泼泼冷水。

机器学习预测曲面有几个硬伤:

  • 尾部事件预测不了:黑天鹅在训练数据里没出现过,模型学不到
  • 过拟合风险高:曲面数据信噪比低,很容易学到噪声
  • 可解释性差:模型说曲面要变,但为什么变?说不清楚

我的建议是:把机器学习当作辅助工具,而不是决策依据。用它来生成预警信号,或者作为传统模型的补充。千万别全仓押注。

我的习惯:机器学习模型给出预测后,我会用SVI模型拟合一下,看看预测的曲面是否符合无套利条件。如果不符合,就弃用。

未来方向——图神经网络

最近我在尝试用图神经网络(GNN)来预测曲面。为什么?因为曲面本质上是一个图结构——不同期限、不同行权价之间是有关系的。

GNN能天然地捕捉这种关系。而且它不需要把曲面映射到统一网格,可以直接处理非均匀数据。

目前还在实验阶段,效果比LSTM好一些,但训练时间长了3倍。等有更多结果了,再跟大家分享。

波动率曲面机器学习预测流程 原始曲面数据 非均匀网格 数据预处理 插值+去噪 PCA降维 提取主成分 特征 拼接 辅助特征 VIX/流动性/宏观 LSTM时序预测模型 输入:历史主成分序列 → 输出:未来主成分 PCA逆变换 主成分 → 原始曲面 后处理:无套利检验 SVI拟合 + 套利条件检查 预测曲面 用于交易决策 滚动更新

好了,这一讲就到这里。机器学习预测曲面是个很有意思的方向,但路还很长。记住一点:模型是工具,市场是老师。别迷信模型,多观察市场,多思考背后的逻辑。


公众号:蓝海资料掘金营,微信deep3321