4. 广义线性模型(GLM)原理:指数族分布、链接函数、线性预测器、模型估计(MLE)
广义线性模型(Generalized Linear Model, GLM)是精算赔付率预测的核心建模框架。它突破了传统线性回归对正态分布和恒定方差的限制,允许响应变量服从指数族中的任意分布,并通过链接函数建立线性预测器与期望值之间的映射关系。本节从四个核心构件出发,系统阐述 GLM 的数学原理与估计方法。
4.1 指数族分布:GLM 的分布基础
GLM 假设响应变量 Y 服从指数族分布,其概率密度函数(或概率质量函数)可统一表示为:
f(y | θ, φ) = exp{ [y·θ - b(θ)] / a(φ) + c(y, φ) }
其中:
- θ —— 自然参数(canonical parameter),决定分布的位置;
- φ —— 离散参数(dispersion parameter),控制分布的方差;
- b(θ) —— 累积量函数(cumulant function),其导数给出期望和方差;
- a(φ) —— 已知函数,通常取 φ 或 φ/ω(ω 为先验权重);
- c(y, φ) —— 归一化项,确保密度积分为 1。
指数族分布的重要性质:
| 性质 | 数学表达 | 精算含义 |
|---|---|---|
| 期望 | E[Y] = μ = b'(θ) | 赔付率的预测均值 |
| 方差 | Var[Y] = a(φ) · b''(θ) | 赔付率的波动性估计 |
| 方差函数 | V(μ) = b''(θ(μ)) | 方差与均值的关系形式 |
精算建模中常用的指数族分布包括:
- 正态分布 —— 连续型,方差函数 V(μ)=1,适用于对数变换后的纯保费;
- 泊松分布 —— 计数型,V(μ)=μ,适用于索赔次数建模;
- 二项分布 —— 比例型,V(μ)=μ(1-μ),适用于索赔概率;
- 伽马分布 —— 右偏连续型,V(μ)=μ²,适用于索赔金额;
- 逆高斯分布 —— 高度右偏,V(μ)=μ³,适用于长尾损失。
4.2 链接函数:连接线性预测器与期望
链接函数 g(·) 将响应变量的期望 μ 与线性预测器 η 连接起来:
η = g(μ) = Xβ
其中 X 为设计矩阵,β 为回归系数向量。链接函数必须严格单调且可微。常用链接函数包括:
| 分布 | 典型链接 | 链接形式 | 适用场景 |
|---|---|---|---|
| 正态 | 恒等链接 | η = μ | 线性回归特例 |
| 泊松 | 对数链接 | η = ln(μ) | 索赔次数、发生率 |
| 二项 | Logit 链接 | η = ln[μ/(1-μ)] | 索赔概率、续保率 |
| 伽马 | 对数链接 | η = ln(μ) | 索赔金额、纯保费 |
| 逆高斯 | 倒数平方链接 | η = 1/μ² | 极端损失建模 |
规范链接(canonical link) 是使 θ = η 的链接函数,此时自然参数直接等于线性预测器。规范链接具有充分的充分统计量,计算上更稳定,是 GLM 建模的首选。
4.3 线性预测器:特征组合的加法结构
线性预测器 η 是解释变量的线性组合:
η = β₀ + β₁x₁ + β₂x₂ + ... + βₚxₚ
在精算赔付率模型中,解释变量通常包括:
- 连续型变量 —— 车龄、驾驶人年龄、保额、NCD 等级;
- 分类变量 —— 车型组、地区、性别、职业;
- 交互项 —— 年龄×地区、车型×保额区间;
- 偏移项(offset) —— 暴露数、保单年数,系数固定为 1。
偏移项在对数链接模型中尤为重要:
ln(μ) = ln(暴露数) + β₀ + β₁x₁ + ... + βₚxₚ
此时 μ 表示期望索赔次数或期望赔付金额,而 ln(暴露数) 作为已知偏移量,使模型直接对费率进行预测。
4.4 模型估计:极大似然估计(MLE)
GLM 的回归系数 β 通过极大似然估计(Maximum Likelihood Estimation, MLE)求解。给定 n 个独立观测值 (yᵢ, xᵢ),对数似然函数为:
ℓ(β) = Σᵢ { [yᵢ·θᵢ - b(θᵢ)] / a(φ) + c(yᵢ, φ) }
其中 θᵢ 通过链接函数与 ηᵢ = xᵢᵀβ 关联。MLE 通过求解得分方程(score equation)得到:
∂ℓ/∂βⱼ = Σᵢ [ (yᵢ - μᵢ) · xᵢⱼ / (a(φ) · V(μᵢ) · g'(μᵢ)) ] = 0
由于得分方程通常为非线性,采用 迭代加权最小二乘法(IRLS, Iteratively Reweighted Least Squares) 求解:
- 初始化 β⁽⁰⁾,计算 μ⁽⁰⁾ = g⁻¹(Xβ⁽⁰⁾);
- 计算工作变量 z⁽ᵗ⁾ = η⁽ᵗ⁾ + (y - μ⁽ᵗ⁾) · g'(μ⁽ᵗ⁾);
- 计算权重 w⁽ᵗ⁾ = 1 / [a(φ) · V(μ⁽ᵗ⁾) · (g'(μ⁽ᵗ⁾))²];
- 求解加权最小二乘:β⁽ᵗ⁺¹⁾ = (XᵀWX)⁻¹XᵀWz;
- 重复步骤 2-4 直至收敛。
4.5 GLM 精算建模完整流程
下图展示了从数据准备到模型部署的 GLM 精算建模全流程:
4.6 模型评估与选择
GLM 模型拟合后,需通过以下指标评估和比较:
| 指标 | 公式 | 说明 |
|---|---|---|
| 空模型偏差 | Dnull = 2[ℓ(y; y) − ℓ(β₀)] | 仅含截距的偏差 |
| 残差偏差 | Dres = 2[ℓ(y; y) − ℓ(β̂)] | 当前模型的偏差 |
| 解释偏差比 | (Dnull − Dres) / Dnull | 类似 R²,越高越好 |
| AIC | −2ℓ(β̂) + 2k | k 为参数个数,越小越好 |
| BIC | −2ℓ(β̂) + k·ln(n) | 对复杂模型惩罚更强 |
4.7 Python 实现示例
以下代码展示使用 statsmodels 拟合伽马 GLM 的基本流程:
import statsmodels.api as sm
import pandas as pd
# 加载示例数据(假设包含赔付率数据)
df = pd.read_csv('claim_data.csv')
# 定义响应变量和解释变量
y = df['loss_ratio'] # 赔付率
X = df[['age', 'vehicle_value', 'region_encoded', 'ncd_level']]
X = sm.add_constant(X) # 添加截距项
# 拟合伽马 GLM(对数链接)
gamma_glm = sm.GLM(
y, X,
family=sm.families.Gamma(link=sm.families.links.Log())
).fit()
# 输出模型摘要
print(gamma_glm.summary())
# 预测赔付率
df['predicted_loss_ratio'] = gamma_glm.predict(X)
# 模型诊断:残差偏差与 AIC
print(f"残差偏差: {gamma_glm.deviance:.4f}")
print(f"AIC: {gamma_glm.aic:.2f}")
输出结果解读:
- 系数表 —— 每个变量的估计系数、标准误、z 统计量和 p 值;
- 偏差统计 —— 空模型偏差与残差偏差的对比;
- Pearson 卡方 —— 评估离散参数是否合理;
- 预测值 —— 直接用于赔付率拦截决策。
sm.GLM.fit(method='irls', maxiter=50) 并监控收敛状态。若存在类别变量,使用 patsy 公式接口可简化编码:sm.GLM.from_formula('loss_ratio ~ C(region) + age + vehicle_value', ...)。
4.8 GLM 在赔付率拦截中的优势
GLM 相比传统线性模型和黑箱模型,在精算赔付率预测与拦截场景中具有以下优势:
| 特性 | GLM 优势 | 业务价值 |
|---|---|---|
| 可解释性 | 系数直接反映边际效应 | 满足监管对定价透明度的要求 |
| 分布灵活性 | 支持伽马、泊松、Tweedie 等 | 准确刻画赔付率的偏态和厚尾 |
| 链接函数 | 对数链接保证预测值为正 | 避免赔付率出现负值 |
| 偏移项支持 | 自然处理不同暴露期 | 精确计算单位风险费率 |
| 统计推断 | 提供标准误和置信区间 | 支持风险分层的显著性检验 |
在赔付率拦截系统中,GLM 输出的预测值可直接作为风险评分,结合业务规则设定拦截阈值,实现高风险保单的自动拦截或人工审核。