📊 风险模型构建 · 数据预处理

第3讲
🧑‍🏫 金融风控专家 · 数据科学家 📌 中小学生色系 · 双边框设计 📅 版本 2.4 · 2025

🧼 1. 数据清洗

数据清洗是风险模型的第一道防线。去除噪声、重复、格式错误,保证数据质量。

  • 去重 — 识别并移除完全重复或关键字段重复的记录
  • 格式统一 — 日期、货币、百分比等转为标准格式
  • 逻辑校验 — 年龄>0, 收入非负, 逾期天数合理
  • 类型转换 — 字符串数字→数值, 类别编码
📌 风控案例
“客户年龄 = 250” → 逻辑异常
“身份证号重复” → 疑似欺诈

🕳️ 2. 缺失值处理

方法描述适用场景风险模型注意
删除缺失删除含缺失的行/列缺失比例极小 <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)

📊 3. 异常值检测与处理

🔍 常用检测方法

  • Z-score — 假设正态,|Z|>3 视为异常
  • IQR 四分位距 — 低于 Q1-1.5IQR 或高于 Q3+1.5IQR
  • 孤立森林 — 适合高维,基于树模型
  • DBSCAN — 基于密度,识别离群点
⚡ 处理策略
• 截尾 (winsorize)
• 对数变换
• 分箱离散化
• 单独建模异常样本
# 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)

⚖️ 4. 数据标准化与归一化

方法公式 / 说明输出范围风险模型用途
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']])

🧩 5. 数据预处理架构 (SVG)

原始风险数据 🧹 数据清洗 🕳️ 缺失值处理 📈 异常值检测 ⚖️ 标准化/归一化 ✅ 干净 标准化特征 风险模型 数据预处理流水线 · 风险模型构建

✨ 预处理是风险模型的基石,直接影响模型区分度与稳定性。

清洗 → 缺失 → 异常 → 标准化,每一步都需要结合业务逻辑与数据分布。