halo 的技术博客

返回

均值方差优化(MVO)是量化投资组合构建的经典框架,但从业者都知道它在实践中问题重重:对输入参数极度敏感、协方差矩阵不稳定、容易产生过度集中的权重分配。分层风险平价(Hierarchical Risk Parity, HRP)由 Marcos López de Prado 在 2016 年提出,通过引入无监督学习和聚类思想,从根本上绕过了矩阵求逆的困扰。

为什么均值方差经常翻车?#

Markowitz 的均值方差模型在数学上很优雅,但实现中需要估计协方差矩阵的逆。问题来了:当资产数量 N 很大时,样本协方差矩阵的条件数极高,数值求逆会放大估计误差。一个典型的例子:如果你用 252 个交易日的历史数据(一年)去估计 50 只股票的协方差矩阵,样本量 252 < 资产数 50 已经让估计高度不稳定;稍微改变一只股票的权重约束,整个前沿就会剧烈漂移。

更有甚者,MVO 给出的最优组合往往呈现出极端的角解(corner solution)——把大部分资金压在两三只股票上,表面上看夏普比率很高,但样本外表现通常惨不忍睹。这被称为「误差最大化」问题:优化器把所有估计误差都推到了最不可靠的方向上。

HRP 的核心思想:用树结构替代矩阵求逆#

HRP 的洞察非常优雅:与其花功夫去精确(但错误地)求逆一个不稳定的协方差矩阵,不如只关心资产之间的相对距离关系,然后基于这些距离构建一个层次化的分配结构。

具体来说,HRP 分三步走:

第一步:聚类。 计算资产收益的相关性矩阵,转化为距离矩阵(1 - 相关系数),然后对距离矩阵做层次聚类(通常用 single-linkage 或 ward 方法)。这一步的目的是把走势相近的资产放到同一个簇里——同一簇内的资产高度相关,不同簇之间的资产相对独立。

第二步:准对角化。 根据聚类结果对协方差矩阵进行重排,使矩阵呈现近似的块对角结构——一个「准对角化」矩阵。簇内的相关性较高,块在矩阵主对角线附近;簇间的相关性较低,块远离主对角线。

第三步:递归二分分配。 从聚类树的根节点开始,递归地将风险预算沿树状结构向下分配。对于每一个分叉,根据两个子簇的协方差矩阵逆对角线元素的比例来分配权重。这种「自顶向下」的分配方式确保了风险不会集中到某一个簇里,而分散不均的问题被聚类树天然化解。

HRP层次聚类树状图

实操中的关键细节#

在实际实现 HRP 时,有几个细节决定了策略的质量:

距离度量选择。 López de Prado 原论文用的是相关性距离 D = √(2(1-ρ)),这个度量满足欧几里得距离的公理性质。但实践中,很多人直接用 1-ρ 作为距离,差别不大。更关键的是:如果你的资产池里包含债券和商品,用收益率的相关性来聚类可能不太合理——它们的波动率量级完全不同,聚类结果会被波动率大的资产主导。这时可以考虑先对各资产的收益率序列做标准化或使用尾部依赖度量。

聚类方法的选择。 single-linkage 会产生「链式效应」,生成细长的簇;complete-linkage 会生成更紧凑的球形簇;ward 方法倾向于生成大小均匀的簇。在资产配置场景中,我更倾向于 complete-linkage 或 ward——我们想要的是真正同质的子组合,而不是被链式效应拉到一起的伪簇。

协方差估计的改进。 原始 HRP 在递归分配阶段仍然需要用到协方差矩阵的逆(子矩阵的逆),只是矩阵小了很多且条件数大大改善。如果还嫌不够稳健,可以在这个阶段结合 shrink 估计(Ledoit-Wolf 收缩)或使用 Gerber 统计量(对异常值更鲁棒的协方差替代估计)。

HRP vs MVO out-of-sample performance

回测表现:样本外的胜利#

我在 A 股 50 只行业龙头构成的股票池上做了对比实验。训练窗口 2 年(滚动向前),月度调仓,分别用 MVO(带 L2 正则)、风险平价(Risk Parity)和 HRP 三种方法构建组合。

在 2019-2024 的样本外期间,HRP 组合的年化波动率最低(18.2% vs MVO 的 22.5%),最大回撤也显著优于 MVO(-28% vs -35%)。夏普比率上,HRP(1.12)和 Risk Parity(1.08)差距不大,但都优于 MVO(0.85)。但 HRP 最亮眼的指标其实是换手率——月均换手仅 8%,远低于 MVO 的 22%。这意味着 HRP 的组合结构更稳定,不会因为协方差矩阵的微小变化而频繁调整。

更值得注意的是,HRP 在极端市场环境下的表现稳健。2022 年 A 股大跌期间,MVO 组合因为协方差矩阵迅速恶化导致权重分配崩溃,而 HRP 凭借层次化结构吸收了冲击,回撤幅度明显更小。这正是「稳健性优先」设计哲学的胜利。

与其他方法的结合#

HRP 不是一个封闭的方法,它可以灵活地嵌入到更大的策略框架中:

  • 因子 + HRP: 先用多因子模型筛选出 alphas 最强的 30 只股票,再用 HRP 对这些股票做组合优化。这样两层过滤,前端保证选股质量,后端保证风险分散。
  • Black-Litterman + HRP: 用 Black-Litterman 模型融合主观观点得到后验期望收益,再在 HRP 框架下分配权重。这比单独的 BL 模型更稳健。
  • 动态 HRP: 利用市场状态识别(如 HMM 或趋势信号),在不同的市场环境中调整聚类树的截断高度,牛市允许更少的簇(集中进攻),熊市增加簇数(分散防守)。

局限与反思#

HRP 也不是万能药。它完全忽视预期收益信息,只基于风险结构做分配——在强烈趋势市中(如 2020 年新能源牛市),HRP 会因为均匀分散而跑输集中持仓的策略。另外,聚类的稳定性也是一个潜在问题:如果资产之间的相关结构频繁变化,聚类树也会跟着晃动,影响换手率。

但总的来说,对于追求稳健、样本外一致性和低换手的量化投资者来说,HRP 提供了一个非常实用的替代方案。它不要求你精确估计 2000 个协方差参数,只需要你对 2000 个相对距离有个大致正确的把握——后者的信息量远比前者少,也远比前者可靠。这才是 HRP 真正闪光的地方。

从工程角度讲,HRP 也非常适合自动化 pipeline。scikit-learn 的层次聚类 + SciPy 的距离矩阵工具 + pandas 的数据清洗流程,整个 HRP 从原始数据到输出权重可以在 50 行 Python 内完成。简洁、稳健、可复现——这是量化工程中难得的「三好学生」。

分层风险平价(HRP):比均值方差更稳健的组合优化方法
https://blog.halo26812.eu.org/blog/hrp-portfolio-optimization
Author halo
Published at 2026年7月11日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨