3. 数据准备与预处理:缺失值、异常值与特征选择
数据准备这步,看似基础,实际上最磨人。我见过不少团队在模型调优上花大量精力,结果回头一看,数据质量根本没过关——那后面的工作全白搭。信用评分模型尤其敏感,毕竟我们处理的可是真金白银的风控决策。今天咱们把三个硬骨头啃下来:缺失值、异常值、特征选择。
3.1 缺失值处理
信用评分数据里,缺失几乎是常态。用户收入填不全、职业信息空白、甚至有些贷款记录就是不完整。遇到缺失,我的第一反应不是直接删,而是先搞清楚机制——随机缺失还是非随机缺失?
| 缺失类型 | 特点 | 处理策略 |
|---|---|---|
| 完全随机缺失 (MCAR) | 缺失与数据值无关 | 可直接删除或简单填充 |
| 随机缺失 (MAR) | 缺失与其他变量有关 | 推荐多重插补或模型预测 |
| 非随机缺失 (MNAR) | 缺失与自身值有关 | 需业务干预,谨慎处理 |
我的实践套路:
- 删除法:缺失率低于5%且样本量足够时,我直接删行。但要注意——如果缺失集中在某个客群,删了会引入偏差。我曾经在处理某银行数据时,发现逾期客户中收入字段缺失率高达30%,差点就全删了,结果一看,原来是因为逾期客户不愿填收入。保留缺失标记反而更合理。
- 填充法:均值/中位数填充最简单,但会压缩方差。我更喜欢用KNN或回归模型填充,尤其对于连续型变量。举个例:用年龄、学历、职业预测收入缺失值,效果比简单填充好很多。
- 单独标记:对于离散型变量(如职业),我习惯把缺失作为一个独立类别,比如“职业_未知”。这个技巧在信用评分里很管用,因为缺失本身可能就是一个风险信号。
3.2 异常值处理
信用评分里异常值最典型的情况:年收入填了1个亿、年龄200岁、逾期天数8000天……你想想看,这些值要是直接进模型,评分卡直接崩掉。异常值检测,我常用的手段有这三种:
- Z-Score法:假设数据正态,|z|>3的视为异常。适合征信分数、收入等近似正态的指标。
- IQR法:取Q1-1.5*IQR 到 Q3+1.5*IQR以外为异常。对非正态分布更鲁棒,我在处理授信额度时经常用。
- 业务规则法:比如年龄必须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,我会考虑合并或删除。尤其对于收入与负债率这类高度相关变量,留一个就够了。
小结
数据准备和预处理,是模型性能调优的真正起点。缺失值处理要分类型、异常值处理要兼顾统计和业务、特征选择要追求少而精。按这个顺序跑一遍,你手头的脏数据会变成一个干净、高效的评分输入。下一站,我们就可以直接进入模型训练了。