3. 数据准备与探索

数据是信用评分模型的基石。在进入特征工程与建模之前,必须系统性地完成数据源梳理、质量检查、缺失与异常处理以及描述性统计分析。本章将围绕征信、行为、第三方三大数据源,构建一套可复用的数据准备流水线。

3.1 数据源体系

信用评分模型通常融合三类数据源,其特点与用途如下表所示:

数据源类型 典型字段 更新频率 核心用途
征信数据 信贷历史、逾期记录、查询次数、负债率 月度/季度 违约预测、授信决策
行为数据 交易频次、登录行为、还款习惯、额度使用率 日/周 实时风控、额度调整
第三方数据 多头借贷、黑名单、社保/公积金、电商消费 实时/日 反欺诈、补充验证
实战要点:征信数据是建模的"主干",行为数据提供"时效性",第三方数据弥补"信息盲区"。三类数据需通过唯一客户ID(如身份证号+手机号)进行关联,并注意时间窗口对齐。

3.2 数据质量检查

数据质量直接影响模型稳定性。建议按以下维度逐项检查:

  1. 完整性:检查每个字段的缺失率,设定阈值(如 >50% 则考虑剔除或重构)。
  2. 准确性:验证字段值是否在合理范围内(如年龄 0-120、逾期天数 ≥0)。
  3. 一致性:检查同一客户在不同数据源中的关键字段是否矛盾(如性别、出生日期)。
  4. 时效性:确认数据时间戳是否在建模时间窗口内,避免未来数据泄露。
  5. 唯一性:检查主键是否重复,重复记录需按业务规则去重(如取最新一条)。
工具建议:使用 Python 的 pandas-profiling 或 great_expectations 自动化生成数据质量报告,快速定位异常字段。

3.3 缺失值处理

缺失值处理需结合缺失机制与业务含义,常见策略如下:

缺失机制 推荐方法 适用场景
完全随机缺失(MCAR) 删除记录 / 均值/中位数填充 缺失率 <5%,且样本量充足
随机缺失(MAR) 回归填充 / KNN填充 / 模型预测 缺失率 5%-30%,有相关字段可辅助预测
非随机缺失(MNAR) 单独编码为"缺失类" / 业务规则填充 缺失本身具有信息量(如未查询征信)
# 示例:Python 缺失值处理流水线
import pandas as pd
from sklearn.impute import KNNImputer

# 读取数据
df = pd.read_csv('credit_data.csv')

# 1. 删除缺失率 > 50% 的字段
df.drop(columns=[col for col in df.columns if df[col].isnull().mean() > 0.5], inplace=True)

# 2. 对数值型字段使用 KNN 填充
num_cols = df.select_dtypes(include=['float64', 'int64']).columns
imputer = KNNImputer(n_neighbors=5)
df[num_cols] = imputer.fit_transform(df[num_cols])

# 3. 对分类型字段使用众数填充
cat_cols = df.select_dtypes(include=['object']).columns
df[cat_cols] = df[cat_cols].fillna(df[cat_cols].mode().iloc[0])

3.4 异常值检测

异常值会扭曲模型参数,需结合统计方法与业务规则进行识别与处理。下图展示了常用的异常值检测流程:

异常值检测流程 原始数据 统计方法 业务规则 Z-Score / IQR 孤立森林 / LOF 字段取值范围 监管合规限制 综合判定与处理 处理方式:截尾、变换、单独编码
避坑提示:不要机械地删除所有异常值。例如,逾期天数 >180 的客户虽然异常,但恰恰是高风险群体的关键特征,应保留并单独编码。

3.5 描述性统计分析

描述性统计帮助理解数据分布、识别潜在问题,并为后续特征工程提供方向。核心输出包括:

  • 连续变量:均值、中位数、标准差、偏度、峰度、分位数(P1/P5/P25/P50/P75/P95/P99)。
  • 分类变量:频数、占比、类别数、缺失率。
  • 目标变量:好坏样本比例(Bad Rate)、组间差异(IV值初步估算)。
# 示例:描述性统计输出
import pandas as pd

df = pd.read_csv('credit_data.csv')

# 连续变量统计
print(df.describe(percentiles=[0.01, 0.05, 0.25, 0.5, 0.75, 0.95, 0.99]).T)

# 分类变量统计
for col in df.select_dtypes(include=['object']).columns:
    print(f"\n{col} 分布:")
    print(df[col].value_counts(normalize=True).head(10))

3.6 数据准备流水线总览

将上述步骤整合为可复用的流水线,确保数据从原始状态到建模就绪状态的转换过程清晰可控:

数据准备流水线 数据源接入 征信/行为/第三方 质量检查 完整性/准确性/一致性 缺失值处理 填充/删除/单独编码 异常值检测 统计+业务规则 描述性 统计 输出:清洗后数据集 + 数据质量报告 + 异常值清单 迭代反馈(质量不达标时回退) 数据准备最佳实践 1. 每一步都记录处理日志,便于回溯 2. 保留原始数据副本,避免不可逆操作
交付物清单:完成本章后,应产出以下文件:
(1) 清洗后的建模数据集(CSV/Parquet格式);
(2) 数据质量报告(含缺失率、异常值分布、字段统计);
(3) 缺失值与异常值处理日志(记录处理规则与参数)。