第二十八讲:波动率曲面在机器学习中的应用——预测曲面变化
各位同行,今天我们来聊一个我特别感兴趣的话题——怎么用机器学习去预测波动率曲面的变化。
说实话,我刚入行那会儿,曲面分析全靠手工画线、肉眼识别。后来数据量大了,手工根本搞不定。我记得2016年有一次,我盯着屏幕看了三个小时,就为了找曲面上的一个异常点。结果第二天市场就崩了,那个异常点其实是预警信号。从那以后,我就开始琢磨:能不能让机器替我们干这活?
为什么需要机器学习?
传统方法预测曲面,无非是参数化模型——比如SVI、SSVI这些。它们有理论支撑,但有个致命问题:假设太强。
你想想看,市场情绪是活的,参数化模型却是死的。当市场出现极端行情时,那些模型往往第一个失效。我经历过几次,模型给出的曲面和实际交易价格差了十几个vega,那叫一个惨。
机器学习就不一样了。它不预设曲面长什么样,而是从数据中自己学。说白了,就是让数据说话。
核心思路:把曲面预测问题转化为时序预测问题。输入历史曲面数据,输出未来曲面形态。
数据准备——这一步最容易被忽视
我见过太多人一上来就调模型,结果数据都没洗干净。嗯,这里我要重点说一下。
曲面数据有几个特点:
- 非均匀网格:不同期限、不同行权价的流动性不一样
- 缺失值多:深度虚值、深度实值经常没报价
- 噪声大:买卖价差、市场微观结构都会引入噪声
我个人习惯的做法是:
- 先用插值法把曲面映射到统一网格上(比如10个期限×10个行权价)
- 然后用PCA降维,提取主成分
- 最后把主成分序列作为模型的输入
为什么要降维?因为原始曲面有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。
我常用的评估指标:
- MSE/RMSE:基础指标,但不能只看这个
- MAE:对异常值更鲁棒
- 方向准确率:预测的曲面变化方向是否正确
- 交易模拟:用预测的曲面做Delta对冲,看实际盈亏
第4点最重要。模型好不好,最终要看能不能赚钱。我一般会做回测,模拟用预测曲面做期权交易,看夏普比率。
实战案例——预测VIX期货曲面
说个具体的。我曾经给一家对冲基金做过VIX期货曲面的预测模型。
VIX期货曲面有个特点:近月合约对现货敏感,远月合约更多反映预期。所以曲面形态变化很快。
我的做法是:
- 输入:过去60天的VIX期货曲面(PCA降维到5维) + VIX现货 + 标普500指数
- 模型:双层LSTM,隐藏层128
- 输出:未来5天的曲面
效果怎么样?说实话,预测精度一般,MSE大概在0.3左右。但方向准确率有65%,用来做交易足够了。
我记得有一次,模型预测曲面会变陡(近月升水、远月贴水)。我当时不太信,因为市场很平静。结果第二天美联储突然放鹰,曲面果然变陡了。嗯,从那以后我对这个模型就多了几分信任。
局限性——机器学习不是万能的
说了这么多好处,也得泼泼冷水。
机器学习预测曲面有几个硬伤:
- 尾部事件预测不了:黑天鹅在训练数据里没出现过,模型学不到
- 过拟合风险高:曲面数据信噪比低,很容易学到噪声
- 可解释性差:模型说曲面要变,但为什么变?说不清楚
我的建议是:把机器学习当作辅助工具,而不是决策依据。用它来生成预警信号,或者作为传统模型的补充。千万别全仓押注。
我的习惯:机器学习模型给出预测后,我会用SVI模型拟合一下,看看预测的曲面是否符合无套利条件。如果不符合,就弃用。
未来方向——图神经网络
最近我在尝试用图神经网络(GNN)来预测曲面。为什么?因为曲面本质上是一个图结构——不同期限、不同行权价之间是有关系的。
GNN能天然地捕捉这种关系。而且它不需要把曲面映射到统一网格,可以直接处理非均匀数据。
目前还在实验阶段,效果比LSTM好一些,但训练时间长了3倍。等有更多结果了,再跟大家分享。
好了,这一讲就到这里。机器学习预测曲面是个很有意思的方向,但路还很长。记住一点:模型是工具,市场是老师。别迷信模型,多观察市场,多思考背后的逻辑。
公众号:蓝海资料掘金营,微信deep3321