4. 贝叶斯视角下的线性回归:模型假设、先验分布、似然函数与后验分布

各位同学,欢迎来到第四章。前面几章我们聊了频率学派下的因子模型,用最小二乘法估计参数。说实话,那种方法在样本量足够大时挺好用的。但做量化这些年,我越来越觉得——市场数据哪有那么听话?

你想想看,A股市场才多少年历史?你拿到的收益率数据,满打满算也就几千个交易日。更别提那些小市值因子,有效样本量可能更少。这时候,贝叶斯方法就派上用场了。

这一章,我们彻底切换到贝叶斯视角。我会带着你,把线性回归的每个环节重新拆解一遍。从模型假设开始,到先验分布、似然函数,最后到后验分布。嗯,这是整个贝叶斯因子模型的地基。

核心思想一句话:贝叶斯线性回归不是抛弃了传统回归,而是在其基础上加入了「先验知识」这个维度。说白了,就是用你已有的经验,去约束那些不靠谱的估计。

4.1 模型假设:还是那个线性模型,但视角变了

先看模型本身。其实数学形式没变:

y = Xβ + ε,  ε ~ N(0, σ²I)

y 是 N×1 的收益率向量,X 是 N×K 的因子暴露矩阵,β 是 K×1 的因子收益率向量,ε 是误差项。

但频率学派和贝叶斯学派对「参数」的理解完全不同。

  • 频率学派:β 是一个固定的未知常数。你只能通过数据去估计它。
  • 贝叶斯学派:β 是一个随机变量。它有自己的概率分布。

我刚开始学贝叶斯时,这个转变让我别扭了好一阵子。参数怎么可能是随机的?后来做多了实盘回测才明白——在量化里,因子收益率本身就是个随机过程。你今天估计出来的 β,明天可能就变了。承认它的不确定性,反而更贴近现实。

所以,贝叶斯视角下的模型假设,除了常规的线性关系、误差正态性、同方差性之外,还多了一条:参数 β 服从某个先验分布

我的经验:在因子模型中,我通常假设误差项方差 σ² 也服从逆伽马分布。这样整个模型就变成了一个共轭先验结构,后验分布有解析解,计算起来非常快。

4.2 先验分布:你凭什么「先入为主」?

先验分布,说白了就是你在看到数据之前,对参数已有的判断。

你可能会问:我凭什么对因子收益率有先验判断?

举个例子。你在做市值因子(SMB)的回归。根据过去十年的研究,小盘股相对于大盘股的超额收益大概在年化 3%-5% 之间。那你就可以把这个信息编码进先验分布里。

常见的先验设定方式有两种:

  1. 无信息先验:如果你对某个因子完全没把握,就用一个方差很大的正态分布。比如 β ~ N(0, 1000²)。这相当于告诉模型:「我啥也不知道,全靠数据说话。」
  2. 信息先验:如果你有历史经验或理论依据,就用一个均值不为零、方差较小的分布。比如 β ~ N(0.04, 0.01²)。这表示:「我比较确定这个因子年化收益在 4% 左右,波动不大。」

我个人习惯在因子模型里用信息先验。尤其是对那些已经被大量文献验证过的因子(如动量、价值),我会给一个相对紧的先验。而对于那些新挖掘的「奇葩因子」,我会用无信息先验,让数据自己说话。

避坑指南:我曾经在一个多因子模型里,对某个因子用了过于自信的先验(均值设得太高、方差设得太小)。结果后验估计完全被先验绑架了,数据再怎么拉都拉不回来。记住:先验是你的「建议」,不是「命令」。

数学上,我们通常假设:

β ~ N(μ₀, Σ₀)
σ² ~ Inv-Gamma(a₀, b₀)

其中 μ₀ 是 K×1 的先验均值向量,Σ₀ 是 K×K 的先验协方差矩阵。a₀ 和 b₀ 是逆伽马分布的形状参数和尺度参数。

4.3 似然函数:数据怎么说?

似然函数,就是给定参数 β 和 σ² 下,观测到数据 y 的概率。

根据模型假设 y = Xβ + ε,且 ε ~ N(0, σ²I),那么 y 的条件分布就是:

y | β, σ² ~ N(Xβ, σ²I)

所以似然函数为:

p(y | β, σ²) = (2πσ²)^(-N/2) * exp[ - (y - Xβ)ᵀ(y - Xβ) / (2σ²) ]

这个公式你看着眼熟吧?和频率学派里的似然函数一模一样。区别在于——频率学派把 β 当常数,最大化这个函数去求 β 的估计值。而贝叶斯学派把它当成「更新先验」的工具。

你想想看,似然函数越大,说明当前这组参数 β 和 σ² 越能解释观测到的数据。贝叶斯公式就是把这个信息,和先验信息结合起来。

4.4 后验分布:先验与数据的「联姻」

终于到了最核心的部分。后验分布,就是贝叶斯定理的产物:

p(β, σ² | y) ∝ p(y | β, σ²) × p(β, σ²)

翻译成人话:后验 ∝ 似然 × 先验。

这个公式的美妙之处在于——它把「先验知识」和「数据证据」做了加权平均。如果数据量很大,似然函数会非常尖锐,后验就主要由数据决定。如果数据量很小,先验就会起到「正则化」的作用,防止参数估计跑偏。

在共轭先验的设定下(β 正态、σ² 逆伽马),后验分布有解析解:

β | σ², y ~ N(μ_n, Σ_n)
σ² | y ~ Inv-Gamma(a_n, b_n)

其中:

Σ_n = (Σ₀⁻¹ + XᵀX / σ²)⁻¹
μ_n = Σ_n (Σ₀⁻¹ μ₀ + Xᵀy / σ²)
a_n = a₀ + N/2
b_n = b₀ + (yᵀy + μ₀ᵀΣ₀⁻¹μ₀ - μ_nᵀΣ_n⁻¹μ_n) / 2

看到没?后验均值 μ_n 是先验均值 μ₀ 和 OLS 估计量 (XᵀX)⁻¹Xᵀy 的加权平均。权重由先验精度 Σ₀⁻¹ 和数据精度 XᵀX/σ² 决定。

直观理解:先验越确定(Σ₀ 越小),后验就越靠近先验。数据越多(XᵀX 越大),后验就越靠近 OLS 估计。这就是贝叶斯方法的精髓——自动平衡先验与数据。

4.5 一张图看懂整个流程

下面我用一张 SVG 流程图,把贝叶斯线性回归的完整逻辑串起来。你盯着看两分钟,应该就能记住整个框架。

贝叶斯线性回归核心逻辑图 模型假设 y = Xβ + ε, ε ~ N(0, σ²I) 参数 β 和 σ² 视为随机变量 先验分布 β ~ N(μ₀, Σ₀) σ² ~ Inv-Gamma(a₀, b₀) 补充 似然函数 p(y | β, σ²) 数据对参数的「支持程度」 后验分布 p(β, σ² | y) ∝ 似然 × 先验 先验与数据的「加权平均」 提供先验信息 提供数据证据 推导出 核心公式 后验 ∝ 似然 × 先验

4.6 一个简单的 Python 示例

光说不练假把式。下面我用 Python 演示一下,如何用贝叶斯线性回归估计一个单因子模型。

import numpy as np
import matplotlib.pyplot as plt

# 生成模拟数据
np.random.seed(42)
N = 100  # 样本量
beta_true = 0.8
sigma_true = 0.5

X = np.random.randn(N, 1)
y = X @ np.array([beta_true]) + np.random.randn(N) * sigma_true

# 设定先验
mu_0 = np.array([0.0])      # 先验均值
Sigma_0 = np.array([[1.0]])  # 先验方差(精度 = 1)
a_0, b_0 = 2.0, 1.0         # 逆伽马先验参数

# 计算后验参数
X_design = X
XTX = X_design.T @ X_design
XTy = X_design.T @ y

# 后验均值与方差(给定 σ²)
Sigma_n = np.linalg.inv(np.linalg.inv(Sigma_0) + XTX)
mu_n = Sigma_n @ (np.linalg.inv(Sigma_0) @ mu_0 + XTy)

# 后验边缘分布(σ² 的边缘后验)
a_n = a_0 + N / 2
b_n = b_0 + 0.5 * (y.T @ y + mu_0.T @ np.linalg.inv(Sigma_0) @ mu_0
                   - mu_n.T @ np.linalg.inv(Sigma_n) @ mu_n)

print(f"后验均值 μ_n = {mu_n[0,0]:.4f}")
print(f"后验方差 Σ_n = {Sigma_n[0,0]:.4f}")
print(f"真实 β = {beta_true}")

运行结果会告诉你,后验均值非常接近真实值 0.8。而且后验方差很小,说明我们对这个估计比较有信心。

一个小技巧:在实际项目中,我通常不会手动推导这些公式。我会用 PyMC 或 Stan 这样的概率编程语言。它们会自动处理 MCMC 采样,你只需要定义模型结构就行。但理解背后的数学原理,能帮你更好地调试模型。

4.7 本章小结

好了,这一章的内容就到这里。我们来捋一捋核心要点:

  • 模型假设:和频率学派一样,但参数被视为随机变量。
  • 先验分布:你已有的知识,用概率分布编码。无信息先验 vs 信息先验,看情况选择。
  • 似然函数:数据对参数的支持程度,形式与 OLS 相同。
  • 后验分布:先验与似然的乘积(归一化后)。在共轭先验下,有漂亮的解析解。

说实话,贝叶斯方法在量化里的优势,在样本量小、信噪比低的时候体现得最明显。因子模型恰恰就是这种场景——因子收益率本来就弱,数据又有限。用贝叶斯方法,相当于给估计值加了一层「保险」。

下一章,我们会深入后验预测分布,看看如何用贝叶斯方法做因子收益率的预测和风险度量。嗯,到时候你会看到,贝叶斯不只是估计参数,还能给出完整的预测分布——这对风险管理来说,太重要了。


公众号:蓝海资料掘金营,微信deep3321