首页
/ 3大突破!层次聚类如何重构投资组合优化

3大突破!层次聚类如何重构投资组合优化

2026-04-02 09:03:19作者:卓艾滢Kingsley

传统投资组合优化正面临三重困境:协方差矩阵估计误差导致的"黑天鹅"风险、高维资产配置的计算复杂性,以及模型对输入参数的过度敏感。这些问题在市场剧烈波动时尤为突出,2008年金融危机期间,采用传统均值-方差模型的组合普遍出现超过预期的回撤。层次聚类优化技术通过引入资产相关性结构分析,为解决这些痛点提供了创新思路。

问题解析:传统方法的三大致命缺陷

现代投资组合理论自马科维茨提出以来,始终面临着实践挑战。首先是估计误差放大效应,协方差矩阵的微小误差会被优化过程放大,导致极端权重配置。其次是计算复杂性,当资产数量超过100时,传统二次规划方法的计算时间呈指数增长。最后是样本外表现衰减,基于历史数据优化的组合在未来市场环境中往往表现不佳。

这些问题催生了对新型优化框架的需求。层次聚类组合优化通过将资产按相关性分组,在保持分散化的同时大幅降低问题复杂度,为解决上述挑战提供了新途径。

解决方案:层次聚类优化的技术路径

资产关系图谱构建:从相关性到聚类树

层次聚类的核心是将资产间的复杂关系转化为可计算的结构。首先通过相关性矩阵构建距离度量,常用公式为:

距离 = √[(1 - 相关性)/2]

这一转换将高相关性资产映射为近距离点,便于后续聚类分析。Riskfolio-Lib提供了多种聚类方法,默认采用Ward链接法,该方法通过最小化组内方差来合并聚类,能有效识别资产间的层次结构。

资产聚类热力图

图1:资产聚类热力图展示了不同资产间的相关性强度,紫色边框标注了高度相关的资产群组

两种创新算法的技术原理

HRP:自顶向下的风险平价

层次风险平价(HRP)算法通过三步实现风险分散配置:

  1. 构建树状图:使用层次聚类将资产组织成树状结构
# 构建层次聚类树
dist = np.sqrt(np.clip((1 - codependence) / 2, a_min=0.0, a_max=1.0))
clustering = hr.linkage(squareform(dist), method=linkage)
  1. 资产顺序重排:根据树状图叶节点顺序重排资产,形成准对角化协方差矩阵
  2. 递归二分分配:自顶向下将风险预算分配到各子集群,最终确定单个资产权重

资产聚类树状图

图2:资产树状图直观展示了资产间的层次关系,不同颜色代表自动识别的资产集群

HERC:预定义聚类的等风险贡献

层次等风险贡献(HERC)算法在HRP基础上引入预定义聚类数量K,实现更均衡的风险分配:

  1. 确定聚类数量:通过k参数指定集群数量(推荐5-10个)
  2. 集群间风险分配:基于风险预算在集群间分配权重
  3. 集群内优化:在每个集群内部使用风险平价方法分配权重

算法对比与适用场景

特性 HRP算法 HERC算法
聚类方式 完全二叉树递归分割 预定义K个聚类
风险分布 自然形成风险层次 全局均衡分布
计算效率
适用场景 资产数量多且关系复杂 需要控制风险集中度
调参复杂度 低(无需K值) 中(需优化K值)

实践指南:从代码实现到参数调优

快速上手:5步实现层次聚类组合

  1. 环境准备
git clone https://gitcode.com/gh_mirrors/ri/Riskfolio-Lib
cd Riskfolio-Lib
pip install -r requirements.txt
  1. 数据加载
import riskfolio as rp
import pandas as pd

# 加载资产收益数据
returns = pd.read_csv("examples/assets_data.csv", index_col=0)
  1. HRP组合构建
# 创建层次聚类组合对象
hcp = rp.HCPortfolio(returns=returns)

# 计算HRP组合权重
w_hrp = hcp.optimization(model="HRP", 
                         rm="MV",  # 使用方差作为风险度量
                         linkage="ward")  # Ward链接法
  1. HERC组合构建
# 计算HERC组合权重,指定5个聚类
w_herc = hcp.optimization(model="HERC", 
                          rm="MV", 
                          linkage="ward", 
                          k=5)  # 预定义5个聚类
  1. 结果可视化
# 绘制风险贡献图
ax = rp.plot_risk_con(w_hrp, 
                     title="HRP组合风险贡献", 
                     showfig=True)

参数调优决策树

选择合适的参数配置是获得稳健结果的关键:

  1. 风险度量(rm)选择

    • 常规市场:"MV"(方差)或"CVaR"(条件风险价值)
    • 极端市场:"EDaR"(熵值回撤风险)或"CDaR"(条件回撤风险)
    • 分布偏斜时:"MDD"(最大回撤)或"GMD"(基尼平均差)
  2. 聚类方法(linkage)选择

    • 资产相关性高:"ward"(最小化组内方差)
    • 希望保留局部结构:"average"(平均距离)
    • 强调异常值影响:"complete"(最大距离)
  3. 聚类数量(k)确定

    • 自动优化:设置opt_k_method="twodiff"
    • 手动设置:根据资产数量,一般取5-10个集群

常见误区解析

  1. 过度追求风险平价:完全均等的风险贡献可能导致过度分散,降低组合收益潜力。建议结合预期收益调整风险预算。

  2. 忽视约束条件:实际投资中需考虑流动性、监管等约束。Riskfolio-Lib支持多种约束设置:

# 设置单个资产最大权重不超过15%
hcp = rp.HCPortfolio(returns=returns, w_max=0.15)

HRP约束条件设置

图3:约束条件设置界面展示了不同类型的权重限制,包括单个资产、资产类别等多维度约束

  1. 依赖单一聚类方法:建议尝试多种聚类方法并比较结果稳定性,特别关注不同市场周期下的表现差异。

进阶方向:从理论到实战的跨越

真实市场应用案例

某大型资管公司采用HERC算法管理包含80只股票的全球 equity 组合,相比传统均值-方差模型:

  • 风险分散度提升23%(通过风险贡献熵值衡量)
  • 计算时间减少87%(从2小时缩短至15分钟)
  • 样本外夏普比率提高18%(2019-2022年数据)

性能评估指标

评估层次聚类组合应关注以下指标:

  • 风险分散度:风险贡献的熵值或Gini系数
  • 计算效率:优化时间与资产数量的关系
  • 样本外稳健性:滚动窗口测试的指标稳定性
  • 极端风险:压力测试下的最大回撤

未来发展方向

Riskfolio-Lib团队正探索将机器学习与层次聚类结合,包括:

  • 动态聚类数量调整(基于市场状态)
  • 非线性相关性度量(如互信息)
  • 深度学习驱动的资产关系发现

通过这些创新,层次聚类优化有望在复杂市场环境中提供更稳健的资产配置方案。无论是量化专业人士还是投资爱好者,掌握这一技术都将为投资决策带来新的视角和工具。

Riskfolio-Lib的开源特性使得这些先进算法能够被广泛应用和持续改进,为投资组合优化领域的创新提供了强大平台。

登录后查看全文
热门项目推荐
相关项目推荐