halo 的技术博客

返回

先说结论:PCA 把信号解相关,ICA 把信号解独立——这一字之差决定了你能不能真正还原背后的驱动因子。 不相关只是二阶统计量为零(协方差为零),独立是所有阶统计量都无关联,是强得多的条件。合成实验说明一切:3 个相互独立的非高斯潜在驱动(重尾冲击、偏态动量、区制切换),经过一个混合矩阵变成 3 条观测”资产收益”,观测间相关高达 0.720.83。FastICA 把三个源全部还原到 |相关|=0.999;PCA 拿完全一样的数据,最好只做到 0.660.87。差距的根源:PCA 找的是方差最大的正交方向,那不是统计独立的方向。本文用纯 numpy 实现白化 + deflation FastICA,讲清它的引擎(中心极限定理),并拆穿五类误用。

ICA:把混合信号拆回相互独立的源

上图三列讲完整个故事:① 三个真实潜在源,彼此独立、形态各异;② 经混合矩阵后观测到的三条信号,看起来都像杂乱的收益序列,彼此高度相关,看不出结构;③ ICA 还原的源,几乎逐点重合于第①列。中间那步”混合”就是金融数据的常态——你看到的从来不是纯粹的驱动因子,而是它们的线性叠加。

一、盲源分离:金融数据的本质是”混合”#

经典的 ICA 直觉是”鸡尾酒会问题”:房间里几个人同时说话,几个麦克风各自录到所有人声音的混合,ICA 只靠这些混合录音就能把每个人的声音分开——不需要知道谁在哪、说了什么,所以叫”盲”源分离。

金融里这个结构无处不在:

  • 你观测到的个股收益,是市场因子、行业因子、风格因子、个股特质的线性混合
  • 一篮子相关资产的价格,背后是少数几个共同驱动(利率、风险偏好、流动性)叠加
  • 多个宏观指标,共享着增长、通胀、政策这几条隐藏主线

传统因子模型(比如 PCA 主成分)也做分解,但它们的目标是”解相关”或”最大化方差”。ICA 的目标不同——它要找的是统计独立的源。这两个目标在数学上和金融含义上都有本质区别。

二、为什么 PCA 不够:不相关 ≠ 独立#

这是全文最关键的概念。两个随机变量:

  • 不相关:E[XY] = E[X]E[Y],即协方差为零,只约束二阶矩
  • 独立:p(X,Y) = p(X)p(Y),所有阶的联合矩都分解,是极强的条件

独立一定不相关,但不相关远不能推出独立。PCA 通过特征分解协方差矩阵,得到的主成分保证两两不相关(协方差对角化),但它们通常并不独立。而且 PCA 的方向由方差大小决定,是正交的——真实的独立源方向没有理由恰好正交。

看实测对比:

还原精度:ICA 抓独立源,PCA 只做到不相关

同样的三条混合观测,ICA 把三个源还原到 |相关| = 0.999、0.999、0.999;PCA 只做到 0.79、0.66、0.87。PCA 不是”没用”——它成功地把数据解相关、降维了——但它给出的正交方向和真实的独立源方向系统性地错位。如果你的目标是理解”背后到底有几个独立的驱动、每个长什么样”,PCA 会给你一个数学上正确但金融上误导的答案。

三、ICA 的引擎:中心极限定理反着用#

ICA 怎么知道哪个方向是独立源?答案藏在中心极限定理里,而且用法很反直觉。

中心极限定理:多个独立随机变量的和,趋向于高斯分布。反过来推:观测信号是若干独立源的线性混合(加权和),所以观测信号一定比它的任何一个源更接近高斯

于是恢复源的策略变成:找一个方向 w,使得投影 wᵀx 的分布尽可能远离高斯。最非高斯的那个投影方向,就对应一个独立源。这就是 ICA 的核心——最大化非高斯性 = 分离独立源

用实测验证这条逻辑链:

ICA 引擎:混合让分布变高斯,最大化非高斯性即可反解

真实源(重尾冲击)峰度 2.82,明显非高斯;混合后的观测峰度掉到 1.45,被”高斯化”了(这正是 CLT 在起作用);ICA 还原后峰度回到 2.83,重尾结构完整恢复。混合过程把非高斯性抹平,ICA 正是通过把它找回来完成分离。 这也立刻推出 ICA 的一个硬约束:如果源本身就是高斯的,混合后还是高斯,没有”更高斯 vs 更非高斯”的差异可利用——ICA 对高斯源彻底失效。金融数据普遍重尾非高斯,恰好是 ICA 的主场。

四、FastICA:白化 + 定点迭代#

FastICA(Hyvärinen 1999)是最常用的实现。两步走。

第一步:白化(whitening)。 先把数据中心化、再线性变换使各维不相关且方差为 1(协方差 = 单位阵)。白化后,寻找混合矩阵的问题退化为寻找一个正交旋转——搜索空间大大缩小。

import numpy as np

# 中心化
Xc = X - X.mean(1, keepdims=True)
# 特征分解协方差做白化
cov = np.cov(Xc)
d, E = np.linalg.eigh(cov)
V = E @ np.diag(1.0 / np.sqrt(d)) @ E.T   # 白化矩阵
Z = V @ Xc                                 # 白化后数据,cov(Z) = I
python

第二步:定点迭代找最非高斯方向。 用负熵近似衡量非高斯性,其梯度对应一个不动点方程。FastICA 用 g(u)=tanh(u) 作为非线性函数(对应对数密度的导数)迭代求解:

这里用的是 deflation(逐个提取) 方案:求出第一个分量后,把它正交化掉,再在剩余空间找第二个,以此类推。另一种是 symmetric(并行提取),一次性求所有分量。deflation 实现简单、直观,但误差会沿提取顺序累积;symmetric 更稳定,是生产环境常用的。

实测收敛结果:三个源分别被还原,|相关| = 0.999。白化把问题化简为找正交旋转,tanh 非线性精准锁定了每个非高斯方向。

五、无法回避的两个先天不确定性#

ICA 有两个数学上无法消除的模糊性,用错就会闹笑话。

ICA 的两个先天不确定性:顺序 + 符号/幅度

不确定性一:源的顺序不定。 ICA 输出的分量没有内在排序。实验里真实源 0 被还原成第 2 个分量、源 1 被还原成第 0 个、源 2 被还原成第 1 个——顺序完全打乱。因为交换任意两个源、同时交换混合矩阵对应两列,观测结果不变,ICA 没有信息区分谁先谁后。含义:ICA 分出的”因子1”和你上次跑的”因子1”可能根本不是同一个东西,跨期使用必须重新对齐。

不确定性二:符号和幅度不定。 上图里 ICA 原始输出(灰线)和真实源(红线)幅度、符号都对不上,必须人工乘个符号、缩放后(蓝虚线)才重合。因为把某个源乘以常数 k、同时把混合矩阵对应列除以 k,观测不变。含义:ICA 分量的绝对数值没有意义,只有形态和相对变化有意义。 想解释”这个因子暴露是 +0.3 还是 −0.3”是徒劳的——符号本身是任意的。

实务中通常用一个外部锚(比如与某个已知因子的相关方向)来固定符号,用单位方差来固定幅度。但要清醒:这些都是事后约定,不是 ICA 本身能给的。

六、反面教材:ICA 在金融里最容易踩的五个坑#

陷阱一:以为 ICA 能告诉你源的顺序或重要性。 不能。ICA 分量无序、无天然重要性排名。PCA 至少能按方差排序(第一主成分解释最多方差),ICA 连这个都没有。想按”重要性”取前 k 个独立成分?你得自己定义重要性(比如按峰度、按对某个目标的解释力),ICA 不替你排。

陷阱二:给 ICA 喂高斯数据。 前面证过:高斯源混合后还是高斯,ICA 找不到”更非高斯”的方向,输出的分量是任意正交旋转,纯噪声。用 ICA 前先检查数据的非高斯性(峰度、Jarque-Bera)。好在金融收益普遍尖峰厚尾,这个坑主要出现在对已经高斯化的数据(比如过度平滑后的序列)误用 ICA。

陷阱三:假设独立源一定有金融意义。 ICA 保证分出的分量统计独立,不保证每个分量对应一个可解释的经济因子。它可能把一个真实因子拆成两半,也可能把噪声单独分成一个”源”。统计独立是数学性质,经济含义要靠你事后归因验证——看它和已知因子(动量、价值、波动率)的相关,看它的时间稳定性,而不是看到分出 5 个成分就宣称”发现了 5 个隐藏因子”。

陷阱四:成分数选太多,把噪声当源。 ICA 通常要先定成分个数(这里等于观测维数 3)。如果真实独立源只有 2 个,你却要求分出 5 个,多出来的成分就是在拟合噪声。实务中常先用 PCA 降维定”有效秩”(看特征值断崖),再对保留的子空间做 ICA。先 PCA 定维度、再 ICA 求独立,是标准且稳健的组合拳。

陷阱五:把 ICA 分量直接当交易信号,忽视样本外的不稳定。 合成实验里源是平稳的,还原完美。真实市场的混合矩阵会随 regime 漂移——今天的独立源结构,下个月可能已经变了。滚动窗口重估 ICA 时,前面说的顺序/符号不确定性会让”因子”在时间上跳来跳去,直接拿去构建持仓会引入大量虚假换手。任何基于 ICA 的策略,必须先验证分量的样本外时间稳定性,否则你交易的是估计噪声,不是真实结构。

结语#

ICA 和 PCA 的区别,一句话:PCA 让你的因子互不相关,ICA 让它们相互独立。在金融这个充满非高斯、厚尾、非线性叠加的领域,“独立”往往比”不相关”更接近真实的数据生成过程——本文实验里 ICA 的 0.999 还原对 PCA 的 0.66~0.87 就是明证。

但 ICA 的强大附带严格的使用纪律:它靠非高斯性工作(高斯源直接失效),它天生分不清源的顺序和符号/幅度,它保证统计独立却不保证经济含义。把这些约束当成前提而非事后惊喜,ICA 就是盲源分离的利器;忽视它们,你分出的”隐藏因子”很可能只是数学幻觉。

(本文所有数字来自纯 numpy 合成实验,随机种子固定,可复现。真实市场的混合结构非平稳、含噪,ICA 的还原精度会显著低于合成实验的 0.999。)

独立成分分析 ICA:把混合信号拆回相互独立的源
https://blog.halo26812.eu.org/blog/ica-financial-signal
Author halo
Published at 2026年7月24日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨