3. 单变量衍生基础:基于业务逻辑的加减乘除运算,比率与差值构造

单变量衍生是特征工程中最基础、最直观的方法。它不依赖多个变量之间的复杂交互,而是通过对单个字段施加业务逻辑变换,生成新的特征。常见的操作包括四则运算(加减乘除)以及基于这些运算构造的比率与差值。本章将系统讲解这些方法的数学原理、适用场景及实现要点。

3.1 加减乘除运算的业务逻辑

四则运算在单变量衍生中通常用于对原始数值进行缩放、偏移或归一化处理。下表总结了每种运算的典型业务场景与数学形式:

运算 数学形式 典型业务场景 示例
加法 \( x' = x + c \) 偏移调整、消除负值、引入常数基准 将收入字段加 1 后取对数
减法 \( x' = x - c \) 去均值、中心化、计算偏离基准的程度 用户年龄减去行业平均年龄
乘法 \( x' = x \times k \) 单位转换、权重缩放、标准化到特定范围 将金额从元转换为万元(×0.0001)
除法 \( x' = x / d \) 归一化、比率构造、消除量纲影响 消费金额除以用户历史平均消费
实践提示:加减法主要用于调整分布位置,乘除法用于调整尺度。在金融风控模型中,常对收入、负债等字段先做除法(如收入/地区中位数)消除地域差异,再做减法(如减去行业均值)实现中心化。

3.2 比率构造:从绝对数值到相对关系

比率是除法运算在特征衍生中的核心应用。它将绝对数值转化为相对关系,使模型更容易捕捉到“比例”层面的规律。常见的比率类型包括:

  • 占比类:部分与整体的比值,如“信用卡消费占比 = 信用卡消费金额 / 总消费金额”。
  • 密度类:数值与单位量的比值,如“人均消费 = 总消费金额 / 用户数”。
  • 变化率类:增量与基期的比值,如“月增长率 = (本月值 - 上月值) / 上月值”。
  • 标准化比率:数值与统计基准的比值,如“收入倍数 = 用户收入 / 当地平均收入”。

比率构造的关键在于分母的选择。分母必须具有业务意义且不为零。当分母可能为零时,需要加入平滑项(如加 1 或加极小值)或进行特殊编码。

案例:信贷评分中的负债比率
原始字段:月收入(income)、月还款额(repayment)。
衍生特征:负债收入比(DTI)= repayment / income。
业务逻辑:DTI 越高,借款人还款压力越大,违约风险越高。该比率比单独使用 repayment 或 income 更具判别力。

3.3 差值构造:捕捉变化与偏离

差值是减法运算在特征衍生中的核心应用。它用于衡量数值的变化幅度或偏离程度。常见的差值类型包括:

  • 时间差值:同一实体在不同时间点的数值差,如“本月消费 - 上月消费”。
  • 基准差值:数值与某个固定基准的差,如“用户年龄 - 18”。
  • 统计差值:数值与群体统计量的差,如“用户收入 - 行业平均收入”。
  • 阈值差值:数值与业务阈值的差,如“信用分 - 600(及格线)”。

差值构造可以单独使用,也可以与比率结合形成“变化率”特征。例如,先计算差值(本月值 - 上月值),再除以基期值(上月值),就得到了增长率。

3.4 单变量衍生的完整流程

下图展示了从原始字段到衍生特征的标准流程,包含业务逻辑映射、运算执行与质量检查三个核心阶段。

单变量衍生标准流程 原始字段 income, age, amount 业务逻辑映射 确定运算类型与参数 运算执行 + - × ÷ 比率构造 占比 / 密度 / 变化率 差值构造 时间差 / 基准差 / 统计差 质量检查 缺失 / 异常 / 分布 检查分母是否为零 检查极端值影响

3.5 代码实现示例

以下 Python 代码展示了如何使用 Pandas 对单个字段进行比率与差值构造:

import pandas as pd
import numpy as np

# 示例数据
df = pd.DataFrame({
    'user_id': [1, 2, 3, 4],
    'income': [5000, 8000, 6000, 12000],
    'debt': [1500, 2000, 1800, 3000],
    'age': [25, 35, 28, 42],
    'monthly_spend': [2000, 3500, 2500, 5000]
})

# 比率构造:负债收入比
df['dti_ratio'] = df['debt'] / df['income']

# 比率构造:消费收入比
df['spend_income_ratio'] = df['monthly_spend'] / df['income']

# 差值构造:年龄偏离基准(基准=30岁)
df['age_deviation'] = df['age'] - 30

# 差值构造:消费与收入之差(绝对剩余)
df['income_minus_spend'] = df['income'] - df['monthly_spend']

# 组合构造:变化率(假设上月消费已知)
df['last_month_spend'] = [1800, 3200, 2400, 4800]
df['spend_growth_rate'] = (df['monthly_spend'] - df['last_month_spend']) / df['last_month_spend']

print(df[['user_id', 'dti_ratio', 'spend_income_ratio', 
          'age_deviation', 'income_minus_spend', 'spend_growth_rate']])

3.6 常见陷阱与避坑指南

⚠ 分母为零:在构造比率时,如果分母字段存在零值,会导致无穷大或缺失值。建议在运算前检查分母最小值,必要时添加平滑项:ratio = numerator / (denominator + 1e-6)。

⚠ 极端值放大:比率和差值对极端值敏感。例如,当分母非常小时,比率会变得极大。建议在衍生后对特征进行截断(winsorize)或分箱处理。

⚠ 业务含义丢失:不要为了衍生而衍生。每个衍生特征都应能解释其业务含义。例如,“收入减去年龄”虽然数学上可行,但缺乏直观的业务解释,通常不建议使用。

3.7 单变量衍生的效果评估

衍生完成后,需要从以下维度评估特征质量:

评估维度 检查内容 合格标准
缺失率 衍生特征中 NaN 的比例 < 5%
分布合理性 是否出现极端值或异常分布 无长尾拖尾超过 3 个标准差
业务可解释性 特征是否具有明确的业务含义 能清晰描述其反映的业务规律
与目标变量的相关性 与目标变量的 IV 值或相关系数 IV > 0.02 或相关系数显著

通过系统性地应用加减乘除运算,并合理构造比率与差值,可以显著提升原始字段的信息密度,为后续的分箱与模型训练打下坚实基础。