3. 数据准备与预处理:缺失值、异常值与特征选择

数据准备这步,看似基础,实际上最磨人。我见过不少团队在模型调优上花大量精力,结果回头一看,数据质量根本没过关——那后面的工作全白搭。信用评分模型尤其敏感,毕竟我们处理的可是真金白银的风控决策。今天咱们把三个硬骨头啃下来:缺失值、异常值、特征选择。

我个人习惯:在动手建模前,先花30%的时间做数据清洗和特征工程。这一步省不了,省了后面十倍的debug时间。
信用评分模型数据预处理流程 原始评分数据 缺失值处理 删除 行/列删除 填充 均值/中位数/模型 异常值处理 特征选择

3.1 缺失值处理

信用评分数据里,缺失几乎是常态。用户收入填不全、职业信息空白、甚至有些贷款记录就是不完整。遇到缺失,我的第一反应不是直接删,而是先搞清楚机制——随机缺失还是非随机缺失?

缺失类型特点处理策略
完全随机缺失 (MCAR)缺失与数据值无关可直接删除或简单填充
随机缺失 (MAR)缺失与其他变量有关推荐多重插补或模型预测
非随机缺失 (MNAR)缺失与自身值有关需业务干预,谨慎处理

我的实践套路:

  • 删除法:缺失率低于5%且样本量足够时,我直接删行。但要注意——如果缺失集中在某个客群,删了会引入偏差。我曾经在处理某银行数据时,发现逾期客户中收入字段缺失率高达30%,差点就全删了,结果一看,原来是因为逾期客户不愿填收入。保留缺失标记反而更合理。
  • 填充法:均值/中位数填充最简单,但会压缩方差。我更喜欢用KNN或回归模型填充,尤其对于连续型变量。举个例:用年龄、学历、职业预测收入缺失值,效果比简单填充好很多。
  • 单独标记:对于离散型变量(如职业),我习惯把缺失作为一个独立类别,比如“职业_未知”。这个技巧在信用评分里很管用,因为缺失本身可能就是一个风险信号。
关键指标:处理后的缺失率应<0.5%,并且不能破坏原始分布。我会用KS检验对比填充前后的分布,确保没有人为引入偏移。

3.2 异常值处理

信用评分里异常值最典型的情况:年收入填了1个亿、年龄200岁、逾期天数8000天……你想想看,这些值要是直接进模型,评分卡直接崩掉。异常值检测,我常用的手段有这三种:

  1. Z-Score法:假设数据正态,|z|>3的视为异常。适合征信分数、收入等近似正态的指标。
  2. IQR法:取Q1-1.5*IQR 到 Q3+1.5*IQR以外为异常。对非正态分布更鲁棒,我在处理授信额度时经常用。
  3. 业务规则法:比如年龄必须18-100,逾期天数不能超过贷款期限。这个最实在,因为有时统计方法会误杀有效值。

处理方式上,我不建议直接删除——异常值有时包含重要信息。比如高收入但大量逾期的人,可能是欺诈信号。我一般做截尾处理:将超过99%分位数的值替换为该分位数,低于1%的替换为1%分位数。这样既消除了极端影响,又保留了样本量。

我曾经踩过一个坑:做评分卡时,把模型训练集里所有异常值全删了,结果线上推理时遇到原本的异常值(比如极端高收入),模型直接失效打不出分。后来加上截尾逻辑,才解决。所以异常值处理要同时应用于训练和推理。

3.3 特征选择

特征选择,说白了就是挑出对信用评分最有用的变量,扔掉噪音。我们做调优,不是特征越多越好——特征多了,过拟合风险大,模型还跑得慢。我个人习惯三步走:

步骤方法说明
1. 过滤法方差阈值、相关系数、IV值快速剔除常量或低IV特征
2. 包裹法递归特征消除 (RFE)基于模型表现逐步剔除
3. 嵌入法Lasso、树模型特征重要性在训练过程中自动选择

信用评分场景下,我特别看重IV值(信息量)。IV值大于0.3表示强预测力,0.1-0.3中等,低于0.1基本可以放弃。举个例子,我曾经做一个消费金融评分卡,一开始有80个特征,经过IV筛选剩下25个,再用RFE缩减到12个。最后模型AUC从0.72提升到0.78,而且训练时间缩短了60%。

嗯,这里要注意一点:特征选择不能只看单变量,还要考虑多重共线性。我一般会先计算VIF,如果某个特征VIF>10,我会考虑合并或删除。尤其对于收入与负债率这类高度相关变量,留一个就够了。

我的避坑指南:特征选择过程中,千万不要直接用在测试集上评估效果。我习惯在交叉验证的每一折里重新做特征选择,防止data leakage。曾经有项目因为全量筛选再划分,导致验证指标虚高,上线后直接打脸。

小结

数据准备和预处理,是模型性能调优的真正起点。缺失值处理要分类型、异常值处理要兼顾统计和业务、特征选择要追求少而精。按这个顺序跑一遍,你手头的脏数据会变成一个干净、高效的评分输入。下一站,我们就可以直接进入模型训练了。