12. 波动率曲面主成分分析:降维与因子分解
做波动率交易的人,每天面对的是什么?
一个三维的曲面。期限结构、执行价偏移、时间衰减……信息量太大了。我刚开始做这块的时候,盯着屏幕上的曲面,说实话有点懵。这么多点,怎么抓主要矛盾?
后来我接触了主成分分析(PCA),说白了,就是帮我们把几十个、上百个波动率点,压缩成几个核心因子。你想想看,这不就是我们交易员最需要的吗?
为什么需要降维?
波动率曲面不是随便乱动的。它有规律。
我举个例子。你观察VIX期货的波动率曲面,会发现大部分时间,整个曲面一起上、一起下。这叫「水平移动」。其次,短期和长期的波动率会分化,这叫「斜率变化」。再精细一点,价外和价内的波动率会扭曲,这叫「曲率变化」。
这三个因子,基本解释了曲面90%以上的变动。剩下的,基本是噪声。
核心观点: 波动率曲面的变动,本质上是少数几个隐含因子的线性组合。PCA就是帮我们找到这些因子。
PCA的数学直觉
我不跟你扯太深的线性代数。你只需要知道:
- 我们有一堆历史数据,每个时间点是一个曲面快照
- PCA找到数据方差最大的方向,作为第一主成分
- 然后找与第一主成分正交、方差次大的方向,作为第二主成分
- 以此类推
嗯,这里要注意:PCA对数据的尺度很敏感。我建议你在做之前,先把每个期限的波动率做标准化处理。否则,长期限的波动率因为数值大,会主导结果。
实战:用Python对VIX曲面做PCA
直接上代码。这是我个人习惯的写法,清晰明了。
import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
# 假设我们有一个DataFrame:行是时间,列是不同期限的波动率
# 比如:1M, 2M, 3M, 6M, 9M, 12M
df = pd.read_csv('vix_term_structure.csv', index_col=0, parse_dates=True)
# 标准化
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)
# PCA
pca = PCA()
pca.fit(df_scaled)
# 查看解释方差比
explained_ratio = pca.explained_variance_ratio_
print(f'前3个主成分解释方差:{explained_ratio[:3].sum():.2%}')
我在项目中遇到过一个问题:直接用原始数据做PCA,第一主成分的解释方差高达95%以上。后来发现,是因为所有期限的波动率都在同步上涨。标准化之后,第二、第三主成分才真正显现出来。
解读主成分
跑完PCA,我们得到了什么?
| 主成分 | 解释方差比 | 经济含义 |
|---|---|---|
| PC1 | 约70-80% | 水平因子:整个曲面平行移动 |
| PC2 | 约10-15% | 斜率因子:短期vs长期分化 |
| PC3 | 约5-8% | 曲率因子:价外vs价内扭曲 |
你看,三个因子加起来,基本覆盖了曲面变动的90%以上。剩下的,我个人认为可以当作噪声处理。
小技巧: 你可以把主成分的载荷向量画出来。载荷向量的形状,直接告诉你每个因子是怎么影响曲面的。比如PC1的载荷在所有期限上都是正的,说明它是水平因子。
因子分解的实际应用
有了这三个因子,我们能做什么?
- 风险归因: 你的波动率交易组合,到底暴露在哪个因子上?是赌水平变动,还是赌斜率变动?
- 对冲优化: 用少数几个期货合约,对冲整个曲面的风险。我曾经用这个方法,把对冲成本降低了30%。
- 信号提取: 主成分的时间序列本身,就是很好的交易信号。比如PC1的均值回归特性,可以用来做波动率择时。
避坑指南: 我曾经犯过一个错误——直接用PCA做预测。PCA是降维工具,不是预测模型。它的主成分是历史数据的线性组合,不代表未来。如果你想预测,请用PCA提取特征后,再套用时间序列模型。
可视化:主成分载荷结构
下面这张图,展示了三个主成分在不同期限上的载荷分布。你可以直观地看到,PC1是水平的,PC2是倾斜的,PC3是弯曲的。
你看,PC1的载荷几乎是一条水平线,说明它影响所有期限。PC2从负到正,说明它让短期和长期反向变动。PC3中间高两边低,说明它主要影响中期。
我的经验总结
做PCA这么多年,我总结了几条心得:
- 不要贪多: 三个主成分就够了。加第四个,解释方差只增加2-3%,但噪声却多了不少。
- 滚动窗口: 我建议用滚动窗口做PCA,比如过去252个交易日。因为市场结构会变,固定窗口会滞后。
- 结合业务: PCA的结果一定要能解释。如果某个主成分的载荷乱七八糟,说明数据有问题,或者市场在发生结构性变化。
最后说一句:PCA不是万能的。它假设数据是线性的,而且对异常值敏感。但作为降维工具,它在波动率曲面分析中,确实是最实用的方法之一。
一句话总结: 波动率曲面的主成分分析,就是把几十个点的曲面,压缩成水平、斜率、曲率三个因子。这三个因子,就是你交易的核心武器。
公众号:蓝海资料掘金营,微信deep3321