4. 特征工程入门:原始特征提取、特征变换、特征分箱、特征选择的基本方法

特征工程是评分卡建模中决定模型上限的关键环节。在支付风控场景中,原始交易数据往往包含大量噪声、缺失值和极端分布,直接输入模型会导致过拟合或泛化能力不足。本节系统讲解特征工程的四个核心步骤:原始特征提取、特征变换、特征分箱和特征选择,并给出支付风控场景下的实战技巧。

4.1 原始特征提取:从交易日志中挖掘信号

原始特征提取是指从支付系统产生的原始字段中直接构造可用特征。支付风控的原始数据通常来自交易流水、设备指纹、用户画像和外部黑名单等数据源。常见的原始特征类型如下表所示:

特征类别 典型字段 提取方式 风控含义
交易属性 金额、时间、币种、支付渠道 直接取值 识别大额、深夜、跨境等异常
设备指纹 IP、设备ID、浏览器UA、GPS 哈希编码、类别映射 检测设备聚集、模拟器、代理IP
用户画像 注册时长、历史交易次数、绑卡数 聚合统计 评估用户成熟度与信用
行为序列 点击流、页面停留时间、输入速度 滑动窗口统计 识别机器人或脚本操作
外部数据 黑名单命中、征信评分、运营商数据 API 查询后二值化 补充第三方风险信号
实战提示:支付风控中,时间窗口聚合特征(如“过去1小时内该IP的交易次数”)比单笔特征更具区分度。建议优先提取 5分钟、1小时、24小时 三个窗口的统计量(均值、最大值、标准差)。

4.2 特征变换:让数据分布更适配模型

原始特征往往存在偏态分布、量纲差异或非线性关系,直接使用会降低线性模型(如逻辑回归)的拟合效果。常用的特征变换方法包括:

  • 对数变换:对金额、交易次数等长尾分布特征取 log(1+x),压缩极端值影响。
  • 标准化/归一化:Z-score 标准化(均值为0,标准差为1)或 Min-Max 归一化,消除量纲差异。
  • 幂变换:Box-Cox 或 Yeo-Johnson 变换,使数据更接近正态分布。
  • 离散化:将连续特征按业务阈值转为有序类别(如金额分档:小额/中额/大额)。
  • 交互特征:对两个特征做乘除或交叉组合,捕捉协同效应(如“金额 × 距离”)。
评分卡场景建议:逻辑回归评分卡对特征线性关系敏感,建议优先使用 对数变换 + 标准化 的组合。对于树模型(如 XGBoost),特征变换的必要性较低,但分箱仍有助于提升可解释性。
特征变换流程示意图 原始特征 对数变换 标准化 离散化 交互特征 变换后特征集 说明:支付风控中,金额特征通常先做对数变换,再与时间窗口特征做交互,最后标准化后进入模型。

4.3 特征分箱:提升模型稳健性与可解释性

特征分箱(Binning)是将连续变量或高基数离散变量划分为有限个区间(箱),是评分卡建模的核心技术。分箱的主要目的包括:处理非线性关系、降低异常值影响、满足评分卡单调性要求、提升模型可解释性。

4.3.1 常用分箱方法对比

分箱方法 原理 优点 缺点 适用场景
等距分箱 按数值区间等宽划分 简单直观 易受异常值影响,箱内样本不均 分布均匀的连续特征
等频分箱 按样本数量等频划分 箱内样本量均衡 可能将相似值分到不同箱 长尾分布特征
决策树分箱 用单变量决策树寻找最优切分点 自动捕捉非线性关系 容易过拟合 特征与目标强相关时
卡方分箱 基于卡方检验合并相邻区间 保证箱内目标分布一致性 计算复杂度较高 评分卡单调性要求
业务分箱 按业务经验设定阈值 可解释性最强 依赖专家经验 有明确业务规则的特征
避坑提醒:分箱后每个箱的样本量不应少于总样本的 5%,且坏样本率(逾期/欺诈率)应呈现单调递增或递减趋势。若出现“倒U型”或“锯齿状”分布,说明分箱不合理,需要合并或调整切分点。

4.3.2 分箱后的特征编码

分箱完成后,需要将类别型箱位转换为数值型输入模型。评分卡中常用的编码方式包括:

  • WOE编码(Weight of Evidence):计算每个箱的 WOE = ln(好样本占比 / 坏样本占比),直接作为特征值。WOE 编码天然支持逻辑回归的线性假设,是评分卡的标准做法。
  • IV值筛选:计算每个特征的 IV(Information Value),IV < 0.02 表示无预测力,0.02~0.1 为弱,0.1~0.3 为中,>0.3 为强。
  • 独热编码:将每个箱位展开为 0/1 哑变量,适用于树模型。
# Python 示例:使用 scikit-learn 进行等频分箱 + WOE 编码
import pandas as pd
import numpy as np
from sklearn.preprocessing import KBinsDiscretizer

# 假设 df 包含特征 'amount' 和目标 'is_fraud'
df = pd.DataFrame({
    'amount': [100, 200, 1500, 3000, 500, 8000, 12000, 200, 450, 6000],
    'is_fraud': [0, 0, 1, 1, 0, 1, 1, 0, 0, 1]
})

# 等频分箱(5箱)
kbd = KBinsDiscretizer(n_bins=5, encode='ordinal', strategy='quantile')
df['amount_bin'] = kbd.fit_transform(df[['amount']]).astype(int)

# 计算每个箱的 WOE
def calc_woe(df, feature, target):
    total_good = (df[target] == 0).sum()
    total_bad = (df[target] == 1).sum()
    woe_dict = {}
    for bin_val in sorted(df[feature].unique()):
        subset = df[df[feature] == bin_val]
        good = (subset[target] == 0).sum()
        bad = (subset[target] == 1).sum()
        good_dist = good / total_good if total_good > 0 else 0.0001
        bad_dist = bad / total_bad if total_bad > 0 else 0.0001
        woe = np.log(good_dist / bad_dist)
        woe_dict[bin_val] = woe
    return woe_dict

woe_map = calc_woe(df, 'amount_bin', 'is_fraud')
df['amount_woe'] = df['amount_bin'].map(woe_map)
print(df[['amount', 'amount_bin', 'amount_woe']])

4.4 特征选择:去芜存菁,防止维度灾难

特征选择是从原始特征集中筛选出对模型预测贡献最大的子集,避免过拟合、降低训练成本、提升模型泛化能力。支付风控场景中,特征维度可能高达数百甚至上千,必须进行系统性筛选。

4.4.1 特征选择三大方法

方法类别 代表算法 原理 优点 缺点
过滤法 IV值、卡方检验、互信息、方差阈值 独立于模型,基于统计指标排序 计算快,适合高维数据 忽略特征间交互
包裹法 递归特征消除(RFE)、前向/后向搜索 以模型性能为评价指标 考虑特征组合效果 计算开销大,易过拟合
嵌入法 L1正则化(Lasso)、树模型特征重要性 在模型训练过程中自动选择 效率与效果平衡 依赖模型假设

4.4.2 支付风控特征选择实战流程

  1. 缺失率过滤:删除缺失率 > 70% 的特征(支付风控中设备指纹类特征常缺失严重)。
  2. 方差过滤:删除方差接近 0 的常数特征(如 99% 样本为同一值的渠道字段)。
  3. 相关性过滤:计算特征间 Pearson 或 Spearman 相关系数,删除相关系数 > 0.8 的冗余特征对,保留与目标相关性更高的一方。
  4. IV值筛选:保留 IV > 0.02 的特征,对 IV > 0.5 的特征需警惕过拟合,建议结合业务判断。
  5. 模型重要性排序:使用 LightGBM 或 XGBoost 训练一轮,按 feature_importance 保留 Top N 特征。
  6. 业务合规审查:删除涉及用户隐私或监管禁止使用的特征(如身份证号、精确GPS坐标)。
特征选择六步实战流程 ①缺失率过滤 ②方差过滤 ③相关性过滤 ④IV值筛选 ⑤模型重要性 ⑥业务合规审查 最终特征子集(20~50维) 支付风控特征选择经验阈值 缺失率 > 70% → 删除 | 方差 < 0.01 → 删除 | 相关系数 > 0.8 → 保留与目标相关更高者 IV < 0.02 → 删除 | IV 0.02~0.1 → 弱保留 | IV 0.1~0.3 → 强保留 | IV > 0.5 → 警惕过拟合 最终特征维度建议控制在 20~50 维,兼顾模型性能与可解释性

4.5 特征工程实战避坑清单

核心原则:特征工程不是一次性工作,需要与模型评估迭代进行。每次添加或变换特征后,必须重新验证模型在 OOT(跨时间)样本上的稳定性。
  • 数据泄露:避免使用未来信息构造特征(如用“交易是否成功”预测“是否欺诈”,因为成功状态在决策之后)。
  • 特征穿越:时间窗口特征必须基于历史数据计算,不能包含当前交易之后的信息。
  • 过度分箱:分箱数不宜过多(建议 3~8 箱),否则每个箱的样本量过少,统计意义下降。
  • 忽略业务逻辑:纯统计筛选可能删除业务上重要的特征(如“是否绑定银行卡”IV值低但业务意义重大),建议保留 Top 5 业务特征。
  • 特征冗余:高度相关的特征会导致模型共线性问题,逻辑回归中尤其需要关注 VIF(方差膨胀因子)< 10。