关于 diversification
面向财富管理场景的投资组合分散化技能,讲解协方差、相关性与风险归因,并提供公式、示例和 Python 演示脚本。
主要功能
- 01投资组合方差与协方差
- 02分散化比率与有效前沿
- 03最小方差组合权重
- 04资产与因子风险贡献
- 05带验证功能的 Python 演示
适用场景
- 01比较不同组合配置的风险
- 02衡量分散化带来的收益
- 03找出组合风险的主要来源
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ joellewis/ finance_skills --skill diversification安装后在 Claude Code 中输入/diversification确认已加载。
附带文件scripts/diversification.py
详细介绍
分散化
核心概念
投资组合方差(2 项资产)
对于由 2 项资产构成的投资组合,权重分别为 w_1 和 w_2,波动率分别为 sigma_1 和 sigma_2,相关系数为 rho_12:
sigma^2_p = w_1^2 * sigma_1^2 + w_2^2 * sigma_2^2 + 2 * w_1 * w_2 * sigma_1 * sigma_2 * rho_12
只要 rho_12 < 1,就会产生分散化收益,因为投资组合波动率会低于各项资产波动率的加权平均值。
投资组合方差(n 项资产)
对于包含 n 项资产、权重向量为 w、协方差矩阵为 Sigma 的投资组合,用矩阵表示为:
sigma^2_p = w' * Sigma * w
该公式适用于任意数量的资产,并涵盖所有两两相关性。
分散化收益
只要任意一对资产的相关系数低于 1,投资组合波动率就严格低于各项资产波动率的加权平均值:
sigma_p < Sigma(w_i * sigma_i) when rho_ij < 1 for some i,j
平均相关性越低,分散化收益越大。
有效前沿
有效前沿是指在每个风险水平下能提供最高预期收益的投资组合集合(等价地说,是在每个收益水平下风险最低的投资组合集合)。有效前沿以下的投资组合并非最优——通过重新分配权重可以改善它们。
最小方差投资组合
无论预期收益如何,波动率都尽可能低的投资组合:
w_mv = Sigma^(-1) * 1 / (1' * Sigma^(-1) * 1)
其中,1 是全 1 向量。该投资组合仅取决于协方差矩阵,而非预期收益,因此对估计误差更具稳健性。
相关性变化
相关性并非恒定不变。在市场危机期间,风险资产之间的相关性往往会急剧上升(“相关性崩溃”或“相关性收紧”),导致分散化收益恰恰在最需要时减少。主要影响:
- 使用危机期间的相关性矩阵对投资组合进行压力测试
- 跨资产类别(股票、债券、商品、实物资产)分散投资,比在同一资产类别内部进行分散投资更稳健
分散化比率
衡量投资组合实现了多大程度分散化的指标:
DR = (Sigma(w_i * sigma_i)) / sigma_p
完全相关资产组成的投资组合,其 DR = 1。DR 越高,分散化效果越好。由波动率相同、相关性为零的资产构成的完全分散化等权投资组合,其 DR = sqrt(n)。
最大分散化投资组合
使分散化比率达到最大的投资组合。这是均值-方差优化的另一种选择,不需要输入预期收益——它仅依赖于波动率和相关性。
因子分散化
真正的分散化意味着分散于多个相互独立的风险因子,而不仅仅是持有许多资产。具有相同因子敞口的资产(例如,多只受增长因子驱动的科技股)所提供的分散化程度低于其数量所暗示的程度。主要因子包括:
- 市场、规模、价值、动量、质量、低波动率
- 利率、信用、通胀
- 地域、行业、货币
风险贡献
资产 i 对投资组合波动率的风险贡献:
RC_i = w_i * (Sigma * w)_i / sigma_p
其中,(Sigma * w)_i 是向量 Sigma * w 的第 i 个元素。所有风险贡献之和等于投资组合波动率。该分解揭示了哪些资产真正驱动投资组合风险。
边际风险贡献
投资组合波动率相对于资产 i 权重的变化率:
MRC_i = (Sigma * w)_i / sigma_p
风险贡献 = 权重 * 边际风险贡献:RC_i = w_i * MRC_i
边际分散化收益递减
增加资产所带来的分散化收益会迅速递减。实证研究表明:
- 15-20 项互不相关的资产即可获得大部分分散化收益
- 超过 30 项资产后,新增的风险降低效果微乎其微
- 渐近投资组合方差等于平均协方差(系统性风险无法通过分散化消除)
关键公式
| 公式 | 表达式 | 使用场景 |
|---|---|---|
| 两类资产组合方差 | sigma^2_p = w_1^2sigma_1^2 + w_2^2sigma_2^2 + 2w_1w_2sigma_1sigma_2*rho_12 | 两类资产的风险计算 |
| n 类资产组合方差 | sigma^2_p = w' * Sigma * w | 一般组合风险 |
| 最小方差权重 | w_mv = Sigma^(-1)*1 / (1'*Sigma^(-1)*1) | 风险最低的组合 |
| 分散化比率 | DR = Sigma(w_i*sigma_i) / sigma_p | 衡量分散化程度 |
| 风险贡献 | RC_i = w_i * (Sigma*w)_i / sigma_p | 资产层面的风险归因 |
| 边际风险贡献 | MRC_i = (Sigma*w)_i / sigma_p | 风险对权重的敏感度 |
| 渐近方差 | sigma^2_p → avg(cov_ij) as n → infinity | 分散化极限 |
示例计算
示例 1:两类资产组合波动率
已知:
- 股票:sigma = 20%,权重 = 60%
- 债券:sigma = 5%,权重 = 40%
- 相关系数:rho = 0.2
计算: 组合波动率
解答:
sigma^2_p = (0.60)^2 * (0.20)^2 + (0.40)^2 * (0.05)^2 + 2 * (0.60) * (0.40) * (0.20) * (0.05) * (0.20)
sigma^2_p = 0.36 * 0.04 + 0.16 * 0.0025 + 2 * 0.60 * 0.40 * 0.20 * 0.05 * 0.20
sigma^2_p = 0.0144 + 0.0004 + 0.00096
sigma^2_p = 0.01576
sigma_p = sqrt(0.01576) = 0.1255 = 12.55%
加权平均波动率 = 0.60 * 20% + 0.40 * 5% = 14.0%
分散化收益 = 14.0% - 12.55% = 1.45 个百分点的风险降低。
示例 2:4 类资产组合的分散化比率
已知:
- 资产:A(sigma=15%,w=25%)、B(sigma=20%,w=25%)、C(sigma=10%,w=25%)、D(sigma=18%,w=25%)
- 组合波动率(根据完整协方差矩阵计算):sigma_p = 10.5%
计算: 分散化比率
解答:
加权平均波动率 = 0.2515% + 0.2520% + 0.2510% + 0.2518% = 3.75% + 5.0% + 2.5% + 4.5% = 15.75%
分散化比率 = 15.75% / 10.5% = 1.50
解读:该组合实现了显著的分散化——加权平均波动率比实际组合波动率高 50%。DR 为 1.50,表明相关性带来了显著收益。作为比较,完全相关资产构成的组合,其 DR = 1.0。
常见误区
- 分散化不只是持有更多资产——关键在于相关性结构;50 只高度相关的股票,分散化效果不如 10 只互不相关的股票
- 相关性并不稳定,且在市场承压期间往往会上升,因此分散化收益会在最需要时恰恰降低
- 过度分散(diworsification):持仓过多会稀释高确信度投资构想,并且在扣除成本后只能获得平庸回报
- 本国偏好:投资者会系统性地低配国际资产,错失重要的分散化来源
- 混淆资产分散化与因子分散化:尽管持有许多不同股票,持有 20 只成长股的组合仍未实现分散化
- 使用历史相关性,却不测试其对市场状态变化的敏感性
交叉引用
- historical-risk(wealth-management 插件):波动率、相关性以及系统性与特异性风险的基础知识
- asset-allocation(wealth-management 插件):分散化原则直接应用于组合构建与优化
- rebalancing(wealth-management 插件):通过再平衡长期维持分散化目标
- bet-sizing(wealth-management 插件):头寸规模与分散化相互影响——集中与分散的策略
- equity-compensation(wealth-management 插件):RSU、期权和 ESPP 产生的雇主股票集中持仓,是单只股票集中风险的常见来源,需要分阶段分散
- factor-investing(wealth-management 插件):跨因子溢价(价值、动量、质量)进行分散化,这是资产类别分散化之外的另一层分散化
运行脚本
uv run scripts/diversification.py # run the demo (uses PEP 723 inline deps)
uv run scripts/diversification.py --verify # check demo outputs against the worked examples (exit 1 on mismatch)
python3 scripts/diversification.py # alternative (requires: pip install numpy)
该演示会打印上述计算结果;其数值与本技能中的计算示例一致。运行 --help 可查看类和函数列表。若要以编程方式使用,请导入模块而非运行脚本——该演示仅在使用 python diversification.py 时执行。