矩阵是投资组合的机器
投资组合问题就是矩阵问题。协方差矩阵 Σ 包含各资产的方差和联动情况,几乎每项任务都要用它做点什么。scipy.linalg.solve(A, b) 对未知数 x 解 Ax=b。不要先算逆 inv(A) 再相乘:直接求解工作量更小,精度损失也更少。乔列斯基分解 linalg.cholesky(S, lower=True) 把协方差矩阵分成 Σ=LL⊤,其中 L 是下三角矩阵,即对角线上方全是零。若 z 是独立标准正态数构成的向量,则 Lz 的协方差就是 Σ,这就是模拟相关收益的方法。
Σ 的特征值告诉你真正有多少个独立的风险来源。linalg.eigvalsh(S) 对对称矩阵按从小到大返回特征值。两个相关系数为 ρ 的资产,其相关矩阵的特征值为 1+ρ 和 1−ρ,所以高度相关的资产有一个大特征值和一个极小特征值。最大特征值与最小特征值之比是条件数。条件数大意味着矩阵接近奇异,也就是几乎无法求逆,数据的微小变化就可能使求解的结果大幅摆动。使用 Σ 的逆的优化器对此尤其敏感。
Ax=b ⇒ x=solve(A,b),Σ=LL⊤,r=Lz,κ(Σ)=λminλmax(1) 两个资产的手算取
Σ=(4223)。它的乔列斯基因子是
L=(2102),因为
LL⊤ 给出
4、
2、
2 和
1+2=3。对独立抽样
z=(1,1),相关的抽样为
Lz=(2,1+2)=(2,2.414)。解
(2113)x=(35),消元得
x=(0.8,1.4)。
ρ=0.9 的相关矩阵特征值为
1.9 和
0.1,所以第一个因子承载总方差的
1.9/2=95%。特征值为
1 和
3 的矩阵条件数为
3。在真实数据上,SPY、QQQ、TLT 在
5,404 天里,SPY 与 QQQ 的相关系数为
0.92,它们各自与 TLT 的相关系数约为
−0.3。相关矩阵的特征值为
0.08、
0.86、
2.06,所以一个因子承载
69% 的方差,条件数为
26。
- 求解而不是求逆:
solve(A, b) 比 inv(A) @ b 更快更准。 - 乔列斯基制造相关性:把独立正态数乘以 L,得到协方差为 Σ 的收益。
- 留意条件数:高度相关的资产使 Σ 接近奇异,解变得不稳定。
实验:评分内容
- 乔列斯基因子20 分
- 解方程组10 分
- 条件数10 分
- 因子的方差占比10 分
- 各例程的用途15 分
- 模拟相关收益10 分
- 为什么不求逆25 分