19. 曲面质量评估:拟合误差分析、交叉验证、曲面平滑度指标
曲面建好了,心里踏实吗?
说实话,我见过太多人把曲面一画完就交差。结果实盘一跑,期权定价偏差大得离谱。曲面质量评估,说白了就是给你的曲面做一次「体检」。不查清楚,后面所有策略都是空中楼阁。
19.1 拟合误差分析:看看偏差在哪
拟合误差,就是模型预测的隐含波动率,和市场上真实报价反推出来的波动率之间的差距。这个差距,我习惯叫它「残差」。
核心指标:
- RMSE(均方根误差):最常用。对大的偏差惩罚更狠。我个人觉得,RMSE 超过 2 个 vol 点,这个曲面就得重新调。
- MAE(平均绝对误差):更直观。比如 MAE 是 0.5%,意味着平均每个点偏差半个 vol 点。
- Max Error(最大误差):看最坏情况。我曾经遇到过一个曲面,RMSE 很好看,但某个深度虚值期权误差高达 8%。这种「暗雷」最要命。
我一般会画一张残差热力图。横轴是期限,纵轴是行权价,颜色深浅代表误差大小。一眼就能看出哪里「水土不服」。
# 伪代码示例:计算拟合误差
def compute_fit_errors(market_vol, model_vol):
residuals = market_vol - model_vol
rmse = np.sqrt(np.mean(residuals**2))
mae = np.mean(np.abs(residuals))
max_err = np.max(np.abs(residuals))
return {'RMSE': rmse, 'MAE': mae, 'MaxError': max_err}
我的小习惯: 不光看整体误差,还要按「期限-行权价」分组看。比如近月平值期权误差通常很小,但远月深度虚值可能偏差很大。分组看,才能找到问题根源。
19.2 交叉验证:别让曲面「过拟合」
曲面拟合太「用力」,反而会坏事。你想想看,如果模型把市场噪音都学进去了,换一组数据立马露馅。这就是过拟合。
怎么防?交叉验证。
我常用的方法是 K 折交叉验证。把数据分成 K 份,每次拿 K-1 份训练,1 份验证。循环 K 次,取平均误差。
实操建议:
- 对于期权曲面,我建议 K=5 或 K=10。数据量少的话,K=3 也行。
- 特别注意:不要随机打乱数据。期权数据有期限结构,乱序会破坏时间序列特性。我习惯按「交易日」分组,保证验证集是「未来」的数据。
# 伪代码:时间序列交叉验证
def time_series_cv(data, n_splits=5):
# 按日期排序
dates = sorted(data['trade_date'].unique())
fold_size = len(dates) // n_splits
for i in range(n_splits):
train_dates = dates[: (i+1)*fold_size]
test_dates = dates[(i+1)*fold_size : (i+2)*fold_size]
yield train_dates, test_dates
避坑指南: 我曾经犯过一个错——用全部数据拟合,然后随机抽样做交叉验证。结果验证误差很好看,但实盘一跑就崩。原因就是「数据泄露」:未来信息被混进了训练集。记住,期权数据必须按时间顺序切分。
19.3 曲面平滑度指标:别让曲面「长刺」
一个合格的波动率曲面,应该是「光滑」的。什么意思?就是相邻的行权价之间、相邻的期限之间,波动率变化不能太突兀。
如果曲面不平滑,会出现什么后果?
- 套利机会:相邻行权价之间出现「尖刺」,理论上可以无风险套利。但实际中这种套利很难执行,反而说明模型有问题。
- Greeks 不稳定:Delta、Gamma 这些风险指标会剧烈跳动,没法用。
我常用的平滑度指标有两个:
| 指标 | 含义 | 理想范围 |
|---|---|---|
| 二阶差分均值 | 衡量曲面「曲率」大小 | 越接近 0 越好 |
| 总变差 (Total Variation) | 衡量曲面「抖动」程度 | 越小越平滑 |
# 计算曲面平滑度
def surface_smoothness(vol_surface):
# 二阶差分(行权价方向)
d2K = np.diff(vol_surface, n=2, axis=1)
# 二阶差分(期限方向)
d2T = np.diff(vol_surface, n=2, axis=0)
smoothness = np.mean(np.abs(d2K)) + np.mean(np.abs(d2T))
return smoothness
我的经验: 平滑度和拟合误差是一对「冤家」。你越追求平滑,拟合误差可能越大;你越追求精确拟合,曲面可能越「毛糙」。怎么平衡?我一般设一个惩罚项,在损失函数里同时考虑误差和平滑度。说白了,就是「既要又要」。
19.4 一张图看懂评估流程
下面这张 SVG 图,是我自己总结的曲面质量评估全流程。每次做完曲面,我就按这个流程走一遍,心里才有底。
19.5 综合评估:给曲面打分
三个维度都看完了,怎么给曲面一个「总评」?
我自己的做法是:
- 先看交叉验证:如果验证集误差比训练集大很多(比如大 30% 以上),说明过拟合严重。直接打回重做。
- 再看拟合误差:RMSE 控制在 1.5% 以内算合格,1% 以内算优秀。
- 最后看平滑度:二阶差分均值超过 0.5,说明曲面太「皱」了。需要增加平滑惩罚项。
一个实用的评分表:
| 维度 | 优秀 | 合格 | 不合格 |
|---|---|---|---|
| RMSE | < 1.0% | 1.0% - 2.0% | > 2.0% |
| 交叉验证偏差 | < 10% | 10% - 20% | > 20% |
| 平滑度指标 | < 0.3 | 0.3 - 0.5 | > 0.5 |
最后提醒一句: 曲面质量评估不是一次性工作。市场在变,数据在变,曲面也要定期「体检」。我每周都会跑一遍评估流程,看看有没有新的偏差出现。别等到亏钱了才想起来检查曲面。
公众号:蓝海数据掘金营,微信deep3321