特征工程基础:什么是特征工程、在信用评分中的重要性
这一章,我们聊聊最底层的东西。
很多同学刚接触信用评分,上来就调模型参数。LR不行换XGBoost,XGBoost不行换神经网络。折腾半天,AUC一点没涨。为什么?因为数据没处理好,特征还是那堆原始字段。说白了,你拿一堆生土豆去炒菜,锅再好也白搭。
什么是特征工程?
特征工程,就是把原始数据转换成模型能理解、能利用的数值化信息的过程。我个人习惯把它比喻成“给模型准备食材”。模型本身是个厨师,它不关心你从哪买的菜,只关心切好、洗净、调味好的成品。
你想想看,原始数据里可能有身份证号、地址、公司名称、日期、文本描述……这些模型根本吃不下。得把它们拆成数字:年龄、收入、距离、词频、节假日标志等等。这个转换过程,就是特征工程的核心。
特征工程包含哪些活儿?我列个清单:
- 数据清洗:缺失值、异常值、重复记录的处理。别小看这一步,我见过太多项目因为漏了一个负值收入,整条信贷模型崩盘。
- 特征构建:从已有字段派生出新字段。比如用“月收入”除以“月支出”得到“偿债比”。
- 特征变换:取对数、标准化、分箱等。把偏态分布拉平,把量纲统一。
- 特征选择:从一堆特征里挑出有用的,扔掉噪音。这一步常被忽略,但直接影响模型稳定性和解释性。
- 特征编码:把类别变量变成数值。比如职业、学历,用独热编码或目标编码。
你看,这些步骤按顺序走下来,才叫完整的特征工程。只做其中一两项,那叫“半成品”。
为什么信用评分这么依赖特征工程?
信用评分是个特殊场景。它要预测的是“人”的未来行为,但原始数据里都是过去行为的记录。两者之间隔着一条看不见的河。特征工程就是搭桥。
举个例子:客户在银行的“月均存款余额”是个原始字段。但“过去6个月存款余额的标准差”和“当月余额相比上月的变化率”,这两类特征能更好地刻画客户的资金波动情况。而资金波动是逾期风险的重要信号。你不做特征工程,模型只能看到静态余额,错失大量信息。
信用评分的特征还有几个“硬约束”:
- 可解释性要求高:银行、监管、客户都需要知道为什么分数低。特征必须是可解释的,不能是黑盒。
- 样本不均衡:坏客户占比通常不到5%。这时候特征质量比模型复杂度更重要。好的特征能让模型在少量坏样本上也能学到信号。
- 时间稳定性:去年有效的特征,今年可能失效。我在做消费贷场景时,就遇到过“夜间交易次数”这个特征,疫情期间突然暴涨,差点导致模型偏移。
特征工程在信用评分中的具体角色
我们可以把整个信用评分建模过程画成一条流水线。下面这张图能帮你理清特征工程的位置:
从图里你能看到,特征工程卡在原始数据和模型之间。它不像模型训练那样“一键跑出结果”,却直接决定了模型的天花板。
信用评分还有个特殊点:特征不但要有预测力,还要符合监管逻辑。比如你不能用“性别”直接做特征(歧视问题)。但你可以用“该性别群体在历史贷款中的平均违约率”做个交叉特征?不行,那也间接使用了敏感信息。这些都是特征工程层面就要解决的合规问题。
特征工程的主要输出物
做完特征工程,你会得到一张“特征宽表”。每一列是一个特征,每一行是一个客户(一次申请或一个时间窗口)。宽表的列名和含义,就是你送给模型的所有“食材清单”。
下面这张表列出一个典型信用评分特征宽表的部分字段:
| 特征名 | 类型 | 原始来源 | 说明 |
|---|---|---|---|
| age | 数值型 | 身份证号 | 申请时年龄 |
| income_to_debt_ratio | 数值型 | 月收入/月负债 | 偿债能力指标,通过特征构建得到 |
| num_inquiries_6m | 计数型 | 征信查询记录 | 近6个月征信被查次数 |
| occupation_encoded | 数值型 | 职业文本 | 目标编码或WOE编码后的值 |
| avg_balance_6m | 数值型 | 银行流水 | 聚合特征,6个月平均余额 |
这张表看起来简单,但每一列背后可能都经历过几十行代码的加工。别忘了检查数据的分布、缺失率、异常值。我习惯每个特征生成后,先用箱线图扫一眼,再用描述性统计卡阈值。
小结
特征工程不是“数据预处理”的别名。它是建模的灵魂。在信用评分这个领域,数据质量参差不齐,业务规则复杂,监管严格,所以特征工程的价值格外突出。
你要记住:
- 原始数据是砖块,特征工程才是盖房子的手艺。
- 好特征可以让简单模型(LR)跑赢复杂模型(深度网络)在无特征工程时的效果。
- 做特征工程时,带着业务理解和合规意识,才能输出经得起时间考验的评分卡。
好,这一章我们理清了特征工程是什么以及为什么重要。接下来你会看到具体的特征清洗、构建、变换方法。我建议你先停一停,找一份真实的信贷数据集,试着找出5个你认为有用的原始字段,然后想想可以衍生出哪些新特征。动手,才是最好的学习。