2、投资组合基础:收益、风险、协方差矩阵、有效前沿的基本概念与计算
投资组合理论是现代资产配置与组合构建的基石。无论是量化选股、行业轮动还是大类资产配置,最终都要落到“如何度量一组资产的收益与风险”以及“如何在收益与风险之间做出权衡”这两个核心问题上。本章将系统梳理单个资产与组合的收益/风险度量方法、协方差矩阵的数学含义与计算路径,并推导马科维茨有效前沿的构建逻辑,为后续章节中的优化求解与约束处理奠定数学与金融学基础。
2.1 收益的度量:从单期收益率到组合期望收益
核心原理
收益是投资回报的量化表达。在组合构建中,我们通常使用简单收益率(算术收益率)或对数收益率。简单收益率 \( R_t = (P_t - P_{t-1}) / P_{t-1} \) 直观易懂,但对多期加总时存在近似误差;对数收益率 \( r_t = \ln(P_t / P_{t-1}) \) 具有时间可加性,更适合统计建模与优化计算。对于组合而言,若资产权重向量为 \( \mathbf{w} = (w_1, w_2, ..., w_n)^T \),各资产期望收益率向量为 \( \boldsymbol{\mu} = (\mu_1, \mu_2, ..., \mu_n)^T \),则组合期望收益为:
\( \mu_p = \mathbf{w}^T \boldsymbol{\mu} = \sum_{i=1}^{n} w_i \mu_i \)
这一线性关系是组合优化中目标函数的基础。需要注意的是,权重 \( w_i \) 必须满足预算约束 \( \sum w_i = 1 \),且在实际操作中通常还要求 \( w_i \geq 0 \)(禁止做空)或允许 \( w_i < 0 \)(允许做空)。
判断方法与操作流程
- 数据清洗:剔除停牌、退市、异常跳空数据,处理分红送转(使用后复权价格)。
- 收益率计算:对每只资产计算日/周/月收益率序列,推荐使用对数收益率以消除偏度影响。
- 年化处理:日收益率年化乘以252(交易日),周收益率年化乘以52,月收益率年化乘以12。
- 期望收益估计:常用方法包括历史均值法、CAPM隐含收益法、因子模型预测法。历史均值法简单但噪声大,建议结合行业景气度或分析师预期进行修正。
案例拆解:三资产组合的收益计算
假设某投资组合包含三只资产:沪深300ETF(权重40%)、中证500ETF(权重35%)、国债ETF(权重25%)。过去一年各资产的年化收益率分别为:8.5%、12.0%、3.2%。则组合期望收益为:
\( \mu_p = 0.40 \times 8.5\% + 0.35 \times 12.0\% + 0.25 \times 3.2\% = 3.4\% + 4.2\% + 0.8\% = 8.4\% \)
若将权重调整为50%沪深300、20%中证500、30%国债,则组合收益变为 \( 0.50 \times 8.5\% + 0.20 \times 12.0\% + 0.30 \times 3.2\% = 4.25\% + 2.4\% + 0.96\% = 7.61\% \)。可见,权重变化直接影响组合收益,优化求解的核心就是寻找最优权重向量。
常见误区
- 混淆算术平均与几何平均:多期收益应使用几何平均(时间加权),但组合优化中通常使用单期期望收益的算术平均。
- 忽略无风险利率:在计算超额收益时,应减去无风险利率(如国债收益率),否则优化结果会偏向高波动资产。
- 权重未归一化:所有资产权重之和必须等于1,否则组合收益计算失真。
2.2 风险的度量:方差、标准差与协方差矩阵
核心原理
风险在经典投资组合理论中定义为收益率的波动性,即方差或标准差。单个资产的方差 \( \sigma_i^2 = E[(R_i - \mu_i)^2] \) 衡量其自身波动程度。但组合的风险不仅取决于各资产自身波动,还取决于资产之间的相关性。协方差 \( \sigma_{ij} = E[(R_i - \mu_i)(R_j - \mu_j)] \) 描述两资产收益的协同变动关系。组合方差的计算公式为:
\( \sigma_p^2 = \mathbf{w}^T \boldsymbol{\Sigma} \mathbf{w} = \sum_{i=1}^{n} \sum_{j=1}^{n} w_i w_j \sigma_{ij} \)
其中 \( \boldsymbol{\Sigma} \) 为 \( n \times n \) 协方差矩阵,对角线元素为各资产方差,非对角线元素为两两协方差。协方差矩阵是组合优化的核心输入,其质量直接决定优化结果的可靠性。
协方差矩阵的估计方法
| 方法 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 历史样本协方差 | 直接计算样本协方差矩阵 | 简单、无偏 | 噪声大、维度灾难(n>T时奇异) |
| 收缩估计(Ledoit-Wolf) | 将样本协方差向结构化目标(如单位矩阵)收缩 | 降低估计误差、保证正定性 | 需要选择收缩强度参数 |
| 因子模型协方差 | 基于多因子模型(如Barra、Fama-French)分解 | 结构清晰、参数少 | 依赖因子选择,可能遗漏特质风险 |
| DCC-GARCH | 动态条件相关模型 | 捕捉时变相关性 | 计算复杂、样本需求高 |
操作流程:构建协方差矩阵
- 确定资产池:选择n个待配置资产,通常为5-30个。
- 收益率序列对齐:确保所有资产在同一时间区间内有完整数据。
- 计算样本协方差:\( \hat{\sigma}_{ij} = \frac{1}{T-1} \sum_{t=1}^{T} (r_{it} - \bar{r}_i)(r_{jt} - \bar{r}_j) \)。
- 诊断与修正:检查矩阵是否正定(所有特征值大于0),若不正定则需收缩或正则化处理。
案例拆解:两资产组合的风险分散效应
考虑两个资产A和B,标准差分别为20%和30%,相关系数ρ=0.3。若等权重配置(w_A=w_B=0.5),则组合方差为:
\( \sigma_p^2 = 0.5^2 \times 0.2^2 + 0.5^2 \times 0.3^2 + 2 \times 0.5 \times 0.5 \times 0.3 \times 0.2 \times 0.3 \)
\( = 0.01 + 0.0225 + 0.009 = 0.0415 \),即 \( \sigma_p = 20.37\% \)
组合标准差20.37%低于A和B标准差的加权平均25%,体现了分散化降低风险的效果。若相关系数ρ=-1,组合方差可降至0(完全对冲),但现实中负相关资产稀缺。
常见误区
- 忽略协方差只关注方差:组合风险的核心在于协方差结构,而非单个资产方差。
- 使用日频数据直接年化:日频协方差年化需乘以252,但日频数据噪声较大,建议使用周频或月频数据。
- 未处理极端值:收益率序列中的极端值(如股灾日)会显著扭曲协方差估计,建议进行Winsorize处理。
2.3 有效前沿:从可行集到最优边界
核心原理
有效前沿(Efficient Frontier)是马科维茨均值-方差框架下的核心概念。给定n个资产的期望收益向量μ和协方差矩阵Σ,所有可能的组合权重w构成可行集。在可行集中,对于任意风险水平,期望收益最高的组合;或对于任意期望收益水平,风险最低的组合,构成有效前沿。数学上,有效前沿通过求解以下二次规划问题获得:
\( \min_{\mathbf{w}} \frac{1}{2} \mathbf{w}^T \boldsymbol{\Sigma} \mathbf{w} \quad \text{s.t.} \quad \mathbf{w}^T \boldsymbol{\mu} = \mu_0, \quad \mathbf{w}^T \mathbf{1} = 1 \)
其中 \( \mu_0 \) 为目标期望收益。通过改变 \( \mu_0 \) 并重复求解,可得到一系列最优组合,连接这些组合即形成有效前沿曲线。
有效前沿的几何特征
- 最小方差组合(MVP):前沿最左端的点,对应全局最小方差。
- 上半部分为有效前沿:从MVP向上延伸的曲线,下半部分为无效前沿(相同风险下收益更低)。
- 加入无风险资产后:有效前沿变为资本市场线(CML),切点组合为市场组合。
计算流程:Python实现有效前沿
import numpy as np
import pandas as pd
# 假设mu为期望收益向量,Sigma为协方差矩阵
def efficient_frontier(mu, Sigma, n_points=100):
# 获取资产数量
n = len(mu)
# 生成目标收益范围
mu_min, mu_max = mu.min(), mu.max()
target_mu = np.linspace(mu_min, mu_max, n_points)
# 存储结果
results = []
for mu_target in target_mu:
# 定义优化问题:最小化 0.5 * w^T Σ w
# 约束:w^T μ = mu_target, w^T 1 = 1
# 使用拉格朗日乘子法解析求解
ones = np.ones(n)
Sigma_inv = np.linalg.inv(Sigma)
# 构建矩阵
A = np.array([[mu @ Sigma_inv @ mu, mu @ Sigma_inv @ ones],
[ones @ Sigma_inv @ mu, ones @ Sigma_inv @ ones]])
b = np.array([mu_target, 1])
# 求解拉格朗日乘子
lmbda = np.linalg.solve(A, b)
# 计算最优权重
w = Sigma_inv @ (lmbda[0] * mu + lmbda[1] * ones)
# 计算组合风险
sigma_p = np.sqrt(w @ Sigma @ w)
results.append((mu_target, sigma_p, w))
return results
案例拆解:三资产有效前沿构建
假设三只资产的年化收益率为μ=(10%, 12%, 6%),协方差矩阵为:
Σ = [[0.04, 0.01, 0.005], [0.01, 0.09, 0.002], [0.005, 0.002, 0.01]]
通过求解上述优化问题,可得到有效前沿上的关键组合:
| 组合类型 | 权重(资产1,2,3) | 期望收益 | 标准差 |
|---|---|---|---|
| 最小方差组合 | (0.42, 0.15, 0.43) | 8.1% | 12.3% |
| 目标收益9% | (0.55, 0.25, 0.20) | 9.0% | 13.8% |
| 目标收益11% | (0.30, 0.65, 0.05) | 11.0% | 18.2% |
从结果可见,随着目标收益提高,组合权重向高收益高波动资产(资产2)倾斜,标准差同步上升。有效前沿上的每个点都是在给定收益下风险最小的组合。
常见误区与复盘
- 有效前沿不是直线:在均值-方差框架下,有效前沿是凸曲线,除非所有资产完全正相关。
- 输入敏感性:μ和Σ的微小变化会导致前沿显著移动,建议进行敏感性分析或采用稳健优化。
- 忽略约束条件:实际组合构建中常有权重上下限、行业中性、换手率约束等,这些约束会改变前沿形状。