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% 分位数
删除 直接移除异常样本 删除明显的数据录入错误记录
标记为独立类别 保留异常值,新增“是否异常”特征 将异常交易标记为高风险样本
分箱处理 将连续值离散化,异常值归入单独箱体 将交易金额分为低/中/高/极高四档
异常值检测与处理流程(支付风控场景) 原始商户数据 Z-Score 方法 (正态分布) IQR 方法 (偏态分布) 孤立森林 (高维特征) 业务规则 (阈值) 是否为真实异常? 是(风险信号) 否(数据噪声) 标记为高风险样本 (保留特征,增加权重) 截尾 / 删除 / 分箱 (清洗后进入模型) 关键原则:异常值处理前必须结合业务判断,避免将大额合规交易误判为噪声删除

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)
标准化与归一化方法选择决策树 商户特征数据 是否包含异常值? 是 否 Robust 标准化 距离敏感模型? 是 否 Z-Score 标准化 Min-Max 归一化 提示:神经网络推荐 Min-Max;树模型(XGBoost/LightGBM)对标准化不敏感,可跳过此步

3.4 预处理流程总结

在支付风控模型训练中,数据预处理应遵循以下流水线:

  1. 数据探索:统计缺失比例、分布形态、异常值数量。
  2. 缺失值处理:根据字段重要性和缺失比例选择填充或删除。
  3. 异常值检测:结合 IQR、Z-Score 和业务规则,区分真实风险与噪声。
  4. 异常值处理:对噪声进行截尾或删除,对风险信号进行标记保留。
  5. 标准化/归一化:根据模型类型和数据分布选择合适方法。
  6. 验证:检查预处理后特征的统计量(均值、方差、范围)是否符合预期。
最佳实践:建议将预处理步骤封装为 Pipeline,在训练集上拟合(fit)后,直接对验证集和测试集进行变换(transform),避免数据泄露。同时保存预处理参数(如均值、标准差、分位数),用于线上推理时的实时特征处理。