4. 数据准备与探索:数据源介绍、数据采集、数据字典整理、数据质量初探
数据是信用评分模型的基石。在进入特征工程与建模之前,必须系统性地完成数据准备与探索工作。本章将围绕数据源、采集方式、数据字典构建以及缺失值、异常值、重复值三大质量维度展开,确保后续建模工作建立在干净、可靠的数据基础之上。
4.1 数据源介绍
信用评分模型的数据源通常分为内部数据与外部数据两大类。内部数据来自金融机构自身的业务系统,外部数据则通过第三方征信机构或公开渠道获取。下表列出了常见的数据源类型及其典型字段:
| 数据源类别 | 典型来源 | 常用字段示例 | 数据特点 |
|---|---|---|---|
| 内部申请数据 | 信贷申请表、核心系统 | 年龄、收入、职业、婚姻状况、学历 | 直接反映客户画像,但可能存在主观填报偏差 |
| 内部行为数据 | 还款流水、交易记录 | 历史逾期天数、平均余额、还款金额波动 | 时效性强,能反映近期信用行为 |
| 外部征信数据 | 央行征信、百行征信、同盾 | 征信查询次数、贷款笔数、担保余额 | 覆盖面广,但获取成本高、更新频率受限 |
| 第三方替代数据 | 运营商、电商、社保 | 通话时长、消费金额、社保缴纳月数 | 可覆盖征信白户,但数据标准化程度低 |
实战提示:在金融科技场景中,建议优先整合内部行为数据与外部征信数据,两者结合通常能覆盖 80% 以上的预测能力。替代数据作为补充,主要用于长尾客群或新客准入。
4.2 数据采集流程
数据采集是将原始数据从各源系统抽取到建模环境的过程。典型的采集流程包含以下步骤:
- 接口对接:通过 API、FTP、数据库直连等方式与数据源建立连接。
- 字段映射:将源系统字段名统一映射为建模标准字段名。
- 增量/全量抽取:根据业务频率选择每日增量或每月全量抽取。
- 数据落地:写入数据仓库或建模专用表,保留原始快照。
- 采集校验:对比源端与目标端的记录数、关键字段汇总值,确保数据完整。
关键指标:采集成功率应 ≥ 99.5%,采集延迟控制在 T+1 以内。对于实时评分场景,需支持小时级或分钟级采集。
4.3 数据字典整理
数据字典是数据准备阶段的核心产出物,它记录了每个字段的元数据信息。一个标准的数据字典应包含以下列:
| 字段名 | 中文含义 | 数据类型 | 取值范围 | 缺失含义 | 业务逻辑说明 |
|---|---|---|---|---|---|
| cust_id | 客户唯一标识 | string | UUID 格式 | 无缺失 | 主键,不可重复 |
| age | 申请时年龄 | int | 18-100 | -1 表示未知 | 以申请日期减去出生日期计算 |
| income | 月收入(元) | float | 0-999999 | NULL 表示未提供 | 含税后工资与固定补贴 |
| overdue_days | 历史最大逾期天数 | int | 0-999 | -999 表示无信贷记录 | 取自最近 24 个月还款记录 |
避坑提醒:缺失含义必须明确区分“数据不存在”与“数据为0”两种情况。例如,逾期天数为 -999 表示无信贷记录,而 0 表示有记录但从未逾期,两者在建模时处理方式完全不同。
4.4 数据质量初探:缺失值、异常值、重复值
数据质量检查是数据准备中最耗时但最关键的一环。我们聚焦三大核心问题:缺失值、异常值、重复值。下图展示了数据质量检查的整体流程:
4.4.1 缺失值处理
缺失值是信用评分数据中最常见的问题。处理缺失值前,需要先分析缺失模式:
- 完全随机缺失(MCAR):缺失与数据本身无关,可直接删除或简单填充。
- 随机缺失(MAR):缺失与其他观测变量相关,需用模型预测填充。
- 非随机缺失(NMAR):缺失与缺失值本身相关,处理难度最大,常需业务判断。
常用缺失值处理方法:
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 删除缺失记录 | 缺失率 < 5% 且 MCAR | 简单快速 | 可能损失样本量 |
| 均值/中位数填充 | 连续变量,缺失率 5%-20% | 保持分布中心 | 降低方差,可能引入偏差 |
| 众数填充 | 分类变量 | 保留类别分布 | 可能强化主导类别 |
| 模型预测填充 | 缺失率 > 20% 且 MAR | 利用变量间关系 | 计算成本高,有过度拟合风险 |
| 标记缺失为独立类别 | 业务含义明确的字段 | 保留缺失信息 | 增加特征维度 |
实战经验:在信用评分卡建模中,建议对缺失率超过 50% 的字段直接删除;对 20%-50% 的字段优先使用“标记缺失为独立类别”策略,因为缺失本身可能蕴含信用风险信号。
4.4.2 异常值检测
异常值是指明显偏离正常分布的数据点,可能源于录入错误、极端事件或欺诈行为。常用检测方法包括:
- 3σ 原则:适用于近似正态分布的数据,超出均值 ±3 倍标准差的值视为异常。
- 箱线图法:基于四分位数,超出 Q1-1.5×IQR 或 Q3+1.5×IQR 的值视为异常。
- 业务规则法:根据业务常识设定阈值,如年龄 > 100 或收入 < 0。
以下代码展示了使用箱线图法检测异常值的 Python 实现:
import pandas as pd
import numpy as np
def detect_outliers_iqr(data, column):
Q1 = data[column].quantile(0.25)
Q3 = data[column].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = data[(data[column] < lower_bound) | (data[column] > upper_bound)]
return outliers, lower_bound, upper_bound
# 示例:检测收入字段的异常值
outliers_df, low, high = detect_outliers_iqr(df, 'income')
print(f"异常值数量: {len(outliers_df)}")
print(f"正常范围: [{low:.2f}, {high:.2f}]")
避坑提醒:不要机械地删除所有异常值。在信用评分场景中,高收入或高负债的“异常”客户可能正是高风险客群,建议先分箱观察其与目标变量的关系,再决定是否截断或保留。
4.4.3 重复值处理
重复值会导致模型对同一客户过度学习,造成过拟合和评估偏差。重复值通常分为两类:
- 完全重复:所有字段完全相同,直接删除保留一条。
- 部分重复:主键相同但其他字段有差异,需按业务规则保留最新或最完整的记录。
处理重复值的标准流程:
- 基于客户唯一标识(如 cust_id)检测重复。
- 按申请时间倒序排列,保留最新一条记录。
- 若时间字段缺失,则保留字段完整度最高的记录。
- 记录去重前后的样本量变化,写入数据质量报告。
实战提示:在信贷申请场景中,同一客户短期内多次申请是常见现象。建议保留最近一次申请记录,同时创建“近30天申请次数”作为衍生特征,既能去重又能保留行为信息。
4.5 数据质量报告模板
完成数据质量初探后,建议输出一份标准化的数据质量报告,包含以下核心指标:
| 字段名 | 总记录数 | 缺失数 | 缺失率 | 异常数 | 异常率 | 重复数 | 重复率 | 处理建议 |
|---|---|---|---|---|---|---|---|---|
| cust_id | 100,000 | 0 | 0% | 0 | 0% | 1,200 | 1.2% | 去重保留最新 |
| age | 100,000 | 500 | 0.5% | 80 | 0.08% | 0 | 0% | 中位数填充 |
| income | 100,000 | 8,000 | 8% | 350 | 0.35% | 0 | 0% | 标记缺失为 -1 |
| overdue_days | 100,000 | 15,000 | 15% | 200 | 0.2% | 0 | 0% | 标记缺失为 -999 |
数据质量报告是数据准备阶段的最终交付物,也是后续特征工程和模型训练的输入依据。只有经过严格质量检查的数据,才能支撑起稳定、可解释的信用评分模型。