3. 数据准备与探索
数据是信用评分模型的基石。在进入特征工程与建模之前,必须系统性地完成数据源梳理、质量检查、缺失与异常处理以及描述性统计分析。本章将围绕征信、行为、第三方三大数据源,构建一套可复用的数据准备流水线。
3.1 数据源体系
信用评分模型通常融合三类数据源,其特点与用途如下表所示:
| 数据源类型 | 典型字段 | 更新频率 | 核心用途 |
|---|---|---|---|
| 征信数据 | 信贷历史、逾期记录、查询次数、负债率 | 月度/季度 | 违约预测、授信决策 |
| 行为数据 | 交易频次、登录行为、还款习惯、额度使用率 | 日/周 | 实时风控、额度调整 |
| 第三方数据 | 多头借贷、黑名单、社保/公积金、电商消费 | 实时/日 | 反欺诈、补充验证 |
实战要点:征信数据是建模的"主干",行为数据提供"时效性",第三方数据弥补"信息盲区"。三类数据需通过唯一客户ID(如身份证号+手机号)进行关联,并注意时间窗口对齐。
3.2 数据质量检查
数据质量直接影响模型稳定性。建议按以下维度逐项检查:
- 完整性:检查每个字段的缺失率,设定阈值(如 >50% 则考虑剔除或重构)。
- 准确性:验证字段值是否在合理范围内(如年龄 0-120、逾期天数 ≥0)。
- 一致性:检查同一客户在不同数据源中的关键字段是否矛盾(如性别、出生日期)。
- 时效性:确认数据时间戳是否在建模时间窗口内,避免未来数据泄露。
- 唯一性:检查主键是否重复,重复记录需按业务规则去重(如取最新一条)。
工具建议:使用 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 异常值检测
异常值会扭曲模型参数,需结合统计方法与业务规则进行识别与处理。下图展示了常用的异常值检测流程:
避坑提示:不要机械地删除所有异常值。例如,逾期天数 >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) 清洗后的建模数据集(CSV/Parquet格式);
(2) 数据质量报告(含缺失率、异常值分布、字段统计);
(3) 缺失值与异常值处理日志(记录处理规则与参数)。
(1) 清洗后的建模数据集(CSV/Parquet格式);
(2) 数据质量报告(含缺失率、异常值分布、字段统计);
(3) 缺失值与异常值处理日志(记录处理规则与参数)。