探索高效投资组合优化:层次聚类与HRP/HERC算法的实战应用
副标题:从基础原理到参数调优的资产配置策略
投资组合优化是现代金融决策的核心挑战,而层次聚类技术为解决传统方法的局限性提供了创新思路。本文将深入探讨Riskfolio-Lib库中层次风险平价(HRP)和层次等风险贡献(HERC)算法的工作原理,展示如何通过层次聚类实现更稳健的资产配置。无论您是量化分析师还是个人投资者,这些高效算法都能帮助您在复杂市场环境中构建风险分散的投资组合。
传统投资组合优化的困境与突破方向 📊
传统均值-方差优化方法面临三大核心挑战:协方差矩阵估计误差、计算复杂度高以及对输入参数的过度敏感。这些问题在资产数量增加时尤为突出,常常导致"优化悖论"——理论上最优的组合在实际应用中表现不佳。
层次聚类组合优化通过引入资产间的相关性结构分析,为解决这些问题提供了新思路。想象资产市场是一个社交网络,每个资产都是网络中的节点,相关性就是节点间的连接强度。层次聚类就像社交网络分析,能识别出关系密切的资产群体(聚类),从而简化复杂的市场结构。
这种结构分析带来三个关键优势:
- 降维效应:将高维资产空间转化为低维聚类空间
- 结构稳健性:利用资产间的内在关系降低估计误差
- 计算高效性:通过递归二分法大幅减少优化问题复杂度
HRP与HERC:两种层次聚类算法的核心思想对比 🔄
Riskfolio-Lib提供了两种强大的层次聚类优化算法,它们采用不同的策略将资产聚类转化为投资组合权重:
层次风险平价(HRP):自顶向下的风险分配
HRP算法采用"树状图分割"策略,类比企业组织结构:总部(整体组合)将预算分配给各部门(聚类),各部门再将预算分配给下属团队(子聚类),最终落实到每个员工(单个资产)。这种自顶向下的分配方式确保每个层级的风险得到平衡。
HRP的核心步骤包括:
- 计算资产间相关性并构建距离矩阵
- 使用层次聚类创建资产树状图
- 按树状图叶节点顺序重排资产(准对角化)
- 递归二分分配风险预算
层次等风险贡献(HERC):预定义聚类的风险均衡
HERC算法则像是预先设计部门结构的企业,先确定要创建多少个部门(预定义聚类数量K),再在部门间和部门内进行资源分配。这种方法允许更直接地控制风险分散程度,特别适合希望明确控制资产类别暴露的投资者。
HERC的创新点在于:
- 预先指定聚类数量K,增加了优化的可控性
- 在聚类间和聚类内进行双层风险分配
- 允许不同聚类采用不同的风险度量方法
算法适用场景对比:选择最适合您的策略 📋
| 场景特征 | 推荐算法 | 核心优势 | 潜在局限 |
|---|---|---|---|
| 资产数量多(>50) | HRP | 完全自动化,无需参数调整 | 风险分配可能过度集中于某类资产 |
| 有明确风险预算目标 | HERC | 可精确控制聚类数量和风险分配 | 需要合理选择聚类数量K |
| 市场高度不确定 | HRP | 对输入数据变化更稳健 | 可能错过局部最优解 |
| 特定行业/地区配置要求 | HERC | 可结合行业分类进行聚类 | 需要领域知识支持 |
| 计算资源有限 | HRP | 计算复杂度更低 | 大型组合优化速度较慢 |
实战指南:使用Riskfolio-Lib构建层次聚类组合 🚀
使用Riskfolio-Lib实现层次聚类组合优化仅需简单几步。以下是一个完整的工作流程示例,展示如何在实际数据上应用HRP和HERC算法:
import riskfolio as rp
import pandas as pd
# 加载资产收益数据
returns = pd.read_csv("examples/assets_data.csv", index_col=0)
# 创建层次聚类组合对象
hcp = rp.HCPortfolio(returns=returns)
# 计算HRP组合(默认参数)
w_hrp = hcp.optimization(model="HRP", rm="MV", linkage="ward")
# 计算HERC组合(指定聚类数量k=5)
w_herc = hcp.optimization(model="HERC", rm="MV", linkage="ward", k=5)
这段简洁的代码背后,Riskfolio-Lib处理了复杂的聚类计算和风险分配过程。结果可以通过内置的可视化工具进行分析,帮助您理解资产配置情况和风险贡献分布。
参数选择与调优策略 🔧
层次聚类组合的性能很大程度上取决于参数选择。以下是关键参数的调优指南:
风险度量(rm参数)选择
- "MV"(方差):最常用,适合正态分布收益
- "CVaR"(条件风险价值):极端风险保护,适合尾部风险关注者
- "EDaR"(熵值回撤风险):对序列相关性敏感,适合趋势市场
聚类方法(linkage参数)选择
- "ward":最小化簇内方差,适合相关性高的资产
- "average":基于平均距离,保留更多局部结构
- "single":适合检测小聚类,可能形成链式结构
HERC聚类数量(k参数)确定
- 推荐范围:5-10个聚类
- 资产数量少(<20):k=3-5
- 资产数量多(>100):k=8-12
- 自动选择:使用
opt_k_method="twodiff"让算法确定最优k值
约束条件应用:定制您的投资策略 ⚙️
实际投资中,我们常常需要施加各种约束条件。Riskfolio-Lib提供了灵活的约束设置功能,帮助您将实际投资限制纳入优化过程:
- 权重上下限:通过
w_min和w_max控制单个资产权重 - 行业/地区约束:限制特定类别资产的总权重
- 交易成本:纳入交易成本考量
- 流动性约束:确保组合可交易性
例如,设置单个资产最大权重不超过15%:
hcp = rp.HCPortfolio(returns=returns, w_max=0.15)
扩展资源
- 官方文档:docs/source/hcportfolio.rst
- 示例代码:examples/Tutorial 24 - Hierarchical Risk Parity (HRP) Portfolio Optimization.ipynb
- API参考:riskfolio/src/HCPortfolio.py
通过Riskfolio-Lib的层次聚类优化方法,投资者可以构建兼顾风险分散和计算效率的现代投资组合。无论是追求稳健回报的长期投资者,还是需要快速适应市场变化的量化交易者,HRP和HERC算法都能提供强大的工具支持,帮助您在不同市场环境下获得更稳健的投资回报。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust099- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
MiMo-V2.5-ProMiMo-V2.5-Pro作为旗舰模型,擅⻓处理复杂Agent任务,单次任务可完成近千次⼯具调⽤与⼗余轮上 下⽂压缩。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
Kimi-K2.6Kimi K2.6 是一款开源的原生多模态智能体模型,在长程编码、编码驱动设计、主动自主执行以及群体任务编排等实用能力方面实现了显著提升。Python00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00



