AI信贷审批系统搭建与调优实战100例 - 第4节
4. 特征工程
案例 4:数据标准化(Z-score)——消除量纲影响
目标:在信贷审批模型中,特征如“年收入(元)”与“信用分(300~850)”量纲差异巨大。若不处理,距离类模型(如KNN)或正则化模型(如Lasso)会偏向高数值特征。本案例使用 StandardScaler 实现Z-score标准化,使每个特征均值为0、标准差为1,消除量纲影响。
技术焦点:sklearn.preprocessing.StandardScaler 的 fit / transform / fit_transform 用法,以及标准化对模型系数的实际影响。
核心代码
import numpy as np
from sklearn.preprocessing import StandardScaler
# 模拟信贷审批特征:年收入(元),信用分(300-850),负债率(0-1)
X = np.array([
[85000, 720, 0.35],
[42000, 610, 0.62],
[120000, 780, 0.28],
[31000, 540, 0.80],
[65000, 690, 0.45]
])
# 1. 创建标准化器
scaler = StandardScaler()
# 2. 拟合并转换(Z-score)
X_scaled = scaler.fit_transform(X)
# 3. 查看标准化后的均值和标准差(近似0和1)
print("标准化后均值:", X_scaled.mean(axis=0).round(6))
print("标准化后标准差:", X_scaled.std(axis=0).round(6))
# 4. 关键参数:均值与标准差(用于新数据转换)
print("训练集均值:", scaler.mean_)
print("训练集标准差:", scaler.scale_)
# 5. 新样本(如新申请客户)使用同一scaler转换
new_customer = np.array([[90000, 700, 0.40]])
new_customer_scaled = scaler.transform(new_customer)
print("新客户标准化后:", new_customer_scaled)
# 6. 对比:标准化前Lasso系数偏向高量纲特征,标准化后系数更均衡
from sklearn.linear_model import Lasso
y = np.array([1, 0, 1, 0, 1]) # 是否批准(示例标签)
# 未标准化
lasso_raw = Lasso(alpha=0.01).fit(X, y)
print("未标准化系数:", lasso_raw.coef_)
# 标准化后
lasso_scaled = Lasso(alpha=0.01).fit(X_scaled, y)
print("标准化后系数:", lasso_scaled.coef_)
验证路径与预期现象
- 验证1:运行代码后,输出“标准化后均值”接近
[0,0,0](误差<1e-6),标准差接近[1,1,1]。 - 验证2:对比Lasso系数:未标准化时,
年收入的系数值远大于信用分(因为数值大);标准化后,各特征系数量级接近,模型不再被高数值特征主导。 - 验证3:新客户
[90000,700,0.4]标准化后,各特征值均落在约[-1,1]区间,说明已消除量纲影响。
迁移要点:在信贷审批流水线中,StandardScaler 必须在训练集上 fit,然后对验证集/测试集仅做 transform,避免数据泄露。对于树模型(如XGBoost)标准化非必需,但对线性模型、SVM、KNN和神经网络至关重要。