4、数据准备与清洗:数据来源、数据质量检查、缺失值处理、异常值识别与处理策略
信用评分卡模型的开发高度依赖数据质量。在建模流程中,数据准备与清洗往往占据整个项目 60% 以上的时间。原始数据通常来自行内核心系统、征信机构、第三方数据源,存在字段缺失、逻辑矛盾、极端值、重复记录等问题。若未经过系统化的清洗与校验,后续的特征工程、模型训练与验证都将建立在不可靠的基础之上,导致模型区分能力下降甚至失效。本章围绕数据来源、质量检查、缺失值处理、异常值识别与处理策略四个核心模块展开,帮助学员建立一套可落地的数据治理方法论。
4.1 数据来源与采集要点
信用评分卡建模的数据来源通常分为三类:行内自有数据(包括客户基本信息、资产负债信息、历史借贷记录、还款行为、存款流水等)、央行征信数据(信贷记录、查询记录、公共记录等)、第三方外部数据(如税务、社保、电商消费、运营商数据等)。不同来源的数据在时效性、覆盖度、标准化程度上差异显著。
| 数据来源 | 典型字段 | 优势 | 风险与挑战 |
|---|---|---|---|
| 行内核心系统 | 年龄、收入、职业、资产负债 | 准确性高、更新及时 | 覆盖度有限,仅限存量客户 |
| 央行征信 | 贷款笔数、逾期记录、查询次数 | 权威性强、跨机构覆盖 | 获取需授权,字段相对固定 |
| 第三方数据 | 消费行为、社交活跃度、设备信息 | 补充风控维度 | 合规风险、数据质量参差不齐 |
在采集阶段需要重点关注数据授权合规性与时间窗口一致性。例如,建模样本的观察期(表现期)应统一为贷前 6 个月或 12 个月,避免不同客户的数据时间跨度不一致导致模型偏差。
4.2 数据质量检查体系
数据质量检查是清洗前的必要步骤,目的是识别数据中存在的缺失、重复、错误、不一致等问题。建议建立一套系统化的检查流程,包括单字段检查、跨字段逻辑校验、时间维度校验三个层次。
- 完整性:检查字段缺失比例,识别关键字段(如身份证号、贷款金额)的缺失情况。
- 唯一性:检查主键(如客户ID、申请编号)是否存在重复记录。
- 准确性:验证字段值是否在合理范围内,如年龄 0-120 岁、收入非负。
- 一致性:跨字段逻辑校验,如“婚姻状态=已婚”与“配偶姓名”是否同时存在。
- 时效性:检查数据更新时间,避免使用过期数据。
实际操作中,建议使用 Python 的 pandas 库或 SQL 进行数据探查,输出数据质量报告。例如:
# 数据质量检查示例
import pandas as pd
df = pd.read_csv('credit_data.csv')
# 缺失率统计
missing_rate = df.isnull().mean().sort_values(ascending=False)
# 重复记录检查
duplicate_count = df.duplicated(subset=['customer_id']).sum()
# 异常值初步识别(以年龄为例)
age_outliers = df[(df['age'] < 18) | (df['age'] > 100)]
4.3 缺失值处理策略
缺失值处理需要结合缺失机制(完全随机缺失、随机缺失、非随机缺失)与业务含义综合判断。不能盲目填充,否则可能引入噪声。
| 缺失率范围 | 推荐策略 | 适用场景 | 注意事项 |
|---|---|---|---|
| < 5% | 直接删除记录或均值/中位数填充 | 样本量充足,缺失字段非关键 | 删除前确认不影响样本代表性 |
| 5% - 30% | 中位数/众数填充、回归预测填充、KNN填充 | 字段有一定预测价值 | 填充后需对比分布变化 |
| > 30% | 构造“缺失指示变量”+ 原字段保留 | 字段可能具有区分能力 | 缺失本身可能代表风险信号 |
在信用评分卡场景中,缺失值本身往往具有业务含义。例如,客户未填写工作单位可能意味着职业稳定性差;征信报告中“未结清贷款笔数”缺失可能表示该客户无信贷记录。因此,建议在填充的同时生成缺失指示变量,供模型捕捉缺失模式。
4.4 异常值识别与处理
异常值(Outliers)是指明显偏离正常分布的数据点。在信用评分中,异常值可能来自数据录入错误、极端客户行为或欺诈信号。识别方法包括统计方法(3σ原则、IQR)、业务规则(如年龄 > 80 岁)、模型方法(孤立森林、DBSCAN)。
处理策略通常包括:
- 截尾处理(Winsorization):将极端值压缩到指定百分位(如 1% 和 99%),保留排序信息。
- 分箱处理:将连续变量离散化,降低异常值影响,如收入分为 0-5万、5-10万、10-20万、20万以上。
- 单独建模:将异常值单独标记为类别,或建立欺诈子模型。
- 删除记录:仅当确认是录入错误且样本量充足时使用。
4.5 案例拆解:某消费金融公司数据清洗实战
背景:某消费金融公司开发个人消费贷评分卡,样本为 10 万条历史申请记录,包含 45 个原始字段。初始数据质量报告显示:年龄字段缺失率 8%,收入字段缺失率 25%,负债率字段存在 3% 的极端值(超过 1000%),申请编号存在 0.5% 的重复记录。
处理过程:
- 第一步:按申请编号去重,保留申请时间最新的一条记录,删除 500 条重复数据。
- 第二步:年龄字段采用“行业+学历”分组中位数填充,并生成 age_missing 指示变量。
- 第三步:收入字段缺失率较高,采用“职业+城市等级”分组中位数填充,同时生成 income_missing 变量。
- 第四步:负债率超过 500% 的样本单独标记为“高负债风险”,不直接删除,保留进入模型训练。
- 第五步:清洗后重新计算各字段的缺失率、异常率,确认均低于 1%,生成数据清洗报告存档。
结果:模型训练集最终包含 9.95 万条样本,KS 值从清洗前的 0.28 提升至 0.35,模型区分能力显著增强。同时,缺失指示变量中 income_missing 的 IV 值为 0.03,说明“收入缺失”本身对违约预测有正向贡献。
4.6 常见误区与总结
在数据准备与清洗环节,常见的误区包括:过度填充导致数据失真、忽略缺失指示变量丢失重要信息、盲目删除异常值误删风险信号、未做跨字段逻辑校验导致数据矛盾。正确的做法是:先探查、再分类、后处理,每一步都保留处理日志。
| 误区 | 后果 | 正确做法 |
|---|---|---|
| 所有缺失值统一用均值填充 | 数据分布扭曲,模型偏差 | 按缺失率分层,结合业务含义选择策略 |
| 异常值一律删除 | 丢失极端风险客户信息 | 区分“错误值”与“极端值”,采用截尾或分箱 |
| 忽略重复记录 | 样本权重失衡 | 按主键去重,保留最新记录 |
| 不做清洗后校验 | 问题未被发现,影响模型效果 | 清洗后重新生成质量报告,对比清洗前后分布 |
总结而言,数据准备与清洗是信用评分卡模型开发中最基础也最关键的一环。只有建立系统化的检查与处理流程,才能确保后续特征工程和模型训练的有效性。建议学员在实际项目中,将本章的方法论与工具结合,形成适合自身业务的数据治理规范。