4. 特征工程入门:特征分类、提取与初步筛选
在支付风控评分通道中,原始数据(交易流水、设备指纹、用户画像)无法直接输入模型。特征工程是将原始数据转化为模型可理解、可区分的数值化表达的过程。本章聚焦三类核心特征的处理方法、提取技巧与初步筛选策略。
4.1 特征分类:数值型、类别型、时间型
支付风控特征按数据性质可分为三大类,每类对应不同的预处理与编码方式:
| 特征类型 | 典型字段 | 核心问题 | 常用处理方法 |
|---|---|---|---|
| 数值型 | 交易金额、登录次数、设备年龄 | 量纲差异、长尾分布、异常值 | 标准化/归一化、对数变换、分箱、截尾 |
| 类别型 | 支付渠道、银行卡BIN、国家代码 | 高基数、无序/有序、缺失值 | 独热编码、标签编码、目标编码、频次编码 |
| 时间型 | 交易时间、注册时间、上次登录时间 | 周期性、趋势性、时间间隔 | 时间戳拆解、周期特征、滑动窗口统计 |
实战提示: 支付风控中,金额类特征通常呈现严重右偏分布(大量小额+少量大额)。直接使用原始金额会导致模型对大额样本过拟合。建议先做
log(1+x) 变换,再结合分箱(如 0-100, 100-1000, 1000-10000, 10000+)生成离散特征。
4.2 特征提取方法
特征提取是从原始数据中构造新特征的过程,是风控模型效果提升的关键环节。以下为支付场景最常用的三种提取方法:
4.2.1 聚合统计特征
基于用户、设备、IP 等维度,在历史时间窗口内做统计聚合:
- 窗口长度: 过去 1 小时、24 小时、7 天、30 天
- 统计量: 交易次数、金额总和、金额均值、金额标准差、最大/最小值
- 比率特征: 失败率、退款率、大额交易占比
# 示例:计算用户过去24小时交易次数与金额均值
import pandas as pd
df['tx_time'] = pd.to_datetime(df['tx_time'])
df = df.sort_values(['user_id', 'tx_time'])
# 滑动窗口聚合
df['tx_count_24h'] = df.groupby('user_id')['tx_id'].transform(
lambda x: x.rolling('24h', min_periods=1).count()
)
df['amt_mean_24h'] = df.groupby('user_id')['amount'].transform(
lambda x: x.rolling('24h', min_periods=1).mean()
)
4.2.2 时序与周期特征
从时间戳中提取周期性信号,捕捉异常交易时段:
- 基础拆解: 小时、星期几、是否周末、是否节假日
- 周期编码: 使用 sin/cos 变换处理小时、月份等循环变量
- 间隔特征: 当前交易距上次交易的时间间隔(秒/分钟)
# 时间拆解与周期编码示例
df['hour'] = df['tx_time'].dt.hour
df['day_of_week'] = df['tx_time'].dt.dayofweek
df['is_weekend'] = df['day_of_week'].isin([5, 6]).astype(int)
# 周期编码:将小时映射到单位圆
df['hour_sin'] = np.sin(2 * np.pi * df['hour'] / 24)
df['hour_cos'] = np.cos(2 * np.pi * df['hour'] / 24)
4.2.3 交叉组合特征
将两个或多个特征组合,捕获非线性交互关系:
- 类别×类别: 支付渠道 × 国家代码 → 新类别
- 数值×数值: 金额 × 设备年龄 → 交互项
- 类别×数值: 按支付渠道分组后的金额均值
效率建议: 交叉组合特征数量会随原始特征数平方增长。建议先通过业务经验锁定 5-10 组高潜力交叉对,避免维度爆炸。例如:“支付渠道 × 是否跨境” 比 “支付渠道 × 浏览器版本” 更有风控区分度。
4.3 特征重要性初步筛选
特征提取后通常会产生数百维特征,直接建模会导致过拟合与计算开销。需通过初步筛选保留高区分度特征。常用方法分为三类:
4.3.1 过滤法(Filter)
独立于模型,基于统计指标快速排序:
- 方差阈值: 删除方差接近 0 的常值特征
- 相关系数: 计算特征与目标变量(是否欺诈)的 Pearson 或 Spearman 相关系数
- 信息价值(IV): 风控领域经典指标,IV > 0.02 为弱预测力,> 0.1 为中等,> 0.3 为强
4.3.2 包裹法(Wrapper)
以模型效果为评价标准,迭代搜索最优特征子集:
- 递归特征消除(RFE): 每次训练后删除权重最小的特征,递归至指定数量
- 前向/后向搜索: 逐步添加或删除特征,监控 AUC 或 KS 变化
4.3.3 嵌入法(Embedded)
在模型训练过程中自动完成特征选择:
- 树模型特征重要性: LightGBM / XGBoost 输出的 feature_importance(gain / split)
- L1 正则化(Lasso): 将不重要特征的系数压缩为 0
避坑指南: 支付风控中,不要仅依赖 IV 值筛选特征。某些高 IV 特征(如“交易金额=0”)可能只在特定样本中有效,泛化能力差。建议将 IV 筛选与树模型重要性交叉验证,保留两者均排名靠前的特征。
4.4 实战要点总结
| 阶段 | 核心动作 | 输出产物 | 常见陷阱 |
|---|---|---|---|
| 特征分类 | 识别数值/类别/时间型,确定预处理策略 | 特征类型清单 | 将有序类别(如风险等级)当作无序类别处理 |
| 特征提取 | 聚合统计、周期编码、交叉组合 | 扩展特征集(通常 50-200 维) | 窗口大小选择不当导致数据泄露 |
| 初步筛选 | 过滤法快速降维 + 嵌入法精排 | Top 20-50 特征子集 | 仅依赖单一指标(如 IV)忽略特征稳定性 |
推荐工作流: 先使用过滤法(IV + 方差阈值)将特征从 200 维降至 80 维,再训练 LightGBM 获取 feature_importance,保留 Top 30 维进入模型训练。此流程在保持 AUC 的同时,训练时间可缩短 60% 以上。