López de Prado 的层次风险平价
HRP 的赌注是:协方差矩阵里最可信的不是数值而是拓扑。层次聚类、准对角化、递归二分,一条不需要对协方差求逆的配置路线。
均值-方差优化的病根只有一处:。协方差矩阵的估计误差在求逆时被放大,最小的特征值被翻成最大的权重,于是你解出一个数学上最优、样本外一碰就碎的组合。这个诊断从 1980 年代起就写在文献里,处方一直是同一路:收缩、加约束、重采样——都是在设法让那个逆矩阵别那么疯。
Marcos López de Prado 2016 年那篇 “Building Diversified Portfolios that Outperform Out-of-Sample” 换了个方向:不求逆。层次风险平价(HRP)用层次聚类把资本一层层分下去,全程只读 ,从不对它求逆。
理解 HRP 最省力的角度不是”它有三个步骤”,而是问一个贯穿全文的问题:协方差矩阵里哪部分信息值得信? HRP 对这个问题给了一个很吝啬的回答,三个步骤各信一点点。看清楚它每步信了什么、没信什么,它的长处和它的毛病就同时清楚了。
三条路的分岔口
设定是标准的: 个资产, 个观测估出的协方差矩阵 ,要构造权重 。
MVO 对 求逆再解二次规划,等于宣称 的每一个元素都可信到能进逆矩阵—— 一小,这个宣称就是假的。风险平价退了一步,解等风险贡献方程组,不显式求逆,但解仍然依赖 的精确取值,且要迭代求根。HRP 退得最远:按相关性把资产聚类,在树上分配资本,稳定、快、无矩阵求逆。
它的哲学是相关性的结构告诉你怎么分散,哪怕协方差矩阵本身充满噪声。你不需要准确的 ,你只需要一个大致靠谱的排序。
第一步:树聚类——只信排序
先把相关矩阵换成距离。标准选择是
这是相关性上的一个合法度量(满足三角不等式): 映到 , 映到 。有了距离矩阵就做层次聚类,HRP 的标准选择是单链接,其他链接方式也能跑:
from scipy.cluster.hierarchy import linkage, dendrogram
from scipy.spatial.distance import squareform
# Correlation matrix
corr = np.corrcoef(returns.T)
# Distance matrix
dist = np.sqrt((1 - corr) / 2)
# Single-linkage clustering
dist_condensed = squareform(dist)
linkage_matrix = linkage(dist_condensed, method='single')
输出是一棵树,展示随着距离阈值下降资产如何合并:强相关的先并,弱相关的最后并。注意这一步从 里榨出来的东西有多少——只有一个顺序。 是 0.62 还是 0.68 对结果几乎没有影响,只要它们的相对大小没颠倒。这就是 HRP 稳健性的来源,也是它的第一个可疑之处:谁来保证这个顺序对?
单链接这个选择本身不是显然的。它以”链式”(chaining)效应著称,产出长条形的聚类;Ward 链接给出的树平衡得多。经验上单链接对 HRP 好用,理由是它保留相关矩阵的拓扑:强相关的组黏在一起,弱相关的组彼此推开,即使数据里有离群点也是如此。Ward 链接在组内方差偏大时可能把一个本该整体对待的相关组切开,这对 HRP 是坏事。反过来,如果相关性估计噪声很大,平均链接或完全链接可能更稳——单链接对距离度量里的噪声是敏感的。这些都是经验判断,没有一条是定理,后面还要再算这笔账。
第二步:准对角化——只信块
树给出一个资产排序,第二步就是按这个排序重排协方差矩阵,把相似的资产挪到一起。记 为树诱导的置换:
这不是线性代数意义上的对角化。矩阵仍然有非对角项,只是它们被集中到对角线附近。名字里的”准”就是这个意思。
为什么要挪?直觉还是从 Markowitz 的不稳定性来。当 呈”对角状”(资产近似独立)时逆矩阵良态、权重稳定;当 有大的非对角块(资产聚成相关组)时逆矩阵病态、权重乱跳。重排不改变矩阵的谱,改变的是它的可读性——高相关的块浮到对角线上:
Original (random order):
Σ = | X X X . . . X |
| X X X . . . X |
| X X X . . . X |
| . . . X X X . |
| . . . X X X . |
| . . . X X X . |
| X X X . . . X |
Quasi-diagonalized (cluster order):
Σ_qd = | X X X X . . . |
| X X X X . . . |
| X X X X . . . |
| X X X X . . . |
| . . . X X X X |
| . . . X X X X |
| . . . X X X X |
把 画成热图就能看见:块内高相关,块间低相关。这个结构才是下一步能成立的前提——递归二分每次切一刀,切的位置必须落在弱相关的地方,否则它就是在把一个整体劈成两半然后假装它们独立。准对角化的全部作用就是保证刀口落在该落的地方。
第三步:递归二分——只信对角线(几乎)
到这里才真正开始配资本。程序本身两行话说得完:所有资产先当一个聚类拿 100% 资本,把聚类劈成左右两个子聚类,按逆方差在两边分钱,然后对每个子聚类递归,直到叶节点。叶子的最终权重是从根到叶那条路径上所有分割系数的乘积。
关键在”按逆方差分”这一步。对方差分别为 、 的两个子聚类:
问题是 怎么算。一个聚类里有一堆相关资产,它的”方差”取决于你假设聚类内部怎么持有。至少有四种答案,而它们用到 的程度完全不同。
最省事的是把聚类当成一个单位暴露的资产,,其中 是 对应聚类 的子矩阵。稍微规矩一点是用等权组合方差 。另一端是聚类内的最小方差组合 ——这个要对子矩阵求逆,等于把 HRP 想避开的东西又请了回来。
López de Prado 取的是第三种:聚类内的逆方差组合(IVP)。权重
即每个资产按自身方差的倒数配权再归一化,聚类方差就是这个 IVP 在聚类内持有时的方差:
这里值得停一下。 只用了 的对角线,不需要求逆;但 这个二次型用的是完整的 ,非对角项进来了。所以”HRP 只用相关性做聚类、不用它加权”的说法要打个折扣:聚类内部的协方差确实影响了这个聚类拿到多少钱,只是它以一个标量的形式进来,而不是以逆矩阵的形式。这是 HRP 唯一一处真正读取了对角线以外的数值,也是它相比纯 IVP 多出来的那点分散信息。
分割式于是写成
这不是 50/50。聚类内方差更低的那一边拿更多资本,而”内方差更低”同时包含了两件事:这个聚类的成分波动率低,以及这个聚类内部本身分散得好。
四种选法在实践中给出的结果大体接近。第三种成为标准,一是因为它不求逆,二是因为它尊重聚类内各资产的相对波动率,三是因为它是 López de Prado 在 AFML 实现里用的那个,在他的样本外测试里压过等权。理论上没有哪一种是”对的”。
代码层面:
def hrp_allocate(cov, order):
n = len(cov)
weights = np.ones(n)
def _bisect(items):
if len(items) <= 1:
return
# Split items into two halves
mid = len(items) // 2
left, right = items[:mid], items[mid:]
# Compute cluster variances via the inverse-variance portfolio (IVP)
cov_l = cov[np.ix_(left, left)]
cov_r = cov[np.ix_(right, right)]
w_l = 1 / np.diag(cov_l)
w_l = w_l / w_l.sum()
w_r = 1 / np.diag(cov_r)
w_r = w_r / w_r.sum()
v_l = w_l @ cov_l @ w_l
v_r = w_r @ cov_r @ w_r
# Inverse-variance split between clusters
alpha_l = 1 / v_l / (1 / v_l + 1 / v_r)
alpha_r = 1 - alpha_l
# Update weights
weights[left] *= alpha_l
weights[right] *= alpha_r
# Recurse
_bisect(left)
_bisect(right)
_bisect(order)
return weights / weights.sum()
时间 ,空间 。MVO 那边的矩阵求逆是 。
逆方差分割不是随手写的
上面那个 看着像启发式,其实在一个明确的假设下它就是最优解。假设两个聚类 L 和 R 的协方差矩阵分别是 、,你要把 的资本给 L、 给 R,让合并后的组合方差最小:
分块对角这个写法就是关键假设:两个聚类互相独立。展开:
记 、,求导置零:
最优分割与对方聚类的方差成正比,也就是与自己方差的倒数成正比。这就是逆方差分割。
推导里把每个聚类当作等权持有(那个 向量),但换成 HRP 实际用的聚类内 IVP,公式一字不改:把 换成 即可。分割规则对聚类内权重的选择是不变的——任何汇总聚类风险的标量 都给出同样的 ,聚类内部怎么分是后续递归的事。
于是准对角化那一步的意义又清楚了一层:它不是为了好看,它是在给”两个聚类独立”这个假设造条件。刀口落在弱相关处,分块对角就近似成立,这个推导就近似有效。整条链是自洽的。
论文的证据到底是什么
2016 年那篇论文给 HRP 挂了三个性质。前两个从算法本身就能看清:无矩阵求逆(直接使用协方差矩阵,从不对其求逆,绕开了折磨 MVO 的特征值放大),以及层次化分散(资本自上而下分配、尊重聚类结构,于是你同时拿到聚类之间和聚类之内的分散)。第三个是样本外表现,这是一条实证主张,需要单独看证据。
需要说清楚的是,论文的证据是蒙特卡洛实验,不是在一堆真实市场数据集上的横截面比较。做法是模拟带块状相关结构的收益序列,在样本内估协方差、构组合,在样本外量它们的表现,比较 HRP、CLA(均值-方差那条线)和 IVP。结论是 HRP 的样本外方差明显低于另外两者,量级上是”低几成”而不是几个百分点。具体数字请回原文核对,不要引用二手转述。
同一实验设计里最能说明问题的是 大、 小那一端。想象 500 只股票、60 个月数据:Markowitz 要从 60 个观测估出的 500×500 矩阵里求逆,不稳定不是风险而是必然。HRP 在这个区间根本不做那件事,差距自然拉开。反过来,如果模拟的收益里压根没有聚类结构,树就是任意的,递归二分退化成近似等权——HRP 会收敛到等权,不会更好也不会更差。这是个健康的性质:它在没有结构可利用时不装作有。
跟风险平价的差别在哪
风险平价按等风险贡献分配,HRP 按逆聚类方差分配。两者相关,但吃进去的信息量差一个数量级。
风险平价需要一个被完整指定的协方差矩阵,解一个非线性方程组,解依赖 的精确取值。HRP 只要相关矩阵的结构,也就是树的拓扑,非对角相关性只用于聚类和聚类内的 ,不直接进权重公式。
后果是可以预测的:对 做一个小扰动,HRP 的权重跟着小动,风险平价的权重可能大动。经验上 HRP 的换手率通常低于风险平价,因为树在 的小扰动下是稳定的,而风险平价是在持续重新优化。这一条在扣完交易成本之后往往比样本外 Sharpe 那点差距更值钱。
与网络理论是同一件事的两种说法
基于相关的层次聚类和网络理论离得很近。把相关矩阵看成加权图(边权是资产对之间的相关性),图上的最小生成树(MST)用 条边以最小总权重连接所有资产,直接给出一个层次结构。在 这类距离度量下,单链接聚类与 MST 给出的结构是对应的——HRP 用的是标准层次聚类而非 MST,但两者读出的拓扑是同一个。
这个联系解释了 HRP 为什么在金融网络上管用:相关性本来就有自然的聚类结构(行业、因子、地区),树捕捉的就是这个结构。它也提醒你 HRP 的适用边界——如果你的资产集合根本没有这种块状结构,树就是在拟合噪声。
它的三个毛病
单链接的选择是任意的。 不同链接方法给出不同的树,不同的树给出不同的权重。经验上单链接效果不错,但没有任何理论理由说它应该优于 Ward、完全或平均链接。Raffinot (2018) 显示链接方式的选择对样本外表现有显著影响。回到开头那个问题:HRP 把全部信任押在”排序”上,而排序这一步的算法选择是拍出来的。
HRP 不使用预期收益。 它是纯粹基于风险的配置。如果你强烈看多某个资产相对另一个,HRP 不给你表达的地方。你可以通过加入一个带期望相关结构的合成”观点资产”来变通,但很别扭;更干净的做法是照常算树和准对角化,再用 Black-Litterman 后验收益对最终权重做倾斜。
逆方差分割是启发式的。 上一节那个推导只在聚类间独立时成立,而准对角化只能让这个假设”近似”成立。没有理论证明逆聚类方差是最优分割——它是受单资产均值-方差启发的一个合理选择,不是第一性原理的产物。更有原则的做法是在聚类层面按等风险贡献分割,那会给出另一组权重。Raffinot 的后续工作正是这么干的,叫层次等风险贡献(HERC):递归二分每一层都用 ERC 分割替代逆方差分割。HERC 理论上更干净,代价是更慢(每次分割要解一个 ERC 系统),而经验上两者的样本外表现相近。
除 HERC 之外还有几种变体值得知道。聚类内不做等权而是解一个小规模 MVO,等于在聚类层面加回一点基于风险的优化;在递归二分过程中直接加入禁止做空、头寸上限、行业约束,数学更麻烦但结果尊重现实约束。都是站得住脚的扩展。
带着这些毛病,HRP 仍然是严肃工具。它已被若干量化机构采用,mlfinlab 里有干净的实现。对 或协方差估计噪声很大的组合,它是一个站得住脚的默认选择。
什么时候值得动用它
粗略的分界是这样: 不到 20,任何方法都行,等权就够了,不必费心 HRP; 在 20 到 100 之间,HRP 和 Ledoit-Wolf 收缩后的 MVO 都能用,两个都试试看哪个合适; 超过 100,HRP 开始占优,因为协方差矩阵对 MVO 而言已经太吵,而等权虽然也能用,却不提供任何分散结构。
有个容易踩的误会:如果各资产波动率差异很大(比如股债混合),HRP 给你的不是”等风险贡献”而是”等聚类方差”。想要真正的 ERC,得加一步后处理,把权重调到满足 ERC 约束。一种常见的混合方案是让 HRP 只负责聚类层面的配置,每个聚类内部跑约束版 ERC——拓扑的稳健性从 HRP 来,分散的性质从 ERC 来。
参考文献
- López de Prado (2016). “Building Diversified Portfolios that Outperform Out-of-Sample.” Journal of Portfolio Management 42(4): 59-69. HRP 论文。
- López de Prado (2018). Advances in Financial Machine Learning. Wiley. 第 16 章有实现细节。ISBN: 978-1-119-48208-6.
- Raffinot (2018). “Hierarchical Clustering-Based Asset Allocation.” Journal of Portfolio Management 44(2): 89-99. 批评与扩展;HERC 出自作者同期的后续工作。
- Tola, Lillo, Gallegati & Mantegna (2008). “Cluster Analysis for Portfolio Optimization.” Journal of Economic Dynamics and Control 32(1): 235-258. 早期关于聚类配置的工作。
- DeMiguel, Garlappi & Uppal (2009). “Optimal Versus Naive Diversification: How Inefficient Is the 1/N Portfolio Strategy?” Review of Financial Studies 22(5): 1915-1953. 等权基准为什么这么难打败。
- Bruder, Gaussel, Richard & Roncalli (2013). “Regularization of Portfolio Allocation.” SSRN Working Paper. 基于风险的配置方法比较。
下一篇文章:最小方差组合。最简单的基于风险的 MVO,以及为什么它比基于预期收益的 MVO 更稳健。