4. 数据准备与探索:数据源介绍、数据采集、数据字典整理、数据质量初探

数据是信用评分模型的基石。在进入特征工程与建模之前,必须系统性地完成数据准备与探索工作。本章将围绕数据源、采集方式、数据字典构建以及缺失值、异常值、重复值三大质量维度展开,确保后续建模工作建立在干净、可靠的数据基础之上。

4.1 数据源介绍

信用评分模型的数据源通常分为内部数据与外部数据两大类。内部数据来自金融机构自身的业务系统,外部数据则通过第三方征信机构或公开渠道获取。下表列出了常见的数据源类型及其典型字段:

数据源类别 典型来源 常用字段示例 数据特点
内部申请数据 信贷申请表、核心系统 年龄、收入、职业、婚姻状况、学历 直接反映客户画像,但可能存在主观填报偏差
内部行为数据 还款流水、交易记录 历史逾期天数、平均余额、还款金额波动 时效性强,能反映近期信用行为
外部征信数据 央行征信、百行征信、同盾 征信查询次数、贷款笔数、担保余额 覆盖面广,但获取成本高、更新频率受限
第三方替代数据 运营商、电商、社保 通话时长、消费金额、社保缴纳月数 可覆盖征信白户,但数据标准化程度低
实战提示:在金融科技场景中,建议优先整合内部行为数据与外部征信数据,两者结合通常能覆盖 80% 以上的预测能力。替代数据作为补充,主要用于长尾客群或新客准入。

4.2 数据采集流程

数据采集是将原始数据从各源系统抽取到建模环境的过程。典型的采集流程包含以下步骤:

  1. 接口对接:通过 API、FTP、数据库直连等方式与数据源建立连接。
  2. 字段映射:将源系统字段名统一映射为建模标准字段名。
  3. 增量/全量抽取:根据业务频率选择每日增量或每月全量抽取。
  4. 数据落地:写入数据仓库或建模专用表,保留原始快照。
  5. 采集校验:对比源端与目标端的记录数、关键字段汇总值,确保数据完整。
关键指标:采集成功率应 ≥ 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 重复值处理

重复值会导致模型对同一客户过度学习,造成过拟合和评估偏差。重复值通常分为两类:

  • 完全重复:所有字段完全相同,直接删除保留一条。
  • 部分重复:主键相同但其他字段有差异,需按业务规则保留最新或最完整的记录。

处理重复值的标准流程:

  1. 基于客户唯一标识(如 cust_id)检测重复。
  2. 按申请时间倒序排列,保留最新一条记录。
  3. 若时间字段缺失,则保留字段完整度最高的记录。
  4. 记录去重前后的样本量变化,写入数据质量报告。
实战提示:在信贷申请场景中,同一客户短期内多次申请是常见现象。建议保留最近一次申请记录,同时创建“近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

数据质量报告是数据准备阶段的最终交付物,也是后续特征工程和模型训练的输入依据。只有经过严格质量检查的数据,才能支撑起稳定、可解释的信用评分模型。