本文是对《金融工程中的蒙特卡罗方法》一书的读书笔记。

蒙特卡洛原理

蒙特卡洛方法是什么?

蒙特卡罗方法是一种用于模拟随机现象,以求得事件的概率的统计模拟方法。借助测度论的语言,我们可对概率论做一种公理化定义1,将随机试验中随机发生的事件与一个集合对应起来(这个集合包含了事件发生时的所有可能结果),将总体也与一个集合对应起来(这个集合包含了随机试验的所有可能结果),从而将概率定义为:

$$某事件的概率 := \frac{该事件对应集合的容量}{总体对应集合的容量}$$

确定了这个定义之后,我们便可以通过计算事件对应集合的容量与总体对应集合的容值,计算某个事件的概率——而实际上蒙特卡罗方法就是这么做的。比如,我们现在想要计算某个事件发生的概率。那么,我们可以做的是,在所有可能结果组成的总体中随机抽样,然后计算落入事件对应集合的样本点所占总体的比例,以此比例「估计」事件对应集合的容量。在这一过程中,大数定律保证了这个估计会随着抽样的增加而收敛于真实值2,中心极限定理则给出了在有限次抽样下估计误差的可能幅度。

$$ \alpha = \int^1_0f(x) \mathop{}\!\mathrm{d}x. $$$$ \hat \alpha _n = \frac1n \sum^n_{i=1}f(U_i). $$

如果函数 $f$ 满足一些特定性质,我们就能得到一个误差较低的 $\alpha$ 估计值,并且可以显式地求出这个估计的误差值。

$$ 当\ n \to \infty \ 时,\ \hat \alpha_n \stackrel{a.s.} \longrightarrow \alpha. $$$$ \sigma_f^2 = \int^1_0 (f(x)-\alpha)^2 \mathop{}\!\mathrm{d}x. $$$$ s_f = \sqrt {\frac 1 {n-1} \sum^n_{i=1} (f(U_i) - \hat \alpha_i)^2}. $$

至此,我们得到一个误差较低的 $\hat \alpha _n$ 估计值,以及本次估计的误差值 $s_f$。

蒙特卡洛估计的误差有多大?

在上一小节里,我们曾提到,蒙特卡洛估计中的误差值近似服从于 $\text{Normal}(0, {\sigma_f^2}/{ n})$。现在让我们进一步分析蒙特卡洛估计误差的分布。

考察这个分布中的标准差 ${\sigma_f}/{\sqrt n}$,容易知道,若想在原有的基础上减少一半的标准差,就需要相当于原有样本点 4 倍数量的样本点;如果想要增加一个数量级的精度,就需要原有基础上 100 倍数量的样本点。更准确地来说,蒙特卡洛估计的误差以 $O(n^{-1/2})$ 的速度收敛。

以 $O(n^{-1/2})$ 的速度收敛?这速度算快算慢?说实话,不算快。举个例子,假设此前提到的函数 $f$ 二阶连续可导,如果直接将 $n$ 个梯形面积之和作为定积分的估计值的话,这种估计的误差收敛速度为 $O(n^{-2})$,似乎更快:

欸,既然有别的估计方法的误差收敛得比蒙特卡洛更快,那我们为什么还要学蒙特卡洛方法呢?

答案是,蒙特卡罗方法的标准差收敛速度不会随着维度的增加而增加。实际上,我们在上一节中所估计的积分可以推广到任何维度 $d$ 下 $[0,1]^d$ 上的积分。此时,对于蒙特卡罗方法而言,尽管函数 $f$ 与 相应的 $\sigma _f$ 会发生变化,但其标准差仍会保有 $\sigma _f / \sqrt n$ 的形式。换而言之,$O(n^{-1/2})$ 的收敛速度对任何维度 $d$ 都成立。相比之下,$d$ 维中利用梯形法则的误差为 $O(n^{-2/d})$,随着维度增加,收敛速度也会降低。

这种优势在我们为衍生品定价时尤为重要。资产定价理论的一个重要假设是,在某些情况下,衍生品的价格可以表示为其期望值,从而将衍生品的定价简化成了期望值的计算工作。在此过程中,如果要将期望值写成积分形式,我们便会发现,它的维数很大,甚至是无限的。这个时候,我们用蒙特卡洛方法就比较好——它的收敛速度不会随着维度增加而增加。

如何比较不同蒙特卡洛估计的好坏?

《金融工程中的蒙特卡罗方法》的第 4 章到第 6 章主要说明了如何改进蒙特卡洛估计,使其运行得更「好」。那么,这种「好」对应的评价标准是什么呢?在这一节里,我们介绍原书中提到的 3 个用于比较不同估计的评价标准:计算时间,偏差,以及方差。不严谨地讲,评价标准可被描述如下:

在无偏估计下,在其它此处未被提及的条件均等价的情况下,如果 2 个不同估计量所需要的计算时间一致,那么我们选「方差更小」的估计量;如果所需要的计算时间有差别,且有更小方差的估计量需要更多的计算时间,那么我们选「每次重复实验的方差与每次重复实验的期望计算时间之积」最小的那个。

无偏估计下的比较——估计量的方差、计算时间

$$ \hat C_n = \frac 1 n \sum^n_{i=1}C_i, $$$$ \frac {(\hat C_n - C)} {(\sigma_C/\sqrt{n})} \Rightarrow \text{Normal}(0,1), $$$$ {\sqrt n (\hat C_n - C)} \Rightarrow \text{Normal}(0,\sigma_C^2). $$$$ \lim_{n \to \infty} \mathop{P}\left(\frac {\hat C_n - C} {\sigma_C/\sqrt{n}} \leq x\right) = \Phi(x) $$

对于所有的 $x$ 成立。这个式子重要的地方在于,如果将 $\sigma_C$ 用样本标准差 $S_C$ 代替,那么这个极限依旧成立。

$$ \hat C_n-C \approx \text{Normal}(0,\sigma_C^2/n). $$

上式说明左边的误差近似地有右边的分布。根据这个结论,我们可以认为,在其他条件不变的情况下,比较同一值的两个估计量时,我们应该选择方差更小的估计量,使得估计误差尽量小。


  1. 若想了解更多基于测度论的概率论的定义,可参考《基于测度论的概率论基础》一文。 ↩︎

  2. 由此不难看出,蒙特卡罗方法体现了频率学派对于概率的观点。 ↩︎