2. AML基础概念
在进入滚动窗口交易聚合特征工程之前,必须先建立对反洗钱(Anti-Money Laundering,AML)领域的基本认知。特征工程不是孤立的数据处理技巧,它服务于一个明确的业务目标:从海量交易中识别出具有洗钱风险的可疑行为。如果对AML的定义、监管逻辑和识别流程缺乏理解,再精巧的特征设计也可能偏离方向。
一、反洗钱的基本定义与核心逻辑
反洗钱是指通过一系列制度、流程和技术手段,预防、识别和报告可能涉及洗钱活动的交易与行为。洗钱本身是将非法所得通过多层金融操作掩盖来源、伪装性质,最终使其看似合法的过程。典型的洗钱路径可分为三个阶段:
- 处置阶段:将非法资金注入金融体系,如分散存入多个账户、购买高价值商品。
- 离析阶段:通过复杂交易掩盖资金来源,如多层转账、跨境汇款、频繁兑换。
- 整合阶段:将清洗后的资金以合法形式回流,如投资、购房、企业经营。
AML工作的核心逻辑是:在无法直接获取犯罪证据的前提下,通过交易行为模式识别异常,进而触发人工调查与上报。这意味着AML本质上是一个基于行为特征的异常检测问题,而非简单的规则匹配。
二、监管要求与合规框架
全球AML监管体系以金融行动特别工作组(FATF)建议为基准,各国在此基础上形成本地化法规。对金融机构而言,监管要求通常包括客户尽职调查(CDD)、交易记录保存、大额交易报告、可疑交易报告(STR/SAR)以及持续监控。以下为常见监管要求清单:
| 监管要求 | 核心内容 | 对特征工程的影响 |
|---|---|---|
| 客户尽职调查 | 核实客户身份、业务目的、资金来源 | 需要客户静态属性与交易行为关联 |
| 交易记录保存 | 完整保存交易流水至少5年 | 为滚动窗口聚合提供数据基础 |
| 大额交易报告 | 超过阈值的交易需自动上报 | 金额类特征需保留原始值与聚合值 |
| 可疑交易报告 | 对异常行为主动识别并上报 | 依赖多维度行为特征与模型评分 |
| 持续监控 | 对客户交易进行动态跟踪 | 滚动窗口特征天然适配动态监控 |
合规红线:可疑交易报告通常有严格的时限要求(如发现后24至48小时内上报)。特征工程与模型推理必须嵌入实时或准实时链路,离线批量计算只能作为辅助。
三、可疑交易识别流程
可疑交易识别并非单一步骤,而是一个从数据采集到报告提交的闭环流程。典型流程如下:
- 数据采集与清洗:整合交易流水、客户信息、账户属性、外部名单等数据源。
- 规则初筛:基于监管阈值和业务经验设置硬规则,如单笔金额超限、高频转账等。
- 特征计算:在滚动窗口内聚合交易行为,生成金额、频次、对手方、时间间隔等特征。
- 模型评分:使用机器学习模型对特征进行打分,输出风险概率或异常分数。
- 警报生成与排序:将高分交易或账户生成警报,按风险优先级排序。
- 人工调查:合规分析师复核警报,判断是否确认为可疑。
- 报告提交:确认可疑后,按规定格式向监管机构提交STR/SAR。
- 反馈与优化:将调查结果回流,用于规则调整和模型迭代。
流程中的第3步“特征计算”正是本课程的核心。滚动窗口交易聚合特征工程直接决定了模型能否捕捉到洗钱行为的时序模式,如“短时间内多笔小额转入后集中转出”这类典型离析行为。
四、特征工程在AML中的定位
特征工程在AML体系中处于承上启下的位置。向上,它承接监管要求和业务规则,将合规逻辑转化为可计算的数值;向下,它为模型提供输入,直接影响警报的准确率和召回率。可以这样理解:规则定义“看什么”,特征工程决定“怎么看”,模型决定“怎么判断”。
在滚动窗口场景下,特征工程需要回答以下关键问题:
- 窗口长度如何选择?7天、30天还是90天?不同窗口捕捉不同周期的行为模式。
- 聚合维度有哪些?按账户、按对手方、按交易类型、按渠道分别聚合。
- 聚合统计量如何设计?金额总和、交易笔数、平均金额、最大单笔、标准差、离散度等。
- 时序特征如何表达?交易间隔的均值与方差、窗口内首末交易时间差、夜间交易占比等。
- 如何避免数据泄漏?滚动窗口必须严格基于历史数据,不能引入未来信息。
以下是一个滚动窗口聚合特征的简化计算示例,展示如何从原始交易流水中生成账户级特征:
# 假设交易表结构:account_id, trans_time, amount, direction, counterparty
# 滚动窗口:7天,按账户聚合
window_spec = "7 days"
features = transactions.groupby("account_id").rolling(window_spec, on="trans_time").agg(
trans_count=("amount", "count"),
total_amount=("amount", "sum"),
avg_amount=("amount", "mean"),
max_amount=("amount", "max"),
std_amount=("amount", "std"),
in_count=("direction", lambda x: (x == "IN").sum()),
out_count=("direction", lambda x: (x == "OUT").sum()),
unique_counterparties=("counterparty", "nunique")
)
# 派生特征
features["in_out_ratio"] = features["in_count"] / (features["out_count"] + 1)
features["amount_cv"] = features["std_amount"] / (features["avg_amount"] + 1e-6)
核心原理:滚动窗口聚合的本质是将时间序列交易转化为固定维度的行为画像。窗口滑动时,每个时间点都能获得“过去N天”的行为快照,从而支持实时或准实时的风险判断。这种转化使模型能够同时利用金额、频次、对手方多样性和时序规律,远优于单一规则阈值。
五、常见误区与复盘
在AML特征工程实践中,初学者容易陷入以下误区:
- 误区一:窗口越长越好。过长的窗口会稀释近期异常信号,且计算成本高。应根据业务场景选择多尺度窗口组合。
- 误区二:只关注金额。洗钱行为常通过拆分金额规避阈值,频次、对手方数量和交易间隔往往更具区分度。
- 误区三:忽视数据泄漏。在滚动窗口中误用未来数据会导致离线评估虚高,上线后效果骤降。
- 误区四:特征与监管脱节。特征设计必须能解释给合规人员,否则难以通过模型验证和监管审查。
复盘一个典型场景:某账户在30天内收到来自15个不同对手方的多笔小额转入,随后在3天内集中转出至2个境外账户。若仅看单笔金额,均未触发大额报告阈值;但滚动窗口特征中的“对手方数量激增”“转入转出时间差缩短”“夜间交易占比升高”等指标会显著偏离正常水平,从而被模型捕获。这正是特征工程在AML中的价值所在。
理解AML基础概念、监管要求和识别流程,是后续滚动窗口特征设计的前提。特征工程不是炫技,而是将合规逻辑翻译为模型可理解的语言,最终服务于可疑交易的精准识别与及时上报。