4. 单变量特征衍生:基于原始字段的加减乘除、比率、差值、排名等基础变换方法

单变量特征衍生是风控特征工程中最基础、最高效的环节。它不依赖外部数据或复杂模型,仅通过对单个原始字段进行数学变换、排序或分段,就能生成具有业务区分度的新特征。本章将系统讲解加减乘除、比率、差值、排名等核心变换方法,并给出风控场景下的适用条件与避坑指南。

4.1 加减乘除:四则运算的衍生逻辑

四则运算是最直接的数值变换方式,适用于连续型变量(如金额、天数、次数)。其核心思想是通过非线性映射或缩放,放大原始字段在风险分布上的差异。

运算类型 变换公式 风控应用场景 注意事项
加法 new_feat = x + c 偏移处理(如将负数金额转为正数) 常数 c 需根据业务含义设定,避免破坏分布
减法 new_feat = x - y 差值特征(如“应还金额 - 实还金额”) 确保 x 与 y 量纲一致,否则需先归一化
乘法 new_feat = x * y 交互强度(如“月收入 × 工作年限”) 警惕特征膨胀,避免引入共线性
除法 new_feat = x / y 比率特征(如“负债 / 收入”) 分母不能为零,需做平滑或截断处理
实战建议:在风控评分卡中,除法变换(比率)通常比加减法更稳定,因为它能消除量纲影响,使特征在不同客群间具有可比性。例如“月还款额 / 月收入”比单纯的“月还款额”更能反映还款压力。

4.2 比率与差值:风控中最常用的衍生形态

比率和差值特征在信贷风控中几乎无处不在,它们能直接刻画借款人的偿债能力、资金周转效率或行为异常程度。

4.2.1 比率特征

  • 负债收入比(DTI):总负债 / 月收入,衡量还款压力。
  • 信用卡使用率:已用额度 / 总授信额度,反映资金紧张程度。
  • 逾期率:逾期笔数 / 总借款笔数,刻画历史信用表现。
  • 收入波动比:近3个月收入标准差 / 近3个月收入均值,评估收入稳定性。

4.2.2 差值特征

  • 应还 - 实还:直接反映还款缺口,正值越大风险越高。
  • 申请时间 - 出生日期:计算年龄,是基础但有效的风控变量。
  • 本次借款金额 - 历史平均借款金额:检测借款行为突变。
  • 近1个月消费金额 - 近6个月平均消费金额:识别异常消费模式。
避坑提醒:差值特征容易受极端值影响。例如“应还 - 实还”若出现负值(多还),需确认业务含义是否合理。建议在衍生后做截断(如限制在 [0, 正无穷])或分箱处理。

4.3 排名与分位数:将数值转化为相对位置

排名特征不关心原始数值的绝对大小,只关注样本在全体中的相对顺序。这在风控中能有效消除不同客群间的量纲差异,尤其适合跨时间、跨渠道的样本对比。

方法 输出 风控用途 示例
升序排名 1, 2, 3, ..., N 识别“最小/最大”极端值 收入最低的10%客群
降序排名 N, N-1, ..., 1 突出“最高”风险样本 逾期天数最多的前5%
百分位排名 0~100 之间的连续值 标准化后入模,避免量纲影响 将“借款金额”转为百分位
分箱排名 1, 2, 3, 4, 5(等频分箱) 离散化后用于评分卡 将“年龄”分为5个等频段
关键区别:排名特征对异常值不敏感(因为只关心顺序),而原始数值特征对异常值敏感。在风控建模中,如果原始字段存在明显长尾分布(如“借款金额”),优先使用百分位排名或分箱排名,能显著提升模型稳定性。

4.4 单变量衍生流程:从原始字段到新特征

下图展示了单变量特征衍生的标准流程,从原始字段输入到最终特征输出,包含变换、验证、筛选三个核心阶段。

单变量特征衍生流程 原始字段 选择变换方法 加减乘除 / 比率 / 差值 / 排名 执行衍生计算 验证:缺失率 / 分布 / 单调性 筛选标准 缺失率 < 5% | IV > 0.02

4.5 实战案例:从“借款金额”衍生三个新特征

假设原始字段为 loan_amount(借款金额),我们通过三种不同变换生成新特征,并对比其风控效果。

import pandas as pd
import numpy as np

# 原始数据
df = pd.DataFrame({
    'loan_amount': [5000, 12000, 8000, 20000, 15000, 3000, 25000, 6000]
})

# 1. 对数变换(属于幂次变换,但常与四则运算配合使用)
df['log_loan'] = np.log1p(df['loan_amount'])

# 2. 比率变换:借款金额 / 月收入(假设月收入字段存在)
df['monthly_income'] = [8000, 15000, 10000, 25000, 18000, 5000, 30000, 7000]
df['loan_to_income'] = df['loan_amount'] / df['monthly_income']

# 3. 排名变换:百分位排名
df['loan_rank_pct'] = df['loan_amount'].rank(pct=True)

print(df[['loan_amount', 'log_loan', 'loan_to_income', 'loan_rank_pct']].head())
输出解读:
- log_loan 将长尾分布压缩为近似正态分布,适合线性模型。
- loan_to_income 比率值在 0.5~1.0 之间,直接反映借款人的杠杆水平。
- loan_rank_pct 将绝对金额转化为相对位置,消除不同时间段的金额通胀影响。

4.6 单变量衍生的常见陷阱与应对

陷阱 表现 应对策略
分母为零 除法特征出现无穷大或 NaN 加极小值平滑(如 x / (y + 1e-6))或业务截断
特征冗余 衍生特征与原始字段高度相关(r > 0.95) 计算相关系数矩阵,剔除冗余特征
分布偏移 训练集与测试集分布不一致 使用排名特征替代绝对数值,或做分位数标准化
业务无意义 衍生特征无法解释(如“年龄 × 借款金额”) 优先选择有业务逻辑支撑的变换(如比率、差值)
效率技巧:在风控建模初期,建议先批量生成 20~30 个单变量衍生特征(包括对数、平方根、比率、排名、分箱),然后通过 IV(信息量)或单变量 AUC 快速筛选,保留 IV > 0.02 的特征进入后续建模。这比逐个手动尝试更高效。

4.7 单变量衍生 vs. 多变量交叉衍生

单变量衍生只操作一个原始字段,而多变量交叉衍生涉及两个或更多字段的组合。下表对比两者的适用场景:

维度 单变量衍生 多变量交叉衍生
输入字段数 1 个 2 个及以上
特征数量 线性增长(每个字段可衍生 3~5 个) 组合爆炸(需谨慎控制)
可解释性 高(变换逻辑简单) 中低(需业务验证)
过拟合风险 低 高(尤其在小样本场景)
典型方法 对数、排名、比率、分箱 笛卡尔积、多项式、交叉分箱
建模原则:优先使用单变量衍生特征构建基线模型。只有当单变量特征无法区分风险时,再谨慎引入多变量交叉衍生,并配合 L1 正则化或特征选择控制维度。