halo 的技术博客

返回

先说结论:熵池化(Entropy Pooling)把『融合主观观点』这件事从参数空间搬到了概率空间——不动场景数据,只把每个场景的概率从均匀的 p 倾斜成新的 q,倾斜幅度由相对熵(KL 散度)最小化控制。这一步换掉了 Black-Litterman 的两个硬约束:分布不必是正态,观点不必是线性期望。代价是你需要一个足够大的场景库,以及对『观点太强会压垮先验』这件事保持警惕。本文在 20000 个 t 分布肥尾场景上完整走一遍:对偶求解、相关性传导、置信度权重路径,以及三个教科书不会提醒你的陷阱。

一、Black-Litterman 的天花板:正态 + 线性#

Black-Litterman(BL)是观点融合的经典答案:市场均衡收益做先验,主观观点做似然,贝叶斯公式合成后验期望收益。它解决了 Markowitz 优化对期望收益极端敏感的问题,1992 年以来一直是机构标配。

但 BL 的整个推导建立在两个假设上:

  1. 收益服从多元正态分布——先验是正态,观点误差是正态,后验才有解析解;
  2. 观点必须是线性的——只能表达”资产组合 P 的期望收益是 q”这种形式。

这两条在实践中经常撞墙。你想表达”我认为下个月黄金收益的 5% 分位不会低于 -3%“(分位数观点)?BL 表达不了。你想表达”我认为股债相关性会转正”(相关性观点)?表达不了。你的场景库是用 GARCH + t 分布生成的肥尾场景?BL 的正态框架直接不兼容——你辛苦建模的肥尾在合成后验的那一刻被抹平了。

Meucci 在 2008 年提出的熵池化换了一个思路:别在参数上做贝叶斯,在场景概率上做投影

二、核心机制:改概率,不改数据#

设你有 J 个蒙特卡洛场景 {x1,,xJ}\{x_1, \dots, x_J\}(每个场景是一组资产收益向量),先验概率 p=(1/J,,1/J)p = (1/J, \dots, 1/J)。观点被写成对后验概率 q 的线性约束

jqjg(xj)=b\sum_j q_j \, g(x_j) = b

比如”股票B的期望收益是 -1%“就是 jqjxj(B)=0.01\sum_j q_j \, x_j^{(B)} = -0.01。注意:约束对 q 线性,但 g()g(\cdot) 可以是场景的任意函数——收益的平方(波动率观点)、两资产收益乘积(相关性观点)、示性函数(概率观点)都行。这就是熵池化比 BL 表达力强的根源。

在所有满足约束的 q 中,选与先验 p 相对熵最小的那个:

q=argminq  jqjlnqjpjs.t.Aq=b,  jqj=1q^* = \arg\min_q \; \sum_j q_j \ln\frac{q_j}{p_j} \quad \text{s.t.} \quad Aq = b, \; \textstyle\sum_j q_j = 1

直觉是:观点要求你偏离先验,但只偏离到刚好满足观点为止,多一分都不偏。KL 散度就是”偏离量”的度量衡。

这个问题有优雅的对偶解。拉格朗日对偶把 J 维(本例 20000 维)的原问题降成”约束条数”维(本例 3 维:两条观点 + 归一化)的无约束凸问题:

解的形式是指数倾斜:qjpjexp(λg(xj))q_j \propto p_j \exp(-\lambda^\top g(x_j))。20000 个场景的求解在毫秒级完成——熵池化不是重采样、不是重新模拟,只是给已有场景重新发概率。

三、实验:肥尾场景库上的两条观点#

场景库刻意不用正态:4 个资产(股票A、股票B、债券、黄金),月度收益由 t(5) 分布 + 真实相关结构生成(股票A/B 相关 0.6,股债负相关),J = 20000。先验下股票B月度期望 +0.83%、黄金 +0.46%。

植入两条观点:

  • 观点1:股票B月度期望收益 = -1%(看空,与先验方向相反)
  • 观点2:黄金月度期望收益 = +1.5%(看多,约为先验 3 倍)

求解后验 q,检验三件事。

**第一,观点被精确满足,分布形态几乎不动。**后验下股票B期望 -1.0000%、黄金 +1.5000%,机器精度级命中。但直方图显示分布只是整体轻微平移倾斜——肥尾、偏度这些先验里的形态信息全部保留:

先验 vs 后验分布

这正是”改概率不改数据”的价值:BL 会把你的 t(5) 肥尾投影回正态,熵池化不会。

**第二,倾斜的代价可以精确计量。**KL 散度 = 0.057,换算成有效场景比例 exp(KL)=94.4%\exp(-KL) = 94.4\%——两条方向相反于先验的观点,只”消耗”了 5.6% 的场景多样性。概率比 q/p 的散点图直观展示了倾斜方向:股票B下跌且黄金上涨的场景被加权(q/p 最高约 3 倍),反方向场景被降权:

场景概率倾斜

**第三,相关性传导自动发生。**我们没有对股票A下任何观点,但它的后验期望从 +0.68% 掉到了 -0.03%。原因:股票A与股票B相关 0.6,“股票B跌”的场景被加权后,这些场景里股票A大概率也在跌。这是熵池化最容易被低估的特性——观点会沿着先验的相关结构自动扩散到所有资产,就像 BL 里 τΣ\tau\Sigma 项做的事,但这里是非参数的、对任意分布形态成立的。

四、置信度:从纯先验到完全采纳的连续路径#

实践中你很少 100% 相信自己的观点。Meucci 给的处方极简:置信度 c[0,1]c \in [0,1] 下的后验就是线性混合

q(c)=(1c)p+cqq(c) = (1-c)\,p + c\,q^*

对每个 c 用 q(c)q(c) 加权计算期望和协方差,再跑均值方差优化,得到完整的权重路径:

置信度权重路径

三个端点值得细看(风险厌恶 γ=8,做多约束):

置信度股票A股票B债券黄金
c = 0(纯先验)7.5%11.2%66.9%14.4%
c = 0.52.8%0%47.0%50.2%
c = 1(完全采纳)0%0%24.8%75.2%

被看空的股票B在 c ≈ 0.4 处清零;黄金从 14% 一路吃到 75%;没被下观点的股票A也因相关性传导被逐步挤出。权重对置信度的响应是连续、单调、可解释的——这比”拍脑袋在 BL 里调 Ω 矩阵对角线”透明得多。

五、三个陷阱#

**陷阱一:观点太强,概率质量坍缩。**KL 最小化不设防——如果你的观点离先验太远(比如”股票B月度期望 -15%“,先验分布里这种场景本来就稀少),求解器会把几乎所有概率压到极少数尾部场景上,有效场景比例掉到 1% 以下。此时后验的一切统计量都由几十个场景决定,噪声巨大。**每次求解后必须检查 exp(KL)\exp(-KL),低于 50% 就该怀疑观点本身,或者扩大场景库让尾部更稠密。**本例 94.4% 是健康值。

**陷阱二:期望观点会悄悄改变波动率。**你只对期望下了观点,但倾斜概率必然重塑整条分布——本例中股票B的后验波动率从 8.10% 涨到了 8.89%(月度),因为看空观点加权了下尾场景,而下尾天然更分散。如果下游优化器对波动率敏感(它一定敏感),这个副作用会进入权重。想锁住波动率,就得显式加二阶矩约束 jqj(xjμ)2=σ2\sum_j q_j (x_j - \mu)^2 = \sigma^2——熵池化支持,但每加一条约束都在消耗有效场景。

**陷阱三:置信度 c 无处校准。**c = 0.5 是什么意思?“我有一半把握”在统计上没有可检验的定义。BL 的 Ω 至少还能挂靠到观点历史命中率上,熵池化的线性混合更像一个平滑旋钮。务实的做法是把 c 当敏感性参数用:报告整条 c 路径(如上图)而不是单点权重,让决策者看到”观点从不信到全信,组合怎么变”——路径中段的陡峭跳变(如股票B清零点)比任何单一 c 值都更有信息量。

六、什么时候用熵池化,什么时候老实用 BL#

熵池化的适用面是”场景库本身有价值”的情形:你已经花大力气建了肥尾/跳跃/regime 切换的蒙特卡洛引擎,不想让观点融合这一步把分布形态毁掉;或者你的观点天然是非线性的(波动率、相关性、尾部概率)。此时 BL 没有位置,熵池化是唯一顺手的工具。

反过来,如果你的输入就是期望收益向量 + 协方差矩阵、观点就是线性期望、正态假设你也不在乎——BL 的解析解更快、参数意义更被市场熟知,没必要为了新潮换工具。

还有一条实践红线:熵池化的输出质量上限就是场景库的质量上限。它不创造信息,只重新分配概率。场景库如果没覆盖”股票B跌 1% 同时黄金涨 1.5%“的联合区域,再优雅的 KL 投影也只能在错误的支撑集上打转。先验生成器(GARCH、copula、bootstrap)的功课,一分都省不掉。

熵池化观点融合:用相对熵把主观观点揉进先验分布
https://blog.halo26812.eu.org/blog/entropy-pooling-views
Author halo
Published at 2026年7月25日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨