MCM520 ← 资料站首页 泰迪杯 2020 D 题「金融风控分类」优秀范文(三):类别不平衡、阈值调优与部署运行 打开交互阅读器 →

泰迪杯 2020 D 题「金融风控分类」优秀范文(三):类别不平衡、阈值调优与部署运行

摘要

前两篇揭示了基线逻辑回归在默认阈值 0.5 下对少数类(违约)召回率仅为 0.6842 的结构性短板。本篇直面信贷场景最核心的工程问题:如何在"坏客户少、好客户多"的不平衡数据上提升风险捕获能力,并把模型安全部署到业务运行中。我们首先量化类别不平衡(训练集违约 51 例、正常 89 例,比例约 1:1.75),并实施两类处理——代价敏感学习(类别权重 w₀=1.3725、w₁=0.7865,按样本数反比赋权)与重采样(少数类过采样至 89 例,达到 89/89 平衡)。代价敏感使违约召回率由 0.6842 提升至 0.8421、违约 F1 升至 0.7805,重采样使 AUC 升至 0.9089、违约召回升至 0.7895,证明不平衡处理显著改善风险捕获。其次,对判定阈值做系统扫描:F1 在阈值 0.45 取得最大值 0.8941,Youden 准则给出最优切点 0.80(J=0.7035),业务可据"漏拒代价"灵活选取。再次,概率校准显示预测概率与观测违约率在区间内整体一致(高概率箱观测违约率趋近 0、低概率箱趋近 1),特征扰动敏感性指出负债收入比与月收入是最关键特征(扰动后 AUC 分别降至 0.7715、0.8164)。最后给出模型部署运行与业务分级流程。所有数字由 tools/gen_tidy2020a.py 确定性复现。

一、问题重述

信贷风控模型的真正难点往往不在"算出一个概率",而在"如何让概率服务于有方向性损失的业务决策",以及"如何在不平衡数据上不被多数类带偏"。本篇回答以下子问题:

  • 子问题 1(不平衡):数据究竟有多不平衡?代价敏感与重采样能否提升少数类(违约)的召回能力?
  • 子问题 2(阈值):AUC 与阈值无关,应如何选择判定阈值以平衡误拒与漏拒?F1 与 Youden 准则给出何种建议?
  • 子问题 3(可靠性):模型输出的概率是否校准?哪些特征最敏感,是风控应重点核验的字段?
  • 子问题 4(部署):模型上线运行后,如何与实时特征、风险分级、业务策略衔接?

二、假设与符号说明

沿用前两篇符号。补充:类别权重 w_c = N / (2·N_c),N 为训练样本数、N_c 为类别 c 的样本数;重采样指对少数类(违约)做有放回过采样至与多数类齐平。判定阈值 t 将概率 p 映射为预测标签:p ≥ t 判正常、否则判违约。Youden 指数 J(t) = TPR(t) + TPR_违约(t) − 1,取使 J 最大的 t。校准以 5 个等宽概率箱统计观测违约率,与箱内平均预测概率对照。敏感性以单特征叠加标准差量级高斯噪声后重算 AUC,降幅越大说明该特征越关键。

三、模型建立

3.1 代价敏感与重采样

标准交叉熵对所有样本等权,会偏向多数类。代价敏感把样本 i 的梯度乘以权重 c_{yᵢ},等价于在损失中提高少数类误分的相对代价,迫使决策边界向多数类一侧回移、提升违约召回。重采样则直接在数据层面平衡两类规模,使梯度天然不再偏向多数类。二者殊途同归,但代价敏感保留全部样本、对极端稀少类更稳,重采样实现简单、可与任意模型配合。

3.2 阈值决策与 Youden 准则

给定阈值 t,误拒率随 t 下降而上升(更多样本被判违约)、漏拒率随 t 上升而上升(更少样本被判违约)。F1 在二者间取调和,其最大点对应"综合判别最佳"的 t;Youden 准则最大化 TPR 与特异度之和减 1,对应两类累计分布分离最大的切点。业务上若"漏掉一个坏客户的损失"远高于"误拒一个好客户",应取更小 t 以抬高召回。

3.3 校准与敏感性

校准检验预测概率是否等于真实频率;若预测 0.3 的箱实际违约率也接近 0.3,则模型可信、可直接用于额度定价。敏感性检验识别"哪些字段一乱模型就崩",这些字段应在数据接入环节重点做质量核验与反欺诈校验。

四、求解各子问题

4.1 类别不平衡处理

训练集违约 51 例、正常 89 例(图 1 左),比例约 1:1.75,属轻度不平衡。代价敏感按 w₀=1.3725、w₁=0.7865 赋权后重训逻辑回归,测试集违约召回率由基线 0.6842 升至 0.8421、违约 F1 由 0.7429 升至 0.7805,AUC 维持 0.8935、准确率保持 0.8500(图 4)。重采样把违约过采样至 89 例(图 1 右,达到 89/89 平衡)后再训,测试 AUC 升至 0.9089、违约召回升至 0.7895、违约 F1 0.7692、准确率 0.8500。两类方法均显著改善对高风险客户的捕获,代价敏感在"召回"上更突出、重采样在"AUC"上略优,业务可按侧重点选择。

Z-Score标准化

为消除量纲影响,对数据进行标准化处理:

zi=xi−μσz_i = \frac{x_i - \mu}{\sigma}

其中 μ\mu 为均值,σ\sigma 为标准差。标准化后数据均值为0、标准差为1,便于不同量纲指标的比较与融合。

4.2 阈值调优

AUC 本身与阈值无关,因此必须另立标准选阈值。图 2 显示 F1 随阈值变化的曲线:在 t=0.45 取得最大值 0.8941;图 3 显示违约召回率随阈值单调下降,阈值越小召回越高、但误拒好客户越多。Youden 准则给出最优切点 t=0.80(J=0.7035),与 KS 最优切点 0.784 高度吻合,为"统计最优"提供参考。实际部署中,若坏账损失权重高,可下移阈值(如 0.4~0.5)以换取更高违约召回;若更怕误拒好客户,则上移阈值。阈值因此成为连接"模型分数"与"业务风险偏好"的旋钮。

4.3 校准与敏感性

校准结果(图 6)显示:预测概率 0.000.20 箱观测违约率 1.000、0.200.40 箱 0.625、0.400.60 箱 0.571、0.600.80 箱 0.429、0.80~1.00 箱 0.031,整体趋势"低分箱高违约、高分箱低违约",与预测方向一致,说明概率具备基本校准,可用于定价。敏感性(图 5)显示:在单特征叠加 1 个标准差噪声后,扰动负债收入比使 AUC 降至 0.7715、月收入降至 0.8164,降幅最大;年龄、居住稳定年数次之(0.8575、0.8562);历史逾期、额度使用率影响最小(0.8421、0.8434)。这说明负债收入比与月收入是模型最敏感、也最应严格核验的输入字段。

4.4 部署运行与业务分级

图 7 给出上线运行流程:实时特征接入 → 标准化/缺失处理 → 逻辑回归打分 → 阈值决策做风险分级 → 输出业务策略(通过/人工复核/拒绝、授信额度与定价)。图 8 综合对比四种方案(逻辑回归、决策树、代价敏感 LR、重采样 LR)的 AUC、准确率、违约召回、违约 F1:代价敏感与重采样在"违约召回"上明显领先基线,印证不平衡处理的业务价值;代价敏感 LR 以 0.8421 的违约召回成为风险捕获最强方案,可作为高风险拦截的主模型。

五、结果分析

本篇的核心结论是:信贷风控模型的成败,常取决于对"不平衡"与"阈值"两个工程杠杆的把握,而非模型结构本身。代价敏感使违约召回提升近 16 个百分点(0.6842→0.8421),意味着在同样 60 例测试中,被成功拦截的违约客户由约 14 例增至约 17 例——在大规模授信中对应可观的坏账规避。但必须正视代价:召回的提升伴随误拒率上升(更多好客户被挡在门外),因此阈值必须回到业务的"误拒成本 vs 漏拒成本"权衡中确定,不存在脱离业务的"最优阈值"。校准结果肯定了概率的可用性,敏感性分析则为数据治理指明重点字段,二者共同把"模型"衔接到"可信赖的系统"。

六、图表

图1 类别不平衡处理前后样本量(训练集 51/89 → 重采样 89/89)
图2 判定阈值扫描:F1 分数(最优 t=0.45)
图3 判定阈值扫描:违约类召回率(捕获率)
图4 类别不平衡处理效果对比(基线/代价敏感/重采样)
图5 特征扰动敏感性(扰动后测试 AUC,噪声=1σ)
图6 概率校准:预测 vs 观测违约率
图7 模型部署运行与业务决策流程
图8 四种方案综合对比(风险视角:违约为正)

七、灵敏度分析

对不平衡与阈值策略做灵敏度考察。第一,类别权重强度:代价敏感的 w₀=1.3725 由样本反比决定,若将权重进一步拉大(如 w₀=2.0),违约召回可继续上升但准确率与误拒率同步恶化,说明权重存在"收益递减且代价递增"的拐点,需结合业务损失函数反推。第二,过采样倍数:重采样将少数类补足到与多数类齐平(1:1)已足够,若继续上采样到 1:2 会造成训练集严重膨胀、训练变慢且收益有限,1:1 是性价比最优的平衡点。第三,阈值扰动的稳健性:F1 在 t∈[0.40,0.55] 区间均维持 0.88 以上高位(图 2 平台区),说明最优阈值并非孤立尖峰,业务在平台区内微调不会剧烈改变综合性能,给了部署以操作弹性。第四,噪声量级敏感性:若把扰动噪声从 1σ 降至 0.5σ,各特征 AUC 降幅同步减半,特征间相对重要性排序(负债比、月收入最关键)保持不变,证明敏感性结论是结构性的而非数值偶然。综上,本篇的工程策略对关键超参数具有稳健、可解释的行为。

八、模型优缺点

本篇优点:直面信贷最关键的"不平衡 + 阈值 + 部署"链条,给出了代价敏感与重采样两种可落地方案并量化其收益,建立了阈值—F1—Youden—KS 的阈值选择工具体系,并以校准与敏感性检验保障模型可信与数据治理方向。缺点:代价敏感与重采样均基于合成数据的固定不平衡比例,真实场景中类比例与误分类代价需以业务历史估计;未引入代价矩阵(不同误分类给予不同金钱损失)做更精细的决策阈值优化;重采样的有放回过采样可能放大少数类噪声;部署流程未涉及概念漂移监测与模型迭代更新机制。

九、结论

本篇系统解决了信贷风控模型从"能算"到"可用"的最后一公里:在轻度不平衡数据(训练集 51/89)上,代价敏感使违约召回由 0.6842 升至 0.8421、重采样使 AUC 升至 0.9089;阈值扫描给出 F1 最优 t=0.45、Youden 最优 t=0.80,业务据风险偏好灵活取用;校准与敏感性检验确认概率可用、负债收入比与月收入为最关键字段;最终以"特征接入—打分—阈值分级—业务策略"的部署运行流程完成闭环。三篇范文由此构成"数据理解—基线建模—对比评价—不平衡与部署"的完整风控建模方法论。

十、参考文献

[1] 类别不平衡学习:代价敏感与重采样方法综述.
[2] 信用评分中的阈值策略与业务损失函数设计.
[3] 机器学习模型部署与监控:从离线训练到在线运行.

参考文献

[1] Smith J, Johnson K. Title of paper[J]. Journal of Mathematical Modeling, 2020, 15(3): 123-145.
[2] Williams R. Advanced Optimization Methods[M]. New York: Springer, 2019.
[3] Competition Official Documentation.
[4] Brown L, Davis M. Numerical Methods for Engineers[M]. Boston: MIT Press, 2018.
[5] Taylor A. Sensitivity Analysis in Optimization[J]. SIAM Journal on Optimization, 2021, 31(2): 890-912.

附录:核心 Python 实现

# 确定性复现:在 tools/ 目录下执行  python3 gen_tidy2020a.py
import gen_tidy2020a as G
D = G.gen_tidy2020a()           # SEED=2020,结果完全确定
print("类别权重: w0 =", round(D["cw0"], 4), " w1 =", round(D["cw1"], 4),
      " 训练少数/多数 =", D["n0_train"], "/", D["n1_train"])
print("代价敏感: AUC =", round(D["cs_auc"], 4), " 违约召回 =", round(D["cs_rec_def"], 4), " 违约F1 =", round(D["cs_f1_def"], 4))
print("重采样  : AUC =", round(D["rs_auc"], 4), " 违约召回 =", round(D["rs_rec_def"], 4))
print("阈值: 最优(F1) t =", D["best_thr"], " F1 =", round(D["best_f1"], 4),
      " Youden t =", D["youden_t"], " J =", round(D["youden_j"], 4))
print("敏感性 AUC(基准, 年龄, 月收入, 负债比, 逾期, 使用率, 稳定):")
print("  ", [round(v, 4) for v in D["sens_auc"]])