特征工程基础:反洗钱中的特征构建与质量评估

特征工程是反洗钱(AML)模型能否有效识别可疑交易的核心环节。原始交易数据往往包含大量噪声、缺失值和冗余信息,直接输入模型会导致过拟合或漏报。本章系统讲解特征工程在反洗钱中的重要性、三大特征类型及其质量评估标准,为后续特征选择与对照实验奠定基础。

一、特征工程在反洗钱中的重要性

反洗钱场景下,特征工程直接决定模型对洗钱模式的刻画能力。原始交易日志中的字段(如交易金额、时间戳、对手方账号)无法直接反映洗钱行为的本质特征,必须通过特征工程转化为具有业务含义的指标。

核心价值: 好的特征工程能将“交易数据”转化为“行为画像”,使模型能够区分正常交易与洗钱交易在金额分布、时间规律、网络关系上的差异。
维度 原始数据问题 特征工程解决方式
数据稀疏性 单笔交易无法判断异常 聚合统计(均值、峰值、标准差)
时序依赖 时间戳无直接业务含义 滑动窗口、频次、间隔特征
关系网络 对手方账号孤立存在 图特征(出入度、环检测)
类别编码 交易类型为离散字符串 目标编码、频次编码

二、反洗钱特征类型详解

根据数据形态和业务含义,反洗钱特征可分为数值型、类别型和时序型三大类。每类特征需要不同的预处理和衍生策略。

2.1 数值型特征

数值型特征是反洗钱模型中最基础的特征类型,包括交易金额、账户余额、交易笔数等可直接量化的指标。常见衍生方式包括:

  • 对数变换: 对金额取 log(1+x),缓解长尾分布对模型的影响。
  • 分箱离散化: 将连续金额划分为“小额/中额/大额”区间,增强对阈值型洗钱模式的捕捉。
  • 比率特征: 如“单笔金额/日均金额”、“现金交易占比”,反映交易偏离度。
# 数值型特征衍生示例(Python伪代码)
import numpy as np

def derive_numeric_features(df):
    df['amount_log'] = np.log1p(df['transaction_amount'])
    df['amount_to_avg_ratio'] = df['transaction_amount'] / df['avg_daily_amount']
    df['cash_ratio'] = df['cash_amount'] / df['total_amount']
    return df

2.2 类别型特征

类别型特征包括交易类型(转账、取现、汇款)、客户行业、国家代码等离散值。反洗钱场景下,类别特征常出现高基数(如数千个对手方账号)问题,需特殊处理:

编码方式 适用场景 反洗钱注意事项
独热编码 低基数类别(<10) 避免维度爆炸,如交易类型
目标编码 高基数类别(如对手方ID) 需配合交叉验证防止标签泄露
频次编码 稀有类别处理 可结合黑名单权重调整
嵌入向量 深度模型中的类别特征 需大量训练数据支撑

2.3 时序型特征

洗钱行为往往在时间维度上呈现特定模式,如“短时间内频繁交易”、“深夜大额转账”、“周期性小额试探”。时序型特征的核心在于捕捉时间窗口内的行为变化:

  • 滑动窗口统计: 过去1小时/24小时/7天内的交易次数、总金额、最大金额。
  • 时间间隔特征: 相邻两笔交易的时间差,用于识别“快速交易”模式。
  • 周期性特征: 交易时间在一天中的时段(凌晨/白天/深夜)、一周中的星期几。
  • 趋势特征: 交易金额的移动平均线、斜率变化,反映资金流动的突然加速。
实战建议: 时序特征窗口大小的选择需结合业务规则。例如,洗钱团伙常利用“24小时”作为监管观察窗口,因此24小时滑动窗口特征对识别“化整为零”交易尤为有效。
反洗钱特征类型与衍生关系 数值型特征 类别型特征 时序型特征 衍生方法 • 对数变换 • 分箱离散化 • 比率特征 • 聚合统计 编码方式 • 独热编码 • 目标编码 • 频次编码 • 嵌入向量 窗口策略 • 滑动窗口统计 • 时间间隔特征 • 周期性特征 • 趋势特征 特征衍生核心原则 数值型特征需关注分布形态与异常值;类别型特征需处理高基数与稀有类别; 时序型特征需结合业务窗口与洗钱行为的时间规律。

三、特征质量评估标准

并非所有衍生特征都能提升模型性能。反洗钱场景下,特征质量评估需从以下四个维度进行量化判断:

评估维度 量化指标 反洗钱业务含义 合格阈值参考
覆盖度 非空值比例 特征在样本中是否普遍可用 > 80%
区分度 IV值(信息量) 特征区分正常与可疑交易的能力 IV > 0.02
稳定性 PSI(群体稳定性指数) 特征分布在不同时间窗口是否一致 PSI < 0.1
相关性 Pearson / Spearman 特征之间是否存在冗余 |r| < 0.8
注意: 反洗钱场景中,部分特征虽然IV值较高(如“与黑名单账户交易次数”),但若覆盖度极低(仅0.1%样本有值),则实际建模价值有限。特征评估需综合多个维度,不可仅依赖单一指标。

3.1 覆盖度评估

覆盖度衡量特征在数据集中的可用性。反洗钱数据常因数据源缺失、字段未采集等原因导致特征空值。对于覆盖度低于60%的特征,除非业务意义极其明确,否则建议剔除或使用缺失值填充策略。

3.2 区分度评估(IV值)

IV(Information Value)是衡量特征对二分类目标变量区分能力的经典指标。计算时将特征分箱后,比较各箱中正负样本占比的差异:

# IV值计算示例
def calculate_iv(feature, target):
    # feature: 特征值, target: 0/1标签
    df = pd.DataFrame({'feature': feature, 'target': target})
    df['bin'] = pd.qcut(df['feature'], q=10, duplicates='drop')
    
    grouped = df.groupby('bin')['target'].agg(['count', 'sum'])
    grouped['good'] = grouped['count'] - grouped['sum']
    grouped['bad'] = grouped['sum']
    
    grouped['pct_good'] = grouped['good'] / grouped['good'].sum()
    grouped['pct_bad'] = grouped['bad'] / grouped['bad'].sum()
    
    grouped['woe'] = np.log(grouped['pct_good'] / grouped['pct_bad'])
    grouped['iv'] = (grouped['pct_good'] - grouped['pct_bad']) * grouped['woe']
    
    return grouped['iv'].sum()

3.3 稳定性评估(PSI)

PSI(Population Stability Index)用于监控特征分布随时间的变化。反洗钱模型上线后,若特征分布发生漂移(如监管政策变化导致交易金额整体上升),模型性能会快速衰减。PSI计算方式与IV类似,但比较的是同一特征在两个时间窗口的分布差异。

3.4 相关性评估

高相关性特征会导致模型共线性问题,降低可解释性并增加过拟合风险。反洗钱特征中,“交易总金额”与“交易平均金额×交易次数”往往高度相关,需通过相关性矩阵识别并保留业务意义更强的特征。

特征质量评估四维流程 ① 覆盖度 非空值比例 > 80% ② 区分度 IV值 > 0.02 ③ 稳定性 PSI < 0.1 ④ 相关性 |r| < 0.8 四维全部通过 → 保留特征 特征淘汰与处理策略 覆盖度不足 → 剔除或使用缺失值填充(均值/中位数/业务默认值) 区分度不足 → 尝试分箱优化或特征交叉;稳定性不足 → 监控漂移并定期重训

四、反洗钱特征工程实战要点

结合上述特征类型与质量评估标准,反洗钱特征工程在实际项目中需注意以下要点:

  • 业务驱动优先: 特征衍生应基于洗钱风险场景(如拆分交易、快进快出、跨境流动),而非盲目堆砌统计量。
  • 时间窗口对齐: 时序特征的计算窗口需与监管报告周期(如T+1)保持一致,避免使用未来信息。
  • 类别特征防泄露: 目标编码必须在训练集内进行交叉验证计算,防止测试集信息泄露导致模型性能虚高。
  • 特征监控常态化: 反洗钱模型上线后,需定期计算PSI和覆盖度,及时发现特征漂移并触发模型更新。