probabilistic-methods

probabilistic-methods

概率方法

Monte Carlo Simulation

General

我们需要定量分析我们的模型预测结果的可靠性,而蒙特卡洛方法就是可以预测概率,评估风险的一个方法。当我们需要计算,测量不确定性对模型的影响,模特卡洛方法是首先考虑的。简单来说,蒙特卡洛方法就是用不确定的参数反复评估模型,研究模型输出的不确定性。

蒙特卡洛方法的主要好处就在于它的鲁棒性和多功能性,不好之处在于它的收敛速度很慢并且计算量很大。

Mathematical Representation

我们用服从某个概率分布的随机变量来模型化不确定性,假设我们想要研究随机变量 X 的不确定性是如何影响模型输出 Y 的,先选择一些输入 $[X_1, X_2, \cdots, X_n]$,我们可以得到一组模型 f 的输出:

$$
[Y_1, \cdots, Y_n] = [f(X_1), \cdots, f(X_n)]
$$

我们可以估计出输出的不确定性的平均值,比如说使用大数定律。根据大数定律(算数平均值依概率收敛于数学期望)。

$$
E[Y] = \frac{1}{N} \sum_{i=1}^{N} f(X_i)
$$

根据中心极限定理:(当 n 足够大的时候,我们可以把任何一个奇奇怪怪(期望方差要存在)的分布,近似成一个正态分布)$\sum_{i=1}^{N} X_i ~ N(n\mu , n\sigma ^2)$

probabilistic forcasting

蒙特卡洛方法可以被应用于一个动态模型的概率预测上,如下:

$$
x_{t+1} = f(x_t, \epsilon _t)
$$

$x_t$ 表示状态,$\epsilon _t$ 表示在 t 时间的噪声。噪声可以表示我们不确定的输入,随机性使我们能够以定量的方式在我们缺乏一些知识下模拟场景并帮我们推理这些这些知识。

在动态模型上使用蒙特卡洛方法被称为集合预测(ensemble forecasting),这涉及模拟系统的许多独立轨迹(trajectory),以便对系统行为进行预测。每个轨迹就是一个集合成员(ensemble member)

假设我们想要得到再时间 $t=1$ 时的预测值,用 M 条轨迹描述初始条件 $x_0$,则从 1 到 M,有:

$$
x_1^{(i)}=f(x_0, \epsilon _0^{(i)})
$$

这样我们就可以预测将来某个时间系统状态的均值和方差,并计算系统可能处于不安全区域的概率或风险。

Simulating Rare Event

蒙特卡洛方法也可以用于模拟罕见的事件的发生:

  • 地震
  • 洋流转变
  • 极端天气
  • 股票市场崩溃

但问题是效率太差,想要得到一个比较小的蒙特卡洛观测误差值比较困难,但我们可以通过修改蒙特卡洛方法来提升效率,比如说重要性采样(Importance Sampling)。

我们假设 Y 是根据概率分布 $p(y)$ 分布的随机变量,我们想要估计 Y 超过某个特定的阈值 a 的概率,一个简单的蒙特卡洛估算方法如下:
$$
\hat{\rho } = \frac{1}{N} \sum_{i=1}^{N} 1_{Y>a} (Y^i) Y^i \sim p(y)
\\
1_{Y>a}(y) = \left{\begin{matrix}
1 & y>a\
0 & y<a
\end{matrix}\right.
$$

这样就有一个问题,对于概率很小很小的事件,我们模拟使用的 N 会非常的大,造成计算开销很大。

重要性采样使用了另一种分布——偏差分布(biasing distribution) $q(y)$,修改上面的模型为:

$$
\hat{\rho }{IS} = \frac{1}{N} \sum{i=1}^{N} 1_{Y>a} (\tilde{Y}^i) \frac{p(\tilde{Y}i)}{q(\tilde{Y}i)}
\\
\tilde{Y}^i \sim q(y)
$$

Sensitivity Analysis

当我们有这样一个式子:

$$
Y = f(X_1, \vdots, X_n)
$$

Y 的值取决于一系列的 X,如果我们想要知道那个输入对结果的影响更大,即输入的敏感度(Sensitivity ),就需要敏感度分析(Sensitivity analysis),通过这种方法,我们可以降低投资决策中的不确定性,或者在预测值时忽略一些不重要的输入。

敏感性分析有以下方法:

Local sensitivity analysis

敏感度系数定义为:

$$
s_i = \frac{\partial y}{\partial x_i}
$$

对于每个输入 $x_i$,计算 $s_i$ 来衡量。

问题是,我们应该用那个位置的点 x 来计算偏导?如果模型是一个非线性模型,在不同 x 处得到敏感度系数会有很大的差异。这个方法还忽略了几点:如果 x 是非常不确定变化的变量呢?如果 x 的分布范围很广泛,它可能会比窄的分布范围对输出的 Y 有更大的影响。

Averaged derivative

对局部敏感度在输入上求积分来表示敏感度:

$$
\int_{D} (\frac{\partial y}{\partial x_i})^2 dx_i
$$

但依旧有问题,如周期函数,会导致结果不准确。

Variance based global sensitivity analysis

就像我们使用蒙特卡洛方法来通过 x 的分布估测 y 的分布,我们通过输出 y 的方差值,该方差来自于每个输入的不确定性。我们将对 y 的方差的影响看成一个饼,不同的变量组合对结果的影响可以从饼中划分出来一部分。

对Y影响的饼图

为什么这样是正确的呢?我们来看背后的数学推导。

我们假设输出 Y 受到 $X_1$ 和 $X_2$ 的影响,它们以不同的形式影响这 Y 值,我们现在想要知道它们哪个对 Y 的影响更大,基于方差的全局敏感性分析给出的方法是:如果 $X_1$ 对 Y 的方差值贡献的更多,那么 Y 对 $X_1$ 更加敏感。

$$
Var[Y]=Var_{x_1}[\Bbb E_{x_2}[Y|X_1] ] + \Bbb E_{x_1}[Var_{x_2}[Y|X_1] ]
$$

上面的式子是方差的一个性质,$\Bbb E_{x_2} [Y| X_1]$ 项代表固定 x 下的条件均值,直观来看,这是 Y 在给定 x 下的最好的观察值,我们可以用它来代表 Y 由于 $X_1$ 而产生的方差。后面的部分就是 Y 在 非 $X_1$ 影响下产生的方差,影响它的可能包括 $X_1 X_2$

我们在以 $X_2$ 为计算对象来写另外一个相似的计算公式:

$$
Var[Y]=Var_{x_2}[\Bbb E_{x_1}[Y|X_2] ] + \Bbb E_{x_2}[Var_{x_1}[Y|X_2] ]
$$

仅仅由 $X_1$ 对方差的影响的占比为

$$
s_1 = \frac{Var_{x_1}[\Bbb E_{x_2}[Y|X_1] ]}{Var[Y]}
$$

由包含 $X_1$ 的项(只含$X_1$和交叉项)对方差的贡献为:

$$
s_{T_1} = \frac{\Bbb E_{x_2}[Var_{x_1}[Y|X_2] ]}{Var[Y]}
$$

当有两个以上变量的时候,上面两个公式需要归一化。

例子

Author

Ctwo

Posted on

2021-03-13

Updated on

2021-03-17

Licensed under

Comments