3. 数据准备与探索:数据源选择、数据清洗、缺失值处理、异常值检测、描述性统计分析

在信用评分模型(PD模型)开发中,数据质量直接决定模型的上限。本章聚焦于从原始数据到可用建模数据集的完整流程,涵盖数据源选择、数据清洗、缺失值处理、异常值检测及描述性统计分析。每一步都需要严谨的领域知识与统计方法结合,才能为后续特征工程与模型训练打下坚实基础。

3.1 数据源选择

信用评分模型的数据源通常分为内部数据与外部数据两大类。选择数据源时需重点关注:样本代表性、时间跨度、变量覆盖度及数据合规性。

数据源类型 典型来源 关键变量示例 注意事项
内部数据 核心系统、信贷审批系统、催收系统 还款记录、逾期天数、授信额度、负债率 需确保历史数据完整,避免系统迁移导致断点
外部数据 央行征信、百行征信、第三方数据源 征信查询次数、多头借贷、黑名单命中 关注数据时效性与合规授权
衍生数据 基于内部/外部数据计算 近6个月平均使用率、最大逾期天数 需明确衍生逻辑,避免未来信息泄露
实践建议: 优先选择与目标客群同分布的历史数据,时间窗口建议覆盖至少一个完整经济周期(如3-5年),以保证模型在不同宏观环境下的稳定性。

3.2 数据清洗

数据清洗是去除噪声、纠正不一致性的关键步骤。常见问题包括:重复记录、格式错误、逻辑矛盾、无效值等。

  • 重复记录处理: 基于客户唯一标识(如身份证号、客户ID)去重,保留最新或最完整的一条记录。
  • 格式标准化: 统一日期格式(如YYYY-MM-DD)、金额单位(如元)、分类编码(如性别M/F)。
  • 逻辑校验: 例如“贷款发放日期”不应晚于“逾期日期”,“年龄”不应为负数或超过120岁。
  • 无效值剔除: 如身份证号位数不对、手机号格式错误等,视情况删除或标记。
清洗规则示例(Python伪代码):
# 去除重复记录
df = df.drop_duplicates(subset=['customer_id'], keep='last')

# 日期格式统一
df['loan_date'] = pd.to_datetime(df['loan_date'], format='%Y%m%d')

# 逻辑校验:年龄在18-100岁之间
df = df[(df['age'] >= 18) & (df['age'] <= 100)]

3.3 缺失值处理

缺失值是信用数据中的常见现象,处理不当会导致模型偏差。需先分析缺失机制(MCAR、MAR、MNAR),再选择合适方法。

缺失机制 含义 常见处理方法
MCAR(完全随机缺失) 缺失与数据本身无关 直接删除、均值/中位数填充
MAR(随机缺失) 缺失与其他观测变量相关 回归填充、KNN填充、多重插补
MNAR(非随机缺失) 缺失与缺失值本身相关 需结合业务逻辑建模,或单独标记缺失状态

在信用评分场景中,对于缺失率超过50%的变量,通常直接剔除;对于缺失率较低的变量,优先使用中位数或众数填充,并保留缺失指示变量作为额外特征。

注意: 切勿在未分析缺失原因的情况下盲目填充。例如,征信查询次数缺失可能意味着客户无征信记录(本身具有信息量),此时应单独编码为“-1”或“无记录”,而非简单填充均值。

3.4 异常值检测

异常值会扭曲统计分布与模型参数,需结合统计方法与业务规则进行识别与处理。

  • 统计方法:
    • Z-Score法:|Z| > 3 视为异常(适用于近似正态分布)。
    • IQR法:超出 Q1 - 1.5×IQR 或 Q3 + 1.5×IQR 视为异常(适用于偏态分布)。
    • 箱线图可视化辅助判断。
  • 业务规则:
    • 年收入为0或负值。
    • 年龄小于18岁或大于100岁。
    • 负债率超过1000%(明显不合理)。
  • 处理策略:
    • 截尾(Winsorize):将异常值替换为阈值。
    • 删除:仅当确认数据录入错误且样本量充足时。
    • 单独编码:将异常值作为独立类别处理。
异常值检测与处理流程 原始数据 统计检测 Z-Score / IQR 业务规则 领域约束 处理策略 截尾/删除/编码 异常值处理策略详解 • 截尾(Winsorize):将异常值替换为 1% 或 99% 分位数 • 删除:仅用于确认录入错误,且样本量充足 • 单独编码:将异常值作为独立类别,保留信息 • 分箱处理:将连续变量离散化,降低异常值影响

3.5 描述性统计分析

描述性统计是数据探索的核心环节,帮助分析师快速理解变量分布、集中趋势、离散程度及变量间关系。对于信用评分模型,重点关注以下维度:

  • 连续变量: 均值、中位数、标准差、最小值、最大值、偏度、峰度、分位数(尤其是1%、5%、95%、99%)。
  • 分类变量: 频数、占比、类别数量、缺失率。
  • 目标变量(违约/非违约): 违约率、好/坏样本比例、各变量在好坏样本上的分布差异。
  • 相关性分析: 连续变量间的Pearson相关系数,分类变量与目标变量的IV值(信息量)初步计算。
描述性统计输出表示例(Python):
# 连续变量描述统计
df.describe(percentiles=[0.01, 0.05, 0.25, 0.5, 0.75, 0.95, 0.99])

# 分类变量频数统计
df['loan_purpose'].value_counts(normalize=True)

# 按目标变量分组统计
df.groupby('default_flag')['income'].describe()
描述性统计分析框架 描述性统计分析 连续变量 均值/中位数/标准差/分位数 分类变量 频数/占比/缺失率 目标变量 违约率/好坏样本分布 相关性分析 Pearson / IV值 描述性统计是数据质量检查与特征筛选的第一步,为后续建模提供方向性指导

3.6 数据准备与探索的常见陷阱

陷阱 后果 规避方法
未来信息泄露 模型在训练时使用了未来数据,导致过拟合与线上失效 严格按时间窗口划分训练/测试集,衍生变量只使用历史数据
缺失值填充不当 引入噪声或掩盖真实模式 先分析缺失机制,再选择填充方法,保留缺失指示变量
异常值直接删除 丢失重要信息(如欺诈样本) 区分“噪声异常”与“信息异常”,后者应单独分析
忽略样本选择偏差 模型无法泛化到实际客群 检查训练样本与线上样本的分布一致性(PSI检验)
最佳实践: 在数据准备阶段建立数据质量报告(Data Quality Report),记录每个变量的缺失率、异常值比例、分布特征及处理方式,确保整个过程可追溯、可复现。