4. 特征工程基础:交易金额、频率、对手方、时间窗口等基础特征提取
特征工程是连接原始交易数据与可疑推理模型的桥梁。原始交易日志中的字段(如交易时间、金额、账户ID)无法直接用于异常检测,必须通过领域知识将其转化为具有统计意义、行为表征能力和区分度的特征变量。本章聚焦于反洗钱场景下最核心的四类基础特征:金额特征、频率特征、对手方特征和时间窗口特征。
4.1 金额特征:异常值、整倍数与拆分模式
金额是可疑交易最直观的数值信号。洗钱者常利用特定金额模式规避监管,例如略低于大额报告阈值的“结构化交易”、整数倍转账、以及快速进出资金的“过桥”行为。
| 特征名称 | 计算方式 | 可疑信号 |
|---|---|---|
| 单笔金额偏离度 | (交易金额 - 账户历史均值) / 历史标准差 | Z-score > 3 或 < -3 |
| 金额整数倍标志 | 交易金额 % 10000 == 0 或 % 50000 == 0 | 频繁出现整万/整十万 |
| 接近阈值金额 | abs(交易金额 - 50000) < 1000 | 刻意规避大额报告 |
| 金额尾数分布 | 交易金额最后两位数字的频次统计 | 尾数集中在 00, 50, 99 |
| 累计净流量 | 当日/当周累计流入 - 累计流出 | 净流量接近零(过账) |
实战要点:金额特征必须结合账户历史基线。一个普通个人账户单笔转账50万元是强异常,但一个对公贸易账户同样金额可能属于正常经营。建议按账户类型(个人/对公/同业)分别计算统计基线。
4.2 频率特征:交易密度与突发性检测
频率特征刻画账户在单位时间内的交易活跃程度。洗钱账户往往呈现“长期休眠—突然高频—快速归零”的脉冲式行为模式。
- 交易笔数统计:过去1小时、24小时、7天内的交易总笔数。
- 交易间隔特征:相邻两笔交易的时间间隔均值、中位数、最小值、标准差。间隔极短(如<1秒)可能为程序化交易。
- 突发性指数:当前时段交易笔数 / 历史同期平均笔数。比值 > 5 视为突发活跃。
- 零交易天数占比:过去30天中交易笔数为0的天数比例。占比过高说明账户长期休眠。
# 示例:计算账户过去24小时交易笔数(Python伪代码)
import pandas as pd
def calc_tx_frequency(tx_df, account_id, lookback_hours=24):
now = pd.Timestamp.now()
cutoff = now - pd.Timedelta(hours=lookback_hours)
mask = (tx_df['account'] == account_id) & (tx_df['tx_time'] >= cutoff)
return mask.sum()
4.3 对手方特征:交易网络与关联图谱
对手方特征将单笔交易扩展为账户间的关联关系。洗钱网络通常涉及多级账户、循环转账和集中归集,这些模式在对手方维度上会留下明显痕迹。
| 特征名称 | 定义 | 计算逻辑 |
|---|---|---|
| 对手方唯一数 | 过去N天内交易的对手方数量 | len(set(对手方ID列表)) |
| 对手方集中度 | 交易金额最大的前3个对手方占比 | top3金额 / 总金额 |
| 新对手方标志 | 当前对手方是否从未在历史中出现 | 布尔值:True/False |
| 对手方风险等级 | 对手方账户的历史可疑评分 | 从风险名单或历史模型获取 |
| 循环交易检测 | A→B→C→A 的闭环路径 | 图算法:检测有向环 |
进阶技巧:对手方特征可与图神经网络(GNN)结合,将账户视为节点、交易视为边,自动学习可疑子图结构。但在基础特征阶段,建议先使用上述统计特征快速构建基线模型。
4.4 时间窗口特征:滑动窗口与周期模式
时间窗口特征通过聚合历史数据,将静态交易转化为动态行为序列。常见的窗口类型包括固定窗口(如过去24小时)、滑动窗口(如过去30笔交易)和周期窗口(如过去30天同一小时)。
# 滑动窗口特征提取示例(窗口大小=10笔交易)
def sliding_window_features(tx_df, window_size=10):
tx_df = tx_df.sort_values('tx_time')
features = []
for i in range(window_size, len(tx_df)):
window = tx_df.iloc[i-window_size:i]
feat = {
'window_mean': window['amount'].mean(),
'window_std': window['amount'].std(),
'window_max': window['amount'].max(),
'window_min': window['amount'].min(),
'window_sum': window['amount'].sum(),
'window_count': len(window),
'time_span': (window['tx_time'].max() - window['tx_time'].min()).total_seconds()
}
features.append(feat)
return pd.DataFrame(features)
时间窗口特征的核心价值在于捕捉行为趋势的变化。例如,一个账户过去30天的日均交易额为5万元,但最近3天日均交易额骤升至200万元,这种趋势变化是典型的可疑信号。
4.5 特征工程全景图
以下SVG图展示了从原始交易日志到基础特征向量的完整提取流程,以及四类特征之间的协同关系。
4.6 特征工程避坑指南
常见错误:
- 数据泄露:使用未来信息构造特征。例如用“当天总交易笔数”作为当天每笔交易的特征,实际上在交易发生时并不知道全天总量。正确做法是使用截止到当前时刻的历史窗口。
- 特征膨胀:盲目生成数百个特征,导致模型过拟合且难以解释。建议从20~30个核心特征起步,逐步迭代。
- 忽视时间衰减:30天前的交易与3分钟前的交易对当前行为的影响权重应不同。建议引入指数衰减权重或时间衰减函数。
4.7 本章小结
基础特征提取是可疑交易推理链路中承上启下的关键环节。金额特征捕捉数值异常,频率特征刻画行为节奏,对手方特征揭示网络关系,时间窗口特征追踪趋势变化。四类特征相互补充,共同构成后续模型训练的输入基底。在实际项目中,建议先对原始交易数据进行质量探查(缺失值、异常值、重复记录),再按上述框架逐类提取特征,最后通过相关性分析和特征重要性评估进行筛选。