Kaggle 2024 CRMS 竞赛数据集

Home Credit
信用风险分析项目

152.7万
训练样本
704
衍生特征
0.8504
双模型 Full AUC
0.6707
4-Week 官方评分
EDA 特征工程 IV筛选 双模型架构 XGBoost LightGBM LogisticRegression PSI稳定性 评分卡 白户策略
By Chris Hu
向下滚动查看详情
01

项目概述

Project Overview

项目背景

本项目基于 Kaggle 2024 竞赛 "Home Credit - Credit Risk Model Stability" (CRMS) 数据集,针对东南亚(印度尼西亚)消费信贷场景,构建一套完整的信用风险评分模型。项目覆盖数据探索、特征工程、模型训练、稳定性评估等全链路流程。

项目目标

  • 构建稳健的信用评分模型,预测客户未来违约概率(PD)
  • 展示完整的数据分析、特征工程、建模和评估方法论
  • 提高对信贷风险业务逻辑、数据分布稳定性、模型可解释性的理解
  • 输出可直接应用的风险策略建议和代码仓库

数据集说明

本项目使用 Home Credit CRMS 2024 主数据集,总计约 25GB(Parquet/CSV 格式),包含以下核心数据表:

数据表 关联方式 字段数 业务含义
base主表5申请标识、审批日期、目标变量、WEEK_NUM
static1:1168静态申请信息(还款行为、金额、频次等)
static_cb1:153征信局静态汇总(查询次数、税务记录)
applprev1:N41历史申请记录
credit_bureau_a/b1:N79/45外部征信局信贷合同明细
person1:N37人员信息(申请人、联系人、担保人)
debitcard/deposit/other1:N6/5/7借记卡、存款、其他交易流水
tax_registry_a/b/c1:N5/5/5税务登记扣款记录
核心字段提示:WEEK_NUM 是本项目区别于普通风控项目的核心字段。模型稳定性评估按此切分,训练集和测试集的时间分布差异是最大挑战。
02

核心结论

Key Conclusions

项目核心结论

1

双模型分群架构性能较优

本项目采用 XGBoost 对征信白户和非白户分别建模,最终双模型架构全量测试集 AUC 达 0.85,官方评分 0.67(Mean Gini − Std Gini),在 16 种交叉组合中排名第 1。

2

两类人群风险驱动因子本质不同

非白户模型主要依赖征信局历史逾期 + 拒贷/申请行为,白户模型主要依赖物理属性 + 税务记录。两模型 TOP30 仅 2 个共同特征,验证了分群建模的必要性。

3

建议策略可实现有效风险分层

使用"平衡进取"阈值策略(非白户 ≥755 / 白户 ≥801),可实现全量通过率约 88.5%,非白户风险降幅 46.7%,白户风险降幅 68.3%

模型方案:双 XGBoost 分群建模架构

基于数据探索发现的全量客户中 5.06% 为征信白户(无任何历史信用记录),单一模型无法同时服务好两类人群(两模型 TOP30 仅 2 个共同特征)。最终采用分群建模 + 分群评分策略:非白户与白户各自训练独立 XGBoost 模型,部署时根据客户类型路由到对应模型。

非白户 XGBoost 子模型

0.8522 Test AUC
0.6971 Mean Gini
155 入模特征数
  • 训练集 ~116.6 万样本
  • 超参:max_depth=4, lr=0.05, subsample=0.7, reg_alpha=0.1
  • 特征筛选:IV>0.02 + PSI≤0.25双筛选后保留 155 个特征
  • 核心驱动特征:征信局历史逾期 + 拒贷/申请行为

白户 XGBoost 子模型

0.7919 Test AUC
0.5837 Mean Gini
14 入模特征数
  • 训练集仅 ~6.9 万样本(坏样本 ~1,800),强正则化防过拟合
  • 超参:max_depth=2, subsample=0.6, reg_lambda=5.0, min_child_weight=10
  • 特征筛选:IV>0.05筛选后保留14个特征
  • 核心驱动:物理属性 + 税务记录

全量测试集表现(WEEK_NUM 76~91,4-Week 官方评分 窗口)

客户群样本量使用模型AUCGiniMeanGStdG官方评分
全量 (Combined)169,722非白户 XGBoost + 白户 XGBoost0.85040.70090.69390.02320.6707
非白户 Solo164,873非白户 XGBoost0.85220.70440.69710.02400.6730
白户 Solo4,849白户 XGBoost0.79190.58380.58370.05040.5334
官方评分 = Mean(Gini) − Std(Gini),每4周一个窗口(W76-79/80-83/84-87/88-91):非白户 XGBoost + 白户 XGBoost 组合以 Combined 官方评分 0.6707 胜出(16种组合中排名第1)。详见 08 模型训练
双XGB关键变量TOP10

双 XGBoost 模型关键变量 TOP10 对比:非白户由历史逾期驱动,白户由人口画像+新构造特征驱动

评分卡策略

对非白户和白户的 XGBoost 模型分别按违约概率 → 模型评分映射,基于模型评分给出风险准入阈值策略,实现分群差异化的通过率与风险控制。

非白户评分卡 (XGBoost)

Score = 600 - 20/ln(2) × ln(odds / 19)
参数取值说明
Base Score600基准分数
评分范围619 ~ 936均值 804,中位 805

白户评分卡 (XGBoost)

Score = 600 - 20/ln(2) × ln(odds / 37)
参数取值说明
Base Score600基准分数
评分范围704 ~ 904均值 826,中位 829

非白户评分区间数据

评分区间客户占比坏客率
619~75510.0%17.26%
755~77210.0%5.76%
772~78410.0%3.37%
784~79510.0%2.11%
795~80510.0%1.33%
805~81610.0%0.84%
816~83720.0%0.40%
837~93620.0%0.11%

白户评分区间数据

评分区间客户占比坏客率
704~79215.8%7.96%
795~80119.9%3.68%
803~81715.1%1.95%
820~83610.3%1.44%
836~8389.0%0.83%
842~85110.3%0.64%
869~89117.3%0.28%
9032.2%0.00%

差异化阈值策略

基于两群评分分布和业务需求,建议采用分群差异化阈值:非白户采用评分≥755分准入,白户采用评分≥718分准入

策略类型非白户阈值非白户通过率非白户坏客率白户阈值白户通过率白户坏客率
保守稳健≥ 77379.8%0.77%≥ 73640.3%0.46%
平衡进取 ⭐≥ 75589.9%1.15%≥ 71864.9%0.70%
获客宽松≥ 74195.0%1.47%≥ 69789.9%1.42%
核心逻辑:非白户的"性价比拐点"在 755 分(通过率 89.9% → 坏客率 1.15%、风险降幅 46.7%),白户在 718 分(通过率 64.9% → 坏客率 0.70%、风险降幅 68.3%)。白户需要更低的通过率来实现同等风险控制,这是因为白户缺乏历史行为信号,模型区分度天然低于非白户;同时也满足白户谨慎准入的业务逻辑。
非白户通过率vs风险降幅

非白户 XGBoost — 通过率 vs 风险降幅权衡曲线(推荐区间:通过率 87~95%)

白户通过率vs风险降幅

白户 XGBoost — 通过率 vs 风险降幅权衡曲线(推荐区间:通过率 55~70%)

03

探索性数据分析

Exploratory Data Analysis

样本概况

训练集共 1,526,659 条样本,static 表含 168 个字段。目标变量极度不平衡,违约率仅 3.14%,属于典型的信贷风险建模场景。

1,526,659 训练集样本量
96.86% 正常样本
3.14% 违约样本

白户识别

通过统计每个 case_id 在 credit_bureau 表中的记录数,全量客户中 5.06% 为征信白户(~7.7 万样本),即完全缺失外部征信历史。白户违约率 2.21%(vs 非白户 3.19%),但因缺乏历史信用信号,传统征信特征完全失效,需独立构建特征和模型。

94.94% 非白户
5.06% 白户 (~7.7万)
2.21% / 3.19% 白户/非白户 违约率
目标变量分布

目标变量分布(极度不平衡)

时间结构分析

审批日期覆盖 2019-01-01 至 2020-10-05,共 92 周(WEEK_NUM: 0~91)。不同时间窗口的违约率存在显著波动(1.77% ~ 5.21%),模型稳定性挑战明确。

时间结构分析

WEEK_NUM 时间结构与违约率波动

04

缺失值处理方案

Missing Value Imputation

基于信贷业务逻辑,将 121 个有缺失字段按业务含义分为 8 大类,分别制定填充策略。核心原则是:缺失 = 从未发生 / 没有该项记录,而非数据丢失。

分类 处理原则 字段数 核心逻辑
计数/频次型缺失 = 032空值 = 从未发生/没有记录
金额型缺失 = 028空值 = 没有该项金额/收入/债务
DPD/逾期天数型缺失 = 022空值 = 从未逾期
占比/比率型缺失 = 05空值 = 从未发生,占比为0
标记/布尔型缺失 = 0 或 'N'6空值 = 否/不存在/无突变
类别型缺失 = 'Unknown'10保留为独立类别,便于编码
日期型转天数,缺失 = -115空值 = 从未发生该事件
特殊型标记 + 中位数填充3利率/期数等不适合简单填0
05

特征工程

Feature Engineering

总计构造 421 个新特征,按业务含义分为四大类:逾期信息、申请信息、税务信息、物理信息。最终输出含 711 个特征的宽表。

⏰ 逾期信息 120 个特征

征信局 DPD + 历史还款逾期行为聚合。非白户模型最强信号来源,TOP5 IV 全部来自此类。

  • bureau_a_overdue_ratio — 外部信贷逾期合同占比(IV=0.359,最强单因子)
  • bureau_a_dpd_mean — 外部信贷平均逾期天数(IV=0.332)
  • bureau_a_dpd_gt30_ratio — 逾期超30天合同占比(实质性违约信号,IV=0.278)
  • late_to_early_ratio — 逾期/提前还款比。衡量还款行为倾向,>1表示偏向逾期
  • applprev_overall_max_hist_dpd — 历史申请中最高逾期天数(IV=0.212)

📋 申请信息 194 个特征

历史申请行为 + 外部信贷规模 + 债务负担。数量最多,覆盖 4 个时间窗口(1/3/6/12月)。

  • lastrejectreason_759M_te — 最近拒贷原因(Target Encoding,IV=0.192)
  • applprev_overall_approval_rate — 历史审批通过率。越高 = 信用越好(IV=0.192)
  • lastrejectdate_50D_days — 距最近被拒天数。越近风险越高(IV=0.188)
  • applprev_total_rejected_count — 累计被拒次数。多头申请核心信号(IV=0.129)
  • applprev_total_cancelled_count — 累计取消申请次数。申请后主动放弃可能暗示不满条件(IV=0.093)

💰 税务信息 25 个特征

税务登记 A/B/C 三表聚合。反映收入水平与稳定性,对白户尤为重要。

  • tax_total_income — 税务总收入。A+B+C 三表金额求和(IV=0.066)
  • tax_record_count — 税务记录总数。记录越多 = 收入历史越完整(IV=0.046)
  • tax_registry_c_total_amount — 工资发放总额。持续工资收入 = 还款能力(IV=0.042)
  • tax_registry_a_total_amount — 税务登记收入总额(IV=0.030)
  • tax_registry_c_employer_nunique — 雇主数量。频繁换雇主 = 收入不稳定

🧬 物理信息 82 个特征

人口统计 + 地理位置 + 家庭结构 + 借记卡行为。相对稳定,不易被申请人操纵。

  • person_age_birth — 年龄。从 birth_259D 精确计算,clip 18~85(IV=0.088)
  • cb_age_years — 征信局记录年龄。与 person_age 交叉验证身份一致性(IV=0.093)
  • contact_district_badrate — 联系区域历史坏客率。地理风险定价(IV=0.053)
  • person_incometype_1044T_badrate — 收入类型坏客率。不同收入来源对应不同风险等级
  • household_n_employed — 家庭就业人数。就业人数越多还款能力越强
06

特征筛选

Feature Selection

分群差异化筛选标准

客户群IV阈值PSI阈值征信字段特征池入模数
非白户IV > 0.02PSI ≤ 0.25267155
白户IV > 0.05不限制12714
为什么白户用 IV>0.05?白户训练样本仅 ~6.9万(坏样本 ~1,800),需严格控制特征数防过拟合。14个高IV特征已足够支撑 max_depth=2 的浅层XGBoost。非白户有 ~116.6万训练样本,可容纳更多特征。

非白户 TOP 10 重要字段

共使用 155 个特征(IV>0.02+PSI≤0.25),核心驱动为征信局逾期行为与申请拒贷记录:

1

征信局A逾期占比

IV=0.349,非白户最强单一预测因子。所有信贷合同中发生逾期的比例。

2

征信局A逾期>30天占比

IV=0.280,>30天为实质性违约信号。

3

近9个月拒贷次数

被多家机构拒贷 = 其他风控模型已识别风险,多头申请核心信号。

4

最近拒贷原因(WOE编码)

IV=0.199,不同拒贷原因代表不同风险类型。

5

账户关闭24月内平均逾期天数

IV=0.228,刻画客户历史还款纪律。

查看 TOP 6-10
6

历史申请整体最大DPD

IV=0.219,申请历史中最严重的逾期天数。

7

近12月最大DPD

IV=0.219,近期逾期严重程度。

8

近6月/近12月逾期恶化比

逾期趋势指标——上升=风险恶化。

9

征信局A逾期>60天占比

IV=0.191,严重违约信号。

10

历史申请审批率

IV=0.171,审批通过率低=多机构已识别风险。

白户 TOP 10 重要字段

共使用 14 个特征(IV>0.05),核心驱动为物理属性和税务记录:

1

年龄

IV=0.209,白户最强预测因子。年龄与违约呈反比关系,年轻白户风险显著更高。

2

收入类型

IV=0.198,不同收入类型(工薪/自雇/退休等)对应不同违约率。

3

雇佣行业

IV=0.176,行业违约率差异显著——高风险行业人群即使无征信记录也可预警。

4

联系区域

IV=0.120,区域级别的信用风险映射(类似"地域风险评分")。

5

家庭状态

IV=0.110,已婚/离异/单身等家庭状态的违约率差异。

查看 TOP 6-10
6

性别

IV=0.098,性别维度的违约率差异。

7

税务C记录数

IV=0.086,税务记录越多=正规就业程度越高。

8

税务C总金额

IV=0.073,税务系统记录的收入。

9

关联角色类型数

IV=0.064,多重角色=更复杂的金融关系。

10

教育等级

IV=0.063,教育水平与信用风险存在关联。

07

模型训练

Model Training & Key Feature Analysis

最终方案:非白户 XGBoost + 白户 XGBoost

非白户与白户分别使用 4 种模型(XGBoost / LightGBM / Decision Tree / Logistic Regression)进行训练,其中非白户 XGBoost max_depth=4白户 XGBoost max_depth=2。两两交叉组合共 4×4=16 种,在全量测试集上对比,非白户 XGBoost + 白户 XGBoost 以 Combined 官方评分 0.6707(4-Week 官方评分)排名第1。

16种交叉组合 — 综合 4-Week 官方评分排名

Rank非白户模型白户模型Full AUCMeanGStdG官方评分
1XGBoostXGBoost0.85040.69390.02320.6707
2XGBoostLightGBM0.84990.69280.02290.6699
3LightGBMXGBoost0.84920.69160.02300.6686
16Decision TreeLogistic Regression0.76240.51440.04050.4738
08

模型稳定性分析

Model Stability Analysis

Home Credit 官方评分公式:mean(Gini) − std(Gini),按每 4 周一个时间窗口计算(W76-79/80-83/84-87/88-91)。该指标同时考核模型的区分能力和跨时间稳定性,是本项目区别于普通风控建模的核心。采用双模型最终官方评分为 0.67,模型较为稳定。

双模型每4周 PSI / KS 监控

按 4 周窗口(W76-79 / W80-83 / W84-87 / W88-91)分别监控非白户与白户模型的 PSI(Population Stability Index)和 KS(Kolmogorov-Smirnov)指标,确保模型在时间维度上保持稳定。

非白户 XGBoost 稳定性

时间窗口样本量AUCKSPSI
W76-79~41,2000.8550.536
W80-83~41,2000.8510.5310.012
W84-87~41,2000.8490.5270.018
W88-91~41,2000.8540.5340.021
非白户结论:4 窗口 AUC 波动仅 0.006,KS 波动 0.009,PSI 均 < 0.25 阈值。模型区分力稳定,无明显时间漂移。

白户 XGBoost 稳定性

时间窗口样本量AUCKSPSI
W76-79~1,2100.8100.505
W80-83~1,2100.7950.4880.035
W84-87~1,2100.7880.4720.048
W88-91~1,2100.8020.4970.052
白户结论:受样本量小(每窗口仅 ~1,210)影响,AUC/KS 波动大于非白户。PSI 均在安全范围内(< 0.25),但需持续监控——样本量不足是白户模型稳定性的主要瓶颈。

线上监控阈值建议

指标绿色(正常)黄色(预警)红色(告警)监控频率
PSI< 0.100.10 ~ 0.25> 0.25每 4 周
KS波动 < 0.03波动 0.03 ~ 0.05波动 > 0.05每 4 周
AUC波动 < 0.02波动 0.02 ~ 0.05波动 > 0.05每 4 周
通过率波动 < 2%波动 2% ~ 5%波动 > 5%每周
09

业务洞察与建议

Business Insights

核心风险因子(分群视角)

非白户(94.94%客户)

  • 征信局逾期行为 — bureau_a_overdue_ratio (IV=0.349) 是最强预测因子
  • 多头借贷/拒贷信号 — 多机构拒贷 = 其他风控模型已识别风险
  • 逾期恶化趋势 — 近期逾期比远期逾期更危险
  • 申请行为异常 — 频繁短期申请 = 资金饥渴

白户(5.06%客户)

  • 年龄 — 年轻白户(<30岁)风险显著更高(IV=0.209)
  • 收入/行业类型 — 通过类别编码映射群体违约率
  • 区域信用画像 — 联系地址区域违约率 = "地域信用评分"
  • 税务记录 — 正规就业/收入水平的代理变量

评分应用建议

非白户

  1. 低于准入阈值(755 分)的客户直接拒绝
  2. 结合收入水平和负债水平,评分高低予以差异化授信额度贷款利率

白户

  1. 低于准入阈值(718 分)的客户直接拒绝(通过率仅 ~64.9%)
  2. 对准入客户予以小额度、中等定价,累积风险表现数据后再调额调价

后续优化方向

额度与利率模型搭建

由于数据集收入数据缺失严重(maininc_215A 缺失率 33.5%,填充后仍有 25.7% 空缺),且税务、物理特征等其他变量拟合收入效果极差(R² 仅 0.17),暂无法搭建额度模型。后续需引入更可靠的收入数据源(如银行流水、社保基数)方可推进。

替代数据引入(白户突破关键)

运营商数据(通话/充值行为)、社保缴纳记录、电商消费数据——白户 AUC 有望从 0.79 突破至 0.82+

深度学习融合

尝试 TabNet、DeepFM 等深度学习模型与传统树模型融合,特别是白户场景下对非线性交互的捕捉

线上监控看板

建立双模型线上监控看板,分群实时追踪 AUC、PSI、特征漂移、通过率变化

10

附录

Appendix

字段命名规则

Home Credit 的字段命名非常有规律,掌握规则后能快速推断陌生字段的含义。

后缀体系

后缀英文中文数据类型业务示例
AAmount金额float64annuity_780A = 月供
DDate日期stringdate_decision = 审批日
LLabel类别int/stringstatus_219L = 状态
MMasked掩码stringrejectreason_755M = 拒因
PPeriod数值/期数int/floatmaxdpdlast12m_727P = 最大逾期天数
TTime时间维度intdpdmaxdatemonth_89T = 逾期月份

前缀规律

前缀含义示例
avg...平均值avgdbddpdlast24m = 近24月平均逾期天数
max...最大值maxdpdlast12m = 近12月最大逾期天数
min...最小值mindbddpdlast24m = 近24月最小逾期天数
num... / cnt...计数numactivecreds = 活跃信贷数
pct...百分比pctinstlsallpaidlate1d = 逾期1天以上还款占比
sum...求和sumoutstandtotal = 总欠款金额
last...最近/上次lastapprdate = 最近审批日期
curr...当前currdebt = 当前债务
total...总计totaldebt = 总债务
applications...申请次数applications30d = 近30天申请次数

时间窗口规律

窗口含义风控意义
last1m/last3m近1月/近3月最新行为,强预测力
last6m近6个月中期趋势
last9m近9个月中期趋势
last12m近12个月年度周期,很常用
last24m近24个月长期历史
from6mto36m6-36个月排除近期,看历史深度