4. 数据准备与标注:正负样本定义、标注规范、数据划分策略与质量校验

数据是反欺诈图谱模型的基石。在构建和评估模型之前,必须对原始数据进行清洗、定义明确的标签、制定统一的标注规范,并采用合理的划分策略。本章将系统讲解数据准备与标注的核心环节,确保后续评估工作的科学性和可复现性。

4.1 正负样本定义

在反欺诈场景中,正样本通常指“欺诈行为”,负样本指“正常行为”。但实际业务中,欺诈的定义往往具有时效性和业务依赖性。以下是常见的正负样本定义原则:

样本类型 定义标准 典型来源 注意事项
正样本(欺诈) 经人工核实或系统确认的欺诈交易、账户盗用、恶意注册、团伙骗贷等 风控工单、黑名单、历史已确认欺诈案件、外部情报 需排除“疑似”但未确认的案例;注意欺诈标签的时效性(如已过追诉期)
负样本(正常) 经过业务验证的正常交易、正常用户行为、无风险记录的操作 正常交易流水、通过审核的注册/借贷记录、长期无投诉的账户 需排除“灰色地带”样本(如被误判但实际正常的案例)
难例样本 模型难以区分、处于决策边界附近的样本(如疑似欺诈但证据不足) 人工复核队列、模型分数在阈值附近的案例 建议单独标注,用于模型调优和评估鲁棒性
实战建议: 正负样本比例在真实场景中往往极度不平衡(欺诈率通常低于1%)。在定义阶段,建议明确“硬标签”(已确认欺诈/正常)和“软标签”(高置信度疑似),并记录标签置信度,便于后续评估时进行加权或分层分析。

4.2 标注规范

标注规范是保证数据一致性的关键。对于图谱反欺诈任务,标注不仅涉及节点(实体)的标签,还涉及边(关系)的标签。以下是推荐的标注规范框架:

4.2.1 节点标注规范

  • 实体类型: 明确标注每个节点的实体类型(如:用户、设备、IP、手机号、银行卡、地址)。
  • 欺诈标签: 每个节点可标注“欺诈”、“正常”或“未知”。对于“欺诈”节点,需记录欺诈类型(如:盗用、恶意注册、洗钱)。
  • 属性完整性: 标注节点的重要属性(如注册时间、交易金额、地理位置),缺失值需用统一占位符(如“UNKNOWN”)标记。

4.2.2 边(关系)标注规范

  • 关系类型: 明确边的语义(如:登录、交易、通话、转账、共享设备)。
  • 时间戳: 每条边必须标注发生时间,用于时间序列划分和时序特征构建。
  • 关系权重: 可标注边的强度(如交易金额、通话时长、共享次数),用于图谱算法中的边加权。

4.2.3 标注一致性检查

  • 交叉验证: 同一批样本至少由两名标注员独立标注,计算标注一致性(Cohen's Kappa 或 Fleiss' Kappa),Kappa 值应 ≥ 0.8。
  • 争议仲裁: 建立争议样本仲裁机制,由资深风控专家最终裁定。
  • 标注日志: 记录每次标注的修改历史、标注员ID、标注时间,便于追溯和审计。
常见陷阱: 忽略“未知”标签。在反欺诈中,大量样本的真实标签是未知的(如未触发风控规则的交易)。强行将未知样本归为“正常”会引入噪声,导致模型误判。建议保留“未知”类别,或在训练时仅使用高置信度的正负样本。

4.3 数据划分策略

数据划分直接影响评估结果的可靠性。对于反欺诈图谱数据,推荐结合时间序列划分和随机划分两种策略,以适应不同评估目标。

4.3.1 时间序列划分

反欺诈场景具有明显的时效性——欺诈手法随时间演变。时间序列划分能模拟模型在未来的真实表现,是评估泛化能力的黄金标准。

时间序列数据划分策略 T0 T1 T2 T3 训练集 (60%) 验证集 (20%) 测试集 (20%) 划分原则: 1. 按时间顺序切分,保证训练集时间早于验证集,验证集早于测试集。 2. 避免未来信息泄露:测试集数据在训练时完全不可见。 3. 适用于评估模型对新型欺诈的检测能力。 4. 推荐比例:60% 训练 / 20% 验证 / 20% 测试(可根据数据量调整)。

4.3.2 随机划分

随机划分适用于评估模型在静态数据集上的拟合能力和特征有效性。在反欺诈中,随机划分通常用于模型调参和特征选择阶段,但不能替代时间序列划分。

随机数据划分策略 原始数据集(全部样本,忽略时间顺序) 训练集 (70%) 验证集 (15%) 测试集 (15%) 适用场景:特征工程验证、模型超参数调优、基线模型对比。 注意:随机划分会破坏时间依赖关系,不适用于评估模型在时间维度上的泛化能力。

4.3.3 划分策略对比

对比维度 时间序列划分 随机划分
核心原则 按时间顺序切分,保证时间先后 随机打乱后按比例切分
评估目标 模型在未来的泛化能力 模型在静态数据上的拟合能力
是否避免未来信息泄露 是 否(可能将未来数据用于训练)
适用阶段 最终评估、上线前验证 特征选择、模型调参、快速迭代
对数据量的要求 需要足够长的时间跨度 对时间跨度要求较低
推荐使用 必须使用(作为主要评估方式) 辅助使用(作为补充评估方式)

4.4 数据质量校验

数据质量直接影响模型效果和评估结论的可信度。在数据准备阶段,必须建立系统化的质量校验流程。以下是推荐的校验清单:

4.4.1 完整性校验

  • 缺失值检测: 检查节点属性和边属性的缺失比例,对缺失率超过30%的字段需评估是否保留。
  • 孤立节点检测: 在图谱中,孤立节点(无边连接的节点)可能表示数据采集不完整,需确认是否应保留。
  • 时间戳完整性: 确保所有边都有有效的时间戳,无时间戳的边应标记为“未知时间”并单独处理。

4.4.2 一致性校验

  • 实体对齐: 同一实体在不同数据源中的ID是否一致?如不一致,需建立实体映射表。
  • 关系对称性: 对于双向关系(如好友关系),检查A→B和B→A是否同时存在。
  • 标签一致性: 同一节点在不同时间窗口内的标签是否矛盾?如一个用户既被标为“欺诈”又被标为“正常”,需人工复核。

4.4.3 准确性校验

  • 异常值检测: 检查属性值是否在合理范围内(如交易金额为负数、注册时间在未来)。
  • 重复数据检测: 检查是否存在完全重复的节点或边,去重后保留唯一记录。
  • 标签噪声检测: 随机抽取5%-10%的标注样本进行二次复核,计算标注准确率(应 ≥ 95%)。

4.4.4 时效性校验

  • 数据新鲜度: 检查数据的时间分布,确保训练集和测试集的时间窗口覆盖当前业务周期。
  • 概念漂移检测: 比较不同时间窗口内正样本的分布变化,若欺诈模式发生显著变化,需重新标注或调整模型。
质量校验报告模板: 建议每次数据准备完成后,生成一份标准化的数据质量报告,包含以下指标:总节点数、总边数、正样本比例、缺失率、重复率、时间跨度、标注一致性Kappa值、标签噪声率。该报告应作为模型评估的附件存档,便于后续问题追溯。

4.5 实战案例:数据准备流程示例

以下是一个简化的数据准备流程代码示例,展示如何实现时间序列划分和数据质量校验:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split

# 假设已有图谱边数据,包含时间戳和标签
edges = pd.read_csv('graph_edges.csv')
edges['timestamp'] = pd.to_datetime(edges['timestamp'])

# 1. 数据质量校验
print("缺失值统计:")
print(edges.isnull().sum())
print(f"重复边数量:{edges.duplicated().sum()}")
print(f"时间范围:{edges['timestamp'].min()} 至 {edges['timestamp'].max()}")

# 2. 时间序列划分
edges_sorted = edges.sort_values('timestamp')
train_end = int(len(edges_sorted) * 0.6)
val_end = int(len(edges_sorted) * 0.8)

train_data = edges_sorted.iloc[:train_end]
val_data = edges_sorted.iloc[train_end:val_end]
test_data = edges_sorted.iloc[val_end:]

print(f"训练集时间范围:{train_data['timestamp'].min()} - {train_data['timestamp'].max()}")
print(f"验证集时间范围:{val_data['timestamp'].min()} - {val_data['timestamp'].max()}")
print(f"测试集时间范围:{test_data['timestamp'].min()} - {test_data['timestamp'].max()}")

# 3. 随机划分(用于特征验证)
X = edges.drop('label', axis=1)
y = edges['label']
X_train_rand, X_test_rand, y_train_rand, y_test_rand = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y
)
print(f"随机划分 - 训练集大小:{len(X_train_rand)}, 测试集大小:{len(X_test_rand)}")
重要提醒: 在时间序列划分中,务必确保训练集、验证集、测试集之间没有时间重叠。如果图谱中存在跨时间窗口的边(如长期关系),建议以“事件时间”为准进行划分,而非以“数据入库时间”为准。否则可能导致未来信息泄露,使评估结果过于乐观。