3、投资组合的收益与风险:双资产组合的收益与方差公式、N资产组合的矩阵化表达、分散化效应与有效前沿

好,咱们今天来聊聊马科维茨模型里最核心的一块——收益与风险的数学表达

说实话,我当年刚接触这部分时,觉得公式一堆,挺唬人的。但后来在实盘项目中跑过几次回测,才发现这些公式其实特别直观。说白了,它们就是帮我们回答一个问题:钱投进去,能赚多少?波动多大?

3.1 双资产组合:最朴素的起点

先从最简单的两个资产说起。假设你只买股票A和债券B,各投一部分钱。那整个组合的收益怎么算?

很简单,加权平均:

E(R_p) = w_A * E(R_A) + w_B * E(R_B)

其中 w_A + w_B = 1。这个公式我闭着眼睛都能写出来,因为太常用了。

但风险就没这么简单了。组合的方差公式长这样:

σ²_p = w_A² * σ²_A + w_B² * σ²_B + 2 * w_A * w_B * ρ_AB * σ_A * σ_B

注意那个 ρ_AB,它是资产A和B的相关系数。这个值决定了分散化到底有没有用。

关键洞察: 当 ρ_AB = 1 时,组合风险就是加权平均,分散化没效果。当 ρ_AB < 1 时,组合风险会低于加权平均——这就是分散化的魔力来源。

我在项目中遇到过一位客户,他坚持只买同一行业的股票,结果市场一波动,组合直接崩了。我给他看了这个公式,他才明白:相关性越低,风险降得越狠

3.2 N资产组合:矩阵化表达

两个资产好理解,但实际投资中,我们往往要处理几十甚至上百个资产。这时候再用公式一个个写,手都得写断。

所以,我们引入矩阵。你想想看,N个资产的组合收益可以写成:

E(R_p) = w^T * μ

其中 w 是权重向量,μ 是期望收益向量。就这么一行,搞定。

风险呢?用协方差矩阵 Σ:

σ²_p = w^T * Σ * w

这个 Σ 是个 N×N 的矩阵,对角线是各资产的方差,非对角线是协方差。我习惯用 Python 的 numpy 来算,一行代码的事:

import numpy as np
portfolio_variance = np.dot(w.T, np.dot(cov_matrix, w))

嗯,这里要注意:协方差矩阵必须是半正定的,否则算出来的方差可能是负数,那就闹笑话了。我曾经因为数据缺失导致矩阵不正定,结果优化器直接报错,排查了半天才发现是数据预处理的问题。

我的小技巧: 在实际项目中,我会先用相关系数矩阵 + 标准差向量重建协方差矩阵,这样能避免数值问题。另外,记得检查数据的时间对齐,别把不同频率的数据混在一起。

3.3 分散化效应:为什么别把鸡蛋放一个篮子里

分散化效应,说白了就是:组合的风险小于各资产风险的加权平均。为什么会这样?

因为资产之间不是完全同步波动的。你买股票和债券,股票跌的时候债券可能涨,或者至少跌得少。这样一来,组合的整体波动就被平滑了。

我举个例子:

资产 期望收益 标准差
股票A 10% 20%
债券B 4% 8%

假设 ρ = 0.2,各投50%。那么:

  • 组合收益 = 0.5×10% + 0.5×4% = 7%
  • 组合方差 = 0.5²×0.04 + 0.5²×0.0064 + 2×0.5×0.5×0.2×0.2×0.08 = 0.01 + 0.0016 + 0.0016 = 0.0132
  • 组合标准差 = √0.0132 ≈ 11.5%

你看,收益是加权平均的7%,但风险11.5%远低于加权平均的14%(0.5×20%+0.5×8%)。这就是分散化的威力。

注意: 分散化不是万能的。当市场系统性风险爆发时(比如2008年金融危机),几乎所有资产的相关性都会趋近于1,分散化效果会大打折扣。我经历过那种行情,组合里看似分散的资产,最后一起跌,那叫一个惨。

3.4 有效前沿:最优组合的集合

好,现在我们把所有可能的权重组合都算一遍,会得到一堆(收益,风险)点。把这些点连起来,就形成了一条曲线——有效前沿

有效前沿上的每个点,都代表在给定风险下能获得的最大收益,或者在给定收益下能承受的最小风险。说白了,就是最优组合的集合

我习惯用蒙特卡洛模拟来画这条曲线。随机生成一万组权重,算收益和风险,然后挑出边界上的点。代码大概长这样:

import numpy as np
import matplotlib.pyplot as plt

# 假设有3个资产
returns = np.array([0.10, 0.08, 0.12])
cov = np.array([[0.04, 0.01, 0.02],
                [0.01, 0.02, 0.01],
                [0.02, 0.01, 0.05]])

port_returns = []
port_risks = []

for _ in range(10000):
    w = np.random.random(3)
    w = w / w.sum()
    port_returns.append(np.dot(w, returns))
    port_risks.append(np.sqrt(np.dot(w.T, np.dot(cov, w))))

# 画散点图,有效前沿就是左上边界
plt.scatter(port_risks, port_returns, alpha=0.5)
plt.xlabel('风险 (标准差)')
plt.ylabel('期望收益')
plt.title('有效前沿')
plt.show()

实际项目中,我不会用纯随机模拟,而是用优化器直接求解。但模拟的好处是直观,能让你看到整个可行集的样子。

下面这张图展示了本章的核心逻辑:

投资组合收益与风险知识体系 双资产组合 收益:加权平均 方差:含协方差项 关键:相关系数ρ N资产组合 收益:w^T μ 风险:w^T Σ w 矩阵化表达 有效前沿 最优组合集合 风险收益权衡 分散化效应 核心结论 分散化降低风险 → 有效前沿提供最优选择 分散化效应:组合风险 < 加权平均风险

有效前沿的形状取决于资产间的相关性。相关性越低,前沿越向左凸,分散化效果越好。我见过最极端的例子是股票和长期国债,相关系数接近0,有效前沿几乎是一条直线,风险降得特别明显。

实战建议: 构建组合时,别只盯着收益。先看资产间的相关性矩阵,把相关性高的资产剔除或降低权重。我一般会要求组合内任意两资产的相关性不超过0.7,超过的就换掉。

好了,这一章的内容就到这。记住三个核心:双资产公式是基础,矩阵化是工具,有效前沿是目标。下一章我们会深入优化器的具体实现,到时候这些公式就能派上大用场了。


公众号:蓝海资料掘金营,微信deep3321