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 交易时间的周期性与异常检测
交易时间特征的核心价值在于捕捉周期性和异常时段。单一的时间戳无法体现用户的行为模式,必须通过衍生来暴露风险信号。
关键衍生方向:
- 时间切片:将一天划分为 4 个时段(凌晨、上午、下午、深夜),每个时段赋予不同的风险基准分。
- 距上次交易间隔:
time_since_last_txn,间隔极短(如 < 1 秒)可能为机器批量攻击。 - 是否在用户活跃时段:基于用户历史交易时间分布,判断当前交易是否落在其高频时段内。
- 节假日标记:结合日历数据,标记当前是否为法定节假日或购物节(如双11、黑五)。
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),确保每一笔交易都能实时产出相同的特征集合。
4.7 本章小结
单笔交易特征是支付风控特征工程的基石。本章从基础特征提取出发,深入讲解了交易金额、交易时间、交易频次、交易类型的深度衍生与交叉组合方法。核心要点包括:
- 原始字段必须经过标准化和编码才能进入模型。
- 金额特征需要做对数变换、分箱和偏离度计算。
- 时间特征的价值在于对比用户历史习惯和全局风险时段。
- 频次特征必须结合时间窗口和交易类型,窗口选择要覆盖多尺度。
- 交叉衍生能产生更强的非线性信号,是特征工程的高价值区域。
- 生产环境必须构建幂等、实时、可回溯的特征工程流水线。
下一阶段预告:在掌握单笔交易特征之后,第 5 章将进入用户画像特征的构建,包括用户注册信息、历史行为统计、设备指纹等维度,敬请期待。