第2章:概率论基础回顾:随机变量、概率分布与期望方差
各位同学,欢迎来到蒙特卡洛模拟的第一块基石——概率论基础。
说实话,我刚开始做量化风控那会儿,觉得概率论就是考试用的。直到有一次,我负责一个信用评分卡项目,模型在回测时表现完美,上线第一天就崩了。后来排查原因,发现是底层资产的相关性结构我没搞对,说白了就是概率分布选错了。从那以后,我再也不敢小瞧这些基础概念了。
今天咱们就把这些「老朋友」重新请出来,聊聊它们在蒙特卡洛模拟里到底怎么用。
2.1 随机变量:不确定性的数学化身
随机变量,说白了就是一个函数。它把随机试验的结果映射成一个数字。
举个例子:你抛一枚硬币,结果可能是「正面」或「反面」。我定义一个变量 X,正面=1,反面=0。这个 X 就是随机变量。
在量化风控里,我们关心的随机变量通常是:
- 某只股票明天的收益率
- 某个贷款组合未来30天的违约数量
- 某笔衍生品在到期日的价格
随机变量分两种:
- 离散型:取值可数。比如违约笔数,只能是0,1,2,...
- 连续型:取值不可数。比如收益率,可以是-3.14159...%
2.2 概率分布:随机变量的「性格画像」
知道了随机变量是什么,接下来要问:它取某个值的可能性有多大?这就是概率分布要回答的问题。
我个人习惯把概率分布分成三类来记,因为蒙特卡洛模拟里最常用的就这三类。
2.2.1 正态分布:金融世界的「万有引力」
正态分布,也叫高斯分布。它的概率密度函数长这样:
f(x) = (1 / (σ * √(2π))) * exp(-(x - μ)² / (2σ²))
其中 μ 是均值,σ 是标准差。
为什么它这么重要?
- 中心极限定理:大量独立随机变量的和趋近于正态分布。这是蒙特卡洛模拟的理论根基之一。
- 资产收益率:很多金融模型假设日收益率服从正态分布(虽然实际有肥尾,但这是后话)。
2.2.2 均匀分布:蒙特卡洛的「随机种子」
均匀分布 U(a,b) 在区间 [a,b] 内每个点出现的概率相同。
它的概率密度函数很简单:
f(x) = 1 / (b - a), a ≤ x ≤ b
为什么它重要?
- 随机数生成的基础:几乎所有编程语言的随机数生成器,最初产出的都是 [0,1] 上的均匀分布。
- 逆变换法:通过均匀分布可以生成任意其他分布的随机数。这是蒙特卡洛模拟的核心技术。
你想想看,如果没有均匀分布,我们连最基础的正态分布随机数都生成不了。
2.2.3 对数正态分布:资产价格的「天然模型」
如果一个随机变量 X 的对数 ln(X) 服从正态分布,那么 X 就服从对数正态分布。
它的概率密度函数:
f(x) = (1 / (x * σ * √(2π))) * exp(-(ln(x) - μ)² / (2σ²)), x > 0
为什么金融里常用它?
- 价格不能为负:对数正态分布只取正值,符合资产价格的基本特征。
- 收益率可加性:连续复利收益率服从正态分布,价格就服从对数正态分布。
2.3 期望与方差:分布的「数字指纹」
概率分布描述了随机变量的全貌,但有时候我们只需要几个关键数字来概括它。期望和方差就是最重要的两个。
2.3.1 期望:长期平均的「锚点」
期望 E[X] 是随机变量所有可能取值的加权平均,权重就是概率。
对于离散型:
E[X] = Σ x_i * P(X = x_i)
对于连续型:
E[X] = ∫ x * f(x) dx
在蒙特卡洛模拟中,期望就是我们要估计的目标。比如:
- 期权定价:模拟到期收益的期望,再折现
- 风险价值(VaR):模拟组合损失的期望,再找分位数
2.3.2 方差:不确定性的「度量尺」
方差 Var[X] = E[(X - E[X])²],衡量随机变量偏离期望的程度。
标准差 σ = √Var[X],和原始数据同量纲,更直观。
为什么方差重要?
- 风险度量:方差越大,不确定性越高,风险越大。
- 模拟精度:蒙特卡洛模拟的误差与方差直接相关。方差越大,需要模拟的次数越多才能达到同样的精度。
2.4 知识体系总览
下面这张图是我自己梳理的本章知识结构,方便你建立整体认知:
2.5 代码实战:用Python生成三种分布
光说不练假把式。下面我用Python演示如何生成这三种分布的随机数,并计算它们的期望和方差。
import numpy as np
import matplotlib.pyplot as plt
# 设置随机种子,保证结果可复现
np.random.seed(42)
# 1. 正态分布:均值0,标准差1
normal_samples = np.random.normal(loc=0, scale=1, size=10000)
print(f"正态分布 - 期望: {np.mean(normal_samples):.4f}, 方差: {np.var(normal_samples):.4f}")
# 2. 均匀分布:区间[0, 1]
uniform_samples = np.random.uniform(low=0, high=1, size=10000)
print(f"均匀分布 - 期望: {np.mean(uniform_samples):.4f}, 方差: {np.var(uniform_samples):.4f}")
# 3. 对数正态分布:底层正态均值0,标准差0.2
lognormal_samples = np.random.lognormal(mean=0, sigma=0.2, size=10000)
print(f"对数正态 - 期望: {np.mean(lognormal_samples):.4f}, 方差: {np.var(lognormal_samples):.4f}")
# 理论值对比
print("\n理论值:")
print(f"正态分布 N(0,1) - 期望: 0, 方差: 1")
print(f"均匀分布 U(0,1) - 期望: 0.5, 方差: 0.0833")
print(f"对数正态 LN(0,0.2) - 期望: {np.exp(0 + 0.2**2/2):.4f}, 方差: {(np.exp(0.2**2)-1)*np.exp(2*0+0.2**2):.4f}")
2.6 本章小结
嗯,到这里概率论基础就回顾完了。我帮你捋一下重点:
- 随机变量:把不确定性变成数字,是建模的起点
- 三种分布:正态(万有引力)、均匀(随机种子)、对数正态(价格模型)
- 期望与方差:一个管中心,一个管离散度,是蒙特卡洛模拟的评估指标
这些概念看着简单,但我在实际项目中见过太多人栽在基础不牢上。比如有人用正态分布模拟信用损失,结果忽略了损失分布的左偏特征,导致资本计提不足。记住:基础不牢,地动山摇。
下一章,我们会把这些知识串起来,真正开始写蒙特卡洛模拟的代码。到时候你会发现,今天这些「枯燥」的概念,全都会活起来。
公众号:蓝海资料掘金营,微信deep3321