4. 暴露量与偏移项
在GLM费率约束与非线性建模中,暴露量(Exposure)与偏移项(Offset)是最容易被混用、也最容易在业务解释上出错的一对概念。很多同学在建模时把两者当成同义词,结果在系数解释、费率因子约束和预测还原环节反复踩坑。本节把这两个概念彻底拆开,并给出对数暴露量作为偏移项的标准实现方式与业务解释框架。
一、核心原理:暴露量是业务量,偏移项是模型结构
先给结论:暴露量是业务事实,偏移项是建模手段。暴露量描述的是“风险单位有多少”,例如车险中的车年数、健康险中的被保人月数、信用风险中的在贷余额、电商场景中的曝光次数。它是一个可观测、可审计的业务量,通常以正数形式出现在数据表中。
偏移项则是GLM线性预测子中的一个系数固定为1的回归项。它的作用是:在不估计额外参数的前提下,把某个已知量以对数尺度直接叠加到线性预测子上。用公式表达:
η = β₀ + β₁x₁ + ... + βₖxₖ + log(E)
其中 E 为暴露量,log(E) 即为偏移项,其系数被强制为 1。
关键区别在于:暴露量本身可以以任意形式进入模型(作为普通特征、作为权重、作为分层变量),而偏移项特指“以log(E)形式、系数锁定为1”的那一种进入方式。换句话说,暴露量是原料,偏移项是配方中的固定剂量。
一句话记忆:Exposure回答“有多少风险单位”,Offset回答“这些风险单位如何以已知比例进入线性预测子”。
二、方法流程:对数暴露量作为偏移项的实现
在Python的statsmodels或R的glm中,偏移项的实现方式略有差异,但本质一致。下面给出标准流程。
- 确认暴露量字段:检查E是否为正数、是否存在零值或缺失。零暴露量通常意味着该记录不应进入模型,或需要单独处理。
- 构造对数暴露量:新建列 log_E = log(E)。注意底数不影响系数估计,但影响截距解释,通常用自然对数。
- 在模型公式中声明offset:statsmodels使用offset参数,R使用offset()函数。
- 选择分布与链接:频率类目标常用Poisson或Gamma,链接函数常用log。
- 拟合后检查系数:偏移项不产生系数,需确认其他系数是在“单位暴露量”尺度上的解释。
import statsmodels.api as sm
import numpy as np
# 假设 df 包含 claim_count, log_E, age, region
X = df[['age', 'region']]
X = sm.add_constant(X)
model = sm.GLM(
df['claim_count'],
X,
family=sm.families.Poisson(link=sm.families.links.log()),
offset=df['log_E']
)
result = model.fit()
print(result.summary())
在R中对应写法为:
glm(claim_count ~ age + region + offset(log_E),
family = poisson(link = "log"),
data = df)
实操提示:如果误把log_E当作普通特征放入模型,模型会额外估计一个系数β_E。当β_E接近1时结果相近,但当β_E显著偏离1时,说明暴露量与目标之间的关系并非严格比例,此时应重新审视业务假设,而不是强行固定为1。
三、业务解释:偏移项如何改变系数含义
加入偏移项后,模型预测的是单位暴露量下的期望值,而非总量。以车险为例:
- 无偏移项时,预测的是“每张保单的索赔次数”,但保单覆盖期长短不同,长保单天然更容易出险。
- 加入log(车年数)作为偏移项后,预测的是“每车年的索赔频率”,这才是可比较的风险指标。
- 此时年龄系数β_age解释为:年龄每增加一单位,车年索赔频率的变化倍数,而非总索赔次数的变化。
这种解释在费率约束中至关重要。费率因子通常要求“相对风险”可比较,如果暴露量未被正确偏移,因子之间会相互污染,导致某些因子被高估或低估。
| 对比维度 | 暴露量作为普通特征 | 暴露量作为偏移项 |
|---|---|---|
| 系数估计 | 额外估计β_E | 系数固定为1,不估计 |
| 预测目标 | 总量或频率,取决于设定 | 单位暴露量下的期望值 |
| 业务解释 | 暴露量对目标的影响强度 | 其他因子的单位风险效应 |
| 适用场景 | 暴露量与目标非线性相关 | 暴露量与目标严格成比例 |
| 费率约束 | 可能干扰因子相对性 | 保持因子可比较性 |
四、案例与误区复盘
案例:某健康险团队建模住院次数,数据中包含“被保人月数”。初期未加偏移项,模型给老年组系数为1.35。加入log(被保人月数)作为偏移项后,老年组系数变为1.18。原因在于老年组平均被保月数更长,未偏移时暴露量效应被错误归因到年龄因子上。修正后,年龄因子的相对风险更符合精算预期。
常见误区一:把暴露量同时作为普通特征和偏移项,导致重复计算。
常见误区二:对暴露量取对数后忘记在预测还原时乘回E,导致预测值系统性偏小。
常见误区三:暴露量存在零值时直接取对数,产生-inf,需在数据清洗阶段处理。
常见误区四:认为偏移项系数“不可检验”,实际上可以通过对比有无偏移项的模型拟合优度来间接验证。
复盘时建议固定检查清单:暴露量是否为正、是否取自然对数、是否在预测时还原、系数解释是否已切换到单位暴露量尺度、费率因子是否仍满足单调性与可比较性。
掌握暴露量与偏移项的区别,是后续非线性建模与费率约束能够正确落地的前提。在实际项目中,建议把“是否使用偏移项”作为模型评审的固定检查项,并在文档中明确记录暴露量的定义、对数变换方式以及预测还原公式,避免因概念混淆导致费率因子失真。