4. 实验组与对照组定义:划分方法与数据泄露防范

在AML模型对照实验中,实验组与对照组的清晰定义是评估新模型或新特征是否真正有效的基石。错误的划分会导致评估结果失真,而数据泄露则是AML实验中最常见、最隐蔽的错误来源。本章将系统讲解划分原则、具体方法以及数据泄露的防范策略。

4.1 实验组与对照组的基本概念

角色 定义 典型示例
实验组 应用了新模型或新特征的样本集合,用于验证改进效果 使用GNN图神经网络进行交易链路分析的模型
对照组 使用基线模型或无新增特征的样本集合,作为比较基准 使用传统规则引擎+逻辑回归的现有模型
核心原则:实验组与对照组必须在同一时间窗口、同一数据源、同一评估指标下进行比较,唯一变量是“是否应用了新模型/新特征”。

4.2 划分方法:三种主流策略

根据AML业务场景和数据特点,推荐以下三种划分方法:

  1. 时间序列划分(推荐用于交易流数据)
    • 按时间顺序切分:前70%数据用于训练,后30%用于测试
    • 实验组与对照组使用完全相同的训练/测试时间窗口
    • 避免使用未来信息预测过去(时间泄露)
  2. 随机分层划分(推荐用于客户画像数据)
    • 按客户风险等级、交易量、地域等维度进行分层抽样
    • 确保实验组与对照组在各分层中的分布一致
    • 使用train_test_split(stratify=y)实现
  3. 账户级划分(推荐用于反洗钱团伙检测)
    • 以账户或客户ID为最小划分单元
    • 同一账户的所有交易必须全部进入训练集或全部进入测试集
    • 防止同一账户的交易同时出现在训练和测试中
实战建议:在AML场景中,优先使用时间序列划分或账户级划分。随机划分容易破坏交易的时间依赖性和账户的关联性,导致模型效果被高估。

4.3 数据泄露的常见类型与防范

数据泄露是AML对照实验的“头号杀手”。以下表格总结了三种最常见的泄露类型:

泄露类型 描述 AML场景示例 防范措施
时间泄露 使用未来信息预测过去 用T+1天的账户冻结标签训练T天的交易模型 严格按时间戳切分,禁止回溯
特征泄露 特征中包含目标变量的未来信息 使用“是否被调查”作为特征,而调查发生在交易之后 特征工程只使用历史窗口内的数据
分组泄露 同一实体的数据同时出现在训练和测试集 同一客户的部分交易在训练集,部分在测试集 按客户ID或账户ID进行分组划分
⚠️ 高危警示:在AML模型中,特征泄露是最隐蔽的。例如,使用“交易对手是否被列入黑名单”作为特征时,如果黑名单的更新日期晚于交易日期,就构成了特征泄露。务必检查每个特征的时间戳是否严格早于或等于交易时间。

4.4 实验组与对照组的划分流程

以下SVG图展示了从原始数据到实验组/对照组划分的完整流程:

实验组与对照组划分流程 原始交易数据 数据清洗与特征工程 选择划分策略(时间/分层/账户级) 数据分割 实验组(新模型/新特征) 对照组(基线模型/无特征)

4.5 避免数据泄露的代码实现

以下代码展示了如何安全地进行时间序列划分和账户级划分:

# 示例1:时间序列划分(AML交易数据)
import pandas as pd
from sklearn.model_selection import train_test_split

# 假设df包含交易数据,'txn_time'为交易时间戳
df = df.sort_values('txn_time')
cutoff_date = df['txn_time'].quantile(0.7)  # 70%时间点

train_df = df[df['txn_time'] <= cutoff_date]
test_df = df[df['txn_time'] > cutoff_date]

# 实验组:使用新特征训练模型
# 对照组:使用基线特征训练模型
# 两组使用完全相同的train_df和test_df

# 示例2:账户级划分(防止分组泄露)
account_ids = df['account_id'].unique()
train_accounts, test_accounts = train_test_split(
    account_ids, test_size=0.3, random_state=42
)

train_df = df[df['account_id'].isin(train_accounts)]
test_df = df[df['account_id'].isin(test_accounts)]

# 验证:确保没有账户同时出现在训练和测试集
assert set(train_df['account_id']).isdisjoint(set(test_df['account_id']))

4.6 实验组与对照组的对称性要求

为确保对照实验的有效性,实验组和对照组必须满足以下对称性条件:

  • 数据量对称:两组使用完全相同的样本数量(同一批数据的不同特征版本)
  • 时间窗口对称:两组使用完全相同的训练/测试时间范围
  • 评估指标对称:两组使用完全相同的评估指标和计算方式
  • 随机种子对称:如果涉及随机采样,两组使用相同的随机种子
最佳实践:在代码中,实验组和对照组应共享同一个train_df和test_df,唯一的区别是feature_columns列表不同。这样可以从根本上保证对称性。

4.7 划分后的验证清单

在开始模型训练之前,请逐项检查以下清单:

检查项 验证方法 通过标准
时间顺序正确 检查训练集最大时间戳 <= 测试集最小时间戳 严格满足
无账户交叉 计算训练集和测试集的账户ID交集 交集为空
特征无未来信息 逐特征检查其计算时间戳是否早于交易时间 全部满足
实验组/对照组样本一致 比较两组的数据行数和索引 完全一致
正负样本比例一致 比较两组的标签分布 比例相同
自动化检查:建议将上述验证清单编写为单元测试,在每次实验启动前自动运行。一旦发现数据泄露,立即终止实验并修正划分逻辑。