4. 数据预处理基础:缺失值处理、异常值检测、数据标准化与归一化方法

在压力测试建模中,原始风险暴露数据通常包含缺失值、异常值以及量纲不一致的问题。若不经过预处理,模型将产生有偏估计,甚至导致压力情景传导失效。本节系统梳理数据预处理的三大核心环节:缺失值处理、异常值检测、标准化与归一化。

4.1 缺失值处理

缺失值在风险数据中普遍存在,原因包括数据采集失败、系统迁移遗漏、交易对手信息不完整等。处理策略分为删除法与填充法两大类。

策略 方法 适用场景 风险提示
删除法 行删除 / 列删除 缺失比例 < 5% 且随机缺失 可能损失有效样本,导致选择偏差
固定值填充 均值 / 中位数 / 众数 数值型特征,分布对称或偏态 均值填充会压缩方差,影响压力尾部估计
模型预测填充 KNN / 回归 / 随机森林 特征间存在较强相关性 计算成本高,需避免过拟合
时间序列填充 前向填充 / 插值 时序风险因子(利率、汇率) 需确保时间顺序不变
实践建议:在压力测试中,对关键风险暴露特征(如LGD、PD)优先使用模型预测填充或插值法,避免因简单均值填充而低估极端损失情景下的波动性。

4.2 异常值检测

异常值可能代表数据录入错误,也可能是真实的极端风险事件(如违约峰值)。检测方法需结合业务逻辑与统计规则。

  • Z-Score 法:假设数据服从正态分布,|Z| > 3 视为异常。适用于对称分布,对厚尾分布敏感度不足。
  • IQR 四分位距法:定义异常区间为 [Q1 - 1.5×IQR, Q3 + 1.5×IQR]。稳健性强,不受极端值影响,适合偏态分布。
  • 孤立森林:基于集成学习的无监督方法,通过随机切割特征空间识别孤立点。适合高维风险特征筛选场景。
  • 业务规则阈值:如违约概率必须在 [0,1] 区间,风险权重不能为负数。此类规则应优先于统计方法执行。
关键原则:异常值不应被机械删除。在压力测试中,应区分“数据错误型异常”与“极端风险型异常”,后者往往是压力情景校准的重要输入。
异常值检测方法对比流程 异常值检测方法对比流程 原始风险暴露数据 统计方法 机器学习方法 业务规则 Z-Score / IQR 孤立森林 / LOF 阈值校验 异常标记与分类处理

4.3 数据标准化与归一化

风险暴露特征通常具有不同的量纲和数值范围(如贷款金额以万元计,违约概率以百分比计)。标准化与归一化将特征缩放到统一尺度,避免量纲差异主导模型训练。

4.3.1 核心方法对比

方法 公式 输出范围 适用场景
Min-Max 归一化 X' = (X - X_min) / (X_max - X_min) [0, 1] 神经网络、距离模型(KNN、K-Means)
Z-Score 标准化 X' = (X - μ) / σ 均值0,标准差1 线性回归、PCA、SVM
Robust 标准化 X' = (X - Median) / IQR 无固定范围 存在异常值的风险特征
MaxAbs 缩放 X' = X / |X_max| [-1, 1] 稀疏数据(如稀疏风险矩阵)
注意:在压力测试中,标准化参数(μ、σ、Min、Max)必须基于训练集(历史正常时期)计算,并直接应用于测试集(压力时期),避免数据泄露导致压力表现失真。

4.3.2 标准化流程代码示例

import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustScaler

# 示例:风险暴露特征矩阵
risk_features = pd.DataFrame({
    'exposure': [500, 1200, 800, 3000, 150],
    'pd': [0.02, 0.05, 0.01, 0.12, 0.03],
    'lgd': [0.45, 0.60, 0.35, 0.80, 0.50]
})

# Z-Score 标准化(保留异常分布形态)
scaler_z = StandardScaler()
features_z = scaler_z.fit_transform(risk_features)

# Min-Max 归一化(压缩到 [0,1])
scaler_mm = MinMaxScaler()
features_mm = scaler_mm.fit_transform(risk_features)

# Robust 标准化(抗异常值干扰)
scaler_rb = RobustScaler()
features_rb = scaler_rb.fit_transform(risk_features)

print("Z-Score 标准化结果(前2行):\n", features_z[:2])
标准化与归一化效果对比 标准化与归一化效果对比 原始数据 量纲差异大 exposure: 150~3000 pd: 0.01~0.12 lgd: 0.35~0.80 → 模型偏向高量纲特征 Min-Max 归一化 输出范围 [0, 1] 保留原始分布形状 对异常值敏感 适合边界明确的特征 → 神经网络、KNN Z-Score 标准化 均值0,标准差1 保留异常值信息 适合正态分布数据 不改变数据分布形态 → 回归、PCA、SVM

4.4 预处理顺序与最佳实践

在压力测试特征筛选流程中,数据预处理应遵循固定顺序,以避免统计量污染:

  1. 业务规则清洗:剔除逻辑错误值(如负的贷款期限)。
  2. 缺失值处理:先填充或删除,确保后续统计量计算完整。
  3. 异常值检测与标记:区分错误与极端风险,保留后者用于压力情景。
  4. 标准化/归一化:基于清洗后数据计算参数,统一特征尺度。
压力测试特有考量:标准化参数应使用“稳态时期”数据拟合,压力时期数据仅做变换,不做重新拟合。这保证了压力情景下的特征分布偏移可被模型正确捕捉。