4. 统计与机器学习基础面试
统计与机器学习基础是精算模型工程师面试的“硬通货”。面试官不会只问你“会不会调包”,而是通过回归、时间序列、GLM、树模型和交叉验证,判断你是否理解模型背后的假设、适用边界,以及能否把统计结论翻译成精算业务语言。本章帮你建立一条清晰的回答主线:先讲原理,再讲流程,最后落到精算场景与公司偏好。
一、核心原理:回归、GLM与树模型的本质差异
面试中常被问:“线性回归、GLM和XGBoost,你在精算场景怎么选?”回答的关键不是背公式,而是讲清假设、输出和解释方式。
- 线性回归:假设因变量连续、误差正态、方差齐性。适合赔付金额、保费收入等连续目标,系数直接解释为边际效应。
- GLM:通过连接函数把线性预测子映射到目标均值,允许指数族分布。精算定价中最常用Gamma、Poisson、Tweedie,分别对应赔付强度、频次和纯保费。
- 树模型:不依赖线性假设,自动捕捉交互和非线性。但单棵树方差大,随机森林和GBDT通过集成降低方差,代价是可解释性下降。
面试加分点:主动提到“GLM的系数在精算里可以直接进入费率因子表,而树模型通常需要SHAP或部分依赖图做事后解释”。
二、方法流程:从数据到模型验证的完整闭环
面试官喜欢听流程,因为流程能暴露你的工程习惯。建议按以下五步回答:
- 数据理解与清洗:检查缺失、异常、暴露量(Exposure)和偏移项(Offset)。精算数据常有时序性和长尾,不能直接套用通用清洗模板。
- 特征工程:连续变量分箱、WOE编码、交互项构造。GLM中分箱要结合业务单调性,树模型可保留原始值。
- 模型选择与训练:先跑基线GLM,再用树模型做非线性补充。注意设置offset,如log(Exposure)。
- 交叉验证:精算数据不能随机K折,要用时间序列切分或分组交叉验证,避免未来信息泄露。
- 评估与复盘:回归看RMSE、MAE、R²;分类看AUC、KS、Gini;精算还要看Lift图、双变量分析和实际赔付率校准。
# 时间序列交叉验证示例(sklearn TimeSeriesSplit)
from sklearn.model_selection import TimeSeriesSplit
tscv = TimeSeriesSplit(n_splits=5)
for train_idx, test_idx in tscv.split(X):
X_train, X_test = X.iloc[train_idx], X.iloc[test_idx]
y_train, y_test = y.iloc[train_idx], y.iloc[test_idx]
model.fit(X_train, y_train)
score = model.score(X_test, y_test)
print(f"Fold score: {score:.4f}")
三、案例场景:GLM与树模型在车险定价中的配合
假设面试官问:“车险纯保费模型,你会怎么搭?”可以这样组织:
- 频率模型:Poisson GLM,offset为log(Exposure),变量包括车龄、地区、历史出险次数。
- 强度模型:Gamma GLM,目标为单次赔付金额,处理长尾和右偏。
- 纯保费:频率×强度,或直接用Tweedie GLM建模纯保费。
- 树模型补充:用GBDT捕捉GLM残差中的非线性交互,再用SHAP解释,最后把显著交互项加回GLM,保持可解释性。
这种“GLM为主、树模型为辅”的策略,既满足监管对可解释性的要求,又提升了预测精度,是很多大型险企的实际做法。
四、误区与复盘:交叉验证和公司侧重点
常见误区有三个:一是对时序数据用随机K折,导致数据泄露;二是只看AUC不看校准,精算定价更关心预测赔付率是否偏离实际;三是盲目追求复杂模型,忽略上线后的监控和维护成本。
| 公司类型 | 侧重点 | 面试信号 |
|---|---|---|
| 传统大型险企 | GLM可解释性、监管合规、稳定性 | 能否讲清系数含义和费率因子 |
| 互联网保险/金融科技 | 树模型、特征工程、上线迭代速度 | 是否熟悉GBDT、SHAP和A/B测试 |
| 再保险/咨询 | 时间序列、极值理论、模型验证 | 能否处理长尾和尾部相关性 |
| 精算软件/数据服务 | 工程化、自动化、可复现 | 是否掌握交叉验证流水线和版本管理 |
复盘建议:每次面试后记录被追问的模型细节,比如“为什么用Tweedie而不是Gamma”“时间序列交叉验证怎么切”,这些高频追问就是下一轮复习的重点。
总结一句话:统计与机器学习基础面试,考的不是你背了多少算法,而是你能否在假设、验证、业务解释和公司偏好之间做出平衡。把这条主线讲清楚,你就已经超过大多数候选人。