信贷风控建模实战:从特征工程到模型交付的完整流程
2026-5-12
| 2026-5-12
字数 1914阅读时长 5 分钟
category
风控建模
date
May 12, 2026
Published
Published
slug
jdjt-v3-credit-risk-modeling
status 1
summary
本文记录了 JDJT V3 风控建模项目的完整技术方案与实验结果,涵盖数据处理、特征工程、模型训练、评估体系和交付物管理。
tags
风控
建模
LightGBM
XGBoost
特征工程
信贷风控
type
Post

信贷风控建模实战:从特征工程到模型交付的完整流程

本文记录了 风控建模项目的完整技术方案与实验结果,涵盖数据处理、特征工程、模型训练、评估体系和交付物管理。

项目背景

信贷风控模型的核心目标是:在用户申请时点,基于三方数据和业务特征,预测其未来逾期风险。与通用机器学习任务不同,风控建模有几个硬约束:
  • 标签观察窗成熟度:不同逾期标签需要不同的观察期,未成熟的样本不能混入
  • 申请时点一致性:所有特征必须在申请决策时可见,严禁信息穿越
  • 时间外推验证:模型必须在未来的 OOT(Out-of-Time)样本上验证泛化能力
  • 主体隔离:同一客户多次复借时,需要评估模型对新客的泛化能力

数据与标签体系

输入数据

建模输入为聚合后的 df_merge,一行对应一个申请/合同维度样本,包含:
  • 申请侧基础字段
  • 贷中衍生特征
  • resp_msg 三方 JSON 数据(主要特征来源)
  • 合同维度贷后标签
  • 标签成熟度字段

风险标签

每个标签独立建模,不做多任务混合训练:
标签
含义
成熟度字段
y_fpd
首期 D1+ 逾期
y_fpd_valid
y_fpd_d7
首期 D7+ 逾期
y_fpd_d7_valid
y_fpd_m1
首期 D30+ 逾期
y_fpd_m1_valid
y_3m_m1
前三期任一期 D30+
y_3m_m1_valid
y_m2_plus
合同周期内 D60+
y_full_valid
y_m3_plus
合同周期内 D90+
y_full_valid

样本规模

最终建模样本量约 90 万行 × 3000 个候选特征,属于典型的高维稀疏场景。

特征工程

resp_msg 全量展开

resp_msg 是三方数据的 JSON 字段,包含丰富的风险信号。采用"全量展开,后续筛选"策略:
展开后的字段分为三层:
  • 可直接候选层:申请时点明确可见、业务含义清晰
  • 待审查层:口径不稳定、来源不清晰
  • 禁止入模层:贷后字段、审批后字段、外部回填字段

变量筛选流程

关键指标口径:
指标
计算样本
用途
IV
Train
衡量变量区分能力
单变量 AUC
Train
衡量变量单独排序能力
月度稳定性
Train
衡量开发期内变量波动
Valid PSI
Valid vs Train
稳定性观察
单变量 AUC 使用方向无关口径:single_auc = max(raw_auc, 1 - raw_auc),避免负相关强变量被误杀。

内存优化

由于数据规模达到 90 万行 × 3000 特征,直接复制宽表会导致内存不足。采用低内存改造:
  • 上下文构建阶段只保留窄控制表
  • 切分阶段只保存行索引和必要控制字段
  • 变量筛选只在抽样行上 materialize 全量候选特征
  • 模型训练阶段只 materialize 最终入模变量

实验设计

切分策略

支持两种开发期切分:
策略
说明
适用场景
A
开发期内按天抽样切分 Train/Valid
模型横向比较、调参
B
开发期尾部时间窗作为 Valid
时间稳定性验证

主体隔离

口径
说明
C1
不做客户隔离,贴近真实业务流量
C2
OOT Test 做客户隔离,检查新客泛化能力
C3
Train/Valid/Test 全流程客户隔离
主实验采用 C1,稳健性分析补充 C2。

两阶段实验

第一阶段:基线实验
  • 不做 Optuna 调参
  • 快速比较:目标标签 × 模型类型 × 切分策略 × 不平衡策略
  • 筛选较优候选组合
第二阶段:Top 候选精调
  • 只对第一阶段 Top 候选做 Optuna 超参数搜索
  • 调参目标:OOT AUC - penalty(Train-Valid gap) - penalty(Valid-OOT gap)

实验结果

最佳模型汇总

标签
最佳模型
切分
不平衡策略
Train AUC
Valid AUC
OOT AUC
KS
特征数
y_fpd
XGBoost
A
class_weight
0.624
0.604
0.585
0.125
104
y_fpd_d7
LightGBM
B
none
0.717
0.649
0.598
0.155
125
y_fpd_m1
XGBoost
A
none
0.639
0.619
0.599
0.177
121
y_3m_m1
XGBoost
A
none
0.652
0.644
0.625
0.194
118
y_m2_plus
LightGBM
A
none
0.835
0.812
0.794
0.463
125
y_m3_plus
LightGBM
A
class_weight
0.857
0.833
0.816
0.559
128

泛化差距分析

标签
Train-Valid Gap
Valid-OOT Gap
评估
y_fpd
0.020
0.019
稳定
y_fpd_d7
0.067
0.051
过拟合风险
y_fpd_m1
0.021
0.019
稳定
y_3m_m1
0.007
0.020
稳定
y_m2_plus
0.022
0.018
稳定
y_m3_plus
0.024
0.017
稳定

关键发现

  1. 短期标签预测难度大:y_fpd、y_fpd_m1 的 OOT AUC 在 0.58-0.60 区间,接近随机水平
  1. 长期标签效果好:y_m2_plus、y_m3_plus 的 OOT AUC 超过 0.79,KS 超过 0.46
  1. y_fpd_d7 过拟合:Train-Valid Gap 达到 0.067,需要关注模型稳定性
  1. 泛化差距可控:除 y_fpd_d7 外,所有模型的 Train-Valid/Valid-OOT Gap 都在 0.03 以内

最佳模型超参数

y_fpd (XGBoost)
y_m2_plus (LightGBM)

代码架构

项目按职责拆分为以下模块:
最小使用方式:

交付物

每个最终模型输出:
  • model_bundle.pkl - 模型包
  • model_meta.json - 模型元信息
  • best_params.json - 最佳超参数
  • final_model_feature_list.csv - 入模变量清单
  • feature_screening_reason_report.csv - 变量筛选原因
  • model_layer.pmml - PMML 导出(可选)

业务验证方向

当前模型已具备基本区分能力,下一步需要补充:
  1. 固定通过率下坏账率对比:在 30%/40%/50% 通过率下,坏账率下降多少
  1. 收益/损失 proxy 模拟:不同 cutoff 下的预期收益和损失
  1. 分群验证:新老客、渠道、产品维度的分群效果
  1. 上线监控:分数 PSI、关键变量 PSI、月度 AUC/KS

总结

本项目构建了一套面向信贷风控的时间外推建模框架,核心特点:
  • 标签成熟度过滤:避免未成熟样本造成的标签偏误
  • 两阶段实验:先基线筛选,再精调最优
  • 泛化差距惩罚:调参目标同时考虑 OOT 效果和泛化差距
  • 完整交付链路:从特征筛选到模型导出的可复现流程
实验结果显示,长期逾期标签(y_m2_plus、y_m3_plus)的预测效果较好(OOT AUC > 0.79),而短期标签(y_fpd、y_fpd_m1)仍有提升空间,可能需要引入更多实时特征或调整标签定义。

*项目代码:JDJT_V3*
*建模框架:LR / LightGBM / XGBoost + Optuna*
*验证方式:时间外推 OOT + 主体隔离*
  • 风控
  • 建模
  • LightGBM
  • XGBoost
  • 特征工程
  • 信贷风控
  • Vibe Coding 核心心法:管 Agent,如带团队(转载)Welcome to Risk Frontier
    Loading...