4. 数据预处理基础:缺失值处理、异常值检测、数据标准化与归一化方法
在压力测试建模中,原始风险暴露数据通常包含缺失值、异常值以及量纲不一致的问题。若不经过预处理,模型将产生有偏估计,甚至导致压力情景传导失效。本节系统梳理数据预处理的三大核心环节:缺失值处理、异常值检测、标准化与归一化。
4.1 缺失值处理
缺失值在风险数据中普遍存在,原因包括数据采集失败、系统迁移遗漏、交易对手信息不完整等。处理策略分为删除法与填充法两大类。
| 策略 | 方法 | 适用场景 | 风险提示 |
|---|---|---|---|
| 删除法 | 行删除 / 列删除 | 缺失比例 < 5% 且随机缺失 | 可能损失有效样本,导致选择偏差 |
| 固定值填充 | 均值 / 中位数 / 众数 | 数值型特征,分布对称或偏态 | 均值填充会压缩方差,影响压力尾部估计 |
| 模型预测填充 | KNN / 回归 / 随机森林 | 特征间存在较强相关性 | 计算成本高,需避免过拟合 |
| 时间序列填充 | 前向填充 / 插值 | 时序风险因子(利率、汇率) | 需确保时间顺序不变 |
实践建议:在压力测试中,对关键风险暴露特征(如LGD、PD)优先使用模型预测填充或插值法,避免因简单均值填充而低估极端损失情景下的波动性。
4.2 异常值检测
异常值可能代表数据录入错误,也可能是真实的极端风险事件(如违约峰值)。检测方法需结合业务逻辑与统计规则。
- Z-Score 法:假设数据服从正态分布,|Z| > 3 视为异常。适用于对称分布,对厚尾分布敏感度不足。
- IQR 四分位距法:定义异常区间为 [Q1 - 1.5×IQR, Q3 + 1.5×IQR]。稳健性强,不受极端值影响,适合偏态分布。
- 孤立森林:基于集成学习的无监督方法,通过随机切割特征空间识别孤立点。适合高维风险特征筛选场景。
- 业务规则阈值:如违约概率必须在 [0,1] 区间,风险权重不能为负数。此类规则应优先于统计方法执行。
关键原则:异常值不应被机械删除。在压力测试中,应区分“数据错误型异常”与“极端风险型异常”,后者往往是压力情景校准的重要输入。
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])
4.4 预处理顺序与最佳实践
在压力测试特征筛选流程中,数据预处理应遵循固定顺序,以避免统计量污染:
- 业务规则清洗:剔除逻辑错误值(如负的贷款期限)。
- 缺失值处理:先填充或删除,确保后续统计量计算完整。
- 异常值检测与标记:区分错误与极端风险,保留后者用于压力情景。
- 标准化/归一化:基于清洗后数据计算参数,统一特征尺度。
压力测试特有考量:标准化参数应使用“稳态时期”数据拟合,压力时期数据仅做变换,不做重新拟合。这保证了压力情景下的特征分布偏移可被模型正确捕捉。