4. 单笔交易特征:交易金额、交易时间、交易频次、交易类型等基础特征的提取与衍生

单笔交易特征是支付风控特征工程中最基础、最直接的信号来源。每一笔交易在到达风控系统时,都会携带一组原始字段,如交易金额、交易时间、交易类型等。这些原始字段虽然能提供一定的风险判别能力,但往往过于粗糙,需要通过特征提取与特征衍生来释放其真正的区分度。

4.1 基础特征提取:从原始字段到可用信号

原始交易字段通常以字符串或数值形式存在,不能直接用于模型训练。基础特征提取的目标是将这些字段转化为标准化、可计算的数值特征。

原始字段 提取方式 输出特征示例 风控意义
交易金额 直接取数值,单位统一为分或元 txn_amount_cents 大额交易通常风险更高
交易时间 解析为时间戳,提取小时、星期、月份 txn_hour, txn_weekday 凌晨交易、非工作日交易异常概率高
交易类型 One-Hot 编码或 Label Encoding is_purchase, is_transfer 转账类交易欺诈风险高于消费类
交易渠道 编码为类别特征 channel_id 不同渠道的安全等级差异大
交易币种 映射为是否本币 is_foreign_currency 跨境交易风险显著上升
实战建议:交易时间特征不要只保留时间戳,一定要拆解出小时、星期、是否节假日等周期性特征。凌晨 2:00-5:00 的交易,即使金额很小,也值得给予更高的风险权重。

4.2 交易金额的深度衍生

交易金额本身是一个连续型数值,但直接使用原始值容易受到极端值影响。常见的衍生方式包括:

  • 对数变换:log_amount = log(txn_amount + 1),压缩长尾分布,使特征更接近正态分布。
  • 金额分箱:将金额划分为若干区间,如 [0, 100), [100, 1000), [1000, 10000), [10000, +∞),转化为有序类别特征。
  • 金额与阈值的比值:如 amount / avg_amount_last_7d,衡量当前交易金额相对于用户历史习惯的偏离程度。
  • 金额尾数特征:提取金额的小数部分或最后几位数字,如 amount % 100,用于识别测试交易或试探性交易。
# 金额衍生特征计算示例(Python 伪代码)
def derive_amount_features(txn_amount, user_avg_amount_7d):
    features = {}
    features['log_amount'] = np.log(txn_amount + 1)
    features['amount_bin'] = pd.cut([txn_amount], bins=[0, 100, 1000, 10000, np.inf], labels=[0,1,2,3])[0]
    features['amount_ratio_to_avg'] = txn_amount / (user_avg_amount_7d + 1e-6)
    features['amount_tail'] = txn_amount % 100
    return features

4.3 交易时间的周期性与异常检测

交易时间特征的核心价值在于捕捉周期性和异常时段。单一的时间戳无法体现用户的行为模式,必须通过衍生来暴露风险信号。

关键衍生方向:
  1. 时间切片:将一天划分为 4 个时段(凌晨、上午、下午、深夜),每个时段赋予不同的风险基准分。
  2. 距上次交易间隔:time_since_last_txn,间隔极短(如 < 1 秒)可能为机器批量攻击。
  3. 是否在用户活跃时段:基于用户历史交易时间分布,判断当前交易是否落在其高频时段内。
  4. 节假日标记:结合日历数据,标记当前是否为法定节假日或购物节(如双11、黑五)。
交易时间特征衍生体系 原始交易时间戳 时间切片特征 间隔特征 行为模式特征 小时分箱 星期/月份 距上次交易 距上次同类型 是否活跃时段 凌晨交易风险评分 批量攻击检测 行为画像偏离 核心逻辑:时间特征的价值在于对比—— 当前交易时间 vs 用户历史习惯 vs 全局风险时段

4.4 交易频次与交易类型的组合衍生

单笔交易的频次特征无法独立存在,必须结合时间窗口和交易类型进行组合衍生。频次特征的核心是速率和密度。

衍生特征 计算方式 典型风险场景
1 分钟内交易次数 COUNT(txn) OVER (1min 滑动窗口) 卡片测试攻击(Card Testing)
1 小时内同类型交易次数 COUNT(txn WHERE type='transfer') OVER (1h) 批量转账洗钱
1 小时内不同商户数 COUNT(DISTINCT merchant_id) OVER (1h) 账户盗用后快速消费
1 小时内失败交易次数 COUNT(txn WHERE status='fail') OVER (1h) 密码暴力破解
交易类型切换频率 类型变更次数 / 时间窗口 异常行为模式切换
避坑提醒:频次特征的时间窗口选择非常敏感。窗口太短(如 1 秒)容易漏掉慢速攻击;窗口太长(如 24 小时)会稀释短期异常信号。建议同时构建多个窗口(1min、5min、1h、24h),让模型自动学习最佳尺度。

4.5 交易类型与金额的交叉衍生

单一维度的特征往往不够,交叉衍生能产生更强的非线性信号。常见的交叉组合包括:

  • 类型 × 金额分箱:如 transfer_large_amount,标记大额转账交易。
  • 类型 × 时间:如 purchase_night,标记深夜购物行为。
  • 类型 × 频次:如 high_freq_small_purchase,标记高频小额试探交易。
  • 类型 × 渠道:如 transfer_from_mobile,标记移动端转账。
# 交叉衍生特征示例
def cross_derive_features(txn):
    features = {}
    # 大额转账标记
    if txn['type'] == 'transfer' and txn['amount'] > 500000:
        features['is_large_transfer'] = 1
    else:
        features['is_large_transfer'] = 0

    # 深夜消费标记
    if txn['type'] == 'purchase' and (txn['hour'] < 6 or txn['hour'] >= 23):
        features['is_night_purchase'] = 1
    else:
        features['is_night_purchase'] = 0

    # 高频小额试探标记(需结合历史窗口)
    if txn['txn_count_1h'] > 5 and txn['amount'] < 100:
        features['is_high_freq_small'] = 1
    else:
        features['is_high_freq_small'] = 0

    return features

4.6 特征工程流水线:从原始数据到特征向量

在实际生产环境中,单笔交易特征的提取与衍生需要构建一个可复用的流水线(Pipeline),确保每一笔交易都能实时产出相同的特征集合。

单笔交易特征工程流水线 原始交易 JSON / 消息 字段解析 类型转换/清洗 基础特征提取 金额/时间/类型 特征衍生 交叉/统计/变换 特征向量 输出 流水线关键设计原则 1. 幂等性:同一笔交易在任何时间重算,特征值必须一致 2. 实时性:单笔特征计算延迟必须 < 10ms,不能阻塞风控决策 3. 可回溯:历史交易重跑时,特征逻辑不能依赖未来数据 4. 可观测:每个特征必须有明确的业务含义和计算日志

4.7 本章小结

单笔交易特征是支付风控特征工程的基石。本章从基础特征提取出发,深入讲解了交易金额、交易时间、交易频次、交易类型的深度衍生与交叉组合方法。核心要点包括:

  • 原始字段必须经过标准化和编码才能进入模型。
  • 金额特征需要做对数变换、分箱和偏离度计算。
  • 时间特征的价值在于对比用户历史习惯和全局风险时段。
  • 频次特征必须结合时间窗口和交易类型,窗口选择要覆盖多尺度。
  • 交叉衍生能产生更强的非线性信号,是特征工程的高价值区域。
  • 生产环境必须构建幂等、实时、可回溯的特征工程流水线。
下一阶段预告:在掌握单笔交易特征之后,第 5 章将进入用户画像特征的构建,包括用户注册信息、历史行为统计、设备指纹等维度,敬请期待。