4、特征工程:时间窗口特征、统计聚合特征、基于业务规则的衍生特征

在异常交易检测中,原始交易流水通常只包含交易ID、时间戳、金额、商户类型等基础字段。直接将这些原始字段输入模型,往往难以捕捉欺诈行为的隐蔽模式。特征工程的核心任务是将原始数据转化为能够显著区分正常与异常交易的高维特征空间。本章聚焦三类最有效的特征构建方法:时间窗口特征、统计聚合特征以及基于业务规则的衍生特征。

4.1 时间窗口特征

时间窗口特征通过分析交易在特定时间范围内的行为模式,捕捉短时高频、周期性等异常信号。窗口类型通常分为滑动窗口、会话窗口和日历对齐窗口。

窗口类型 定义 典型应用场景
滑动窗口 以当前交易为终点,向前回溯固定时长(如1小时、24小时) 检测短时间内频繁交易、金额累计超限
会话窗口 以用户登录或设备激活为起点,到登出或超时结束 同一会话内多笔小额试探交易
日历对齐窗口 按自然日、周、月划分,与业务结算周期对齐 跨日对敲交易、月末突击消费
实践建议:滑动窗口的时长选择需结合业务经验。支付类场景常用5分钟、1小时、24小时三档;跨境交易场景建议增加7天窗口以覆盖资金归集周期。

以下代码展示了如何基于PySpark为每笔交易生成1小时滑动窗口内的交易次数与金额总和:

from pyspark.sql import functions as F, Window

window_spec = (
    Window.partitionBy("user_id")
    .orderBy("transaction_time")
    .rangeBetween(-3600, 0)  # 1小时 = 3600秒
)

df = df.withColumn("txn_count_1h", F.count("transaction_id").over(window_spec))
df = df.withColumn("amount_sum_1h", F.sum("amount").over(window_spec))
注意:窗口计算时需处理数据倾斜问题。对于高频交易用户,建议对窗口特征进行分位数截断或对数变换,避免极端值主导模型训练。
时间窗口特征计算流程 时间窗口特征计算流程 原始交易流水 窗口定义 聚合计算 窗口特征 窗口参数示例 • 滑动窗口:partitionBy(user_id) + orderBy(time) + rangeBetween(-3600, 0) • 聚合函数:count(transaction_id), sum(amount), avg(amount), stddev(amount) • 输出字段:txn_count_1h, amount_sum_1h, amount_avg_1h, amount_std_1h

4.2 统计聚合特征

统计聚合特征从全局或分组视角描述用户的历史行为分布,帮助模型识别偏离用户个人基线的异常交易。常用的聚合统计量包括集中趋势、离散程度、分布形状以及分位数特征。

  • 集中趋势:均值、中位数、众数——反映用户典型交易金额。
  • 离散程度:标准差、方差、极差、变异系数——衡量交易金额波动性。
  • 分布形状:偏度、峰度——检测金额分布是否出现长尾或尖峰。
  • 分位数:P25、P50、P75、P95——对极端值鲁棒的位置度量。
关键指标:变异系数(CV = 标准差 / 均值)是检测金额异常波动的敏感指标。正常用户CV通常小于1.0,而盗刷账户因试探性交易常出现CV > 2.0。

以下SQL示例展示了如何计算每个用户过去30天的交易统计特征:

SELECT
    user_id,
    COUNT(transaction_id) AS txn_total_30d,
    AVG(amount) AS amount_mean_30d,
    STDDEV(amount) AS amount_std_30d,
    PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY amount) AS amount_median_30d,
    (STDDEV(amount) / NULLIF(AVG(amount), 0)) AS amount_cv_30d
FROM transactions
WHERE transaction_time >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY user_id;

4.3 基于业务规则的衍生特征

业务规则特征将领域知识直接编码为模型可理解的数值或类别变量。这类特征通常具有强解释性,能够快速捕获已知的欺诈模式。

规则类型 业务逻辑 衍生特征示例
地理异常 交易IP所在地与收货地址距离超过阈值 is_geo_anomaly (0/1), geo_distance_km
设备指纹 同一设备关联多个用户ID device_user_count, is_device_shared
时间异常 交易时间在凌晨3:00-5:00 is_night_txn, hour_of_day
金额规则 交易金额接近整数阈值(如9999、19999) amount_roundness, is_just_below_threshold
频次规则 同一商户连续交易超过3笔 merchant_consecutive_count, is_burst_txn
避坑指南:业务规则特征容易引入数据泄露。例如,使用“交易是否被风控拦截”作为特征会导致未来信息泄露。应仅使用交易发生时已存在的知识,如历史设备关联数、历史地址变更记录。
业务规则特征生成架构 业务规则特征生成架构 原始交易字段 规则引擎 衍生特征 规则明细与特征映射 规则1:IP与收货地址距离 → is_geo_anomaly, geo_distance_km 规则2:设备关联用户数 → device_user_count, is_device_shared 规则3:金额整数阈值检测 → amount_roundness, is_just_below 规则4:凌晨交易时段 → is_night_txn, hour_of_day 规则5:商户连续交易 → merchant_consecutive_count

4.4 特征组合与筛选

完成三类特征构建后,通常需要进行特征组合与筛选,避免维度爆炸和多重共线性。推荐采用以下策略:

  1. 特征重要性排序:使用LightGBM或XGBoost的内置特征重要性,保留Top 50~100特征。
  2. 相关性分析:计算特征间Pearson相关系数,剔除相关系数 > 0.95的冗余特征对。
  3. 业务验证:与风控专家共同审查Top特征的业务合理性,剔除统计显著但业务无意义的特征。
  4. 在线回测:使用历史数据模拟实时推理,验证特征计算延迟是否满足毫秒级要求。
效率提示:时间窗口特征和统计聚合特征建议在离线批处理阶段预计算并存入特征存储(Feature Store),在线推理时直接查询,避免重复计算带来的延迟开销。