如果把数据分析比作一家餐厅,普通线性回归就是一位只会做白米饭的大厨:客人点二分类的“点击/不点击”、计数型的“一周故障几次”、右偏的“理赔金额多少”,他全都摇头说做不了,因为他手里的菜谱只接受正态分布的连续食材。广义线性模型(GLM)就是给这家餐厅换上一套“万能定制菜单”。菜单分三层:第一层选主菜——目标变量服从哪种指数族分布;第二层调味道——用线性组合把特征拌成“线性预测器”;第三层选烹饪方式——用链接函数把主菜的均值与调味汁接起来。于是,线性回归成了只做白米饭的特例,而逻辑回归、泊松回归、Gamma回归都是同一套菜单下的招牌菜。本文从“白米饭”的局限讲起,一步步展示如何通过指数族分布、三要素和链接函数,搭出一套能应对任意指数族目标分布的建模框架。
学完 GLM,你不再为二分类、计数、偏态数据四处拼模型,而是用一套统一框架覆盖主流业务建模场景,直接提升从特征到业务指标的落地效率。
可视化演示
动态演示把线性模型推广到任意分布的G的核心机制,通过架构/数据/状态/性能四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
把线性模型推广到任意分布的G:GLM的 GLM的设计动机与三大组件 指数族分布与GLM统一框架 核心机制可视化 把线性模型推广到任意分布的G整体架构与关键组件
线性模型的局限
一位只会做白米饭的大厨,无论客人点什么菜,他都端出同样的白米饭。普通线性回归就是这位大厨:它假设目标变量 \(y\) 来自正态分布,所以只能端出“连续、对称、方差稳定”的白米饭。可真实业务里,用户点击是 0/1 的“甜辣口”,事故次数是 0、1、2 的“小笼包计数”,理赔金额是右偏的“重口味大菜”。大厨不是不想做,而是他的固定菜谱里根本没有这些食材的位置。
从数学上看,线性回归把目标写成线性组合加噪声:
这个框架的问题在于:它把“目标本身”和“目标均值”混为一谈,默认均值可以不加约束地写成线性公式。可一旦目标是概率、计数或金额,直接线性预测就会出现负概率、负次数、负金额。于是我们需要换一套更灵活的菜单:把“主菜分布”从正态扩展到更多食材,这就是 GLM 的起点。
- 线性预测部分\(\beta_0 + \beta_1 x_1 + \cdots + \beta_p x_p\) 是餐厅的调味公式,把各特征按固定比例混合。
- 误差项\(\varepsilon\) 是厨师手抖造成的随机偏差,体现单次出品与配方的差异。
- 正态假设\(\varepsilon \sim \mathcal{N}(0,\sigma^2)\) 要求偏差围绕配方上下波动,且大多数波动集中在中间。
指数族分布
如果给餐厅建一个“主食材库”,里面不能只有白米饭,还要有伯努利、泊松、Gamma 等可选的食材。GLM 没有为每种食材单独发明一套体系,而是发现它们都来自同一个“食材家族”——指数族分布。正态分布、伯努利分布、泊松分布、Gamma 分布,统统是这个家族里的成员,只是自然参数 \(\theta\) 不同。
指数族分布的统一写法是:
把分布放进指数族,最大的好处是:均值与方差的关系可以由 \(b(\theta)\) 自动推导。普通线性回归觉得“均值与方差互不相干”,但泊松计数是“均值越大,波动越大”,Gamma 金额也是“均值越大,方差越大”。指数族分布把这种关系一并打包,GLM 接下来只需要关心均值如何被线性配方影响。
- 自然参数\(\theta\) 是食材的“核心口味参数”,决定分布的位置,比如伯努利的成功概率经过变换后就进入 \(\theta\)。
- 累积量函数\(b(\theta)\) 是“营养成分表”,对它求一阶导得到均值,求二阶导得到方差。
- 散度参数\(a(\phi)\) 是“份量调节器”,控制分布的离散程度,正态里的 \(\sigma^2\) 就是这样进来的。
- 归一化项\(c(y,\phi)\) 负责让总概率加起来等于 1,相当于餐厅保证菜单完整不重不漏。
GLM三要素
点一份 GLM 定制套餐,餐单上永远只有三栏:主菜、调味汁、烹饪方式。对应到模型中,就是“随机成分、系统成分、链接函数”。
- 随机成分:目标变量 \(Y_i\) 服从某个指数族分布,决定数据从哪里来;
- 系统成分:特征线性组合 \(\mathbf{x}_i^\top \boldsymbol{\beta}\),决定配方怎么搅拌;
- 链接函数:把主菜的均值 \(\mu_i\) 和线性调味汁 \(\eta_i\) 接起来,决定上菜方式。
三者合起来写成:
当链接函数是恒等函数时,\(g(\mu)=\mu\),GLM 就退回普通线性回归。所以线性回归不是被推翻,而是 GLM 菜单里的一个口味:只做白米饭。现在,我们需要仔细研究链接函数这味“烹饪方式”。
- 随机成分\(Y_i \sim \text{ExpFam}(\mu_i)\) 指定主菜食材,例如二分类用伯努利、计数用泊松。
- 均值\(E(Y_i)=\mu_i\) 是这道主菜“通常的口味浓度”,模型预测的是均值而不是单个 y。
- 链接函数\(g(\mu_i)=\eta_i\) 把均值映射到实数轴,让线性配方可以在不受约束的空间里工作。
- 系统成分\(\eta_i = \mathbf{x}_i^\top \boldsymbol{\beta}\) 是线性调味汁,特征的线性组合,和线性回归里的 \(\eta\) 完全同源。
链接函数
同一块牛排,可以煎、烤、炖;同一个均值 \(\mu\),也要通过不同链接函数送进线性配方。链接函数 \(g\) 必须单调且可微,这样它才能把 \(\mu\) 压缩或拉伸到整个实数轴,同时保证逆变换回来时 \(\mu\) 不乱跑。比如概率 \(\mu \in (0,1)\),用 logit 链接就能映射到 \((-\infty,+\infty)\)。
规范链接是每个指数族分布“最顺手”的烹饪方式:它让自然参数 \(\theta\) 直接等于线性预测器 \(\eta\),数学推导最简洁。它的核心关系是:
常用链接函数有:正态配恒等链接,伯努利配 logit 链接,泊松配对数链接,Gamma 配倒数或对数链接。链接函数选得好,能让线性配方与均值的关系更贴近数据生成过程;选得不好,就像用烤的方式做刺身,可能把均值烤成负数或超出取值范围。这份“烹饪方式”菜单,是 GLM 灵活性的灵魂。
- 链接函数\(g(\mu)\) 是烹饪方式,把均值口味的浓度“翻译”成线性配方能处理的实数。
- 自然参数\(\theta\) 是指数族分布里控制均值的核心参数,规范链接让模型和分布“原汤化原食”。
- 线性预测器\(\eta\) 是调味汁本身,特征线性组合,可以取任意实数。
常见GLM实战
有了主食材和烹饪方式,餐厅就能推出三款招牌套餐。第一款是逻辑回归:目标只有 0/1,比如用户是否点击广告,主食材是伯努利,用 logit 链接。第二款是泊松回归:目标是计数,比如一周内故障次数或理赔次数,主食材是泊松,用对数链接。第三款是 Gamma 回归:目标是正数且右偏,比如单次理赔金额,主食材是 Gamma,常用对数或倒数链接保证均值始终为正。
这三款套餐的均值表达式,就是分别对线性预测器做逆链接变换:
这三个模型在业务里对应三种典型问题:点击率、故障次数、理赔金额。过去需要分别学习三套理论,现在 GLM 告诉你它们只是同一套餐单上的三个主菜。真正把菜做出来,还需要一套统一估计配方的流程。
- 逻辑回归逆链接\(\mu_i = \dfrac{1}{1+e^{-\eta_i}}\) 把任意实数压缩到 0 到 1 之间,正好当概率用。
- 泊松回归逆链接\(\mu_i = e^{\eta_i}\) 把实数映射成正数,且随着线性预测增大,计数均值指数增长。
- Gamma回归逆链接\(\mu_i = \dfrac{1}{\eta_i}\) 是倒数链接,适合正值且右偏的连续目标,但需要保证 \(\eta_i>0\),实践中也常用对数链接。
参数估计拟合
厨师试菜时,会反复调整调料比例,直到顾客最满意。GLM 的参数 \(\boldsymbol{\beta}\) 也通过极大似然估计来调整:找到一组系数,让当前样本出现的概率最大。对于指数族分布,似然函数的形状很规整,因此可以用迭代加权最小二乘(IRLS)来高效求解。
IRLS 的做法是:给每条样本一个权重,把 GLM 最优化问题临时变成加权线性回归,解出新的 \(\boldsymbol{\beta}\),再更新权重,重复直到收敛。在规范链接下,迭代更新式可以写成:
在 R、Python 的 statsmodels 中,glm() 函数把这些迭代封装成一行命令。我们不需要每次都手写 IRLS,但理解它之后,就知道为什么要设置最大迭代次数、为什么特征高度相关时模型不稳定。菜做出来了,还需要评价好不好吃。
- 当前系数\(\boldsymbol{\beta}^{(t)}\) 是第 \(t\) 轮试菜用的调料配方。
- 加权交叉矩阵\(\mathbf{X}^\top \mathbf{W}^{(t)} \mathbf{X}\) 是“调料对顾客反应的敏感度矩阵”,逻辑回归时其中的权重 \(W\) 等于 \(\mu(1-\mu)\)。
- 残差方向\(\mathbf{y} - \boldsymbol{\mu}^{(t)}\) 是当前预测与真实数据的差距,告诉厨师往哪个方向改配方。
- 矩阵求逆修正\(\left( \mathbf{X}^\top \mathbf{W}^{(t)} \mathbf{X} \right)^{-1} \mathbf{X}^\top \left( \mathbf{y} - \boldsymbol{\mu}^{(t)} \right)\) 把残差按敏感度缩放成系数更新量。
模型评估应用
餐厅好不好,不能只看一位顾客,要看整体满意度。GLM 的“整体满意度”用偏差(Deviance)来衡量:它比较当前模型与一个“完美拟合每个样本”的饱和模型之间的距离。偏差越小,说明模型对数据的解释力越强。偏差的定义是:
有了偏差,就能计算 AIC 等模型选择指标。AIC 在偏差基础上惩罚参数个数,防止厨师为了让菜好看而堆太多调料。实际业务里,点击率用逻辑回归,理赔次数用泊松回归,理赔金额用 Gamma 回归,频率和强度的组合还能构成“两阶段定价模型”。GLM 的价值不是替代所有算法,而是把“分布 + 线性 + 链接”这套菜单贯穿到每一个业务场景里。
- 饱和模型\(\ell_i(\mu_i^{\text{sat}})\) 是让每个样本都完美拟合时的对数似然,相当于每位顾客都能吃到专属定制菜。
- 当前模型\(\ell_i(\hat{\mu}_i)\) 是我们这套通用菜单预测出的均值所对应的对数似然。
- 两倍差距乘以 2 是为了让偏差量在大样本下接近卡方分布,方便做模型比较。
AI 应用场景
广告点击率预测
阶段:特征工程与模型训练
解决的问题:点击行为是 0/1 二分类,普通线性回归会预测出小于 0 或大于 1 的概率,也不符合伯努利分布。GLM 的逻辑回归用 logit 链接把线性预测压缩到概率空间,用交叉熵作为损失函数,训练稳定且可解释。
具体案例:广告平台收集用户年龄、设备、投放时段、广告位等特征,用逻辑回归估计每次曝光被点击的概率,再结合预估点击率排序广告。模型输出的 \(\mu = 1/(1+e^{-\eta})\) 就是点击概率,业务方直接拿来做预算分配。
车险理赔次数预测
阶段:数据探查与精算建模
解决的问题:理赔次数是非负整数,且大量保单为 0 次,方差随均值增大而增大。泊松回归用对数链接保证预测均值永远为正,比普通线性回归更贴合计数生成过程。
具体案例:精算团队用投保人的年龄、车龄、驾驶记录、地区风险等级做特征,建立泊松 GLM 预测未来一年理赔次数,再结合 Gamma GLM 预测单次理赔金额,形成频率与强度两阶段定价模型。
保单损失金额建模
阶段:模型选择与业务应用
解决的问题:损失金额是正数且右偏,方差往往随均值增大而增大,正态假设不成立。Gamma GLM 用对数链接或倒数链接,既保证均值大于 0,又能刻画“大额理赔更分散”的特点。
具体案例:某保险公司建立“是否出险”的逻辑回归模型、“出险次数”的泊松模型和“单次损失金额”的 Gamma 模型,三套 GLM 组合出纯保费预测,帮助核保部门制定差异化费率。
Python 演示
import numpy as np def sigmoid(z): # 计算逻辑函数值,对应logit链接的逆变换 return 1.0 / (1.0 + np.exp(-z)) def make_data(n=800, seed=42): # 模拟二分类数据: 线性预测经过sigmoid后生成标签 rng = np.random.default_rng(seed) x1 = rng.normal(0.0, 1.0, n) x2 = rng.normal(0.0, 1.0, n) eta = -1.0 + 1.2 * x1 - 0.8 * x2 prob = sigmoid(eta) y = rng.binomial(1, prob) X = np.column_stack((np.ones(n), x1, x2)) return X, y def irls_logistic(X, y, max_iter=30): # 用IRLS拟合逻辑回归: 等价于迭代加权最小二乘 beta = np.zeros(X.shape[1]) for _ in range(max_iter): eta = X @ beta p = sigmoid(eta) w = p * (1.0 - p) z = eta + (y - p) / np.maximum(w, 1e-12) XW = X * w[:, None] beta = np.linalg.solve(X.T @ XW, XW.T @ z) return beta def main(): X, y = make_data() beta = irls_logistic(X, y) p = sigmoid(X @ beta) acc = float(np.mean((p > 0.5) == y)) print("IRLS估计的系数:", beta) print("训练准确率:", round(acc, 4)) if __name__ == "__main__": main()
return 1.0 / (1.0 + np.exp(-z))这是 logit 链接的逆变换,把线性预测转成 0 到 1 之间的概率。eta = -1.0 + 1.2 * x1 - 0.8 * x2先构造真实的线性预测器,作为生成数据的调味配方。prob = sigmoid(eta)用逆链接生成伯努利分布的均值概率。y = rng.binomial(1, prob)从伯努利分布中抽取 0/1 标签,对应随机成分。p = sigmoid(eta)在 IRLS 循环里重新计算当前预测均值和权重。w = p * (1.0 - p)这就是逻辑回归的方差函数,也是 IRLS 每个样本的权重。z = eta + (y - p) / np.maximum(w, 1e-12)构造工作响应变量,把非线性问题局部线性化。XW = X * w[:, None]把设计矩阵按权重逐行缩放,相当于加权最小二乘的 X。beta = np.linalg.solve(X.T @ XW, XW.T @ z)用线性代数求解加权正态方程,完成一轮参数更新。
常见误区
误区我以为 GLM 就是先给 y 取对数或开平方,让变换后的 y 服从正态,再继续用线性回归。
正解GLM 的链接函数变换的是均值 \(\mu=E(Y)\),不是每个 \(y\) 值本身。就像把整锅汤的口味调淡,而不是把每粒盐都换掉。直接变换 y 会改变数据的分布结构,而且预测后很难还原到原始尺度;链接函数则保持原始分布假设,只在均值与线性预测之间搭桥。
为何常见:普通线性回归里 Box-Cox 变换很常见,初学者容易把“变换数据”和“变换均值”混为一谈。
误区我觉得链接函数只是软件里的一个下拉选项,随便选一个都能收敛,最终效果应该差别不大。
正解链接函数决定解释变量如何影响均值,选错会破坏线性关系,甚至产生无效预测。比如对泊松计数用恒等链接,可能出现负的预测均值;对概率用线性链接,也可能预测出大于 1 的概率。规范链接在数学上最自然,但有时对数链接更容易解释相对变化,选择需要结合业务。
为何常见:统计软件默认链接看起来“不用管”,让人忽略了链接函数对模型空间的约束。
误区我听说 GLM 是“广义”的,以为它不再需要正态、独立等任何假设,可以放任意分布的数据。
正解GLM 只是把正态分布推广到指数族分布,不是任意分布。它仍然要求样本近似独立、系统成分正确、链接函数适当。泊松回归遇到数据过度离散时,方差远大于均值,需要升级为拟泊松或负二项模型,而不是硬套 GLM。
为何常见:“广义”两个字太有迷惑性,让人以为它是万能模型。
误区我以为泊松回归只适合“排队人数”这种小计数,出现很多 0 或者计数很大时就不能用了。
正解泊松分布本身就允许 0 和任意非负整数,关键假设是均值等于方差。如果数据出现零膨胀或过度离散,说明分布假设不满足,这时应该用零膨胀模型或负二项回归,而不是因为“有 0”就直接放弃泊松。
为何常见:教科书例子多是等车次数这类温和计数,容易让人忽略泊松真正严格的是均值方差关系。
面试题
Q1. GLM 相比普通线性回归,最主要的推广是什么?
- A.能处理指数族目标分布← 正确答案
- B.限制目标为正态分布
- C.取消所有统计假设
- D.只能处理计数数据
答案:A。GLM 把目标分布从正态推广到指数族,包括伯努利、泊松、Gamma 等。B 说反了;C 错在 GLM 仍有独立性和分布假设;D 错在 GLM 同样能处理连续正态目标,并非只能处理计数。
Q2. 指数族分布中,决定分布均值的参数是?
- A.自然参数θ← 正确答案
- B.链接函数g
- C.线性预测η
- D.样本容量n
答案:A。指数族分布里,均值等于累积量函数 \(b(\theta)\) 的一阶导,因此自然参数 \(\theta\) 驱动均值。链接函数和线性预测是 GLM 的建模工具,不是分布本身的内生参数;样本容量只影响估计精度。
Q3. 下列哪种目标最适合用泊松回归?
- A.二分类点击与否
- B.一周内故障次数← 正确答案
- C.连续正态评分结果
- D.正偏态理赔金额
答案:B。泊松回归面向非负整数计数,比如故障次数。点击与否是二分类,适合逻辑回归;连续正态评分适合线性回归;正偏态金额通常考虑 Gamma 回归。
Q4. GLM 的三个组成部分包括哪些?
- A.随机成分定义目标分布← 正确答案
- B.系统成分构造线性预测← 正确答案
- C.链接函数连接两者← 正确答案
- D.树模型规则做决策路径
答案:ABC。GLM 三要素是随机成分、系统成分、链接函数。随机成分决定目标服从哪个指数族分布,系统成分是特征线性组合,链接函数把均值接到线性预测上。树模型规则属于决策树,不是 GLM 的组成部分。
Q5. 逻辑回归对应的规范链接函数是?
- A.恒等链接函数
- B.倒数链接函数
- C.Logit 链接函数← 正确答案
- D.平方根链接函数
答案:C。伯努利分布的规范链接是 logit,即 \(g(\mu)=\log(\mu/(1-\mu))\)。恒等链接用于正态分布;倒数链接常用于 Gamma;平方根链接不是伯努利模型的规范选择。
Q6. 关于链接函数,下列说法正确的是?
- A.链接函数需要单调且可微← 正确答案
- B.逆链接把η映射回均值μ← 正确答案
- C.只能选择规范链接函数
- D.计数模型常用对数链接← 正确答案
答案:ABD。链接函数必须单调可微,才能保证逆变换唯一且平滑。逆链接 \(g^{-1}\) 把线性预测器映射回均值。规范链接只是数学上的自然选择,不是唯一选择。泊松等计数模型常用对数链接保证均值非负,因此 C 错误。
Q7. 用恒等链接做泊松GLM时,最可能的问题是什么?
- A.预测均值可能出现负值← 正确答案
- B.梯度一定无法计算
- C.参数估计会变成无偏
- D.样本必须服从正态
答案:A。泊松均值必须为正,而恒等链接 \(\mu=\eta\) 允许 \(\eta\) 取负值,导致预测均值小于 0,产生无意义的负次数。梯度仍然可以计算,参数也可能有偏,样本也不要求正态,所以 B、C、D 错误。
Q8. 保险理赔次数建模,最适合的 GLM 是?
- A.泊松回归建模← 正确答案
- B.线性回归建模
- C.Gamma回归建模
- D.逻辑回归建模
答案:A。理赔次数是非负整数,适合泊松回归。线性回归假设正态连续目标;Gamma 回归适合正偏态金额;逻辑回归适合是否出险的二分类,不适合次数建模。
Q9. IRLS 迭代最终逼近的目标是什么?
- A.极大似然估计解← 正确答案
- B.普通最小二乘解
- C.最大准确率解
- D.最小方差无偏解
答案:A。IRLS 是求解 GLM 极大似然估计的数值算法,它反复把加权最小二乘问题线性化,最终收敛到极大似然估计。它不是为了最小化误差平方和,也不是直接优化分类准确率或寻找无偏估计。
Q10. 关于偏差统计量和 AIC,下列说法正确的是?
- A.偏差可比较嵌套模型← 正确答案
- B.偏差基于饱和模型← 正确答案
- C.AIC 不需要似然函数
- D.AIC 会惩罚参数个数← 正确答案
答案:ABD。偏差定义为当前模型与饱和模型对数似然差距的两倍,可用于比较嵌套模型。AIC 在偏差基础上加上 \(2k\) 惩罚参数个数,因此依赖似然函数。C 说反了,AIC 恰恰需要似然函数,所以选 A、B、D。