变量衍生的意义与原则

说实话,刚入行那会儿我总觉得原始变量就够了——反正跑个逻辑回归,该出的系数都会出。结果呢?一个信贷模型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个跑出来的噪声。