10. 二维插值:双线性插值、双三次插插值、径向基函数插值
好,我们终于来到了插值这个环节。说实话,在期权波动率曲面构建里,插值是最容易出幺蛾子的地方。你前面数据清洗得再漂亮,模型选得再对,插值手法一糙,整个曲面就崩了。
我个人习惯把插值分成两类:一类是“老老实实”的局部插值,比如双线性和双三次;另一类是“有点魔法”的全局插值,比如径向基函数。今天咱们就把这三兄弟挨个盘一遍。
10.1 双线性插值:最朴素的曲面填充
双线性插值,说白了就是“在四个点围成的矩形里,猜中间的值”。它假设曲面在局部是线性的,所以计算量极小,速度飞快。
数学原理很简单:
假设你有四个已知点:(x1, y1), (x1, y2), (x2, y1), (x2, y2),对应的函数值是 f11, f12, f21, f22。你想求 (x, y) 处的值。
第一步:在 x 方向做两次线性插值。
f1 = (x2 - x)/(x2 - x1) * f11 + (x - x1)/(x2 - x1) * f21
f2 = (x2 - x)/(x2 - x1) * f12 + (x - x1)/(x2 - x1) * f22
第二步:在 y 方向再做一次线性插值。
f = (y2 - y)/(y2 - y1) * f1 + (y - y1)/(y2 - y1) * f2
嗯,这里要注意:双线性插值不是“两次线性插值”的简单叠加,而是“先x后y”或者“先y后x”,结果是一样的。
适用场景:
- 数据点分布均匀,网格规整
- 对实时性要求高(比如高频交易中的快速定价)
- 曲面变化平缓,没有剧烈波动
避坑指南:
我曾经在构建短期期权波动率曲面时,直接用双线性插值。结果在临近到期日时,曲面出现了明显的“锯齿状”不连续。后来才发现,双线性插值只保证函数值连续,不保证导数连续。对于短期期权,波动率变化剧烈,这种不连续会直接导致对冲参数(希腊字母)出现跳跃。
10.2 双三次插值:平滑才是王道
双线性插值不够平滑?那就上双三次。它用16个相邻点(4x4网格)来拟合一个三次多项式,保证函数值和一阶导数都连续。
核心公式长这样:
f(x, y) = Σᵢ₌₀³ Σⱼ₌₀³ aᵢⱼ xⁱ yʲ
其中 aᵢⱼ 是16个系数,需要通过已知点的函数值、x方向导数、y方向导数和混合偏导数来求解。听着复杂,但好在大多数编程库(比如 SciPy 的 RectBivariateSpline)都帮你封装好了。
我的经验:
在构建沪深300ETF期权的波动率曲面时,我对比过双线性和双三次。双三次插值生成的曲面肉眼可见地更“顺滑”,而且计算出来的希腊字母(Delta、Gamma)也更稳定。代价就是计算量大了不少——不过对于日频的曲面构建来说,完全不是问题。
什么时候用双三次?
- 你需要计算希腊字母,且要求导数连续
- 数据点比较密集,网格规整
- 曲面本身比较光滑(比如长期期权)
注意:
双三次插值有个“副作用”——它可能会在数据稀疏的区域产生过冲(overshoot),也就是插值出来的值比所有已知点都大或都小。这在波动率曲面里是致命的,因为负的波动率或者过高的波动率都会导致定价错误。
10.3 径向基函数插值:不规则网格的救星
前面两种插值都要求数据点落在规整的网格上。但现实中的期权数据呢?行权价和到期日往往是不规则的。这时候,径向基函数(RBF)插值就派上用场了。
RBF 的核心思想:
用一系列“基函数”的加权和来拟合曲面。每个基函数只依赖于点到某个中心点的距离(径向距离)。
f(x, y) = Σᵢ wᵢ · φ(||(x, y) - (xᵢ, yᵢ)||)
其中 φ 是径向基函数,常见的有:
- 高斯函数: φ(r) = exp(-ε²r²)
- 多二次函数: φ(r) = √(1 + ε²r²)
- 薄板样条: φ(r) = r² log(r)
ε 是形状参数,控制基函数的“胖瘦”。这个参数很关键——调大了曲面会过拟合,调小了又太平滑。
RBF 的优势:
- 不要求数据点规整排列
- 可以处理高维数据(虽然我们这里只用二维)
- 生成的曲面非常光滑(理论上无限可导)
我踩过的坑:
有一次用 RBF 插值构建商品期权的波动率曲面,选的是高斯函数。结果曲面在远月合约处出现了“驼峰”——明明已知点都是平的,插值出来却鼓了个包。后来发现是形状参数 ε 没调好。我建议你:先用交叉验证选 ε,别凭感觉拍脑袋。
10.4 三种方法对比
| 特性 | 双线性插值 | 双三次插值 | 径向基函数插值 |
|---|---|---|---|
| 数据要求 | 规整网格 | 规整网格 | 任意分布 |
| 平滑度 | C⁰(函数连续) | C¹(一阶导连续) | C∞(无限可导) |
| 计算速度 | 极快 | 较快 | 较慢(需解线性方程组) |
| 过冲风险 | 低 | 中 | 高(取决于参数) |
| 适用场景 | 实时计算、网格规整 | 需要希腊字母、网格规整 | 数据不规则、追求平滑 |
10.5 知识体系图
下面这张图帮你理清三种插值方法的选择逻辑:
10.6 实战建议
说了这么多,到底怎么选?我个人有个“三问法”:
- 你的数据点在网格上吗? 不在 → 直接上 RBF。在 → 看第二问。
- 你需要计算希腊字母吗? 需要 → 双三次。不需要 → 看第三问。
- 你的数据量大吗? 大(比如每秒更新)→ 双线性。不大 → 双三次。
最后提醒一句:没有万能的方法。我在项目中经常是先用 RBF 做一次全局拟合,再用双三次在局部做微调。两种方法结合,效果往往比单一方法好得多。
核心要点回顾:
- 双线性:快,但不平滑,适合实时计算
- 双三次:平滑,导数连续,适合网格规整的数据
- RBF:灵活,适合不规则数据,但需要调参
- 实际项目中,可以组合使用多种方法
好了,插值这块就聊到这儿。记住:插值只是手段,不是目的。我们的目标是构建一个合理、稳定、可交易的波动率曲面。方法选对了,事半功倍;选错了,后面所有的工作都是白搭。
公众号:蓝海资料掘金营,微信deep3321