4、数据准备与清洗:数据来源、数据质量检查、缺失值处理、异常值识别与处理策略

信用评分卡模型的开发高度依赖数据质量。在建模流程中,数据准备与清洗往往占据整个项目 60% 以上的时间。原始数据通常来自行内核心系统、征信机构、第三方数据源,存在字段缺失、逻辑矛盾、极端值、重复记录等问题。若未经过系统化的清洗与校验,后续的特征工程、模型训练与验证都将建立在不可靠的基础之上,导致模型区分能力下降甚至失效。本章围绕数据来源、质量检查、缺失值处理、异常值识别与处理策略四个核心模块展开,帮助学员建立一套可落地的数据治理方法论。

数据准备与清洗核心链路 数据来源 内部核心系统 征信/第三方数据 质量检查 完整性/唯一性 准确性/一致性 缺失值处理 删除/填充/建模 缺失率分层策略 异常值处理 统计/业务/模型 截尾/分箱/剔除 数据清洗执行流程 数据探查 → 质量规则定义 → 清洗执行 → 清洗后校验 → 生成清洗报告 关键质量指标 • 缺失率 = 缺失数/总记录数 • 唯一率 = 唯一值数/总记录数 • 异常率 = 异常值数/总记录数 • 重复率 = 重复记录数/总记录数 • 一致性 = 逻辑校验通过率 处理策略选择逻辑 缺失率 < 5%:直接删除或均值填充 缺失率 5%-30%:中位数/众数/模型预测填充 缺失率 > 30%:构造缺失指示变量或剔除 异常值:3σ原则 / IQR / 业务阈值 / 分箱 重复值:按主键去重,保留最新或最完整记录

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%构造“缺失指示变量”+ 原字段保留字段可能具有区分能力缺失本身可能代表风险信号

在信用评分卡场景中,缺失值本身往往具有业务含义。例如,客户未填写工作单位可能意味着职业稳定性差;征信报告中“未结清贷款笔数”缺失可能表示该客户无信贷记录。因此,建议在填充的同时生成缺失指示变量,供模型捕捉缺失模式。

实战经验:对于收入字段,若缺失率较高,可考虑使用“行业+职位+地区”分组中位数填充,比全局中位数更精准。同时,将缺失指示变量纳入特征集,观察其 IV 值(信息价值),若 IV > 0.02 则保留该变量。

4.4 异常值识别与处理

异常值(Outliers)是指明显偏离正常分布的数据点。在信用评分中,异常值可能来自数据录入错误、极端客户行为或欺诈信号。识别方法包括统计方法(3σ原则、IQR)、业务规则(如年龄 > 80 岁)、模型方法(孤立森林、DBSCAN)。

风险提示:异常值不一定是“错误”,有时是重要的风险信号。例如,单笔大额消费可能预示收入突变或欺诈行为。因此,处理前必须结合业务背景判断,避免误删有效信息。

处理策略通常包括:

  1. 截尾处理(Winsorization):将极端值压缩到指定百分位(如 1% 和 99%),保留排序信息。
  2. 分箱处理:将连续变量离散化,降低异常值影响,如收入分为 0-5万、5-10万、10-20万、20万以上。
  3. 单独建模:将异常值单独标记为类别,或建立欺诈子模型。
  4. 删除记录:仅当确认是录入错误且样本量充足时使用。

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 常见误区与总结

在数据准备与清洗环节,常见的误区包括:过度填充导致数据失真、忽略缺失指示变量丢失重要信息、盲目删除异常值误删风险信号、未做跨字段逻辑校验导致数据矛盾。正确的做法是:先探查、再分类、后处理,每一步都保留处理日志。

误区后果正确做法
所有缺失值统一用均值填充数据分布扭曲,模型偏差按缺失率分层,结合业务含义选择策略
异常值一律删除丢失极端风险客户信息区分“错误值”与“极端值”,采用截尾或分箱
忽略重复记录样本权重失衡按主键去重,保留最新记录
不做清洗后校验问题未被发现,影响模型效果清洗后重新生成质量报告,对比清洗前后分布

总结而言,数据准备与清洗是信用评分卡模型开发中最基础也最关键的一环。只有建立系统化的检查与处理流程,才能确保后续特征工程和模型训练的有效性。建议学员在实际项目中,将本章的方法论与工具结合,形成适合自身业务的数据治理规范。