3. 数据准备与清洗:数据源类型、缺失值处理、异常值检测、数据标准化

风险定价模型的质量高度依赖输入数据的质量。在人群分层实操中,原始数据通常来自多个异构源,包含大量缺失、异常和量纲不一致的问题。本章聚焦数据清洗的四个核心环节:数据源类型识别、缺失值处理、异常值检测与数据标准化,确保后续建模输入干净、稳定、可解释。

3.1 数据源类型与特征

风险定价建模常见的数据源分为三类,每类在缺失模式与异常分布上差异显著:

数据源类型 典型字段 缺失特点 异常特点
内部业务库 客户ID、申请金额、还款记录、逾期天数 结构化缺失,如新客户无历史还款 极端值集中在金额与逾期天数
外部征信/三方数据 征信查询次数、多头借贷数、社保缴纳月数 非随机缺失,高风险客户常缺失更多 查询次数与多头数易出现离群点
行为埋点/日志数据 页面停留时长、点击频次、设备指纹 高维稀疏,大量字段为0或空 异常点击频次与设备环境异常
实操提示: 在人群分层场景中,外部征信数据的缺失往往与客户风险正相关——缺失本身可作为一个风险特征参与建模,不应简单删除。

3.2 缺失值处理策略

缺失值处理需结合缺失机制(MCAR / MAR / MNAR)与业务含义。以下为分层实操中推荐的优先级策略:

  1. 删除法: 仅当缺失率 < 1% 且为完全随机缺失(MCAR)时使用;删除整行或整列。
  2. 固定值填充: 对业务含义明确的字段(如“征信查询次数”缺失可填0),使用领域默认值。
  3. 统计量填充: 对连续型字段使用中位数(抗异常)或均值;对分类型字段使用众数。
  4. 模型预测填充: 对关键特征(如收入、负债率)使用随机森林或KNN回归填充。
  5. 缺失指示变量: 对缺失率 > 5% 的字段,额外生成二值特征 is_missing,保留缺失信息。
人群分层专用策略: 对“收入”字段,建议按分层标签(如优质/次级/高风险)分别计算中位数进行组内填充,避免跨层均值偏移。
# Python 示例:组内中位数填充
import pandas as pd
df['income_filled'] = df.groupby('risk_tier')['income'].transform(
    lambda x: x.fillna(x.median())
)

3.3 异常值检测方法

异常值在风险定价中可能代表欺诈、录入错误或真实极端风险。推荐组合使用以下三种方法:

方法 适用场景 阈值设定 优缺点
Z-Score 近似正态分布连续变量 |Z| > 3 简单快速,但对偏态分布敏感
IQR(四分位距) 偏态分布、含离群点的连续变量 Q1 - 1.5×IQR 或 Q3 + 1.5×IQR 稳健,不受极端值影响
孤立森林 高维数据、非正态分布 异常得分 > 0.6(可调) 适合大规模特征集,可捕捉交互异常
避坑提醒: 不要对“逾期天数”等业务含义明确的字段直接截断异常值。逾期天数 > 180 天在风控中是真实高风险信号,应保留并做分箱处理,而非视为噪声删除。
# Python 示例:IQR 异常值检测
Q1 = df['loan_amount'].quantile(0.25)
Q3 = df['loan_amount'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = df[(df['loan_amount'] < lower_bound) | (df['loan_amount'] > upper_bound)]

3.4 数据标准化

风险定价模型(尤其是逻辑回归、KNN、SVM)对特征量纲敏感。标准化可消除量纲影响,使模型系数可比。常用方法如下:

方法 公式 输出范围 适用模型
Z-Score 标准化 (x - μ) / σ 均值0,标准差1 逻辑回归、SVM、神经网络
Min-Max 归一化 (x - min) / (max - min) [0, 1] KNN、深度学习、距离计算
Robust 标准化 (x - median) / IQR 无固定范围,抗异常 含较多异常值的字段
分层实操建议: 在人群分层场景中,建议先按分层标签(如优质/次级/高风险)分别计算标准化参数,再进行转换。这可以保留层内分布差异,避免跨层信息混淆。
# Python 示例:Robust 标准化
from sklearn.preprocessing import RobustScaler
scaler = RobustScaler()
df[['income_scaled', 'debt_ratio_scaled']] = scaler.fit_transform(
    df[['income', 'debt_ratio']]
)

3.5 数据清洗全流程架构

以下 SVG 图展示了从原始数据到建模就绪数据的完整清洗流水线,包含数据源接入、缺失处理、异常检测与标准化四个阶段:

数据清洗全流程架构图 数据清洗全流程架构 内部业务库 结构化 / 历史还款 外部征信/三方 非随机缺失 / 多头 行为埋点/日志 高维稀疏 / 点击频次 缺失值处理 删除法 | 固定值填充 | 统计量填充 | 模型预测填充 | 缺失指示变量 异常值检测 Z-Score | IQR 四分位距 | 孤立森林 | 业务规则过滤 数据标准化 Z-Score 标准化 | Min-Max 归一化 | Robust 标准化

3.6 分层清洗校验清单

在人群分层实操中,每次清洗后建议按以下清单逐层校验:

  • 缺失率校验: 每个分层子集(优质/次级/高风险)的缺失率是否一致?若差异 > 10%,需检查是否引入选择偏差。
  • 异常分布校验: 异常值是否集中在某个分层?例如高风险层异常率 > 15% 可能为真实风险信号,不应统一截断。
  • 标准化参数校验: 各分层标准化后的均值与标准差是否接近?若差异显著,考虑分层独立标准化。
  • 业务一致性校验: 清洗后字段的统计量(如收入中位数、逾期率)是否符合业务经验范围。
最终交付物: 清洗后的数据集应包含原始字段、缺失指示字段、异常标记字段、标准化字段,并附带一份数据清洗报告(含缺失率、异常率、标准化参数表),供后续特征工程与模型开发团队使用。