4. 数据标准化与归一化:让不同量纲的特征站在同一起跑线
做信用评分模型,我遇到的第一道坎往往不是算法选哪个,而是数据本身。你想想看,收入字段动辄几万几十万,年龄字段只有几十,逾期天数可能上千,而性别字段就0和1。这些数字放在一起,量纲差了好几个数量级。如果不做处理,模型会天然偏向数值大的特征——这不是它聪明,是它被数字大小给骗了。
所以,标准化和归一化,说白了就是给所有特征「统一度量衡」。让它们在一个公平的尺度上参与建模。今天我就把这几种主流方法掰开揉碎了讲清楚。
4.1 Min-Max归一化:简单粗暴,但有边界
Min-Max归一化,也叫离差标准化。公式很简单:
X_scaled = (X - X_min) / (X_max - X_min)
结果会落在[0, 1]区间内。如果数据里有极端值,比如某个人年收入1000万,那其他人的收入都会被压缩到接近0。嗯,这里要注意——Min-Max对异常值非常敏感。
我在项目中遇到过一件事:某次做信用卡申请评分,收入字段里混进了一个录入错误,多打了两个零。结果归一化后,99%的申请人都变成了0.01以下,模型直接废了。排查了半天才发现是数据质量问题。
4.2 Z-Score标准化:抗干扰能力更强
Z-Score是工业界最常用的方法。公式:
X_scaled = (X - μ) / σ
其中μ是均值,σ是标准差。处理后数据均值为0,标准差为1。它不像Min-Max那样受极端值影响那么大,因为用的是标准差而不是极差。
我个人习惯在逻辑回归、SVM这类模型上优先用Z-Score。为什么?因为这些模型对特征的尺度敏感,而Z-Score能保留数据的分布形态。你想想看,信用评分里很多特征本身就是正态分布的——比如收入取对数后、消费金额取对数后——用Z-Score非常自然。
| 方法 | 输出范围 | 对异常值敏感度 | 适用模型 |
|---|---|---|---|
| Min-Max | [0, 1] | 高 | 神经网络、KNN |
| Z-Score | 无固定范围 | 中等 | 逻辑回归、SVM、PCA |
| RobustScaler | 无固定范围 | 低 | 含异常值的数据集 |
4.3 RobustScaler:专治各种异常值
RobustScaler用的是中位数和四分位距(IQR)。公式:
X_scaled = (X - median) / IQR
其中IQR = Q3 - Q1。因为中位数和四分位数不受极端值影响,所以RobustScaler对异常值非常鲁棒。
我记得有一次做贷后催收评分模型,逾期天数这个特征里,有人逾期了800多天,而大部分人只有几天。用Z-Score的话,800天那个点会被拉到离谱的位置。换成RobustScaler,一切就正常了。说白了,如果你的数据里「脏数据」比较多,或者特征天然就有长尾分布,RobustScaler是你的好朋友。
# Python代码示例
from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler
# 假设X是特征矩阵
minmax = MinMaxScaler()
X_minmax = minmax.fit_transform(X)
zscore = StandardScaler()
X_zscore = zscore.fit_transform(X)
robust = RobustScaler()
X_robust = robust.fit_transform(X)
4.4 在信用评分中的应用场景
信用评分模型里,不同环节对标准化的需求不一样。我总结了几条实战经验:
- 逻辑回归评分卡:必须做标准化。逻辑回归的系数大小直接反映特征重要性,如果不标准化,系数没法比较。我个人习惯用Z-Score。
- 树模型(XGBoost、LightGBM):不需要标准化。树模型是基于分裂点的,不受量纲影响。但如果你要做特征重要性排序,标准化后更直观。
- 神经网络评分模型:强烈建议Min-Max归一化到[0,1]或[-1,1]。神经网络的激活函数对输入范围敏感,不做归一化容易梯度爆炸。
- 聚类分析(如客户分群):必须标准化。否则距离计算会被数值大的特征主导。
4.5 本章知识体系
下面这张图是我梳理的标准化与归一化的核心逻辑,帮你快速建立全局认知:
最后说一句,标准化不是银弹。我见过有人不管三七二十一上来就Min-Max,结果模型反而变差了。关键是要理解你的数据分布、模型类型、业务场景。做风控这么多年,我的体会是:没有最好的方法,只有最合适的方法。多试几种,对比一下效果,你就知道该选哪个了。
公众号:蓝海资料掘金营,微信deep3321