2. 概率基础回顾:随机变量、概率分布与贝叶斯定理
各位同学,欢迎来到第二章。说实话,很多做量化的人一上来就撸代码、调参数,结果模型一跑就崩。为什么?因为概率基础没打牢。今天这章,咱们就把地基夯实了。
我个人习惯是,先理解数学直觉,再动手写代码。你想想看,贝叶斯线性回归说白了就是「用数据更新我们的信念」。这个信念怎么表达?就是概率分布。
2.1 随机变量:量化世界的「不确定性」
随机变量,其实就是一个会「变」的数值。比如明天某只股票的收益率,它不是一个确定值,而是一个随机变量。我把它分为两类:
- 离散型随机变量:取值可数。比如某只股票明天是涨还是跌(二值变量)。
- 连续型随机变量:取值不可数。比如收益率的具体数值,可能是 0.0321,也可能是 0.0322。
在因子模型里,我们主要跟连续型随机变量打交道。比如市场因子收益率、残差项,都是连续的。
核心要点:随机变量不是「随机乱变」,而是「有规律地变」。这个规律,就是概率分布。
2.2 概率分布:描述随机变量的「语言」
概率分布就是描述随机变量取值的「概率地图」。今天重点讲两个:正态分布和逆伽马分布。为什么是这两个?因为它们在贝叶斯线性回归里是「黄金搭档」。
2.2.1 正态分布(Normal Distribution)
正态分布,也叫高斯分布。它的概率密度函数长这样:
f(x | μ, σ²) = (1 / √(2πσ²)) * exp(-(x - μ)² / (2σ²))
其中 μ 是均值,σ² 是方差。我在项目中遇到过一个问题:用普通最小二乘法做因子回归,残差项假设为正态分布。结果数据有厚尾,模型直接崩了。后来改用贝叶斯方法,用 t 分布替代正态分布,才稳住。
正态分布有两个重要性质:
- 对称性:均值两侧概率相等。
- 68-95-99.7 法则:约 68% 的数据落在均值 ±1 个标准差内,95% 在 ±2 个标准差内。
避坑指南:我曾经以为金融数据都服从正态分布,结果被市场狠狠教育了。记住,正态分布只是一个近似,尤其在尾部区域,实际数据往往更「肥」。
2.2.2 逆伽马分布(Inverse Gamma Distribution)
逆伽马分布,你可能不太熟悉。但在贝叶斯框架里,它是方差参数的「天然共轭先验」。
它的概率密度函数:
f(x | α, β) = (β^α / Γ(α)) * x^(-α-1) * exp(-β/x), x > 0
其中 α 是形状参数,β 是尺度参数。Γ(α) 是伽马函数。
为什么用逆伽马?因为当你的似然函数是正态分布时,方差参数的共轭先验就是逆伽马分布。说白了,就是数学上「好算」。
| 参数 | 含义 | 对分布的影响 |
|---|---|---|
| α(形状参数) | 控制分布的「陡峭程度」 | α 越大,分布越集中 |
| β(尺度参数) | 控制分布的「位置」 | β 越大,分布越向右移 |
注意:逆伽马分布的均值只在 α > 1 时存在,方差只在 α > 2 时存在。设置先验参数时,一定要检查这个条件,否则后验采样会出问题。
2.3 条件概率与贝叶斯定理
条件概率,就是「在已知某事件发生的条件下,另一事件发生的概率」。记作 P(A|B)。
贝叶斯定理,就是条件概率的「逆运算」:
P(θ | D) = P(D | θ) * P(θ) / P(D)
其中:
- P(θ) 是先验概率——我们在看到数据之前对参数的信念。
- P(D|θ) 是似然——给定参数下,数据出现的概率。
- P(θ|D) 是后验概率——看到数据后,更新过的信念。
- P(D) 是证据——归一化常数,保证后验概率之和为 1。
你想想看,这不就是「学习」的过程吗?先有个初始判断(先验),然后看到新数据(似然),最后更新判断(后验)。
下面我用 SVG 画一张图,帮你理清整个知识体系:
2.4 贝叶斯定理在因子模型中的直观理解
在因子模型里,我们通常想估计因子载荷 β 和残差方差 σ²。贝叶斯方法是这样做的:
- 设定先验:比如 β 服从正态分布,σ² 服从逆伽马分布。这代表我们在看到数据前对参数的「初始猜测」。
- 收集数据:比如过去 252 个交易日的收益率数据。
- 计算后验:用贝叶斯定理,把先验和似然结合起来,得到更新后的参数分布。
说白了,就是「用数据说话,但也不完全抛弃经验」。我刚开始做量化时,总想完全依赖数据,结果在小样本下模型过拟合严重。后来加入合理的先验信息,模型稳健多了。
关键公式:后验 ∝ 先验 × 似然
这个「∝」符号表示「正比于」。因为分母 P(D) 是常数,我们通常只关心后验的形状,不需要精确计算归一化常数。
2.5 一个小例子:用 Python 感受贝叶斯更新
下面我用一个简单的例子,展示先验如何通过数据更新为后验。假设我们想估计一个因子的收益率均值 μ:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
# 先验:假设 μ ~ N(0, 1)
prior_mean = 0.0
prior_std = 1.0
# 数据:观测到 10 个收益率
data = np.array([0.12, 0.08, -0.05, 0.15, 0.02,
0.10, -0.03, 0.07, 0.11, 0.04])
n = len(data)
sample_mean = np.mean(data)
sample_std = np.std(data, ddof=1)
# 后验均值(已知方差时)
posterior_mean = (prior_mean / prior_std**2 +
n * sample_mean / sample_std**2) / \
(1 / prior_std**2 + n / sample_std**2)
posterior_std = np.sqrt(1 / (1 / prior_std**2 +
n / sample_std**2))
print(f"先验均值: {prior_mean:.3f}")
print(f"样本均值: {sample_mean:.3f}")
print(f"后验均值: {posterior_mean:.3f}")
print(f"后验标准差: {posterior_std:.3f}")
运行结果会告诉你:后验均值介于先验均值和样本均值之间。这就是贝叶斯更新的精髓——在经验和数据之间做「折中」。
我的经验:当数据量小时,后验主要由先验主导;当数据量大时,后验趋近于最大似然估计。这个特性在因子模型里非常有用,尤其是当你只有少量股票数据时。
2.6 本章小结
今天我们回顾了三个核心概念:
- 随机变量:量化不确定性的工具,分为离散型和连续型。
- 概率分布:正态分布(建模因子收益率)和逆伽马分布(建模方差),它们是贝叶斯线性回归的「左右手」。
- 贝叶斯定理:用数据更新先验信念的数学框架。
嗯,这些概念看起来简单,但真正用好它们需要大量实践。下一章我们会把这些知识串起来,正式进入贝叶斯线性回归的世界。