← 返回模块
Q2.6.4.1beta 可读 · 未来免费校验通过内容版本 2026-05-26

聚类与密度估计

2.6.4 · 无监督学习与强化学习 · 数学与统计能力

Hook:5 年沪深300 日收益,你能不能贴出「风险开关」标签

上海某私募的初级量化研究员张昊把过去 5 年的沪深300 日收益拉成一张表——列是 20 日已实现波动率(realized volatility)、申万一级行业截面收益离散度(cross-sectional dispersion)、60 日市值加权平均成对相关,1,200 多个交易日。组长甩话:「把每天打成 risk-on / risk-off / crisis 三档,别先验定义阈值,让数据自己说话。」

他立刻意识到这不是 2.6.1 的监督设定——手上只有 xx,没有 yy。本课给的工具是​​聚类​​(clustering)与​​密度估计​​(density estimation):前者把 xx 划进若干互斥群组,后者直接估出 p(x)p(x)。但「没有标签」一直在:验证只能靠类簇稳定性与经济解释,​​没有留存集准确率​​(held-out accuracy)可言。

一、从监督到无监督:目标函数换了张脸

监督学习最小化 E(x,y)[L(h(x),y)]\mathbb{E}_{(x,y)}[L(h(x), y)];无监督只剩 {x1,,xn}PX\{x_1, \dots, x_n\} \sim P_X,「损失」失去原义,改用三类问题相关的代理目标(surrogate objective):

  • ​类内散度​​(within-cluster scatter)——驱动 k-means;
  • ​对数似然​​(log-likelihood)——驱动高斯混合模型(GMM)与密度估计;
  • ​重构误差​​(reconstruction error)——驱动 PCA 与自编码器(下一课)。

监督世界的「损失函数」量化预测错值的代价;无监督这边它只是「划分多紧 / 密度多贴」的优化代理。术语相同,语义已换。

二、k-means:类内散度上的坐标下降

nn 个样本划进 KK 个互斥子集 C1,,CK\mathcal{C}_1, \dots, \mathcal{C}_K,每子集配一个聚类中心 μkRd\mu_k \in \mathbb{R}^d。​​类内散度目标​

J(C1,,CK,μ1,,μK)=k=1KxCkxμk2.J(\mathcal{C}_1, \ldots, \mathcal{C}_K, \mu_1, \ldots, \mu_K) = \sum_{k=1}^K \sum_{x \in \mathcal{C}_k} \| x - \mu_k \|^2.

Lloyd 算法(Lloyd 1957/1982)是 JJ 上的​​坐标下降​​——固定 μ\muC\mathcal{C},固定 C\mathcal{C}μ\mu:

Ck={x:k=argminjxμj2},μk=1CkxCkx.\mathcal{C}_k = \{ x : k = \arg\min_j \| x - \mu_j \|^2 \}, \qquad \mu_k = \frac{1}{|\mathcal{C}_k|} \sum_{x \in \mathcal{C}_k} x.

两步交替,JJ 单调不增;可能的划分总数有限,必在有限步收敛到​​局部​​极小,​​不​​保证全局。初始化敏感由 ​k-means++​​(Arthur-Vassilvitskii 2007)的距离加权采样矫正,给出期望 O(logK)O(\log K) 近似比。KK 自己定不出来,是​​模型选择问题​​:工业上用肘部图、轮廓系数、Gap 统计量、BIC 等启发式。

三、高斯混合模型:把硬指派变软

k-means 暗含「类簇是各向同性球状」的几何假设。放松成「每个类簇是带均值 μk\mu_k 与​​协方差矩阵​​(covariance matrix)Σk\Sigma_k 的多元​​正态分布​​(Gaussian distribution)」即得​​高斯混合模型​​:

p(xπ,μ,Σ)=k=1KπkN(xμk,Σk),πk0,  kπk=1.p(x \mid \pi, \mu, \Sigma) = \sum_{k=1}^K \pi_k \, \mathcal{N}(x \mid \mu_k, \Sigma_k), \quad \pi_k \geq 0, \; \sum_k \pi_k = 1.

对数似然 ilogkπkN(xiμk,Σk)\sum_i \log \sum_k \pi_k \mathcal{N}(x_i \mid \mu_k, \Sigma_k) 因 log-sum 无闭式解。​​EM 算法​​(Dempster-Laird-Rubin 1977)引入隐变量 zi{1,,K}z_i \in \{1, \dots, K\} 表示「xix_i 由哪个分量生成」,用 Jensen 不等式构造下界 L(θ,q)logp(xθ)\mathcal{L}(\theta, q) \leq \log p(x \mid \theta),交替最大化即可。

​E 步​​算响应度(responsibility)γik\gamma_{ik}——它是指示函数 1{zi=k}\mathbb{1}\{z_i = k\} 在当前参数下的​​条件期望​​(conditional expectation),即后验概率:

γik=πkN(xiμk,Σk)jπjN(xiμj,Σj).\gamma_{ik} = \frac{\pi_k \mathcal{N}(x_i \mid \mu_k, \Sigma_k)}{\sum_j \pi_j \mathcal{N}(x_i \mid \mu_j, \Sigma_j)}.

​M 步​​把参数更新为响应度加权矩:

πk=1niγik,μk=iγikxiiγik,Σk=iγik(xiμk)(xiμk)iγik.\pi_k = \frac{1}{n} \sum_i \gamma_{ik}, \quad \mu_k = \frac{\sum_i \gamma_{ik} x_i}{\sum_i \gamma_{ik}}, \quad \Sigma_k = \frac{\sum_i \gamma_{ik} (x_i - \mu_k)(x_i - \mu_k)^\top}{\sum_i \gamma_{ik}}.

每次迭代​​单调提升​​的是​​观测数据​​(observed-data)对数似然,而非完整数据对数似然——Bishop §9.3 反复提的细节,容易写错。

四、k-means 是 GMM 的硬指派极限

固定 Σk=ϵI\Sigma_k = \epsilon I 并令 ϵ0\epsilon \to 0,响应度 γik\gamma_{ik} 塌缩成 one-hot 指示——每个 xix_i 完全归到最近的 μk\mu_k,M 步退化成 k-means 的算术平均更新。「硬指派 vs 软指派」其实是连续统的两端。

Formula Explorer

exp(-0.5*x^2) + exp(-0.5*(x-2)^2)

(把上式看作一维 GMM 在 0 与 2 处两个分量的密度叠加。改动间距,你能直观看到密度从「双峰可分」过渡到「单峰难分」——这正是聚类难度随重叠度上升的几何来源。)

五、密度估计与带宽的偏差—方差取舍

GMM 是​​参数式密度估计​​(parametric)的一种;若不愿假设参数族,​​核密度估计​​(KDE)给出非参数方案:

p^(x)=1nhdi=1nK ⁣(xxih).\widehat{p}(x) = \frac{1}{n h^d} \sum_{i=1}^n K\!\left( \frac{x - x_i}{h} \right).

KK 常取高斯或 Epanechnikov,​​带宽​​(bandwidth)hh 是关键旋钮:hh 太小,p^\widehat{p} 退化成经验测度上的 nn 个尖刺(方差爆掉);hh 太大,所有数据被抹成一个核形状的鼓包(偏差爆掉)。即便没有 yy,2.6.1 的​​偏差—方差​​框架仍以同一方式作用——容量取舍不挑监督场景。

六、量化场景:沪深300 风险开关与异常检测

回到张昊那张表。三维特征上跑 k-means(K=3),典型得到「低波—低相关」「中波—中相关」「高波—高相关」三组质心,贴上 risk-on / risk-off / crisis 即可作为头寸开关。但请记住三件事:​​类簇编号不稳定​​(换种子会重排;2020 年 3 月、2024 年初等极端日把高波质心拉得更远);​​前视偏差​​(若标准化用了全样本统计量,等于偷看未来,实盘必须 point-in-time);​​没有标签可对​​——验证只能靠稳定性、外推一致性、经济解释。

KDE 在国内私募更常出现在订单簿不平衡度与签名订单流(signed order flow)的异常检测——某分钟的 p^(xt)\widehat{p}(x_t) 低于阈值即触发限仓,把低密度事件当肥尾候选(fat-tail candidate)管理,而不是当 alpha 信号。聚类与密度估计几乎不直接出 alpha,它们给​​因子模型​​(factor model)上游的特征工程、下游的风险与执行环节服务——九坤、明汯、幻方等头部私募皆是如此。

Interactive Widget

该交互组件的正式实现会随课程交互层一起接入。当前 beta 先保留正文、公式和练习内容。

七、手算:6 个点跑两步 Lloyd,再跑一步 EM

设 6 个二维点 x1=(0,0)x_1 = (0,0)x2=(1,0)x_2 = (1,0)x3=(0,1)x_3 = (0,1)x4=(5,5)x_4 = (5,5)x5=(6,5)x_5 = (6,5)x6=(5,6)x_6 = (5,6),K=2K = 2,初始中心 μ1=(0,0)\mu_1 = (0,0)μ2=(1,1)\mu_2 = (1,1)

Exercise

(i) 跑一轮 Lloyd:写出指派、更新 μ1,μ2\mu_1, \mu_2,并计算更新后的 JJ

(ii) 再跑一轮,确认 JJ 不增,并说明此后任何一轮都不再改变划分——算法已稳态。

(iii) 改用 EM:初始化 μ1=μ2=(xˉ,yˉ)\mu_1 = \mu_2 = (\bar{x}, \bar{y})Σ1=Σ2=I\Sigma_1 = \Sigma_2 = Iπ1=π2=0.5\pi_1 = \pi_2 = 0.5。算第一轮 E 步的 γi,1\gamma_{i, 1},解释为什么所有样本的 γi,1\gamma_{i, 1} 都等于 0.5,这对工程实践意味着什么。

提示
先做指派:x1,x2,x3x_1, x_2, x_3μ1=(0,0)\mu_1=(0,0) 的平方距离为 0,1,10,1,1,到 μ2=(1,1)\mu_2=(1,1)2,1,12,1,1,同距按下标归 μ1\mu_1;x4,x5,x6x_4, x_5, x_6 显著近 μ2\mu_2。更新得 μ1=(13,13)\mu_1=(\tfrac{1}{3},\tfrac{1}{3})μ2=(163,163)\mu_2=(\tfrac{16}{3},\tfrac{16}{3})JJ 是两簇各 3 点到自身质心的平方距离之和,直接代入。
提示
EM 的 E 步:两分量起点完全重合,π1=π2\pi_1 = \pi_2Σ\Sigma 相等,响应度公式分子分母逐项相消,γi,1=γi,2=0.5\gamma_{i, 1} = \gamma_{i, 2} = 0.5 对所有 ii 成立。要让二者拉开,工程上要么对 μ1,μ2\mu_1, \mu_2 加轻微扰动,要么先跑一步 k-means 当 warm start——这正是 EM 对初始化敏感的根由。

八、过渡:发现谁抱团之外,还得给 xx 换坐标系

聚类与密度估计告诉你​​哪些​​点相互靠近,但它们假设 xx 的坐标已经「值得欧氏距离去丈量」。当 xR1000x \in \mathbb{R}^{1000}——一张宽因子面板、一个订单簿 snapshot——维数灾难下所有点彼此都很远,k-means 与 KDE 都会失效。下一课要解决的就是:在做聚类之前,先用 PCA、自编码器、t-SNE / UMAP 把 xx 嵌进一个低维、有意义的坐标系。坐标对了,本课的算法才真的能用。