26. 曲面质量评估:回测框架,曲面预测能力检验,模型风险度量
曲面建好了,参数也调了,然后呢?
说实话,很多团队卡在这一步。模型跑起来漂亮,一上实盘就翻车。我见过太多这样的案例了。曲面质量评估,说白了就是给你的波动率曲面做一次「压力测试」。
回测框架:别让历史数据骗了你
回测不是跑一遍历史就完事。我个人习惯把回测分成三层:
- 样本内拟合:检查曲面能否复现历史报价
- 样本外预测:用过去的数据预测未来一天的曲面
- 动态滚动回测:每天滚动窗口,模拟真实交易环境
我曾经犯过一个低级错误——用全量数据做参数拟合,结果回测曲线漂亮得像教科书。但一换到样本外,误差直接翻倍。嗯,这就是典型的过拟合。
核心指标:
- RMSE(均方根误差):衡量整体偏差
- MAE(平均绝对误差):对异常值更鲁棒
- MAPE(平均绝对百分比误差):看相对误差更直观
曲面预测能力检验
检验预测能力,我常用两个方法。
方法一:时间序列交叉验证
别用随机打乱!时间序列有顺序依赖。我建议用「滚动窗口法」:
# 伪代码示例
for day in range(start_date, end_date):
train_data = data[:day] # 历史数据
test_data = data[day] # 当天数据
# 拟合曲面参数
params = fit_surface(train_data)
# 预测当天曲面
predicted_surface = predict_surface(params, test_data.maturity, test_data.strike)
# 计算预测误差
error = compute_error(predicted_surface, test_data.iv)
# 记录误差序列
errors.append(error)
方法二:极端情景测试
你想想看,平时误差小不代表什么。关键要看市场剧烈波动时,你的曲面还能不能扛得住。
我记得有一次做测试,选了2020年3月那波暴跌。很多模型在平稳期表现完美,一到波动率飙升就彻底崩了。曲面预测值跟实际报价差了30%以上。
我的经验:至少准备3个极端情景:
- 波动率尖峰(如黑天鹅事件)
- 期限结构倒挂(短期波动率高于长期)
- 偏斜急剧变化(虚值期权波动率异常)
模型风险度量
模型风险,说白了就是「你以为模型是对的,其实它错了」。我把它分成三类:
| 风险类型 | 来源 | 度量方法 |
|---|---|---|
| 参数风险 | 参数估计不稳定 | 参数置信区间、bootstrap |
| 结构风险 | 模型假设不成立 | 模型比较测试(如SVI vs SABR) |
| 外推风险 | 曲面外推区域不可靠 | 外推误差边界分析 |
参数风险:我最常用的方法是bootstrap。把历史数据重采样1000次,每次重新拟合参数。看参数分布是否集中。如果参数标准差太大,说明模型不稳定。
结构风险:这个比较隐蔽。比如你用SVI模型,但市场实际是随机波动率驱动的。怎么办?我建议做「模型残差分析」——如果残差有系统性模式,说明模型结构有问题。
避坑指南:我曾经遇到一个案例,模型在95%的情况下表现优异,但剩下5%的误差大到离谱。后来发现是模型对深度虚值期权的处理有问题。所以别只看平均误差,要关注误差分布的尾部。
知识体系图:曲面质量评估流程
实战中的几个坑
坑一:回测周期太短
我见过有人只用3个月数据做回测。结果模型在测试集上表现完美,但一上线就崩。为什么?因为3个月里市场只有一个状态。至少要用1年以上的数据,而且要包含不同市场环境。
坑二:忽略交易成本
曲面预测误差1%看起来不大,但加上买卖价差、滑点,实际交易成本可能吃掉所有收益。我建议在回测中模拟真实交易环境,包括流动性限制。
坑三:过度优化
你想想看,如果你有100个参数,总能找到一组让历史数据拟合完美的值。但这样的模型到了实盘,基本就是灾难。我个人的原则是:参数越少越好,能用3个参数就别用5个。
总结一下:曲面质量评估不是一次性工作。我建议建立自动化监控系统,每天检查曲面预测误差。如果连续3天误差超过阈值,就要重新校准模型。别等到亏钱了才想起来检查。
公众号:蓝海资料掘金营,微信deep3321