对偶变量
🧩 一、核心思想
在蒙特卡洛模拟中,我们通常通过生成独立随机样本 ( ) 来估计期望:
其方差为
目标:在样本量 ( n ) 固定的情况下,降低估计量的方差。
Antithetic Variable方法就是通过引入负相关的样本来抵消波动,从而降低方差。
🧠 二、基本原理
设 ( ),我们要模拟某个函数 ( ) 的期望:
Antithetic变量法的关键是:
同时使用 ( U ) 和 ( 1 - U ) 作为输入,而不是两个独立的 ( )。
于是估计量改写为:
这样做的好处是:
- () 与 ( ) 负相关。
- 如果 ( f ) 是单调递增函数,则 ) 与 ( ) 也负相关。
- 两者求平均后,可以部分抵消波动。
直觉:如果 ( ) 在某次模拟中取了偏大的值,那么 ( ) 很可能取偏小的值,二者平均更稳定。
🧮 三、数学解释
估计量方差:
展开:
由于负相关,,因此方差下降。
🎯 四、举例说明
🌰 示例:估计 ( )
普通蒙特卡洛估计:
对偶变量法:
对比直觉:
平均值 | ||||
0.1 | 0.9 | 1.105 | 2.46 | 1.78 |
0.8 | 0.2 | 2.23 | 1.22 | 1.73 |
→ 波动被削弱。
📉 五、代码示例
import numpy as np # 估计 E[e^U], U~Uniform(0,1) n = 10000 U = np.random.rand(n) # 普通蒙特卡洛 mc_est = np.mean(np.exp(U)) # 对偶变量 anti_est = np.mean((np.exp(U) + np.exp(1-U)) / 2) # 理论值 true_val = np.e - 1 print(f"True Value: {true_val:.6f}") print(f"Standard MC estimate: {mc_est:.6f}") print(f"Antithetic MC estimate: {anti_est:.6f}") # 比较方差 num_trials = 1000 mc_var = np.var([np.mean(np.exp(np.random.rand(n))) for _ in range(num_trials)]) anti_var = np.var([np.mean((np.exp(U := np.random.rand(n)) + np.exp(1-U)) / 2) for _ in range(num_trials)]) print(f"Var(MC): {mc_var:.6e}") print(f"Var(Antithetic): {anti_var:.6e}") print(f"Variance Reduction Ratio: {mc_var / anti_var:.2f}")
🔍 六、应用场景
- 期权定价(Black-Scholes):在模拟随机路径时,用 ( Z ) 和 ( -Z ) 生成镜像路径。
- 置信区间估计:减少估计不确定性。
- 积分估计:对单调函数积分时尤其有效。
✅ 总结一句话:
Antithetic Variable 方法通过使用互为镜像(负相关)的随机样本,使得模拟结果波动互相抵消,从而降低蒙特卡洛估计的方差,提升精度。