3. 坏样本数据清洗:缺失值处理、异常值检测、重复数据去重、数据标准化与归一化
贷后预警模型的质量高度依赖底层样本数据的纯净度。原始坏样本数据通常存在字段缺失、极端异常、重复记录以及量纲不一致等问题。本章将系统讲解数据清洗的四个核心环节,确保进入模型的数据具备高信噪比与可比性。
3.1 缺失值处理
缺失值是贷后数据中最常见的问题,主要来源于系统采集失败、人工录入遗漏或数据传输中断。处理策略需根据缺失率与字段重要性进行选择。
| 缺失率范围 | 推荐策略 | 适用场景 |
|---|---|---|
| < 5% | 均值/中位数填充 | 连续型变量(如逾期天数、欠款金额) |
| 5% - 30% | 模型预测填充(KNN/回归) | 重要特征(如收入、职业等级) |
| 30% - 60% | 单独设类/哑变量标记 | 分类变量(如担保方式、还款渠道) |
| > 60% | 直接删除该字段 | 非核心字段或冗余信息 |
实操建议:对于坏样本中的“逾期天数”字段,若缺失率低于5%,优先使用同批次坏样本的中位数填充,避免均值被极端值拉偏。
3.2 异常值检测
异常值会严重干扰模型对坏样本真实分布的判断。贷后数据中常见的异常包括:单日催收次数超过100次、逾期天数超过贷款期限2倍、年龄为0或负数等。
推荐采用 IQR(四分位距) 与 Z-Score 结合的方法进行检测:
# 基于IQR的异常值检测示例
Q1 = df['overdue_days'].quantile(0.25)
Q3 = df['overdue_days'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = df[(df['overdue_days'] < lower_bound) | (df['overdue_days'] > upper_bound)]
注意:贷后坏样本中,部分“异常值”实际上是真实的高风险信号(如逾期超过180天)。建议先进行业务标注,再决定是剔除、截尾还是单独建模。
3.3 重复数据去重
重复记录会导致模型对同一坏样本过度学习,造成过拟合与评估指标虚高。贷后数据中的重复通常分为两类:
- 完全重复:所有字段完全一致,通常由系统重复推送或接口重试导致。
- 部分重复(业务重复):关键字段相同(如合同号、身份证号),但时间戳或催收备注不同,需按业务规则保留最新或最完整的一条。
# 完全重复去重
df_clean = df.drop_duplicates()
# 部分重复去重:按合同号分组,保留催收日期最新的记录
df_clean = df.sort_values('collection_date').drop_duplicates(subset='contract_id', keep='last')
关键指标:去重后样本量减少比例应控制在 0.5% - 3% 之间。若超过 5%,需排查上游数据接口是否存在批量重复推送问题。
3.4 数据标准化与归一化
贷后预警模型通常涉及多个量纲差异巨大的特征(如逾期天数 0-365、欠款金额 0-100万、催收次数 0-50)。标准化与归一化可以消除量纲影响,使模型收敛更快、特征权重更合理。
| 方法 | 公式 | 输出范围 | 适用模型 |
|---|---|---|---|
| Z-Score 标准化 | \( z = \frac{x - \mu}{\sigma} \) | 均值0,标准差1 | 线性回归、SVM、神经网络 |
| Min-Max 归一化 | \( x' = \frac{x - min}{max - min} \) | [0, 1] | KNN、K-Means、神经网络 |
| Robust 缩放 | \( x' = \frac{x - median}{IQR} \) | 受异常值影响小 | 含较多异常值的贷后数据 |
贷后场景推荐:对于包含大量长尾逾期(如300天以上)的坏样本,优先使用 Robust 缩放,因为它基于中位数和IQR,对极端异常值不敏感,能保留正常样本的分布结构。
3.5 数据清洗完整流程
在实际贷后预警项目中,上述四个步骤通常按以下顺序执行:
- 缺失值处理 → 先填充或删除缺失字段,避免影响后续异常值检测的统计量。
- 异常值检测 → 在完整数据上进行IQR/Z-Score检测,结合业务标注。
- 重复数据去重 → 去除完全重复与业务重复记录。
- 标准化/归一化 → 最后进行缩放,确保所有特征处于同一量纲。
顺序不可逆:若先做标准化再做缺失值填充,填充值会因缩放后的分布偏移而产生偏差,导致模型训练不稳定。请严格遵循上述流水线顺序。