特征工程基础:特征构建思路、数值型特征处理、类别型特征编码

各位同学,咱们今天聊聊特征工程。说实话,在风控建模这个行当里,我一直觉得特征工程比模型算法本身更重要。你想想看,再牛的模型,喂进去的是垃圾数据,吐出来的只能是垃圾结果。我做了这么多年风控,见过太多团队花大把时间调参,却忽略了最基础的特征处理,结果模型上线就崩。嗯,今天咱们就把这块地基打牢。

一、特征构建的核心思路

特征构建说白了就是「从原始数据里挖出能反映风险本质的信息」。我个人习惯把特征分成三类:

  • 基础特征:直接从数据表里拿过来的字段,比如年龄、收入、借款金额
  • 衍生特征:通过加减乘除、聚合统计造出来的,比如收入负债比、近3个月申请次数
  • 组合特征:把两个或多个字段交叉起来,比如「年龄×收入区间」这种

我在项目中遇到过最典型的例子:某次做现金贷评分卡,原始数据里只有「借款金额」和「还款期限」两个字段。单独看,这两个字段对违约的区分度都很一般。但当我构造出「月还款额 = 借款金额 / 还款期限」这个特征后,IV值直接翻了一倍。为什么?因为月还款额直接反映了用户的还款压力,这才是风控真正关心的东西。

核心原则:特征构建要围绕「业务逻辑」展开,别为了造特征而造特征。你造出来的每个特征,都应该能讲出一个「为什么它能反映风险」的故事。

二、数值型特征处理

数值型特征是最常见的,但处理起来坑也不少。我总结了几步常规操作:

1. 缺失值处理

千万别直接删掉缺失值!在风控场景里,缺失本身可能就是信息。比如用户没填「工作单位」,可能意味着他工作不稳定。我常用的处理方式:

  • 连续型变量:用中位数或均值填充,但我会额外加一个「是否缺失」的哑变量
  • 离散型变量:用众数填充,或者单独分一个「未知」类别

2. 异常值处理

我曾经遇到过一个极端案例:某个用户的「年收入」字段填了99999999,一看就是乱填的。这种异常值如果不处理,会把模型带偏。我的做法是:

  • 用箱线图或3σ原则识别异常值
  • 对异常值做截断处理(比如上限设为99%分位数)
  • 或者直接当成缺失值处理

3. 标准化与归一化

对于逻辑回归这类模型,数值范围差异太大会影响系数稳定性。我一般用Z-score标准化:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

但注意,决策树、随机森林这类树模型对数值范围不敏感,可以不做标准化。嗯,这里要提醒一下:标准化参数一定要在训练集上拟合,再应用到测试集,千万别混在一起算。

三、类别型特征编码

类别型特征处理是风控建模的重头戏。你想想看,像「职业」「学历」「婚姻状况」这些字段,模型不认识中文,必须转成数字。但怎么转,学问大了。

1. 独热编码(One-Hot Encoding)

最直接的方法,把每个类别变成一个0/1的哑变量。比如「婚姻状况」有「未婚」「已婚」「离异」三类,就生成三个新字段。

import pandas as pd
df_encoded = pd.get_dummies(df['婚姻状况'], prefix='婚姻')

但独热编码有个大问题:类别太多时会导致维度爆炸。我记得有一次处理「城市」字段,全国有300多个地级市,独热编码后直接多了300多列,模型训练慢得要死。所以我的经验是:类别超过10个的字段,慎用独热编码

2. WOE编码(Weight of Evidence)

这才是风控领域的王牌编码方式。WOE编码的核心思想是:用「坏样本占比 / 好样本占比」的对数来编码类别。说白了,就是看这个类别里的用户,违约风险是高于平均水平还是低于平均水平。

计算公式:

WOE = ln( (坏样本数/总坏样本) / (好样本数/总好样本) )

我在项目中用WOE编码处理「职业」字段时,发现「自由职业」这个类别的WOE值特别高(正数),说明这个群体的违约风险显著偏高。而「公务员」的WOE值很低(负数),风险较低。这种编码方式天然带有风险排序的含义,对逻辑回归模型特别友好。

个人经验:WOE编码前,一定要先对类别做分箱处理。比如「年龄」字段,不要直接用原始值算WOE,而是先分成「18-25」「26-35」「36-45」等区间,再对每个区间算WOE。这样能避免过拟合。

3. 两种编码的对比

对比维度 独热编码 WOE编码
维度变化 维度增加(类别数) 维度不变(1列)
适用模型 树模型、线性模型 逻辑回归(最佳)
风险解释性 弱(只是0/1) 强(直接反映风险高低)
类别过多时 维度爆炸,慎用 依然有效,推荐
缺失值处理 单独一列 单独算一个WOE值

避坑指南:我曾经犯过一个错误——在WOE编码时,直接用全量数据计算WOE值,然后建模。结果模型在验证集上表现很好,上线后却崩了。后来才发现,WOE编码的参数(比如每个类别的坏样本率)必须在训练集上计算,验证集和测试集要映射训练集的WOE值。否则就是数据泄露,模型会过拟合。

四、知识体系总览

下面这张图是我自己整理的本章知识结构,你可以对照着复习:

特征工程基础 特征构建思路 基础特征 衍生特征 组合特征 数值型特征处理 缺失值 异常值 标准化 类别型特征编码 独热编码 WOE编码 对比分析 核心原则:围绕业务逻辑,避免数据泄露 WOE编码是风控评分卡的首选编码方式

好了,特征工程这块的内容就讲到这里。记住一句话:好的特征能让简单的模型变强大,烂的特征能让复杂的模型变废物。你在实际项目中多练练,慢慢就能找到感觉。


蓝海数据掘金营,专注资料整理