第 21 章 正交函数与小波平滑
本章对应 Wasserman 原书第 21 章《Smoothing Using Orthogonal Functions》。第 20 章用"局部平均"做平滑;本章换一个角度:把未知函数展开成一组正交基函数的线性组合,估计系数,再只保留一部分系数。保留多少项就是平滑参数,偏差–方差权衡以"截断偏差 + 系数方差"的形式重新出现。本章最后介绍小波:它是一组同时在时间和尺度上局部化的基函数,特别适合处理"大部分地方平滑、个别地方突变"的信号——价格序列中的跳跃正是这种信号。本章对量化的价值主要在两处:小波去噪与多尺度分析,以及 MAD 稳健尺度估计。
学习目标
- 理解 \(L_2\) 空间、标准正交基、Parseval 关系,知道"函数越光滑,高阶系数衰减越快"。
- 会用正交级数估计密度和回归函数:系数用样本均值估计,截断项数 \(J\) 由无偏风险估计选择。
- 理解正交级数置信带的构造(\(\chi^2\) + Cauchy–Schwarz),以及它针对的是截断后的函数。
- 理解 Haar 小波、多分辨率分析、离散小波变换(DWT),会实现通用阈值去噪与 MAD 噪声估计。
- 能在价格序列中用小波定位跳跃,并知道双边平滑在交易中引入前视偏差的风险。
读前导读
这一章在解决什么问题
结论:本章换一种方式做平滑——先把曲线拆成一组标准"零件"的加权和,再只保留重要的零件。
最接近的金融类比是主成分分析(PCA)与收益率曲线。国债收益率曲线的变动可以拆成"水平、斜率、曲率"三个互不相关的成分,前三个成分解释了绝大部分变动,后面的成分多半是噪声,于是只保留前三个。本章做的是同一件事,只不过对象是一条曲线(密度或回归函数),"成分"是事先选好的一组标准函数(余弦波、多项式或小波),每个成分的权重(系数)从数据中估计。保留多少个成分,就是第 20 章说的平滑参数,偏差–方差权衡照样存在:保留太少丢了信号(偏差),保留太多带进噪声(方差)。
小波是一种特别的"零件":每个零件只在一小段区间上有值。这让它能在价格跳跃处保留细节、在平稳段去掉噪声,所以适合高频数据中的跳跃检测与去噪。本章还顺带给出一个在数据清洗中天天会用的工具:用中位数绝对偏差(MAD)稳健地估计波动率。
需要先想起来的数学
1. 向量内积与正交。 \(\langle v,w\rangle=\sum_iv_iw_i\)。内积为零称为正交,可以理解为"两个方向互不相关"。例:\((1,1)\) 与 \((1,-1)\) 内积为 \(1-1=0\)。坐标 \(\beta_j=\langle\phi_j,v\rangle\) 就是 \(v\) 在 \(\phi_j\) 方向上的投影长度。参见 第 00 册第 06 章 线性代数速成(更系统的内积与正交理论见第 01 册)。
2. 积分作为"连续求和"。 把向量的 \(\sum_i\) 换成函数的 \(\int dx\),内积就成了 \(\int f(x)g(x)dx\)。例:\(\int_0^1\sqrt2\cos(\pi x)\cdot1\,dx=\frac{\sqrt2}{\pi}\sin(\pi x)\Big|_0^1=0\),所以 \(\phi_1\) 与常数函数正交。参见 第 00 册第 03 章 积分。
3. 无穷级数的收敛。 \(f=\sum_{j=1}^\infty\beta_j\phi_j\) 的意思是部分和越来越接近 \(f\)。系数平方和 \(\sum\beta_j^2\) 有限,要求 \(\beta_j\) 衰减得足够快,例如 \(\beta_j=1/j\) 时 \(\sum1/j^2=\pi^2/6\) 有限。参见 第 00 册第 04 章 级数与收敛。
4. \(\chi^2\) 分布与 Cauchy–Schwarz 不等式。 \(J\) 个独立标准正态的平方和服从 \(\chi^2_J\),均值为 \(J\)。Cauchy–Schwarz:\(\big|\sum a_jb_j\big|\le\sqrt{\sum a_j^2}\sqrt{\sum b_j^2}\),例:\(a=(1,2)\)、\(b=(3,4)\),左边 11,右边 \(\sqrt5\times5\approx11.18\)。它在金融里的影子是"相关系数不超过 1"。参见 第 00 册第 07 章 概率中的分析工具 的常用不等式。
怎么读这一章
核心必读:21.1.1(从向量到函数的类比、Parseval)、21.1.3(光滑 ⟹ 系数快速衰减)、21.3 的回归风险 (21.25) 与算法、21.4.1–21.4.3(小波为什么好、阈值化、MAD)、21.5 实战与"交易中的注意事项"。21.1.2 的 Legendre 多项式、21.2 的密度估计细节、两个置信带定理的证明第一次可以只看结论。21.4.4 的 DWT 可以结合下文讲解框里的四点小例子读。建议顺序:21.1 → 21.3 → 21.4 → 21.5,最后补 21.2。
21.1 正交函数与 \(L_2\) 空间
21.1.1 从向量到函数
三维向量 \(v=(v_1,v_2,v_3)\) 有内积 \(\langle v,w\rangle=\sum_iv_iw_i\) 和范数 \(\|v\|=\sqrt{\langle v,v\rangle}\)。\(\phi_1=(1,0,0)\)、\(\phi_2=(0,1,0)\)、\(\phi_3=(0,0,1)\) 是一组标准正交基(orthonormal basis):两两正交、长度为 1、张成全空间。任何向量都可以写成 \(v=\sum_j\beta_j\phi_j\),系数 \(\beta_j=\langle\phi_j,v\rangle\) 就是 \(v\) 在 \(\phi_j\) 上的投影。标准正交基不唯一。例如
把向量换成函数、求和换成积分,就得到函数空间
Parseval 关系:
推导拆解:Parseval 为什么成立?把 \(f=\sum_j\beta_j\phi_j\) 代入 \(\int f^2\),得 \(\int\big(\sum_j\beta_j\phi_j\big)\big(\sum_k\beta_k\phi_k\big)=\sum_j\sum_k\beta_j\beta_k\int\phi_j\phi_k\)(展开乘积,再把积分与求和交换)。标准正交性说 \(\int\phi_j\phi_k\) 在 \(j=k\) 时为 1、否则为 0,于是交叉项全部消失,只剩 \(\sum_j\beta_j^2\)。
把 \(f\) 换成误差 \(\hat f-f\),系数换成 \(\hat\beta_j-\beta_j\),就得到"函数误差 = 系数误差平方和"。
金融直觉:这和"互不相关的因子,组合方差等于各因子贡献之和"是同一个结构:\(\mathbb V\big(\sum_jw_jF_j\big)=\sum_jw_j^2\mathbb V F_j\) 成立,正是因为协方差(交叉项)为零。正交基就是函数世界里"互不相关的因子"。
21.1.2 常用基
余弦基(例 21.1)。 \(L_2(0,1)\) 上 \(\phi_0(x)=1\),\(\phi_j(x)=\sqrt2\cos(j\pi x)\),\(j\ge1\)。\(j\) 越大振荡越快。本章以下默认用余弦基。
Legendre 多项式(例 21.3)。 \([-1,1]\) 上
例 21.2(Doppler 函数)。
21.1.3 系数衰减与光滑性
若 \(f=\sum_j\beta_j\phi_j\)(余弦基),逐项求导可得
推导拆解:为什么会出现 \((\pi j)^{2k}\)?对 \(\sqrt2\cos(j\pi x)\) 求一次导数,用链式法则得 \(-\sqrt2\,j\pi\sin(j\pi x)\):振幅乘上了 \(j\pi\)。求 \(k\) 次导,振幅乘 \((j\pi)^k\),函数在余弦与正弦之间切换但仍两两正交。再用 Parseval(平方后求和),每项多出 \((j\pi)^{2k}\)。
数值感受:若 \(\int(f')^2<\infty\)(\(k=1\)),就需要 \(\sum_j\beta_j^2j^2<\infty\)。\(\beta_j=1/j\) 时这个和是 \(\sum1\),发散,不行;\(\beta_j=1/j^2\) 时是 \(\sum1/j^2\),收敛,可以。所以导数存在的函数,系数至少要比 \(1/j^{1.5}\) 衰减得快。练习 4 的 \(\sin(\pi x)\) 系数按 \(1/j^2\) 衰减,正是这个量级。
21.2 正交级数密度估计
\(X_1,\dots,X_n\) IID,密度 \(f\) 在 \([0,1]\) 上,\(f=\sum_{j\ge0}\beta_j\phi_j\),其中 \(\beta_0=\int f\phi_0=1\)。注意 \(\beta_j=\int f\phi_j=\mathbb E\phi_j(X)\) 是一个期望,自然的估计是样本均值:
定理 21.4。 \(\mathbb E\hat\beta_j=\beta_j\),\(\mathbb V\hat\beta_j=\sigma_j^2/n\),其中 \(\sigma_j^2=\mathbb V\phi_j(X)=\int(\phi_j(x)-\beta_j)^2f(x)dx\)。
把所有估计系数都用上会让方差无穷大。改用截断估计
定理 21.5。 由 Parseval 关系,
推导拆解:(21.15) 两项的来源。估计误差 \(\hat f-f=\sum_{j\le J}(\hat\beta_j-\beta_j)\phi_j-\sum_{j>J}\beta_j\phi_j\):前一段是"估计了但估不准",后一段是"根本没估,直接当成 0"。由 Parseval,\(\int(\hat f-f)^2=\sum_{j\le J}(\hat\beta_j-\beta_j)^2+\sum_{j>J}\beta_j^2\)。取期望,\(\mathbb E(\hat\beta_j-\beta_j)^2=\mathbb V\hat\beta_j=\sigma_j^2/n\)(无偏估计的均方误差就是方差),即得。
动机里的等式用的是 \(\mathbb EX^2=(\mathbb EX)^2+\mathbb VX\):观测到的系数平方总是"真信号平方 + 噪声方差",所以要减掉噪声部分。这和用样本 Sharpe 比率估计真实 Sharpe 平方时要扣掉估计噪声是同一个道理。
白话解释:\(\hat R(J)\) 就是"保留前 \(J\) 项要付的噪声成本"加上"丢掉后面各项损失的信号"。增加一项,成本固定增加 \(\sigma_j^2/n\),收益是 \(\beta_j^2\);信号大于噪声就值得保留。
算法。 (1) 算 \(\hat\beta_j\);(2) 在 \(1\le J\le\sqrt n\) 上选 \(J\) 最小化 \(\hat R(J)\);(3) \(\hat f=1+\sum_{j\le J}\hat\beta_j\phi_j\)。\(\hat f\) 可能为负,若需要合法密度,可取 \(\hat f^*=\max(\hat f,0)/\int\max(\hat f,0)\)。
定理 21.6(置信带)。 用 \(J\) 项时,估计的实际上是 \(f_J=\sum_{j\le J}\beta_j\phi_j\)。\(f_J\) 的近似 \(1-\alpha\) 置信带为
推导拆解:证明分三步。
- 整体误差 \(L\):每个 \(\hat\beta_j-\beta_j\approx\frac{\sigma_j}{\sqrt n}\epsilon_j\),平方相加得 \(\frac1n\sum\sigma_j^2\epsilon_j^2\)。把每个 \(\sigma_j^2\) 放大到上界 \(K^2\),得 \(L\lesssim\frac{K^2}{n}\sum\epsilon_j^2=\frac{K^2}{n}\chi^2_J\)。这一步给出"系数误差平方和"以 \(1-\alpha\) 概率不超过多少。
- 从系数误差到曲线误差:在任一点 \(x\),\(|\hat f_J(x)-f_J(x)|=\big|\sum_j\phi_j(x)(\hat\beta_j-\beta_j)\big|\),先用三角不等式(和的绝对值 ≤ 绝对值的和),再用 \(|\phi_j(x)|\le K\)。
- Cauchy–Schwarz 把 \(\sum_{j=1}^J|\hat\beta_j-\beta_j|\)(\(J\) 个数的和)控制成 \(\sqrt J\cdot\sqrt{\sum(\hat\beta_j-\beta_j)^2}=\sqrt J\sqrt L\)。
由于第 2–3 步对所有 \(x\) 同时成立,得到的是整条曲线上的"同时置信带",而不是逐点区间。代价是较保守(带偏宽)。
例 21.7("爪形"密度)。 Marron & Wand (1992) 的爪形密度 \(f(x)=\frac12\phi(x;0,1)+\frac1{10}\sum_{j=1}^5\phi(x;\mu_j,0.1)\),\(\mu_j\in\{-1,-\frac12,0,\frac12,1\}\),即一个宽正态上叠加五个窄"爪"。缩放到 \([0,1]\) 后,用 \(n=5000\) 的样本做正交级数估计,五个爪都能分辨出来,95% 置信带也比较窄。(精读笔记中此例权重字符损坏,这里按 Marron–Wand 的标准定义给出。)
21.3 正交级数回归
模型 \(Y_i=r(x_i)+\epsilon_i\),\(\epsilon_i\) 独立、均值 0、方差 \(\sigma^2\),先考虑等距设计 \(x_i=i/n\)。\(r=\sum_j\beta_j\phi_j\),\(\beta_j=\int_0^1r\phi_j\)。估计
定理 21.8。 \(\hat\beta_j\approx N(\beta_j,\sigma^2/n)\)。 证明。 \(\mathbb E\hat\beta_j=\frac1n\sum_ir(x_i)\phi_j(x_i)\approx\int r\phi_j=\beta_j\)(Riemann 和);\(\mathbb V\hat\beta_j=\frac{\sigma^2}{n^2}\sum_i\phi_j^2(x_i)\approx\frac{\sigma^2}n\int\phi_j^2=\frac{\sigma^2}n\);它是平均,CLT 给出近似正态。\(\square\)
注意回归中所有系数的方差都是 \(\sigma^2/n\),与 \(j\) 无关。于是
定理 21.9。 \(\hat r=\sum_{j\le J}\hat\beta_j\phi_j\) 的风险为
估计 \(\sigma^2\)。 \(r\) 光滑时,\(j\) 很大的 \(\beta_j\approx0\),于是最后 \(k\) 个估计系数基本是纯噪声:\(\hat\beta_j\approx\sigma Z_j/\sqrt n\)。所以
算法(正交级数回归)。
- \(\hat\beta_j=\frac1n\sum_iY_i\phi_j(x_i)\),\(j=1,\dots,n\);
- \(\hat\sigma^2=\frac nk\sum_{i>n-k}\hat\beta_i^2\);
- 计算 \(\hat R(J)=J\frac{\hat\sigma^2}n+\sum_{j=J+1}^n\big(\hat\beta_j^2-\frac{\hat\sigma^2}n\big)_+\)(21.27);
- 选 \(\hat J\) 最小化 \(\hat R(J)\);
- \(\hat r(x)=\sum_{j\le\hat J}\hat\beta_j\phi_j(x)\)(加上常数项 \(\bar Y\))。
定理 21.11(置信带)。 对 \(r_J=\sum_{j\le J}\beta_j\phi_j\),
例 21.10 / 21.12。 Doppler 函数,\(n=2048\),\(\sigma=0.1\)。最小化估计风险选出 \(J=234\)。置信带对比:\(J=234\) 时分辨率高但带宽,\(J=45\approx\sqrt n\) 时带窄但抓不住左端的快速振荡。这是偏差–方差权衡在置信带上的表现。
设计点在 \([a,b]\) 时可缩放到 \([0,1]\);不等距但不过度聚集时方法仍可用;若 \(x_i\) 是随机的,方法需要较大修改,原书不讨论。
21.4 小波
21.4.1 为什么需要小波
Doppler 这类函数是空间非齐性(spatially inhomogeneous)的:某些位置变化剧烈,其余位置很平滑。余弦基的每个函数都铺满整个区间,要表示左端的快速振荡,就得保留高频项,而高频项会在右端引入不必要的抖动;只保留低频项,又会漏掉左端的细节。核回归选大带宽或小带宽也面临同样的两难。解决办法是换一组局部化的基函数:可以在某个小区域里加一个"小突起",而不影响其他地方。这就是小波(wavelets)。
21.4.2 Haar 小波与多分辨率
Haar 父小波(尺度函数 scaling function)与母小波(mother wavelet):
定理 21.13。 \(\{\phi,W_0,W_1,W_2,\dots\}\) 是 \(L_2(0,1)\) 的标准正交基。于是
白话解释:用一个四点小例子体会 Haar 分解(忽略缩放常数)。设四个时点的价格是 \((10,10,10,14)\)。
第一层(最细):两两相邻求"右减左"得细节 \((0,4)\),求平均得粗略值 \((10,12)\)。 第二层:对 \((10,12)\) 再做一次,细节 \(2\),平均 \(11\)。
结果是:整体水平 11,粗尺度上"后半段比前半段高 2",细尺度上"第一对没变化、第二对内部跳了 4"。零细节系数精确告诉你"哪里平坦",大细节系数告诉你"跳跃在哪、在哪个尺度"。下标 \(j\) 是尺度(越大越细),\(k\) 是位置。
金融直觉:这就像把一段收益率按"年—季—月—周—日"逐层分解:年度均值是 \(\alpha\),季度相对年度的偏离、月度相对季度的偏离……是各层细节系数。小波方差就是各层细节系数的方差,可以回答"波动主要来自哪个时间尺度"。
Haar 小波局部化但不光滑(阶梯状)。1988 年 Daubechies 证明存在既光滑又局部化、且构成标准正交基的小波,它们没有闭式表达,只能数值构造。原书继续用 Haar,实务中常用 Daubechies、Symlet 等小波(Python 的 PyWavelets 库提供)。
21.4.3 小波回归:阈值化
模型 \(Y_i=r(x_i)+\sigma\epsilon_i\),\(\epsilon_i\sim N(0,1)\),\(x_i=i/n\),\(n=2^J\)。与余弦基的关键区别是:余弦基按顺序截断(保留前 \(J\) 项),小波按大小取舍(系数大则保留,否则置零),这称为阈值化(thresholding)。因为小波是局部的,信号剧烈变化的地方会产生大系数而被保留,平滑的地方细节系数小而被清零,于是自动实现了"不同位置用不同分辨率"。
Haar 小波回归(硬阈值、通用阈值)。
- 计算 \(\hat\alpha=\frac1n\sum_i\phi(x_i)Y_i\),\(D_{j,k}=\frac1n\sum_i\psi_{j,k}(x_i)Y_i\),\(0\le j\le J-1\)(用 DWT);
- 估计噪声:
\[\hat\sigma=\sqrt n\times\frac{\text{median}\big(|D_{J-1,k}|:k=0,\dots,2^{J-1}-1\big)}{0.6745};\tag{21.37}\]
- 通用阈值:
\[\hat\beta_{j,k}=\begin{cases}D_{j,k}&|D_{j,k}|>\hat\sigma\sqrt{2\log n/n}\\0&\text{其他}\end{cases};\tag{21.36}\]
- \(\hat r(x)=\hat\alpha\phi(x)+\sum_{j,k}\hat\beta_{j,k}\psi_{j,k}(x)\)。
噪声估计的道理。 最细一层的系数几乎全是噪声,\(D_{J-1,k}\approx N(0,\sigma^2/n)\),所以 \(\sqrt nD_{J-1,k}\approx N(0,\sigma^2)\)。标准正态的 \(|Z|\) 中位数是 0.6745,于是 \(\text{median}|\cdot|/0.6745\) 估计 \(\sigma\)。用中位数而非平方和,是因为跳跃处的少数大系数会严重污染平方和,却几乎不影响中位数。这就是**中位数绝对偏差(MAD)**估计。
定理 21.15(通用阈值的含义)。 若没有信号(所有 \(\beta_{j,k}=0\)),则 \(\mathbb P(\hat\beta_{j,k}=0\ \forall j,k)\to1\)。 证明(设 \(\sigma\) 已知)。 \(D_{j,k}\approx N(0,\sigma^2/n)\)。Mill 不等式:\(\mathbb P(|Z|>t)\le\frac cte^{-t^2/2}\),\(c=\sqrt{2/\pi}\)。令 \(\lambda=\sigma\sqrt{2\log n/n}\),则 \(\sqrt n\lambda/\sigma=\sqrt{2\log n}\),并集界给出
推导拆解:证明中几个步骤的来由。
- 标准化:\(D_{j,k}\approx N(0,\sigma^2/n)\),所以 \(\mathbb P(|D_{j,k}|>\lambda)=\mathbb P\big(|Z|>\frac{\sqrt n\lambda}{\sigma}\big)=\mathbb P(|Z|>\sqrt{2\log n})\)。
- Mill 不等式给出正态尾部概率的上界:\(t\) 增大时尾部概率像 \(e^{-t^2/2}\) 一样极快地下降。代入 \(t=\sqrt{2\log n}\),\(e^{-t^2/2}=e^{-\log n}=1/n\)(\(\log\) 是自然对数)。
- 并集界(Bonferroni):"\(n\) 个系数中至少一个超阈值"的概率 ≤ 各自概率之和 ≈ \(n\times\frac{c}{\sqrt{2\log n}}\cdot\frac1n\)。\(n\) 被 \(1/n\) 抵消,剩下的部分随 \(n\) 增大缓慢趋于零。
阈值随 \(\sqrt{\log n}\) 增长而不是随 \(n\) 增长,是因为正态尾部衰减得极快:系数数目翻倍,门槛只需略微提高。
通用阈值恰好高到能以高概率清除所有纯噪声系数。它的思想与多重检验中的 Bonferroni 校正同源:同时检验 \(n\) 个系数,门槛要升到 \(\sqrt{2\log n}\) 个标准差(\(n=1024\) 时约 3.7)。
例 21.14 / 21.16。 Doppler,\(n=2048\),\(\sigma=0.1\)。Haar 通用阈值估计呈阶梯状(Haar 不光滑),但相当准确地捕捉了左端的快速振荡。
21.4.4 离散小波变换
实际计算用离散小波变换(DWT),复杂度 \(O(n)\)。Haar 的 DWT 只是逐层"两两求差得细节、两两求和得平滑":令 temp \(=y/\sqrt n\);对 \(j=J-1,\dots,0\):
21.5 量化实战:小波去噪、跳跃定位与 MAD
场景。 比较 Haar 小波阈值与余弦级数两种方法:一个是原书的 Doppler 函数(平滑但空间非齐性),另一个是"带跳跃的公允价值"——缓慢漂移加三次跳跃(模拟消息冲击),观测值是公允价值加上微观结构噪声。另外按原书习题 11 的思路,比较含离群值时样本标准差与 MAD 的表现。
import numpy as np
rng = np.random.default_rng(21)
n = 1024; J = int(np.log2(n))
x = np.arange(1, n + 1) / n
def haar_dwt(y):
temp, D = y / np.sqrt(len(y)), {}
for j in range(J - 1, -1, -1):
D[j] = (temp[1::2] - temp[0::2]) / np.sqrt(2)
temp = (temp[1::2] + temp[0::2]) / np.sqrt(2)
return temp, D # temp 即尺度系数 alpha_hat
def haar_idwt(alpha, D):
temp = alpha
for j in range(0, J):
out = np.empty(2 * len(temp))
out[0::2] = (temp - D[j]) / np.sqrt(2)
out[1::2] = (temp + D[j]) / np.sqrt(2)
temp = out
return temp * np.sqrt(n)
def wavelet_fit(y):
alpha, D = haar_dwt(y)
sig = np.sqrt(n) * np.median(np.abs(D[J - 1])) / 0.6745 # (21.37) MAD
lam = sig * np.sqrt(2 * np.log(n) / n) # 通用阈值 (21.36)
Dt = {j: np.where(np.abs(d) > lam, d, 0.0) for j, d in D.items()}
kept = sum(int((d != 0).sum()) for d in Dt.values())
return haar_idwt(alpha, Dt), sig, kept, Dt, lam
def cosine_fit(y):
jj = np.arange(1, n + 1)
Phi = np.sqrt(2) * np.cos(np.pi * np.outer(x, jj)) # n × n
b = Phi.T @ (y - y.mean()) / n # (21.23),先减去常数项
k = n // 4
s2 = n / k * np.sum(b[n - k:] ** 2) # (21.26)
tail = np.maximum(b ** 2 - s2 / n, 0)
R = jj * s2 / n + (tail.sum() - np.cumsum(tail)) # (21.27)
Jh = int(jj[np.argmin(R)])
return y.mean() + Phi[:, :Jh] @ b[:Jh], Jh, np.sqrt(s2)
doppler = np.sqrt(x * (1 - x)) * np.sin(2.1 * np.pi / (x + 0.05))
# “公允价值”:缓慢漂移 + 3 次跳跃(如消息冲击),单位:价格
price = 100 + 0.8 * x + 1.5 * (x > 0.3) - 2.0 * (x > 0.62) + 1.0 * (x > 0.85)
for name, f, s in [("Doppler", doppler, 0.1), ("带跳跃的价格", price, 0.25)]:
y = f + s * rng.standard_normal(n)
fw, sig_w, kept, Dt, lam = wavelet_fit(y)
fc, Jh, sig_c = cosine_fit(y)
print(f"[{name}] sigma真值={s} 小波MAD估计={sig_w:.3f} 余弦尾系数估计={sig_c:.3f}")
print(f" Haar小波:保留系数 {kept}/{n-1},MSE={np.mean((fw-f)**2):.5f}")
print(f" 余弦基 :选 J={Jh}, MSE={np.mean((fc-f)**2):.5f}")
if name != "Doppler":
# 跳跃定位:在较粗尺度 j=5(每个小波覆盖 32 个点)上看被保留的大系数
j = 5; idx = np.nonzero(Dt[j])[0]
print(" j=5 层被保留的系数所在区间:", [(float(k / 2**j), float((k + 1) / 2**j)) for k in idx])
# MAD 与样本标准差:含 5% 离群值时(原书习题 11)
reps, m = 2000, 512
est = np.zeros((reps, 2))
for r in range(reps):
z = rng.standard_normal(m)
out = rng.random(m) < 0.05
z[out] = 10 * rng.standard_normal(out.sum())
est[r] = [z.std(ddof=1), np.median(np.abs(z)) / 0.6745]
print("含5%%离群值: 样本标准差 均值=%.2f MAD估计 均值=%.2f (主体分布 sigma=1)" % tuple(est.mean(0)))
关键输出:
[Doppler] sigma真值=0.1 小波MAD估计=0.095 余弦尾系数估计=0.093
Haar小波:保留系数 49/1023,MSE=0.00441
余弦基 :选 J=231, MSE=0.00270
[带跳跃的价格] sigma真值=0.25 小波MAD估计=0.234 余弦尾系数估计=0.258
Haar小波:保留系数 24/1023,MSE=0.00349
余弦基 :选 J=110, MSE=0.01354
j=5 层被保留的系数所在区间: [(0.28125, 0.3125), (0.59375, 0.625), (0.84375, 0.875)]
含5%离群值: 样本标准差 均值=2.41 MAD估计 均值=1.06 (主体分布 sigma=1)
解读。
- 没有万能的基。 对 Doppler 这种处处光滑的函数,余弦基(MSE 0.0027)胜过阶梯状的 Haar 小波(0.0044);对含跳跃的价格,Haar 只保留 24 个系数,MSE 是余弦基的四分之一。余弦基要表示一个跳跃,需要大量缓慢衰减的高频项,结果在跳跃附近出现吉布斯振荡,平坦段又带进噪声。
- 小波能定位跳跃。 在尺度 \(j=5\)(每个小波覆盖 1/32 的区间)上,被保留的系数恰好落在包含 0.3、0.62、0.85 的三个区间里。这是高频数据中跳跃检测的基本思路:局部的大细节系数意味着局部的突变。
- MAD 是稳健的尺度估计。 主体噪声 \(\sigma=1\),混入 5% 标准差为 10 的离群值后,样本标准差被拉到 2.41,MAD 只到 1.06。金融数据清洗中,用 \(\text{median}|x-\text{median}(x)|/0.6745\) 估计波动、再按"超过 5 倍 MAD"识别坏点,是标准做法。
- 一个实现细节。 余弦系数用离散和 \(\frac1n\sum_iY_i\phi_j(x_i)\) 近似积分时,常数项不会被完全正交掉:价格水平 100 会泄漏进所有奇数阶系数,导致 \(\hat\sigma\) 严重高估(本例未去均值时 \(\hat\sigma\) 为 3.16)。所以代码先减去 \(\bar Y\)。处理价格这类有大常数水平的数据时要特别注意。
交易中的注意事项。 本章的小波平滑是双边的:\(t\) 时刻的估计用到了 \(t\) 之后的数据,在 \(t\) 时刻这些数据还不存在。用小波去噪后的价格回测交易信号,会产生严重的前视偏差(look-ahead bias),回测收益可能完全是虚假的。实盘只能用因果版本:每个时刻只对截至当时的数据做变换,或者使用最大重叠离散小波变换(MODWT)的单边滤波,并处理好边界效应。小波的多尺度分解(小波方差、小波相关)用于分析不同时间尺度(日内、日、周)的波动与相关结构时,同样要分清"事后描述"与"实时信号"。
其他正交基在量化中的影子。 Legendre、Laguerre 等正交多项式是最小二乘蒙特卡洛(Longstaff–Schwartz)美式期权定价中回归延续价值的标准基函数(第 08 册);用余弦级数展开密度,再逐项积分算期权价格,是 COS 期权定价法的核心思想。
本章小结
\(L_2\) 中的完备标准正交基可以展开任意平方可积函数,Parseval 关系把函数的积分平方误差转化为系数平方误差之和,所以估计函数等于估计系数。函数越光滑,高阶系数衰减越快,因此只保留前 \(J\) 项是合理的:风险 = 保留项的方差 + 丢弃项的平方和,可以无偏估计后最小化。回归中每个系数的方差都是 \(\sigma^2/n\),\(\sigma^2\) 用最高阶系数估计;置信带由 \(\chi^2_J\) 与 Cauchy–Schwarz 得到,针对的是截断函数 \(r_J\)。小波是局部化的多分辨率基,用阈值化代替截断,自动在剧烈变化处保留细节、在平滑处去除噪声;通用阈值 \(\hat\sigma\sqrt{2\log n/n}\) 能以高概率清除纯噪声系数;\(\sigma\) 用最细一层系数的 MAD 估计;DWT 的复杂度是 \(O(n)\)。
| 概念 | 公式 / 要点 |
|---|---|
| 正交展开 | \(f=\sum_j\beta_j\phi_j\),\(\beta_j=\int f\phi_j\) |
| Parseval | \(\int f^2=\sum_j\beta_j^2\) |
| 光滑性与衰减 | \(\int(f^{(k)})^2=\sum_j\beta_j^2(\pi j)^{2k}\) |
| 密度系数估计 | \(\hat\beta_j=\frac1n\sum_i\phi_j(X_i)\),方差 \(\sigma_j^2/n\) |
| 回归系数估计 | \(\hat\beta_j=\frac1n\sum_iY_i\phi_j(x_i)\approx N(\beta_j,\sigma^2/n)\) |
| 回归风险 | \(R(J)=J\sigma^2/n+\sum_{j>J}\beta_j^2\) |
| 风险估计 | \(\hat R(J)=J\hat\sigma^2/n+\sum_{j>J}(\hat\beta_j^2-\hat\sigma^2/n)_+\) |
| 尾系数估 \(\sigma^2\) | \(\hat\sigma^2=\frac nk\sum_{i>n-k}\hat\beta_i^2\),\(k=n/4\) |
| 置信带(回归) | \(\hat r\pm a(x)\hat\sigma\sqrt{\chi^2_{J,\alpha}/n}\),\(a(x)=\sqrt{\sum_{j\le J}\phi_j^2(x)}\) |
| Haar 小波 | \(\psi_{j,k}(x)=2^{j/2}\psi(2^jx-k)\) |
| 通用阈值 | \(\vert D_{j,k}\vert >\hat\sigma\sqrt{2\log n/n}\) 则保留 |
| MAD 噪声估计 | \(\hat\sigma=\sqrt n\cdot\text{median}\vert D_{J-1,k}\vert /0.6745\) |
练习
基础
- 证明 Parseval 关系(原书习题 4)。(提示:\(\int f^2=\int(\sum_j\beta_j\phi_j)^2\),展开后利用标准正交性。)
- 验证 21.1.1 中 \(\psi_1,\psi_2,\psi_3\) 两两正交、范数为 1,并验证 \((12,3,4)\) 的系数(原书习题 3)。
- 证明定理 21.5 和 21.9(原书习题 1、2)。
- 用余弦基解析地展开 \(\sin(\pi x)\)(原书习题 6b)。(提示:\(\beta_0=2/\pi\);\(j\) 奇数时 \(\beta_j=0\);\(j\) 偶数时 \(\beta_j=\frac{-2\sqrt2}{\pi(j^2-1)}\)。系数按 \(j^{-2}\) 衰减。)
- 证明 Haar 小波系统 \(\{\phi,\psi_{j,k}\}\) 标准正交(原书习题 8)。
- 解释通用阈值为什么要乘 \(\sqrt{2\log n}\) 而不是固定的 1.96。在 \(n=1024\) 时,若用 1.96 作阈值,纯噪声情况下约有多少个系数会被误保留?(提示:约 \(1023\times0.05\approx51\) 个。)
进阶
- 原书习题 11:\(X_i\sim N(0,\sigma^2)\),证明 \(\text{median}|X_i|/0.6745\) 近似无偏;模拟比较它与样本标准差的 MSE;再加入离群值(以 0.95 的概率来自 \(N(0,1)\)、0.05 的概率来自 \(N(0,10)\))比较。(原书 PDF p.352 把两个概率都印成 .95,属印刷错误;离群成分比例应为 0.05。)
- 原书习题 9:Doppler,\(n=1024\),\(\sigma=0.1\),用余弦基画 \(J=10,20,\dots,100\) 的估计和置信带,再用 Haar 小波拟合,对比两者在左端和右端的表现。
- 原书习题 10(小波直方图):\(\hat\beta_{j,k}=\frac1n\sum_i\psi_{j,k}(X_i)\)。证明它无偏,推导到分辨率 \(B\) 的 Haar 直方图的 MSE 近似表达,并对 Beta(15,4) 的 \(n=1000\) 样本用留一交叉验证选 \(B\)。说明 Haar 直方图与第 20 章箱宽为 \(2^{-B}\) 的直方图是什么关系。
- 编程:把 21.5 节的小波平滑改写成因果版本——在每个时刻 \(t\) 只用最近 256 个观测做 DWT 去噪,取窗口最后一个点作为 \(t\) 时刻的估计。与双边版本比较跳跃后多少个时点才"识别"出新的价格水平,并讨论这对基于去噪价格的交易信号意味着什么。
原书推荐习题:第 21 章习题 4、9、10、11。
原书对照
| 本章内容 | 原书章节 | PDF 页码 |
|---|---|---|
| 向量与函数空间、标准正交基、Parseval,例 21.1–21.3,系数衰减 | 21.1 | p.331–335 |
| 正交级数密度估计,定理 21.4–21.6,例 21.7 | 21.2 | p.335–339 |
| 正交级数回归,定理 21.8–21.11,例 21.10、21.12 | 21.3 | p.339–344 |
| Haar 小波,定理 21.13、21.15,阈值化,例 21.14、21.16 | 21.4 | p.344–349 |
| 附录:Haar 的 DWT | 21.5 | p.349 |
| 文献注(Efromovich 1999;Ogden 1997;Donoho & Johnstone) | 21.6 | p.350 |
| 习题 | 21.7 | p.350–352 |