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 综合评估:给曲面打分

三个维度都看完了,怎么给曲面一个「总评」?

我自己的做法是:

  1. 先看交叉验证:如果验证集误差比训练集大很多(比如大 30% 以上),说明过拟合严重。直接打回重做。
  2. 再看拟合误差:RMSE 控制在 1.5% 以内算合格,1% 以内算优秀。
  3. 最后看平滑度:二阶差分均值超过 0.5,说明曲面太「皱」了。需要增加平滑惩罚项。

一个实用的评分表:

维度 优秀 合格 不合格
RMSE < 1.0% 1.0% - 2.0% > 2.0%
交叉验证偏差 < 10% 10% - 20% > 20%
平滑度指标 < 0.3 0.3 - 0.5 > 0.5

最后提醒一句: 曲面质量评估不是一次性工作。市场在变,数据在变,曲面也要定期「体检」。我每周都会跑一遍评估流程,看看有没有新的偏差出现。别等到亏钱了才想起来检查曲面。


公众号:蓝海数据掘金营,微信deep3321