Control Variates(控制变量法)

一、基本思想

在蒙特卡洛模拟中,我们常希望估计某个随机变量的期望:
直接取样本均值:
虽然是无偏估计,但其方差
可能非常大,导致结果不稳定。
控制变量法(Control Variates)通过引入与 (Y) 高度相关的另一个随机变量 (X),并利用 (X) 的已知期望来抵消部分波动,从而显著降低方差。

二、构造思路

假设存在一个随机变量 (X),满足:
  • (X) 与 (Y) 有较强相关性;
  • 其期望 是已知的。
则可以构造一个新的估计量:
其中: 参数 (b) 称为控制系数(control coefficient),用于调整校正强度。

三、无偏性与方差推导

由于
可得:
→ 仍然是一个无偏估计。
其方差为:

四、最优控制系数

为了最小化方差,对 (b) 求导并令其为零:
得到最优值:
将其代入方差公式:
其中 () 为 (X) 与 (Y) 的相关系数。
方差降低比例 = ()
若 (),方差可减少 81%;
若 (),方差可减少 98%。

五、多变量推广

若存在多个控制变量 (),
则最优系数向量为:
新的估计量为:
其方差为:
等价于回归中“去除解释部分后的残差方差”,与 (R2) 的概念相对应。

六、几何与统计直觉

  • 线性回归视角看,控制变量法相当于回归 (Y) 对 (X),然后只保留残差部分:
    • 即用 (X) 的已知信息解释掉 (Y) 的部分波动,使残差方差最小。
  • 几何视角看,(X) 提供了 (Y) 波动的“方向”,
    • 减去这部分后,剩余噪声更小,估计更稳定。

七、具体示例

🌰 示例:估计 (),其中 ()

目标:
选取控制变量:
计算:
于是:
结果:
与普通蒙特卡洛相比,方差降低约 98%

八、代码示例

import numpy as np n = 10000 U = np.random.rand(n) # 每次同时生成 U Y = np.exp(U) # 目标变量 X = U # 控制变量 mu_X = 0.5 # E[U] b_opt = np.cov(X, Y, bias=True)[0, 1] / np.var(X) theta_cv = np.mean(Y + b_opt * (mu_X - X)) theta_mc = np.mean(Y) print(f"普通MC估计: {theta_mc:.5f}") print(f"控制变量估计: {theta_cv:.5f}")

九、方法总结

项目
内容
目标
利用已知期望的相关变量降低方差
估计量
最优系数
方差降低比例
条件
需已知,且
典型应用
期权定价、积分估计、排队仿真、金融风险模拟