什么是协方差?
我们要明白协方差是什么。协方差衡量的是两个资产(比如股票A和股票B)的收益率相对于它们各自平均收益率的联动程度。

它告诉我们一个资产的价格变动,另一个资产的价格是倾向于朝同一个方向变动,还是朝相反方向变动,或者没有明显关系。
- 正协方差: 当一个资产的收益率高于其平均收益率时,另一个资产的收益率也倾向于高于其平均收益率,反之亦然,这意味着它们同向变动。投资组合中,增加正相关的资产不会降低风险。
- 负协方差: 当一个资产的收益率高于其平均收益率时,另一个资产的收益率倾向于低于其平均收益率,这意味着它们反向变动。投资组合中,增加负相关的资产可以有效降低整体风险,这就是分散化的核心原理。
- 零协方差: 两个资产的收益率变动没有线性关系,它们可能独立,也可能存在非线性关系。
重要提示:协方差的数值本身没有绝对意义,它的值取决于资产收益率的标准差,两只高波动股票的协方差数值会天然大于两只低波动股票的协方差,我们更常用相关系数来衡量这种关系,相关系数是协方差经过标准化后的值,范围在-1到+1之间,更易于解释。
协方差的计算公式
1 单个协方差的计算(历史数据法)
如果我们有历史数据,最直接的方法就是计算样本协方差,假设我们有 n 个时间点的两只资产A和B的收益率数据。
公式:

$$ \text{Cov}(A, B) = \frac{\sum{i=1}^{n} (R{A,i} - \overline{RA}) \times (R{B,i} - \overline{R_B})}{n - 1} $$
Cov(A, B): 资产A和资产B之间的协方差。R_A,i: 资产A在第i个时间点的收益率。R_B,i: 资产B在第i个时间点的收益率。R̄A: 资产A的平均收益率。R̄B: 资产B的平均收益率。n: 观察值的数量(时间点数量)。n - 1: 使用样本数量减一,这是无偏估计的修正。
计算步骤:
- 计算资产A在所有时间点的平均收益率
R̄A。 - 计算资产B在所有时间点的平均收益率
R̄B。 - 对于每一个时间点
i,计算(R_A,i - R̄A)和(R_B,i - R̄B)。 - 将第3步中计算出的结果相乘,得到
(R_A,i - R̄A) * (R_B,i - R̄B)。 - 将所有时间点的乘积结果加总。
- 将总和除以
n - 1。
2 投资组合的方差计算(协方差矩阵的应用)
协方差的真正威力在于计算投资组合的整体风险,投资组合的风险(用方差 σ_p² 衡量)不仅仅是单个资产风险的加权平均,它还包含了资产之间的协方差。
对于一个由 N 个资产组成的投资组合,其方差的通用公式非常复杂,但可以表示为:

$$ \sigmap^2 = \sum{i=1}^{N} w_i^2 \sigmai^2 + \sum{i=1}^{N} \sum_{j=1, j \neq i}^{N} w_i w_j \text{Cov}(i, j) $$
σ_p²: 投资组合的方差。w_i: 资产i在投资组合中的权重。σ_i²: 资产i的方差(自身风险)。Cov(i, j): 资产i和资产j之间的协方差。w_i w_j Cov(i, j): 资产i和资产j之间的协方差项,代表了它们之间的共同风险。
这个公式的含义是: 投资组合的总风险 = 各项资产的独立风险(加权平方和) + 各项资产之间的交互风险(协方差项)
关键洞察:当资产数量 N 增加时,独立风险项(w_i^2 σ_i^2)会变小,但协方差项(w_i w_j Cov(i, j))的数量会急剧增加(数量级约为 N²)。一个大型投资组合的风险主要由其资产之间的协方差决定,而不是单个资产自身的风险,这就是为什么分散化如此重要。
实例计算:一个由两只股票组成的投资组合
假设我们有以下两只股票A和B在过去5个月的历史收益率数据,并构建了一个投资组合,其中股票A占60%,股票B占40%。
| 月份 | 股票A收益率 (R_A) | 股票B收益率 (R_B) |
|---|---|---|
| 1 | 1% | 3% |
| 2 | -2% | 1% |
| 3 | 4% | -1% |
| 4 | 3% | 5% |
| 5 | 0% | 2% |
步骤1:计算平均收益率
R̄A = (1% - 2% + 4% + 3% + 0%) / 5 = 6% / 5 = 1.2%R̄B = (3% + 1% - 1% + 5% + 2%) / 5 = 10% / 5 = 2.0%
步骤2:计算协方差 我们可以用表格来简化计算过程:
| 月份 | R_A - R̄A | R_B - R̄B | (R_A - R̄A) * (R_B - R̄B) |
|---|---|---|---|
| 1 | 1% - 1.2% = -0.2% | 3% - 2.0% = 1.0% | (-0.2%) * (1.0%) = -0.002% |
| 2 | -2% - 1.2% = -3.2% | 1% - 2.0% = -1.0% | (-3.2%) * (-1.0%) = 0.032% |
| 3 | 4% - 1.2% = 2.8% | -1% - 2.0% = -3.0% | (2.8%) * (-3.0%) = -0.084% |
| 4 | 3% - 1.2% = 1.8% | 5% - 2.0% = 3.0% | (1.8%) * (3.0%) = 0.054% |
| 5 | 0% - 1.2% = -1.2% | 2% - 2.0% = 0.0% | (-1.2%) * (0.0%) = 0.0% |
| 总计 | -0.002% + 0.032% - 0.084% + 0.054% + 0.0% = -0.0000 |
计算样本协方差:
Cov(A, B) = 总和 / (n - 1) = -0.0000 / (5 - 1) = 0
解读:在这个简化的例子中,两只股票的协方差为0,表示它们的收益率在过去这5个月里没有表现出线性联动关系。
步骤3:计算投资组合的方差 现在我们可以计算这个投资组合的风险了。
w_A = 60% = 0.6w_B = 40% = 0.4Cov(A, B) = 0(我们刚刚算出的)
我们需要计算股票A和股票B各自的方差 σ_A² 和 σ_B²。(这里为了简化,直接给出计算过程,原理同上)
σ_A² ≈ 0.000736(即 0.0736%)σ_B² ≈ 0.00032(即 0.032%)
现在套入投资组合方差公式: $$ \sigma_p^2 = w_A^2 \sigma_A^2 + w_B^2 \sigma_B^2 + 2 w_A w_B \text{Cov}(A, B) $$ $$ \sigma_p^2 = (0.6)^2 \times 0.000736 + (0.4)^2 \times 0.00032 + 2 \times 0.6 \times 0.4 \times 0 $$ $$ \sigma_p^2 = 0.36 \times 0.000736 + 0.16 \times 0.00032 + 0 $$ $$ \sigma_p^2 = 0.00026496 + 0.0000512 $$ $$ \sigma_p^2 = 0.00031616 $$
投资组合的标准差(风险)就是方差的平方根: $$ \sigma_p = \sqrt{0.00031616} \approx 0.01778 \text{ or } 1.778\% $$
这个 778% 就是这个特定投资组合(60% A + 40% B)的历史波动率。
在Excel或Python中计算
在实际操作中,我们不会手动计算,而是使用工具。
Excel
假设A股票的收益率在 A2:A6,B股票的收益率在 B2:B6。
-
计算单个协方差:
=COVARIANCE.S(A2:A6, B2:B6)
COVARIANCE.S函数用于计算样本协方差(分母为n-1),还有一个COVARIANCE.P用于总体协方差(分母为n)。 -
计算投资组合方差 (对于两只资产): 假设
w_A在G1,w_B在G2,σ_A²在G3,σ_B²在G4,Cov(A,B)在G5。=(G1^2 * G3) + (G2^2 * G4) + (2 * G1 * G2 * G5)
Python (使用 Pandas 和 NumPy)
import pandas as pd
import numpy as np
# 1. 创建数据
data = {'Stock_A': [0.01, -0.02, 0.04, 0.03, 0.00],
'Stock_B': [0.03, 0.01, -0.01, 0.05, 0.02]}
df = pd.DataFrame(data)
# 2. 计算协方差矩阵
# cov() 函数默认计算的是样本协方差 (分母为n-1)
cov_matrix = df.cov()
print("协方差矩阵:")
print(cov_matrix)
# 输出:
# Stock_A Stock_B
# Stock_A 0.000736 0.000000
# Stock_B 0.000000 0.000320
# 3. 定义投资组合权重
weights = np.array([0.6, 0.4]) # 60% A, 40% B
# 4. 计算投资组合方差
# 公式: w^T * Σ * w (其中w是权重向量,Σ是协方差矩阵)
portfolio_variance = np.dot(weights.T, np.dot(cov_matrix, weights))
print(f"\n投资组合方差: {portfolio_variance:.6f}")
# 计算投资组合标准差
portfolio_std_dev = np.sqrt(portfolio_variance)
print(f"投资组合标准差: {portfolio_std_dev:.4f} or {portfolio_std_dev:.2%}")
# 输出:
# 投资组合方差: 0.000316
# 投资组合标准差: 0.0178 or 1.78%
- 协方差是衡量两个资产收益率联动方向和程度的指标。
- 正协方差表示同向变动,负协方差表示反向变动。
- 投资组合的风险不仅取决于单个资产的风险,更取决于资产间的协方差。
- 分散化的原理就是通过增加低甚至负相关性的资产,来降低投资组合的整体协方差风险,从而在不显著降低预期收益的情况下降低风险。
- 实际计算中,我们通常使用协方差矩阵来系统化地处理多个资产的投资组合风险计算,并借助Excel或Python等工具来完成。
