3. 数据预处理与清洗故障:字段缺失、数据异常值、重复数据、数据标准化错误

在反洗钱(AML)推理链路中,数据预处理与清洗是决定模型准确性的基石。原始交易数据通常来自多个异构系统,包含大量噪声、缺失值和格式不一致问题。若清洗环节出现故障,后续的规则引擎、异常检测模型和关联分析将产生大量误报或漏报。本章系统梳理四大类清洗故障的根因、排查方法与修复策略。

3.1 字段缺失故障

字段缺失是最常见的数据质量问题,表现为关键字段(如交易对手名称、交易币种、IP 地址)为空或为 NULL。缺失原因包括:源系统未采集、接口传输丢包、ETL 映射遗漏、字段被误删除。

排查要点: 优先检查必填字段的完整性统计,重点关注“交易对手名称”“交易金额”“交易时间”“客户身份标识”四个核心字段。
缺失类型 典型场景 排查方法 修复策略
完全缺失 整列数据为空 检查源表 schema 与 ETL 映射 补全源系统采集逻辑,重新抽取
部分缺失 某字段 30% 记录为空 统计缺失率,按时间/渠道分组 规则填充(如默认值)、模型插补
隐式缺失 字段值为“N/A”“Unknown” 正则匹配异常占位符 统一替换为 NULL 后按缺失处理
-- 示例:检查交易对手名称缺失率
SELECT
  COUNT(*) AS total_records,
  SUM(CASE WHEN counterparty_name IS NULL OR counterparty_name = '' THEN 1 ELSE 0 END) AS missing_count,
  ROUND(100.0 * SUM(CASE WHEN counterparty_name IS NULL OR counterparty_name = '' THEN 1 ELSE 0 END) / COUNT(*), 2) AS missing_pct
FROM aml_transactions
WHERE transaction_date >= '2025-01-01';

3.2 数据异常值故障

异常值指明显偏离正常分布的数据点,如单笔交易金额为 0 元、负数、或超出正常范围 100 倍以上。异常值会严重扭曲统计指标和模型权重,导致误将正常交易判为可疑,或掩盖真正的洗钱行为。

常见陷阱: 不要将业务上的“大额交易”直接等同于异常值。大额交易可能是合规的跨境结算,而异常值往往是数据录入错误或系统故障。
  • 数值异常: 金额为负数、金额为 0、金额超过 99.9% 分位数 5 倍以上。
  • 时间异常: 交易时间在未来、交易时间早于客户出生日期、时间戳为 1970-01-01。
  • 类别异常: 交易币种代码不在 ISO 4217 列表中、国家代码为“ZZ”。
  • 频率异常: 同一账户 1 分钟内交易次数超过 100 笔(疑似机器刷单)。
# Python 示例:使用 IQR 方法检测金额异常值
import pandas as pd

df = pd.read_parquet('transactions.parquet')
Q1 = df['amount'].quantile(0.25)
Q3 = df['amount'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 3 * IQR
upper_bound = Q3 + 3 * IQR

anomalies = df[(df['amount'] < lower_bound) | (df['amount'] > upper_bound)]
print(f"检测到异常值数量: {len(anomalies)}")

3.3 重复数据故障

重复数据导致同一笔交易被多次计分,造成虚假的关联强度和高频交易误判。重复原因包括:源系统重复推送、ETL 未做去重、时间窗口内同一交易被多次采集。

去重策略: 建议采用“业务主键 + 时间窗口”双重去重。例如:交易流水号 + 交易日期 + 金额完全一致视为重复;若无唯一流水号,则使用交易对手 + 金额 + 时间(±5 秒)模糊匹配。
重复数据检测与去重流程 原始交易数据 按业务主键分组 精确去重 模糊去重 去重后数据集 精确去重:主键完全一致 模糊去重:相似度 > 0.95

3.4 数据标准化错误

数据标准化错误指不同源系统的数据格式、编码、单位不一致,导致模型无法正确解析。例如:金额字段有的以“元”为单位,有的以“万元”为单位;日期格式有“YYYY-MM-DD”和“MM/DD/YYYY”两种;国家代码有“CN”和“CHN”混用。

标准化维度 常见错误 标准规范 校验方法
金额单位 元/万元/美元混用 统一为元(人民币) 检查金额量级分布,识别异常单位
日期格式 YYYYMMDD / DD-MM-YYYY ISO 8601: YYYY-MM-DD 正则匹配多种格式后统一转换
国家/地区代码 CN / CHN / 86 / China ISO 3166-1 alpha-2 建立映射表,转换非标准值
交易类型 转账/转帐/Transfer/TRF 统一枚举值 字典映射 + 模糊匹配
-- 示例:日期格式标准化检查
SELECT
  transaction_id,
  raw_date,
  CASE
    WHEN raw_date ~ '^\d{4}-\d{2}-\d{2}$' THEN 'ISO标准'
    WHEN raw_date ~ '^\d{2}/\d{2}/\d{4}$' THEN '美式格式'
    WHEN raw_date ~ '^\d{8}$' THEN '紧凑格式'
    ELSE '未知格式'
  END AS date_format_type
FROM aml_transactions
WHERE raw_date IS NOT NULL
LIMIT 20;

3.5 综合排查流程

当数据预处理环节出现故障时,建议按以下步骤进行系统性排查:

  1. 数据概要分析: 统计各字段缺失率、唯一值数量、数据类型、最大值/最小值。
  2. 字段级校验: 对每个字段执行预定义的校验规则(非空、范围、格式、枚举值)。
  3. 跨字段一致性检查: 例如交易金额与交易币种是否匹配、交易时间与客户注册时间是否合理。
  4. 重复检测: 使用业务主键 + 时间窗口进行精确和模糊去重。
  5. 标准化验证: 抽样检查标准化后的数据是否符合目标 schema 定义。
  6. 修复与重跑: 根据故障类型执行修复脚本,重新执行数据预处理管道。
最佳实践: 建议在数据预处理管道中嵌入数据质量监控看板,实时展示字段缺失率、异常值比例、重复率等关键指标。当指标超过阈值时自动告警,避免带病数据进入推理链路。