4. 数据准备与探索

申请评分A卡的质量,七分靠数据、三分靠算法。进入建模之前,必须先把“人、财、时间”三类数据源理清楚,再完成清洗、缺失值处理、异常值识别与初步EDA。本章的目标是让读者能够独立产出一份可交付的建模宽表,并形成对目标变量与关键特征的初步判断。

一、核心原理:数据准备是风险定义的落地过程

申请评分卡的数据准备不是简单的“把表拼起来”,而是把业务上的“好/坏”定义翻译成可计算的标签,再把申请时点可见的信息翻译成特征。核心原则有三条:

  • 时点一致性:特征必须是申请提交时或之前可获取的,严禁使用放款后、贷后行为产生的信息,否则会造成标签泄漏。
  • 观察期与表现期分离:观察期用于采集特征,表现期用于定义好坏。例如观察期取申请日前6个月,表现期取放款后6~12个月。
  • 可解释与可追溯:每个字段都要有来源系统、口径说明、更新频率,便于后续监控与审计。
标签定义示例:表现期内逾期天数≥30天定义为坏样本(bad=1),其余为好样本(bad=0);表现期不足或金额为0的样本应剔除或单独标记。

二、方法流程:从数据源到建模宽表

典型流程可拆为六步:数据源盘点 → 样本筛选 → 数据清洗 → 缺失值处理 → 异常值识别 → 初步EDA。每一步都要留下可复现的脚本与日志。

# 示例:申请评分卡数据准备主流程(伪代码)
1. 读取申请主表、征信表、三方数据表、标签表
2. 按申请ID左连接,保留申请时点快照
3. 剔除表现期不足、金额为0、重复申请
4. 统一缺失值编码(如 -999、NULL、空字符串 → NaN)
5. 缺失率统计与处理(删除、填充、缺失指示变量)
6. 异常值识别(分箱、IQR、业务规则)
7. 初步EDA(bad rate、IV、相关性、PSI)
8. 输出建模宽表 model_base.csv

数据源通常包括:申请主表(年龄、收入、职业)、征信表(查询次数、逾期记录)、三方数据(多头、设备、社交)、标签表(表现期好坏)。连接时务必以申请ID为主键,避免多对多导致样本膨胀。

三、缺失值处理:先理解缺失机制,再选择策略

缺失值不是“填上就行”,要先判断缺失是随机缺失(MCAR)、条件缺失(MAR)还是非随机缺失(MNAR)。在风控场景中,缺失本身往往携带信息,例如“无征信记录”可能意味着薄征信人群,风险特征与有记录人群不同。

缺失率区间推荐策略注意事项
< 5%中位数/众数填充,或直接删除样本删除前确认不会引入选择偏差
5%~30%填充 + 缺失指示变量指示变量需参与IV筛选
30%~60%单独分箱,或业务规则填充避免用未来信息填充
> 60%谨慎保留,通常剔除或降权需评估业务可获取性
填充值必须来自训练集统计量,再应用到验证集与测试集,防止数据泄漏。例如用训练集中位数填充测试集,而不是用全量中位数。

四、异常值识别与初步EDA:让数据自己说话

异常值识别常用三种方法:业务规则(年龄<18或>70)、统计方法(IQR、3σ、分位数截断)、模型方法(孤立森林)。风控中更推荐“分箱观察+业务判断”,因为很多极端值其实是真实的高风险信号,例如收入极高但负债也极高。

# 示例:IQR 异常值识别
Q1 = df['income'].quantile(0.25)
Q3 = df['income'].quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
df['income_flag'] = ((df['income'] < lower) | (df['income'] > upper)).astype(int)

初步EDA至少输出四类结果:目标变量分布(bad rate)、单变量分箱与IV、特征相关性热力图、训练集与验证集的PSI。下面是一个简化的EDA检查清单:

  • 样本量是否充足?坏样本是否≥500?
  • bad rate是否在合理区间(如2%~15%)?
  • 关键特征缺失率是否超过阈值?
  • 连续变量分布是否严重偏态?
  • 类别变量取值是否过多?
  • 训练/验证/测试时间切分是否合理?
常见误区:直接用全量数据做缺失填充和分箱,导致验证集信息泄漏;把“申请后”的还款行为当作特征;忽略样本时间切分,用随机切分代替时间切分。这些都会让离线AUC虚高,上线后迅速衰减。

复盘一个真实场景:某消费金融A卡项目,初期AUC达到0.82,但上线后KS仅0.21。排查发现,收入字段用全量中位数填充,且训练集包含放款后3个月的还款状态。修正后重新做时间切分、仅用申请时点特征、填充统计量仅来自训练集,离线AUC降至0.76,但上线KS稳定在0.33。这说明数据准备的严谨性直接决定模型的生命力。

完成本章后,你应能独立输出一份包含样本筛选日志、缺失值处理记录、异常值清单和EDA报告的建模宽表,为后续分箱、WOE转换与逻辑回归建模打下可靠基础。