数据清洗是风险模型的第一道防线。去除噪声、重复、格式错误,保证数据质量。
| 方法 | 描述 | 适用场景 | 风险模型注意 |
|---|---|---|---|
| 删除缺失 | 删除含缺失的行/列 | 缺失比例极小 <5% | 可能丢失稀有违约样本 |
| 均值/中位数填充 | 用该列均值/中位数填补 | 数值型,分布较对称 | 降低方差,影响系数 |
| 众数填充 | 用最频繁值填补 | 类别型特征 | 可能引入偏误 |
| KNN / 模型预测 | 利用相似样本预测缺失值 | 特征关联强,样本充足 | 计算成本高,防止过拟合 |
| 缺失指示变量 | 额外增加“是否缺失”列 | 缺失可能包含信息 | 常用于信用评分卡 |
# Python 示例:缺失值处理 (pandas + sklearn) import pandas as pd from sklearn.impute import SimpleImputer df = pd.read_csv('risk_data.csv') # 中位数填充年龄 imputer = SimpleImputer(strategy='median') df['age'] = imputer.fit_transform(df[['age']]) # 类别列众数填充 df['employment'].fillna(df['employment'].mode()[0], inplace=True)
# IQR 异常值检测 & 截尾处理
Q1 = df['loan_amount'].quantile(0.25)
Q3 = df['loan_amount'].quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
df['loan_amount'] = df['loan_amount'].clip(lower, upper)
| 方法 | 公式 / 说明 | 输出范围 | 风险模型用途 |
|---|---|---|---|
| Z-score 标准化 | \( z = \frac{x-\mu}{\sigma} \) | 均值0,标准差1 | 逻辑回归、SVM、神经网络 |
| Min-Max 归一化 | \( x' = \frac{x - min}{max - min} \) | [0, 1] | KNN、距离模型、评分卡 |
| Robust 缩放 | \( x' = \frac{x - median}{IQR} \) | 对异常值鲁棒 | 收入、负债等偏斜特征 |
| MaxAbs 缩放 | \( x' = \frac{x}{\max(|x|)} \) | [-1, 1] | 稀疏数据/文本特征 |
# 标准化 & 归一化 (sklearn)
from sklearn.preprocessing import StandardScaler, MinMaxScaler
scaler_std = StandardScaler()
X_std = scaler_std.fit_transform(df[['income', 'debt_ratio']])
scaler_mm = MinMaxScaler()
X_mm = scaler_mm.fit_transform(df[['credit_score']])
✨ 预处理是风险模型的基石,直接影响模型区分度与稳定性。
清洗 → 缺失 → 异常 → 标准化,每一步都需要结合业务逻辑与数据分布。