2、数据准备基础:数据收集来源、数据清洗原则、缺失值处理策略、异常值识别方法

在风险定价模型的生命周期中,数据准备是决定模型上限的关键环节。低质量数据输入必然导致不可靠的风险定价输出。本章系统梳理数据收集的典型来源、数据清洗的核心原则、缺失值与异常值的处理策略,为后续训练集与验证集的科学划分奠定基础。

2.1 数据收集来源

风险定价模型所需数据通常来自内部业务系统与外部征信/数据服务商。不同来源的数据在覆盖度、时效性、准确性上存在显著差异,建模前需明确各来源的适用场景与局限性。

数据来源 典型内容 优势 局限性
内部核心系统 客户基本信息、账户流水、历史借贷记录、还款行为 数据准确、可追溯、与业务逻辑一致 覆盖范围有限,可能存在幸存者偏差
征信机构 央行征信、百行征信、芝麻信用分等 跨机构负债信息、逾期记录权威 更新频率低,部分人群无征信记录
第三方数据服务商 多头借贷、设备指纹、社交网络、电商消费 补充传统征信盲区,提升模型区分度 数据质量参差,合规风险需关注
公开数据 宏观经济指标、行业违约率、法院执行信息 外部环境变量,增强模型稳健性 粒度较粗,与个体风险关联度有限
实践建议:优先整合内部核心系统数据作为基线,再根据模型目标(如申请评分、行为评分、催收评分)选择性接入外部数据。避免一次性接入过多来源,增加数据治理复杂度。
风险定价模型数据收集来源架构 风险定价模型 内部核心系统 征信机构 第三方数据服务商 公开数据 数据来源选择原则 • 内部数据优先:准确、可控、合规成本低 • 征信数据必接:风险底线,识别多头借贷与逾期历史 • 外部数据补充:针对特定客群(如年轻人群、小微商户)提升模型效果 • 公开数据用于宏观校准:经济周期、行业景气度对违约率的影响

2.2 数据清洗原则

数据清洗不是简单的“删除坏数据”,而是基于业务逻辑与统计规则,将原始数据转化为可用于建模的干净数据集。以下四项原则是风险定价场景中必须遵守的基线。

  1. 完整性原则:检查关键字段(如贷款金额、利率、逾期天数)是否存在空值或无效占位符(如 -999、NULL)。完整性不足的字段需标记并进入缺失值处理流程。
  2. 一致性原则:同一字段在不同数据源或不同时间点的取值逻辑必须统一。例如“逾期天数”在A系统以自然日计算,在B系统以工作日计算,需对齐后再合并。
  3. 准确性原则:识别并修正明显违反业务常识的记录。例如贷款金额为负数、利率超过100%、年龄为200岁等。
  4. 时效性原则:风险定价模型对时间敏感,需确保训练数据的时间窗口与模型应用场景一致。例如用2023年的数据训练模型去预测2025年的风险,需谨慎评估概念漂移。
关键提醒:清洗过程必须保留完整的清洗日志,包括原始值、清洗规则、清洗后值、清洗时间戳。这是模型审计与复现的基础,也是监管合规的要求。

2.3 缺失值处理策略

缺失值是风险定价数据中的常见问题,其处理方式直接影响模型偏差与方差。策略选择需综合考虑缺失机制(MCAR/MAR/MNAR)、缺失率、变量重要性。

策略 适用场景 优点 缺点
删除缺失记录 缺失率 < 5%,且缺失机制为完全随机(MCAR) 简单、不引入人为偏差 样本量减少,可能损失信息
均值/中位数填充 数值型变量,缺失率较低(5%~20%) 计算快,保持数据分布中心 低估方差,削弱变量区分能力
众数填充 分类型变量,如婚姻状况、学历 保留类别分布特征 可能强化主导类别偏差
模型预测填充 缺失率较高(20%~50%),且变量间存在相关性 利用变量间关系,填充精度高 计算成本高,存在过拟合风险
缺失值单独编码 缺失本身具有信息含义(如“未查询到征信”) 保留缺失信息,提升模型表现 增加特征维度,需谨慎解释
风险提示:在训练集与验证集划分后,缺失值填充参数(如均值、中位数)必须仅在训练集上计算,再应用到验证集。禁止使用全样本统计量进行填充,否则会导致数据泄露,高估模型性能。
缺失值处理策略决策流程 检测缺失值 缺失率 < 5% ? 删除缺失记录 缺失率 5%~50% ? 均值/众数/模型填充 缺失率 > 50% ? 单独编码或删除变量

2.4 异常值识别方法

异常值在风险定价数据中可能代表欺诈、数据录入错误或真实的极端风险。不加区分地删除或保留都会损害模型效果。以下列出四种主流识别方法,实际应用中常组合使用。

方法 原理 适用变量类型 阈值设定
Z-Score 法 计算每个值与均值的标准差倍数 近似正态分布的连续变量 |Z| > 3 视为异常
IQR 四分位距法 基于 Q1 和 Q3 计算上下边界 偏态分布的连续变量 下界 = Q1 - 1.5×IQR;上界 = Q3 + 1.5×IQR
孤立森林 基于随机切割的集成学习算法 高维连续变量 异常分数 > 0.6 或根据分布分位数
业务规则法 基于领域知识设定合理取值范围 所有类型,尤其离散变量 如年龄 < 18 或 > 100 视为异常
实战经验:在风险定价场景中,建议优先使用 IQR 法 + 业务规则法组合。IQR 对偏态分布(如收入、贷款金额)稳健,业务规则法可捕获统计方法无法识别的逻辑异常(如“贷款发放日期晚于逾期日期”)。

2.5 数据准备完整流程示例

以下代码展示一个简化的数据准备流程,涵盖缺失值填充与异常值识别,使用 Python 伪代码风格。实际生产环境需根据数据规模与业务逻辑调整。

import pandas as pd
import numpy as np

# 1. 加载原始数据
df = pd.read_csv('loan_data_raw.csv')

# 2. 数据清洗:删除完全重复行
df = df.drop_duplicates()

# 3. 缺失值处理:训练集上计算填充参数
train_mask = df['date'] < '2024-01-01'
train_data = df[train_mask]

# 数值变量:中位数填充
income_median = train_data['income'].median()
df['income'] = df['income'].fillna(income_median)

# 分类变量:众数填充
education_mode = train_data['education'].mode()[0]
df['education'] = df['education'].fillna(education_mode)

# 4. 异常值识别:IQR 法
Q1 = train_data['loan_amount'].quantile(0.25)
Q3 = train_data['loan_amount'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

# 标记异常值,不直接删除
df['loan_amount_outlier'] = ((df['loan_amount'] < lower_bound) |
                             (df['loan_amount'] > upper_bound)).astype(int)

# 5. 输出清洗后数据
df.to_csv('loan_data_cleaned.csv', index=False)
重要:上述代码中,填充参数(median、mode)和异常值边界(Q1、Q3)均基于训练集计算。验证集和测试集只能使用这些预计算参数进行转换,不得重新计算。这是防止数据泄露的核心原则。

数据准备是风险定价模型生命周期中最耗时但最具价值的环节。完成上述步骤后,即可进入下一阶段:特征工程与训练集/验证集划分。请确保每一步都保留完整的转换参数与日志,为模型的可解释性与监管审计提供支撑。