3、数据预处理基础:缺失值处理、异常值检测与处理、数据标准化与归一化方法
在支付风控模型训练中,原始商户数据通常包含大量噪声、缺失字段和极端值。直接使用原始数据训练模型会导致模型偏差、过拟合或预测失效。本章聚焦数据预处理的三大核心环节:缺失值处理、异常值检测与处理、数据标准化与归一化,为后续商户风险分群提供干净、规范的特征输入。
3.1 缺失值处理
商户数据中常见缺失字段包括:注册资本、成立年限、法人身份信息、历史交易笔数等。缺失原因可能是数据采集遗漏、商户未填写或系统传输故障。处理策略分为删除、填充和模型预测三类。
| 策略 | 适用场景 | 支付风控示例 | 注意事项 |
|---|---|---|---|
| 直接删除 | 缺失比例 < 5%,且缺失随机 | 删除无法获取法人身份证号的商户 | 避免删除后样本量过少 |
| 均值/中位数填充 | 数值型特征,分布较对称 | 用行业平均注册资本填充缺失值 | 会降低特征方差 |
| 众数填充 | 类别型特征 | 用“未知”填充缺失的商户行业分类 | 可能引入偏差 |
| 前向/后向填充 | 时间序列数据 | 用上月交易笔数填充本月缺失值 | 仅适用于有序数据 |
| 模型预测填充 | 缺失比例较高,特征间相关性强 | 用KNN或回归模型预测缺失的注册资本 | 计算成本高,需避免过拟合 |
风控实战建议:对于支付风控中的关键字段(如交易金额、商户注册时长),优先使用模型预测填充;对于非关键字段(如商户备注信息),可直接填充“未知”或“0”,避免过度工程化。
3.2 异常值检测与处理
支付数据中的异常值可能来自:套现交易、盗刷行为、数据录入错误或系统故障。异常值检测方法需结合业务规则和统计方法。
3.2.1 常用检测方法
- Z-Score 方法:假设数据服从正态分布,Z-Score 绝对值大于 3 视为异常。适用于交易金额、交易频率等近似正态分布的特征。
- IQR(四分位距)方法:定义 Q1 - 1.5×IQR 和 Q3 + 1.5×IQR 为正常范围,超出即为异常。适用于偏态分布,如商户单笔交易金额。
- 孤立森林(Isolation Forest):基于随机森林的异常检测算法,适合高维特征空间,如同时检测交易金额、时间、设备指纹的联合异常。
- 业务规则阈值:如单笔交易金额超过 100 万元、单日交易笔数超过 1000 笔,直接标记为异常。
注意:在支付风控中,异常值不一定是“脏数据”,可能是真实的风险信号。处理前需区分“自然异常”(如大额合规交易)和“恶意异常”(如盗刷测试交易),避免误杀正常商户。
3.2.2 异常值处理策略
| 处理方式 | 说明 | 风控场景示例 |
|---|---|---|
| 截尾(Winsorize) | 将异常值替换为阈值边界值 | 将交易金额上限设为 99.9% 分位数 |
| 删除 | 直接移除异常样本 | 删除明显的数据录入错误记录 |
| 标记为独立类别 | 保留异常值,新增“是否异常”特征 | 将异常交易标记为高风险样本 |
| 分箱处理 | 将连续值离散化,异常值归入单独箱体 | 将交易金额分为低/中/高/极高四档 |
3.3 数据标准化与归一化方法
支付风控特征通常具有不同的量纲和取值范围,例如:交易金额(0~100万)、交易笔数(0~10000)、商户注册时长(0~3650天)。若不进行标准化,量纲大的特征会主导模型训练,导致风险分群结果失真。
3.3.1 常用方法对比
| 方法 | 公式 | 输出范围 | 适用场景 | 风控示例 |
|---|---|---|---|---|
| Min-Max 归一化 | X' = (X - X_min) / (X_max - X_min) | [0, 1] | 数据分布有明确边界,无极端异常值 | 将交易金额映射到 [0,1] |
| Z-Score 标准化 | X' = (X - μ) / σ | 均值为0,标准差为1 | 数据近似正态分布,存在异常值 | 标准化商户注册时长 |
| Robust 标准化 | X' = (X - Median) / IQR | 无固定范围 | 数据存在较多异常值或偏态分布 | 标准化交易笔数(含异常峰值) |
| MaxAbs 归一化 | X' = X / |X_max| | [-1, 1] | 稀疏数据或已中心化的数据 | 标准化商户评分特征 |
3.3.2 选择策略
- 如果后续使用 K-Means、KNN、SVM 等距离敏感模型:优先使用 Z-Score 标准化或 Robust 标准化,避免异常值对距离计算的影响。
- 如果后续使用神经网络或深度学习:推荐 Min-Max 归一化,将数据压缩到 [0,1] 或 [-1,1] 区间,加速收敛。
- 如果数据包含大量异常值(如支付交易中的大额异常):使用 Robust 标准化,基于中位数和 IQR,对异常值不敏感。
- 如果特征为稀疏数据(如商户类别独热编码):使用 MaxAbs 归一化,保持稀疏性。
代码示例:使用 Python scikit-learn 对商户特征进行标准化
from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustScaler
import pandas as pd
# 假设商户特征数据
data = pd.DataFrame({
'transaction_amount': [5000, 12000, 800, 150000, 3000],
'register_days': [365, 730, 180, 1095, 500],
'transaction_count': [50, 200, 10, 3000, 80]
})
# Z-Score 标准化
scaler = StandardScaler()
data_zscore = scaler.fit_transform(data)
print("Z-Score 标准化结果:\n", data_zscore)
# Min-Max 归一化
minmax_scaler = MinMaxScaler()
data_minmax = minmax_scaler.fit_transform(data)
print("\nMin-Max 归一化结果:\n", data_minmax)
# Robust 标准化
robust_scaler = RobustScaler()
data_robust = robust_scaler.fit_transform(data)
print("\nRobust 标准化结果:\n", data_robust)
3.4 预处理流程总结
在支付风控模型训练中,数据预处理应遵循以下流水线:
- 数据探索:统计缺失比例、分布形态、异常值数量。
- 缺失值处理:根据字段重要性和缺失比例选择填充或删除。
- 异常值检测:结合 IQR、Z-Score 和业务规则,区分真实风险与噪声。
- 异常值处理:对噪声进行截尾或删除,对风险信号进行标记保留。
- 标准化/归一化:根据模型类型和数据分布选择合适方法。
- 验证:检查预处理后特征的统计量(均值、方差、范围)是否符合预期。
最佳实践:建议将预处理步骤封装为 Pipeline,在训练集上拟合(fit)后,直接对验证集和测试集进行变换(transform),避免数据泄露。同时保存预处理参数(如均值、标准差、分位数),用于线上推理时的实时特征处理。