halo 的技术博客

返回

上一篇谱图神经网络里,我们把资产关联矩阵当成拉普拉斯信号,用特征分解得到”图傅里叶基”,再在谱域滤波。方法漂亮,但用过的人都知道它有两个绕不过去的痛:特征分解 O(N³) 一旦资产上千就爆,而且傅里叶基是全局的——每个基向量在整张图上都不为零,你没法说”这个模式主要发生在哪个板块”。

结论先放这:图小波网络(GWNN, Xu et al. ICLR 2019)用图小波基替换图傅里叶基,一举解决局部性问题。 图小波用热核 exp(-sλ) 生成,天生带一个尺度参数 s——小尺度时能量集中在节点邻域(局部、稀疏),大尺度时扩散到全图(全局、平滑)。这让”多尺度分析资产关联”成为可能:小尺度看板块内部微结构,大尺度看跨板块共振。本文用纯 numpy 从零实现完整链路,在 24 资产两板块合成图上实测:图小波低通把板块信号去噪 RMSE 从 0.86 压到 0.67、方向准确率拉满 1.00。附完整 Python 与五类真实陷阱(中阶)。

24 资产两板块关联图:块内连边密、块间连边疏

一、谱图卷积的两个死穴#

先复习谱图卷积怎么工作。给定归一化拉普拉斯 L = I − D^{−1/2} A D^{−1/2},做特征分解 L = U Λ Uᵀ,则 U 的列就是”图傅里叶基”,Λ 对角线是”图频率”。图卷积 = 把信号 xUᵀ 搬进谱域、乘一个谱滤波器 g(Λ)、再用 U 搬回来:

x *_G g = U g(Λ) Uᵀ x
plaintext

问题一:U 是稠密的、全局的。 每个傅里叶基向量在所有节点上都有非零分量。你没法说”频率 λ_k 这个模式主要活在哪几个资产上”——它铺满全图。

问题二:特征分解 O(N³)。 资产一多就跑不动,而且 Uᵀ xU (...) 每次都是 O(N²) 的稠密矩乘。

图小波的动机就是:换一族基,让它既稀疏又局部,还带尺度。

二、图小波:给傅里叶基加一个”尺度旋钮”#

图小波的定义只改了一个地方——把谱域的滤波器固定成热核 g_s(λ) = exp(−sλ),于是尺度为 s 的图小波基是:

Ψ_s = U diag(exp(−sλ)) Uᵀ
plaintext

Ψ_s 的第 i 列,就是”以节点 i 为中心、尺度为 s 的一个小波”。它的关键性质:

  • s 小exp(−sλ) 对所有 λ 都接近 1,小波高度局部化,能量集中在节点 i 的近邻——看局部微结构
  • s 大exp(−sλ) 快速衰减,只保留最低频(λ≈0),小波扩散到整张连通图——看全局共振

图小波(热核)以节点3为中心:尺度 s 越大,能量扩散越广

图里看得很清楚:s=1 时小波只点亮节点3的直接邻居;s=8 时能量漫到整个板块甚至跨板块。一个尺度旋钮,就把”局部 vs 全局”连续地调出来了——这是傅里叶基做不到的。

import numpy as np

def graph_wavelet(U, lam, s):
    """尺度 s 的图小波变换矩阵 Psi_s = U diag(exp(-s lam)) U^T"""
    return U @ np.diag(np.exp(-s * lam)) @ U.T

def normalized_laplacian(A):
    d = A.sum(1)
    Dinv = np.diag(1.0 / np.sqrt(np.maximum(d, 1e-9)))
    return np.eye(len(A)) - Dinv @ A @ Dinv
python

三、谱域视角:图小波就是一族带通/低通滤波器#

把热核画到谱域里,图小波的本质一目了然:它就是对每个图频率 λ 施加一个 exp(−sλ) 的增益。 尺度 s 越大,衰减越狠,越像一个”只放行低频”的低通滤波器。

谱域视角:图小波=对每个图频率施加 exp(-sλ) 增益,s 越大越低通

这跟经典信号处理里的小波完全一个逻辑:小波 = 一族在时频(这里是”空间-频率”)平面上平铺的带通滤波器。图小波把这套搬到了图上——低图频对应”整块资产一起动”的平滑模式,高图频对应”相邻资产反向动”的震荡模式。 用大尺度小波做低通,就是在提取”板块级共振”,压掉”个股噪声”。

四、GWNN 的图卷积层:把 U 换成 Ψ#

有了图小波基,GWNN 的卷积层几乎是照抄谱卷积,只把 U 换成 Ψ_sUᵀ 换成 Ψ_s^{−1}(逆小波变换,Ψ_s^{−1} = U diag(exp(+sλ)) Uᵀ):

def gwnn_layer(x, U, lam, s, theta):
    """图小波卷积层:Psi_s diag(theta) Psi_s^{-1} x
    theta 是每个"图小波频道"上的可学习滤波系数。"""
    Psi     = U @ np.diag(np.exp(-s * lam)) @ U.T
    Psi_inv = U @ np.diag(np.exp(+s * lam)) @ U.T
    return Psi @ (theta * (Psi_inv @ x))
python

GWNN 原论文的两个工程亮点:一是 Ψ_s 在小尺度下天然稀疏,可以阈值截断成稀疏矩阵,把 O(N²) 的稠密乘降成稀疏乘;二是滤波器 diag(theta)逐频道对角的,参数量只有 O(N),比早期谱 CNN 的 O(N²) 卷积核省得多,也更不容易过拟合。

五、诚实实测:去噪有效,但没赢过局部 GCN#

我造了个 24 资产、两板块的关联图(块内连边概率 0.55、块间 0.06),真实信号是”板块1全 +1、板块2全 −1”的分块常数,加上 0.9 倍标准正态噪声。任务:从含噪观测里恢复板块信号。对比图小波低通(s=4)和局部 GCN(两跳邻域平滑):

方法RMSE方向准确率
观测(含噪)0.86
图小波低通(s=4)0.671.00
局部 GCN(2 跳)0.471.00

图信号去噪对比:图小波把 RMSE 从 0.86 压到 0.67,方向全对;但 RMSE 输给局部 GCN

诚实说结果:图小波低通确实去噪了(RMSE 0.86→0.67,方向准确率拉满 1.00),但在这个任务上 RMSE 输给了局部 GCN 的 0.47。 原因不难理解——真实信号是”分块常数”,局部 GCN 的两跳平均恰好是块内均值的极好估计器,天然匹配这个结构;而图小波低通保留了若干个低频分量,反而带进了一点跨块的”渗漏”。

这正是我想强调的:没有一种图算子是万能的,算子要匹配信号的结构。 图小波的强项不在”分块常数去噪”这种简单场景,而在需要多尺度分析的地方——同时想看”板块内微结构”和”跨板块共振”、或信号本身有多个空间频率成分时,一个尺度旋钮扫过去,比固定跳数的 GCN 灵活得多。用错场景,它就会像这里一样,被更匹配结构的简单方法比下去。

A. 实现细节#

  • 图构建:24 资产分两板块,块内连边概率 0.55、块间 0.06,无向无权(0/1)邻接。
  • 拉普拉斯口径:用对称归一化 L = I − D^{−1/2} A D^{−1/2},特征值范围 [0, 2],eigh 做特征分解得 U 与 λ。
  • 图小波生成:热核 Ψ_s = U diag(exp(−sλ)) Uᵀ,去噪用 s=4 的低通;尺度演示用 s∈{1,3,8}。
  • 去噪信号语义:真实信号为板块分块常数(+1/−1),加 0.9 倍标准正态噪声,非价格序列,纯粹演示图算子的去噪能力。
  • 对比基线:局部 GCN 用 Ŝ = D̂^{−1/2}(A+I)D̂^{−1/2} 两跳传播 Ŝ²x
  • 指标口径:RMSE 对真实分块常数计算;方向准确率 = 恢复信号符号与真实符号一致的比例。

B. 已知偏差#

  • 合成结构过于规整:真实资产关联图的边权连续、社区边界模糊、非平稳,不是干净的两板块 0/1 图。规整图会同时高估图小波和 GCN 的去噪效果。
  • 未做稀疏化与端到端训练:本文用稠密 Ψ_s 直接演示,未实现原论文的稀疏截断与滤波系数 theta 的梯度训练,因此没体现 GWNN 相对谱 CNN 的算力与参数优势。
  • 去噪≠可交易信号:把噪声里的板块信号估出来,距离”据此产生正收益”还差配对/择时/成本建模,本文不涉及交易回测。

C. 结果解读#

第一,图小波的核心卖点是多尺度局部性,不是单场景精度。 本例 RMSE 输给局部 GCN,恰恰说明”算子要配结构”:分块常数信号用两跳均值最优。图小波真正无可替代的是一个尺度旋钮连续扫过局部到全局——当你不知道信号活在哪个空间尺度、或它横跨多个尺度时,图小波比固定感受野的 GCN 灵活。

第二,谱域可解释性是白送的。 把热核画进谱域就能直接读出”低频=板块共振、高频=个股震荡”。这对做风险归因很有用:想压掉个股噪声、留住系统性联动,直接调大 s 就行,物理意义清清楚楚,不像黑箱 GNN 那样只能事后归因。

第三,别把关联图当因果图。 整条链路都建立在”相关矩阵→邻接图”这个假设上,去噪去出来的是同涨同跌的板块结构,不是”谁带动谁”的因果。拿它做统计套利前,必须再叠加协整、格兰杰因果这类专门检验——图小波帮你把关联看清楚,但看不出因果方向。

五类真实陷阱#

  1. 小波必胜谱卷积/GCN:不成立。算子要匹配信号结构,本例分块常数信号里局部 GCN 的 RMSE(0.47)就优于图小波(0.67)。图小波的优势场景是多尺度、非单一空间频率。
  2. 尺度 s 随便选:s 是核心超参。太小只看邻域、去不掉全局噪声;太大退化成”全图平均”、抹掉所有结构。必须按信号的空间尺度选,最好扫一遍。
  3. 谱域滤波万能:谱方法假设图结构稳定。资产关联是时变的,昨天的板块图今天可能重组,用陈旧邻接做滤波会系统性偏差。
  4. 去噪无损:低通去噪必然连同高频真信号一起削掉。若”个股特异 alpha”恰在高图频,图小波低通会把它当噪声抹掉。
  5. 关联即因果:邻接图来自相关矩阵,去噪结果只反映同期联动,不含领先-滞后因果。直接拿去做套利方向判断会踩空。
图小波网络金融关联:把图卷积换成图小波
https://blog.halo26812.eu.org/blog/graph-wave-net-financial
Author halo
Published at 2026年7月24日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨