从独立噪声到相关资产
随机数生成器给出的是独立抽样。资产之间相关,所以模拟投资组合需要具有正确协方差矩阵 Σ 的抽样。乔列斯基分解找到下三角矩阵 L,使 LLᵀ=Σ;于是若 z 是独立标准正态向量,Lz 的协方差恰为 L I Lᵀ=Σ。在 NumPy 中抽样以行的形式给出,所以对形状为 (n, d) 的数组 z 计算 z @ L.T。scipy.linalg.cholesky(cov, lower=True) 完成分解,矩阵不是正定时会报错,这很有用:它是协方差矩阵出问题的警报。用 np.random.default_rng(seed) 设定种子,实验就可以重复。
有了模拟器就能计算风险数字。每次抽样的组合收益是 draws @ w,水平 α 的一日在险价值是这些收益的 α 分位数的相反数(np.quantile)。对正态抽样它应与方差–协方差公式 -(wᵀμ+z_α√(wᵀΣw)) 一致,十二个资产上确实如此:模拟为 2.07%,公式为 2.08%,而历史法为 2.33%,因为真实收益的尾部比任何正态模型都厚。估计出的协方差矩阵也可能出问题:如果把两个资产的相关系数设为不可能的 1.2,最小特征值会变负(约 -6×10⁻⁵),乔列斯基分解会拒绝该矩阵。标准修复用 scipy.linalg.eigh:把低于一个小下限的特征值都抬到下限,重建矩阵并对称化。结果是正定的,与原矩阵只相差约 3×10⁻⁵。
- 乔列斯基把噪声变成相关性:当
cov = L @ L.T时,z @ L.T的协方差为cov。 - 正态抽样下模拟与公式应一致:与历史法的差距就是厚尾的代价。
- 分解失败本身就是信息:把非正定矩阵的小或负特征值抬高来修复。
实验:评分内容
- 乔列斯基因子10 分
- 相关抽样20 分
- 蒙特卡洛在险价值25 分
- 参数法在险价值15 分
- 修复协方差矩阵15 分
- 十二个资产的研究15 分