目录 / Table of Contents
本文是对《金融工程中的蒙特卡罗方法》一书的读书笔记。
蒙特卡洛原理
蒙特卡洛方法是什么?
蒙特卡罗方法是一种用于模拟随机现象,以求得事件的概率的统计模拟方法。借助测度论的语言,我们可对概率论做一种公理化定义1,将随机试验中随机发生的事件与一个集合对应起来(这个集合包含了事件发生时的所有可能结果),将总体也与一个集合对应起来(这个集合包含了随机试验的所有可能结果),从而将概率定义为:
$$某事件的概率 := \frac{该事件对应集合的容量}{总体对应集合的容量}$$
确定了这个定义之后,我们便可以通过计算事件对应集合的容量与总体对应集合的容值,计算某个事件的概率——而实际上蒙特卡罗方法就是这么做的。比如,我们现在想要计算某个事件发生的概率。那么,我们可以做的是,在所有可能结果组成的总体中随机抽样,然后计算落入事件对应集合的样本点所占总体的比例,以此比例「估计」事件对应集合的容量。在这一过程中,大数定律保证了这个估计会随着抽样的增加而收敛于真实值2,中心极限定理则给出了在有限次抽样下估计误差的可能幅度。
为了更方便地计算集合的度量,我们可以引入积分这个工具。考虑一个简单的例子:假设我们现在需要估计一个给定函数$f$在单位区间上的积分值。为书写方便起见,我们可以将这个积分值记作 $\alpha$,则有: $$ \alpha = \int^1_0f(x) \mathop{}!\mathrm{d}x. $$ $\alpha$ 可以被看作期望值 $\mathbb{E}[f(U)]$,其中 $U \sim\text{Uniform}(0,1)$。假设我们可以在 $[0,1]$ 上独立均匀地抽样得到 $U_1,U_2,\cdots$,那么计算 $f$ 在这些样本点上的取值并求平均,便可得到欲求积分值的一个蒙特卡洛估计: $$ \hat \alpha n = \frac1n \sum^n{i=1}f(U_i). $$ 如果函数 $f$ 满足一些特定性质,我们就能得到一个误差较低的 $\alpha$ 估计值,并且可以显式地求出这个估计的误差值。
先来看看 $\alpha$ 的具体估计取值。如果函数 $f$ 在 $[0,1]$ 上可积,那么根据强大数定律,有: $$ 当\ n \to \infty \ 时,\ \hat \alpha_n \stackrel{a.s.} \longrightarrow \alpha. $$ 再来看看估计的误差值。如果函数 $f$ 平方可积,那么蒙特卡洛估计中的误差项 $\hat \alpha_n - \alpha$ 近似服从于 $\text{Normal}(0, {\sigma_f^2}/{ n})$,而且 $n$ 越大,这个误差项就越近似于上述的正态分布。需要补充的是,这个正态分布中的总体方差 $\sigma_f$ 定义如下: $$ \sigma_f^2 = \int^1_0 (f(x)-\alpha)^2 \mathop{}!\mathrm{d}x. $$ 要注意的是,上述 $\sigma_f$ 定义里用到了 $\alpha$ ,而这是一个总体的真实值,通常是未知的,从而导致 $\sigma_f$ 也是未知的。为了解决这个问题,我们可以转而使用样本标准差 $s_f$ 来估计误差值: $$ 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, $$ 其中 $C_i$ 是独立同分布变量,$\mathbb{E}[C_i] = C$ 且 $\text{Var}[C_i] = \sigma_C < \infty$。由中心极限定理可知,随着重复次数 $n$ 的不断增大,标准估计值 $(\hat C_n - C)/(\sigma_C/\sqrt{n})$ 收敛于正态分布,即: $$ \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). $$ 上面的「$\Rightarrow$」表示收敛于某个分布。从上式可推得: $$ \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). $$ 上式说明左边的误差近似地有右边的分布。根据这个结论,我们可以认为,在其他条件不变的情况下,比较同一值的两个估计量时,我们应该选择方差更小的估计量,使得估计误差尽量小。
若想了解更多基于测度论的概率论的定义,可参考《基于测度论的概率论基础》一文。 ↩︎
由此不难看出,蒙特卡罗方法体现了频率学派对于概率的观点。 ↩︎