第 4 章 · 03 卡尔曼滤波与小波去噪


文档摘要

第 4 章 · 03 卡尔曼滤波与小波去噪 本节摘要:本节讲两种「信号处理」手段,用来从噪声大的价格序列里提取干净信号。原项目 用 PyKalman 与 PyWavelets 两个库,演示了卡尔曼滤波如何动态估计「真实价格」、并与移动平均对比;以及小波变换如何把价格分解成多尺度成分再重构,实现去噪。卡尔曼滤波在第 9 章还会用于配对交易。读完本节,你能理解卡尔曼滤波的「预测-更新」循环与小波变换的「分解-重构」机制,并在 Python 中把它们应用于价格序列。 内容来源:原项目 ,汉化并套用体系化模板。 ⚠️ 学习提示:滤波与去噪是「双刃剑」——用过头会让信号滞后或丢失,回测看着漂亮实盘失真;务必对比「滤波前 vs 滤波后」的统计性质,不要盲目相信平滑后的曲线。

第 4 章 · 03 卡尔曼滤波与小波去噪

本节摘要:本节讲两种「信号处理」手段,用来从噪声大的价格序列里提取干净信号。原项目 04_alpha_factor_research/03_kalman_filter_and_wavelets.ipynb 用 PyKalman 与 PyWavelets 两个库,演示了卡尔曼滤波如何动态估计「真实价格」、并与移动平均对比;以及小波变换如何把价格分解成多尺度成分再重构,实现去噪。卡尔曼滤波在第 9 章还会用于配对交易。读完本节,你能理解卡尔曼滤波的「预测-更新」循环与小波变换的「分解-重构」机制,并在 Python 中把它们应用于价格序列。

内容来源:原项目 04_alpha_factor_research/03_kalman_filter_and_wavelets.ipynb,汉化并套用体系化模板。

⚠️ 学习提示:滤波与去噪是「双刃剑」——用过头会让信号滞后或丢失,回测看着漂亮实盘失真;务必对比「滤波前 vs 滤波后」的统计性质,不要盲目相信平滑后的曲线。

学习目标

阅读完本节,你应当能够:

  1. 说清卡尔曼滤波的「预测-更新」循环与状态空间模型。
  2. pykalman 配置并估计价格序列的隐状态
  3. 把卡尔曼滤波与移动平均做对比,理解差异。
  4. 描述小波变换的多尺度分解机制。
  5. pywt 对 S&P 500 序列做小波平滑

一、为什么金融信号需要「提纯」

金融价格序列噪声极大——bid-ask bounce、突发成交、流动性变化都会让真实价格趋势被掩盖。直接用原始价格做信号,信噪比低;但用简单移动平均(SMA)又有一个老问题:滞后——均线必然落后于真实价格,信号触发时已经晚了。

两种「更聪明」的平滑方法:

方法 核心思想 优势
卡尔曼滤波 用状态空间模型动态估计隐状态 自适应、滞后小
小波变换 把信号分解到不同尺度再重构 多尺度、保边缘

二、卡尔曼滤波的状态空间模型

卡尔曼滤波假设系统有一个隐状态(真实价格),我们只能观测到带噪声的价格。它通过两个方程描述:

  • 状态方程:真实价格如何随时间演化(带过程噪声 w)。
  • 观测方程:观测价格如何依赖真实价格(带观测噪声 v)。

每个时刻执行两步:

  1. 预测(Predict):用状态方程外推下一步的隐状态与方差。
  2. 更新(Update):用新的观测值修正预测,得到后验估计。

💡 核心心法:卡尔曼滤波的本质是「用不确定的模型预测 + 用不确定的观测修正」,两者按各自的方差加权融合。模型越准,越信预测;观测越准,越信测量。这种自适应加权是它优于固定窗口均值的根本原因。

三、PyKalman 配置与估计

notebook 用 PyKalman 库,关键配置:

from pykalman import KalmanFilter # 构造滤波器 kf = KalmanFilter(transition_matrices=[1], # 状态转移(假设真实价格近似随机游走) observation_matrices=[1], # 观测矩阵(直接观测) initial_state_mean=0, initial_state_covariance=1, observation_covariance=1, transition_covariance=0.01) # 估计隐状态 state_means, _ = kf.filter(price_series)

关键超参:

参数 含义 调参方向
observation_covariance 观测噪声越大,越信模型预测 大 → 平滑但滞后
transition_covariance 过程噪声越大,越信观测 大 → 跟随快但噪声多

两者权衡决定滤波器的「响应速度 vs 平滑度」。

四、与移动平均对比

notebook 把卡尔曼滤波结果与简单移动平均对比,关键差异:

💡 核心心法:SMA 是「用过去 N 天的平均」,本质是滞后滤波器;卡尔曼滤波是「用模型预测 + 当前观测的加权」,能动态调整权重。在趋势转折点,卡尔曼的响应明显快于 SMA——这对配对交易(第 9 章)等对时点敏感的策略至关重要。

五、小波变换的多尺度分解

小波变换把信号分解到不同时间尺度(频率)上,每个尺度对应不同的细节层次。与傅里叶变换相比,小波保留时域局部性——能告诉你「这个频率成分出现在哪个时刻」。

notebook 列出了 PyWavelets 支持的小波族:

import pywt print(pywt.families()) # ['haar', 'db', 'sym', 'coif', 'bior', ...]
小波族 特点 常用场景
haar 最简单,方波 离散信号
db(Daubechies) 紧支撑,正交 通用
sym(Symlets) 近对称 金融时序常用
coif(Coiflets) 更高消失矩 平滑信号

六、小波平滑 S&P 500

notebook 用小波对 S&P 500 日频序列做平滑:

result = pywt.swt(price, 'db2', level=4, trim_length=1) # 把高频细节系数阈值化(置零),再用逆变换重构

去噪的核心思想:把信号分解后,高频细节系数往往主要是噪声,对其做阈值化(soft/hard thresholding)再重构,就能在保留趋势的同时去掉抖动。

⚠️ 警告:小波去噪对阈值与分解层数极敏感——阈值太高会丢信号,太低保留噪声。务必用滚动/样本外验证,不要在回测期内调参。

七、滤波/去噪在 ML4T 中的位置

用法 章节
价格提纯后作为 ML 特征 第 4 章
配对交易的价差均值跟踪 第 9 章 贝叶斯
因子收益的去噪 第 5 章 Alphalens

滤波/去噪本身不产生 alpha,但它能提高后续所有步骤的信噪比,是上游的「水质净化器」。

本节要点回顾

  1. 两大手段:卡尔曼滤波(自适应状态估计)、小波变换(多尺度分解重构)。
  2. 卡尔曼循环:预测(状态方程)→更新(观测方程),按方差加权融合。
  3. 关键超参:observation_covariance 越大越平滑;transition_covariance 越大越跟随。
  4. vs SMA:卡尔曼自适应、滞后小,在转折点响应更快。
  5. 小波机制:分解到近似(趋势)+ 细节(噪声),对细节阈值化再重构。
  6. 小波族:常用 db/sym,层数与阈值要样本外调。
  7. 定位:是上游信噪比净化器,本身不产生 alpha。

下一节,我们看 Alphalens 因子评估 IC——构造完因子后,怎么系统评估它的预测力?


发布者: 作者: 灏天文库 转发
评论区 (0)
U