4. 坏样本特征工程:特征构建思路、衍生变量生成、时间窗口特征、聚合特征

坏样本归因的核心挑战在于:坏样本(如欺诈、逾期、坏账)在原始数据中往往是稀疏、孤立且信号微弱的。特征工程的目标是将这些微弱信号放大,将原始数据转化为能够被模型有效识别的、具有强区分能力的特征。本章将系统阐述坏样本特征构建的四大核心模块:构建思路、衍生变量、时间窗口特征与聚合特征。

4.1 特征构建总体思路

坏样本特征构建并非简单的字段拼接,而是基于业务逻辑与数据分布的系统性工程。其核心思路遵循“业务驱动 + 数据探索”的双轮模式:

  • 业务驱动:从坏样本的典型行为模式出发(如短时间内频繁申请、设备篡改、关联网络异常),设计能够捕捉这些模式的特征。
  • 数据探索:通过统计分布、相关性分析、IV值(信息价值)筛选,验证特征的有效性,避免引入噪声。
避坑提示: 避免“为衍生而衍生”。每一个衍生变量都应回答一个具体的业务问题,例如“这个特征能否区分正常用户与坏用户在行为序列上的差异?”。

4.2 衍生变量生成

衍生变量是特征工程中最具创造性的部分,旨在从基础字段中挖掘出更深层的信息。常见的生成方法包括:

衍生方法 描述 坏样本场景示例
比率/占比 两个相关字段的比值,消除量纲影响 月还款额 / 月收入(负债收入比)
差值/偏移 字段与基准值的差异,反映异常波动 本次申请IP与历史常用IP的地理距离
排名/分箱 将连续变量离散化,捕捉非线性关系 将“近3个月申请次数”按分位数分为高、中、低三档
交叉组合 两个或多个类别字段的笛卡尔积 设备型号 × 操作系统版本(识别模拟器集群)
文本/序列编码 对非结构化数据进行特征提取 收货地址的文本长度、特殊字符占比、是否包含“代收点”
# 示例:Python 中生成负债收入比与排名特征
import pandas as pd
import numpy as np

# 假设 df 包含 'monthly_payment' 和 'monthly_income' 字段
df['debt_to_income_ratio'] = df['monthly_payment'] / (df['monthly_income'] + 1e-6)

# 对 'apply_count_3m' 进行分箱
df['apply_count_rank'] = pd.qcut(df['apply_count_3m'], q=4, labels=['low', 'medium', 'high', 'very_high'])

4.3 时间窗口特征

坏样本的行为往往具有时间上的聚集性或周期性。时间窗口特征通过设定不同的回溯周期,捕捉行为在时间维度上的动态变化。这是区分“长期稳定用户”与“突发性坏用户”的关键。

  • 固定窗口:如近7天、近30天、近90天内的行为统计量(均值、最大值、标准差)。
  • 滑动窗口:以当前时间点为基准,向前滑动N天,计算窗口内的行为趋势(如斜率、变化率)。
  • 衰减窗口:对历史行为赋予随时间衰减的权重(如指数衰减),近期行为权重更高。
关键指标: 对于坏样本,“近7天申请次数 / 近90天申请次数” 的比值往往显著高于正常用户,这反映了其“突击申请”的行为模式。
时间窗口特征构建示意图 现在 近7天 近30天 近90天 特征计算逻辑 对每个窗口内的行为(如申请次数、登录次数)计算:均值、最大值、标准差、趋势斜率

4.4 聚合特征

聚合特征是将多个维度的信息通过分组统计的方式压缩成一个或几个特征,常用于处理“一对多”关系的数据(如一个用户有多条交易记录)。聚合操作的核心是 GroupBy + Agg。

4.4.1 常见聚合统计量

聚合函数 业务含义 坏样本识别价值
count 事件发生频次 高频操作(如频繁修改密码)
sum 累计值 短时间内累计大额交易
mean 平均水平 平均每笔交易金额异常
std 波动程度 交易金额忽大忽小,无规律
nunique 唯一值数量 关联多个不同设备、IP、收货地址
first/last 首/末次行为 首次交易即大额,或末次交易为试探性小额

4.4.2 聚合层级与维度

聚合特征的价值在于选择合适的 分组键(Key) 和 聚合维度。常见的分组层级包括:

  • 用户级聚合:以 user_id 分组,聚合其所有历史行为。
  • 设备级聚合:以 device_id 分组,识别设备层面的异常(如一台设备关联多个用户)。
  • IP级聚合:以 ip_address 分组,发现 IP 层面的聚集性欺诈。
  • 时间+用户级聚合:如按“用户+日期”分组,计算每日行为统计量。
# 示例:用户级聚合特征生成
# 假设 df_trans 为交易流水表,包含 user_id, trans_amount, trans_time 等字段

user_agg_features = df_trans.groupby('user_id').agg(
    total_trans_count = ('trans_id', 'count'),
    total_trans_amount = ('trans_amount', 'sum'),
    avg_trans_amount = ('trans_amount', 'mean'),
    std_trans_amount = ('trans_amount', 'std'),
    unique_device_count = ('device_id', 'nunique'),
    unique_ip_count = ('ip_address', 'nunique'),
    last_trans_amount = ('trans_amount', 'last')
).reset_index()
注意数据泄露: 在构建聚合特征时,必须确保只使用当前时间点之前的数据。例如,在训练集上,不能使用未来的交易记录来聚合当前样本的特征。建议使用 时间戳严格排序 后的滑动窗口聚合。

4.5 特征构建流程总结

一个完整的坏样本特征工程流程通常遵循以下步骤:

  1. 基础数据清洗:处理缺失值、异常值、重复记录。
  2. 业务特征衍生:基于业务经验生成比率、差值、交叉组合等特征。
  3. 时间窗口计算:设定多个回溯窗口(7天/30天/90天),计算窗口内的统计量。
  4. 多维度聚合:在用户、设备、IP等层级进行聚合,生成高阶特征。
  5. 特征筛选与评估:通过IV值、相关性矩阵、特征重要性进行筛选,保留强相关、低冗余的特征。
坏样本特征工程核心流程 1. 基础数据清洗 2. 业务特征衍生 3. 时间窗口计算 4. 多维度聚合 5. 特征筛选评估 关键产出物 • 衍生变量清单(含业务含义) • 时间窗口特征集(含窗口参数) • 聚合特征表(含分组键与聚合函数)

通过以上系统化的特征构建,原本隐藏在原始数据中的坏样本行为模式将被转化为高信息密度的特征,为后续的模型训练与策略优化提供坚实的“弹药”。