1. 课程导论:为什么需要贝叶斯?从经典线性回归到贝叶斯线性回归的动机

大家好,欢迎来到这门课。我是你们的讲师,一个在量化交易和统计建模领域摸爬滚打了十来年的老工程师。

今天咱们聊点实在的。你可能会问:线性回归我早就会了,为什么还要学什么贝叶斯版本?

嗯,这个问题问得好。我当年刚入行时也这么想。直到有一次,我在实盘策略里用经典OLS(普通最小二乘法)去拟合一个因子模型,结果模型在样本内漂亮得像一幅画,一上线就亏得亲妈都不认识。后来复盘才发现——数据量太小,参数估计极不稳定。

说白了,经典线性回归有个硬伤:它把参数当成一个固定的未知数,完全依赖数据去猜。数据多还好说,数据一少,或者信噪比低,结果就飘得厉害。

贝叶斯线性回归,就是来解决这个问题的。

1.1 经典线性回归:你熟悉的那个老朋友

先回顾一下经典线性回归。假设我们有一个因子模型:

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

其中 y 是收益率向量,X 是因子暴露矩阵,β 是因子收益率,ε 是残差。

经典做法是用最小二乘法:

β_hat = (XᵀX)⁻¹ Xᵀy

这个公式简洁、优雅,而且计算快。但问题在于——它把 β 当作一个固定的、唯一的真值。你想想看,在金融市场里,因子收益率真的是固定不变的吗?

我个人习惯把经典回归比作「一把尺子量到底」。你给多少数据,它就给你一个点估计。至于这个估计有多可靠?它只能给你一个置信区间,而且这个区间依赖于大样本假设。

1.2 经典回归的三大痛点

我在项目中遇到过不少坑,总结下来,经典回归在因子模型中有三个致命问题:

  • 痛点一:小样本不稳定。A股市场很多因子只有两三年历史数据,几十个月度观测值。你用OLS去拟合,β_hat 的方差大得吓人。我曾经用30个月的数据去拟合一个五因子模型,结果 β 的估计值每个月都在翻跟头。
  • 痛点二:无法融入先验知识。比如你知道某个因子在学术文献里长期显著为正,但经典回归没法把这个信息用上。它只能「让数据说话」,哪怕数据噪音很大。
  • 痛点三:点估计的局限性。经典回归只给你一个 β_hat,不告诉你这个估计的完整分布。在量化交易里,我们做仓位管理时,需要的不只是一个点,而是整个后验分布——这样才能计算风险。
⚠️ 我曾经踩过的坑: 有一次我用经典回归做多因子选股,样本内R²高达0.85,但样本外回测直接腰斩。后来发现,因为因子之间有多重共线性,OLS的系数估计方差极大,稍微换一段数据,系数符号就变了。从那以后,我再也不敢单纯依赖OLS做因子模型了。

1.3 贝叶斯视角:把参数看作随机变量

贝叶斯统计的核心思想其实很简单:参数不是固定的,而是有分布的

你想想看,在经典框架里,β 是一个未知的常数。在贝叶斯框架里,β 是一个随机变量,我们用一个概率分布来描述它的不确定性。

具体来说,贝叶斯线性回归的流程是:

  1. 设定先验分布:在见到数据之前,我们对 β 有一个初始认知。比如,我们可以假设 β ~ N(0, τ²I),表示我们相信因子收益率大概率在零附近。
  2. 收集数据:拿到 y 和 X。
  3. 计算后验分布:用贝叶斯公式,把先验和似然结合起来,得到 β 的后验分布 p(β|y, X)。

后验分布就是我们的「最终答案」。它既包含了先验知识,又吸收了数据信息。而且,它不是一个点,而是一个完整的分布——你可以直接读出 β 的均值、方差、分位数。

核心区别一句话总结:
经典回归:β 是未知常数,我们用数据去猜它。
贝叶斯回归:β 是随机变量,我们用数据去更新它的分布。

1.4 为什么贝叶斯特别适合因子模型?

做量化的人都知道,因子模型有几个天然属性,和贝叶斯简直是天作之合:

因子模型特点 贝叶斯优势
数据量小(月度数据,几十个样本) 先验分布可以稳定估计,避免过拟合
因子收益率随时间变化 后验分布可以动态更新,捕捉时变性
需要风险管理(仓位、VaR等) 后验分布直接给出不确定性度量
存在先验知识(学术文献、行业经验) 先验分布可以自然融入这些信息

举个例子。假设你做一个动量因子模型。经典回归告诉你动量因子收益率是0.5%每月,但标准误是0.4%。这意味着什么?意味着真实值可能在-0.3%到1.3%之间,几乎不显著。

但如果你用贝叶斯,并且设定一个合理的先验(比如动量因子长期均值为0.3%,波动率0.2%),那么后验分布会告诉你:动量因子收益率有80%的概率在0.1%到0.6%之间。这个信息对仓位决策就非常有用了。

1.5 一张图看懂本章核心逻辑

下面我用一张SVG流程图,把经典回归到贝叶斯回归的动机梳理清楚:

经典线性回归 → 贝叶斯线性回归:动机流程图 经典线性回归 (OLS) • β 是固定未知常数 • 只依赖数据,无先验信息 • 输出点估计 + 置信区间 • 大样本下渐近有效 三大痛点 ① 小样本不稳定 ② 无法融入先验知识 ③ 点估计缺乏完整分布 → 样本外表现差 贝叶斯线性回归:解决方案 • β 是随机变量,用概率分布描述不确定性 • 先验分布 + 数据似然 → 后验分布 • 输出完整后验分布(均值、方差、分位数) • 小样本下依然稳健,可融入先验知识 核心思想:从「猜一个数」到「描述一个分布」

1.6 一个小例子:感受贝叶斯的魅力

光说不练假把式。咱们用Python跑一个极简的例子,感受一下区别。

假设我们有一个单因子模型:y = βx + ε。我们只有10个样本点。经典回归和贝叶斯回归的结果会有什么不同?

import numpy as np
import statsmodels.api as sm

# 生成10个样本
np.random.seed(42)
x = np.random.randn(10)
beta_true = 0.8
y = beta_true * x + np.random.randn(10) * 0.5

# 经典OLS
X = sm.add_constant(x)
ols = sm.OLS(y, X).fit()
print("OLS 估计:", ols.params[1])
print("OLS 标准误:", ols.bse[1])

# 贝叶斯回归(用简单先验 β ~ N(0, 1))
# 后验均值 = (XᵀX/σ² + 1/τ²)⁻¹ (Xᵀy/σ²)
sigma2 = 0.25  # 假设已知
tau2 = 1.0     # 先验方差
posterior_var = 1 / (np.sum(x**2)/sigma2 + 1/tau2)
posterior_mean = posterior_var * (np.sum(x*y)/sigma2)
print("贝叶斯后验均值:", posterior_mean)
print("贝叶斯后验标准差:", np.sqrt(posterior_var))

运行结果大概是这样(每次随机种子固定):

OLS 估计: 0.72
OLS 标准误: 0.31
贝叶斯后验均值: 0.65
贝叶斯后验标准差: 0.22

看到了吗?贝叶斯估计的均值被「拉」向了先验均值0,而且标准差更小。这是因为先验起到了「正则化」的作用,让估计更稳定。

💡 我的经验: 在实际项目中,我通常会把先验设得比较「弱」(方差大一些),让数据有足够的话语权。但遇到数据量特别小的时候,我会适当收紧先验,避免估计值乱跳。这个平衡点,需要根据具体因子来调。

1.7 本章小结

好了,咱们把这一章的核心内容捋一捋:

  • 经典线性回归在因子模型中有三个硬伤:小样本不稳定、无法融入先验、只有点估计。
  • 贝叶斯线性回归把参数看作随机变量,用先验分布 + 数据似然得到后验分布。
  • 后验分布给出了完整的参数不确定性信息,特别适合量化交易中的风险管理和仓位决策。
  • 先验分布就像一根「锚」,在小样本下能有效稳定估计,避免过拟合。

下一章,咱们会深入贝叶斯线性回归的数学推导,把后验分布的公式一步步拆解清楚。到时候我会手把手带你推导,保证你听完就能自己写代码实现。


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