第1章:模型训练与评估——从数据到模型的完整链路

各位同学好,我是老张。今天咱们聊聊模型训练与评估这个环节。说实话,很多刚入行的同学觉得这步就是调个包、跑个分完事。但我在项目中踩过的坑告诉我——这一步没做好,后面上线全是泪。

咱们先看一张整体流程图,把今天要讲的内容串起来:

模型训练与评估核心流程 ① 数据集划分 训练集 / 验证集 / 测试集 ② 模型选择 逻辑回归 / 决策树 / XGBoost ③ 交叉验证 K-Fold / StratifiedKFold ④ 模型训练 超参数调优 + 训练 ⑤ 评估指标 AUC / KS / F1-score / 混淆矩阵 ✅ 可部署的模型

1.1 数据集划分——别让数据泄露坑了你

数据集划分,听起来简单对吧?但我在项目中见过太多人在这步翻车。你想想看,如果训练集和测试集有重叠,或者时间顺序搞反了,后面所有指标都是假的。

我个人习惯的做法是:

  • 训练集(60%-70%):用来拟合模型参数
  • 验证集(15%-20%):用来调超参数、做模型选择
  • 测试集(15%-20%):最终评估,只能看一次
⚠️ 我曾经犯过的错:有一次做信贷风控模型,直接用随机划分把数据打散了。结果模型在测试集上AUC高达0.98,上线后直接崩了。为什么?因为同一个客户的多笔借款被分到了不同集合里,模型"记住"了客户特征。后来我改用按客户ID分层抽样,才解决了这个问题。

对于时间序列数据(比如交易流水),一定要按时间切分。我建议用前80%的时间段做训练,后20%做测试。别问为什么,问就是未来不能预测过去。

1.2 模型选择——三个常用武器的对比

风控场景下,我最常用的三个模型是:逻辑回归、决策树、XGBoost。它们各有各的脾气。

模型 优点 缺点 我的使用场景
逻辑回归 可解释性强、训练快、不易过拟合 特征交互需要手动做、非线性能力弱 监管要求高的场景(如银行评分卡)
决策树 直观、能处理非线性、不需要特征缩放 容易过拟合、不稳定(数据小变化导致树结构大变) 快速基线模型、特征重要性分析
XGBoost 精度高、自带正则化、处理缺失值 参数多、调参耗时、可解释性差 追求性能的线上模型(配合SHAP解释)

嗯,这里要注意:逻辑回归虽然简单,但千万别小看它。我在某头部金融公司做过一个项目,监管要求模型必须可解释,最后就是逻辑回归上线的。你想想看,有时候"简单"反而是优势。

1.3 交叉验证——别让你的模型"偏科"

交叉验证说白了就是:把数据分成K份,轮流拿一份做验证,其余做训练。我一般用5折或10折。

为什么需要它?因为单次划分可能运气好或运气差。交叉验证能给你一个更稳定的性能估计。

💡 我的经验:对于不平衡数据集(风控里常见,坏样本可能只有1%-5%),一定要用StratifiedKFold(分层K折)。它能保证每一折里正负样本比例和整体一致。我曾经用普通K折,结果某一折里全是好样本,模型直接废了。

代码示例(Python):

from sklearn.model_selection import StratifiedKFold
import numpy as np

# 假设 X 是特征,y 是标签(0/1)
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)

for fold, (train_idx, val_idx) in enumerate(skf.split(X, y)):
    X_train, X_val = X[train_idx], X[val_idx]
    y_train, y_val = y[train_idx], y[val_idx]
    print(f"第 {fold+1} 折: 训练集正样本比例 {y_train.mean():.3f}, 验证集正样本比例 {y_val.mean():.3f}")
    # 在这里训练你的模型

1.4 评估指标——AUC、KS、F1-score到底看哪个?

很多同学一上来就问:"哪个指标最好?" 我的回答是:没有最好,只有最合适。

1.4.1 AUC(Area Under the ROC Curve)

AUC衡量的是模型把正样本排在负样本前面的能力。取值范围0.5-1,越大越好。

  • 0.5:随机猜
  • 0.7-0.8:还不错
  • 0.8-0.9:很好
  • 0.9以上:小心过拟合
🔑 避坑指南:我曾经见过一个模型AUC高达0.99,结果发现是特征里包含了"是否逾期"这个未来信息。记住:AUC高不一定模型好,先检查数据泄露。

1.4.2 KS(Kolmogorov-Smirnov)

KS是风控领域最常用的指标之一。它衡量的是好样本和坏样本的累计分布最大差距。一般要求KS > 0.3才算可用。

计算公式:KS = max(TPR - FPR),其中TPR是真正率,FPR是假正率。

1.4.3 F1-score

F1-score是精确率(Precision)和召回率(Recall)的调和平均。对于不平衡数据集,我建议重点关注召回率——宁可误杀,不可放过。

三个指标怎么选?我个人的经验法则:

  • 做排序模型(比如给客户打分排序):看AUC
  • 做二分类决策(比如是否拒绝贷款):看KS + 混淆矩阵
  • 关注少数类(比如欺诈检测):看F1-score和召回率

1.5 实战小贴士——模型训练后的检查清单

模型训练完别急着上线。我每次都会过一遍这个清单:

  1. 检查训练集和测试集分布是否一致——用PSI(群体稳定性指标)
  2. 检查特征重要性——有没有明显不合理的特征排前面?
  3. 检查模型在不同分群上的表现——比如年轻人和老年人,模型公平吗?
  4. 做一次压力测试——极端值输入,模型输出是否合理?
⚠️ 我曾经踩过的坑:有一次模型在测试集上表现完美,上线后却一塌糊涂。后来发现是训练数据和线上数据的特征分布发生了偏移。从那以后,我每次上线前都会做一次PSI检测,确保训练集和线上数据"长得像"。

好了,这一章的内容就到这里。记住:模型训练不是终点,评估才是你真正理解模型的开端。下一章咱们聊聊特征工程——那才是真正拉开模型差距的地方。


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