变量衍生的意义与原则
说实话,刚入行那会儿我总觉得原始变量就够了——反正跑个逻辑回归,该出的系数都会出。结果呢?一个信贷模型AUC死活上不去,0.62封顶。后来跟业务聊才知道,“近3个月消费金额”和“近3个月消费笔数”单独看都不强,但把它们一除,变成“平均每笔消费金额”,一下子就抓到了那群“突然大额消费”的逾期客户。
嗯,这就是变量衍生的意义。
为什么必须做变量衍生?
我习惯从三个角度去理解这件事——说白了就是:信息、形态、稳定。
| 维度 | 问题 | 衍生能做什么 |
|---|---|---|
| 信息压缩 | 单个变量携带信息有限 | 组合/比值/聚合,挖掘隐藏模式 |
| 非线性捕捉 | 线性模型吃不下拐点/阈值 | 分桶、交叉、窗口函数,模拟非线性 |
| 稳定性修复 | 原始变量分布漂移快 | 比例/排名/时间差分,抵抗环境变化 |
举个例子。我曾经管过一个现金贷项目,逾期率跟“用户年龄”的线性关系很弱——年轻人爱借,中年人也会借。但当我衍生出“年龄 vs 家庭收入”的交叉特征后,发现25岁以下收入超过1.5万的人群逾期率极低,反而是同年龄段收入5000以下的人群逾期率翻了4倍。这就是交叉衍生带来的区分度。
不是变量越多越好。一个业务含义清晰的衍生变量,顶过10个瞎凑的交叉项。
方法论选择:该用什么招?
我自己把衍生方法分成三大流派,你想想看——
- 统计流:均值、方差、最大最小值、排名、Z-score。适合快速扫描,但容易脱离业务。
- 业务流:人工经验强相关的公式,比如“月收入/月还款额”、“近6个月逾期总天数/12个月历史”。我经常跟风控同事一起画变量草图,聊着聊着就冒出一个好特征。
- 时间流:滑动窗口聚合(近7天/30天/90天消费笔数)、差分(当月 - 上月)、占比(当月/近3月均值)。这是时序风控的命根子。
用哪个,取决于你的数据形态和模型类型。如果是XGBoost,大量单调衍生(比如排名、分位)反而会降低树的利用率;如果是逻辑回归,每种非线性衍生都要单独做证据权重编码。我这里有一个不成熟的经验——上线初期多用业务流+时间流,后期再拿统计流补漏。
衍生之前先用
groupby + agg 跑一遍单变量IV(信息量)。如果原始变量IV < 0.02,优先尝试比值类衍生,往往能直接拉到0.1以上。
业务理解才是天花板
你可能会问:能不能直接上自动化特征工程?AutoFeature工具一大堆。我试过不少,效果嘛——生成上千个特征,70%是噪音。
原因很简单:机器不懂“为什么”。比如“用户三个月内被催收次数”这个变量,如果手动衍生,你会同时考虑“是否来自同一机构”、“催收后还款情况”等上下文。但自动化工具通常只做加减乘除、取对数、做分箱,完全忽略因果结构。
我记得跟一个做车贷的朋友聊,他们的首逾率跟“车辆品牌”和“贷款金额”的交互关系非常强。业务上是因为某些品牌的二手车流通性差,如果贷款金额还高,违约后处置困难。他们手动衍生了一个“品牌流通性指数 × 贷款金额”,模型提升明显。你让AutoML去猜这个,它猜一年都猜不出来。
1. 过度衍生导致特征共线。一口气衍生出200个变量,结果模型方差膨胀系数(VIF)爆表。后来强制每次衍生不超过5个强业务关联特征,再逐步叠加。
2. 衍生变量时间穿越。用未来的数据计算过去窗口的特征——这是在作弊你懂吧。比如用“整个观察期的总消费”去预测第3个月的逾期。必须严格切分时间窗。
你看这个流程:原始数据 → 业务理解 → 方法选择 → 生成 → 筛选分箱。业务理解永远是第一关。我见过太多团队拿到数据直接跑自动化,跑出来的东西根本没法跟业务解释。风控模型不是黑盒,每一笔拒绝背后都是对真实用户的判断。变量衍生如果不能映射到业务逻辑,那它在线上早晚会失灵。
✅ 衍生是为了“挖出原始变量里藏着的信息”。
✅ 方法跟着业务走,不是跟着工具走。
✅ 宁可少,也要精——一个懂业务的衍生变量顶100个跑出来的噪声。