3. 混淆矩阵:TP、FP、TN、FN 的概念、矩阵构建与 AML 场景解读

混淆矩阵(Confusion Matrix)是评估分类模型性能的基础工具。在反洗钱(AML)场景中,模型将交易或客户分为“可疑”与“正常”两类,混淆矩阵通过对比模型预测结果与真实标签,清晰展示模型在四个象限上的表现。

3.1 核心概念定义

在 AML 二分类问题中,通常将“可疑交易/客户”定义为 Positive(正类),将“正常交易/客户”定义为 Negative(负类)。四个基本指标如下:

指标 全称 含义 AML 场景解读
TP True Positive 模型预测为可疑,实际也是可疑 成功识别出真正的洗钱行为,是模型的核心价值体现
FP False Positive 模型预测为可疑,实际是正常 误报,导致合规团队浪费人力调查正常交易,增加运营成本
TN True Negative 模型预测为正常,实际也是正常 正确放行正常交易,保证业务流畅,降低客户摩擦
FN False Negative 模型预测为正常,实际是可疑 漏报,是最危险的错误——洗钱行为未被发现,可能导致监管处罚
⚠️ AML 风险优先级:在反洗钱场景中,FN(漏报)的代价通常远高于 FP(误报)。监管机构更关注模型是否遗漏了真正的洗钱行为,而非产生了多少误报。因此,模型调优时需在控制 FP 的前提下优先降低 FN。

3.2 混淆矩阵的构建

混淆矩阵是一个 2×2 的表格,行代表真实类别,列代表预测类别。构建步骤如下:

  1. 收集预测结果与真实标签:在测试集或验证集上运行模型,得到每条样本的预测类别(可疑/正常)。
  2. 比对真实标签:获取每条样本的真实标签(通常来自人工调查确认或历史监管认定)。
  3. 统计四类数量:遍历所有样本,按 TP、FP、TN、FN 四个类别计数。
  4. 填入矩阵:将计数填入对应位置。

矩阵结构如下:

预测为可疑(Positive) 预测为正常(Negative)
实际为可疑(Positive) TP FN
实际为正常(Negative) FP TN
💡 记忆技巧:第一个字母表示预测是否正确(T=True 正确,F=False 错误),第二个字母表示模型预测的类别(P=Positive 可疑,N=Negative 正常)。例如 FP = 预测错误地标记为可疑。

3.3 混淆矩阵的 SVG 可视化

下图以 AML 场景为例,展示一个包含 1000 条交易样本的混淆矩阵,帮助直观理解四个象限的分布关系:

AML 混淆矩阵示例(N=1000) 预测:可疑 预测:正常 实际:可疑 实际:正常 TP = 45 正确识别可疑交易 命中率 4.5% FN = 5 漏报洗钱行为 漏报率 0.5% FP = 150 误报正常交易 误报率 15% TN = 800 正确放行正常交易 正常通过率 80% ⚠️ 该模型漏报 5 笔洗钱交易(FN=5),需优先优化召回率 同时 FP=150 导致合规团队日均处理大量误报,需平衡精确率

3.4 基于混淆矩阵的衍生指标

从混淆矩阵的四个基础值可以推导出多个关键评估指标,用于量化 AML 模型在不同维度的表现:

指标名称 计算公式 AML 业务含义 理想方向
准确率(Accuracy) (TP + TN) / (TP + FP + TN + FN) 模型整体判断正确的比例 越高越好,但需警惕样本不平衡
精确率(Precision) TP / (TP + FP) 模型标记为可疑的交易中,真正可疑的比例;反映误报控制能力 越高越好
召回率(Recall / TPR) TP / (TP + FN) 所有真实可疑交易中,模型成功发现的比例;反映漏报控制能力 越高越好(AML 核心关注)
特异度(Specificity / TNR) TN / (TN + FP) 所有正常交易中,模型正确放行的比例 越高越好
F1 分数 2 × (Precision × Recall) / (Precision + Recall) 精确率与召回率的调和平均,综合评估模型 越高越好
假阳性率(FPR) FP / (FP + TN) 正常交易被误报为可疑的比例 越低越好
假阴性率(FNR) FN / (TP + FN) 可疑交易被漏报的比例 越低越好(AML 最需控制)
⚠️ 样本不平衡陷阱:在 AML 场景中,可疑交易通常占比极低(<1%)。此时准确率可能高达 99% 以上,但模型可能将所有交易预测为正常(即 TP=0, FN=所有可疑交易)。这种“全否决”模型准确率虽高,但完全失效。因此,不能仅依赖准确率,必须结合召回率、精确率和混淆矩阵整体分析。

3.5 AML 场景下的矩阵解读策略

在实际 AML 策略评估中,混淆矩阵的解读需要结合业务上下文,遵循以下步骤:

  • 第一步:检查 FN 数量——FN 是 AML 模型最关键的指标。如果 FN > 0,需立即分析漏报样本的特征,判断是模型缺陷还是特征缺失。
  • 第二步:评估 FP 对运营的影响——计算 FP 占所有预测为可疑的比例(即 1 - Precision)。如果 FP 过高,合规团队将淹没在误报中,导致调查效率下降。
  • 第三步:计算成本加权指标——为 FN 和 FP 赋予不同的业务成本权重(例如 FN 成本 = 10 万元/笔,FP 成本 = 500 元/笔),计算加权错误成本,用于模型对比。
  • 第四步:阈值调优——调整模型输出概率的判定阈值(默认 0.5),观察混淆矩阵的变化。降低阈值可减少 FN(提高召回率),但会增加 FP;提高阈值则相反。

3.6 阈值调优与混淆矩阵变化

下图展示不同阈值下混淆矩阵的动态变化关系,帮助理解阈值选择对 AML 模型性能的 trade-off:

阈值调优对混淆矩阵的影响(AML 场景) 低阈值(0.3) TP ↑ FN ↓ FP ↑ TN ↓ 召回率 ↑ 精确率 ↓ 漏报减少,误报增加 适合监管压力大时 默认阈值(0.5) TP 适中 FN 适中 FP 适中 TN 适中 召回率与精确率平衡 通用基线配置 需根据业务调整 高阈值(0.7) TP ↓ FN ↑ FP ↓ TN ↑ 召回率 ↓ 精确率 ↑ 漏报增加,误报减少 适合运营资源紧张时 阈值选择策略总结 • 监管高压期 / 近期有处罚案例 → 降低阈值,优先降低 FN • 合规团队人力不足 / 误报成本高 → 提高阈值,控制 FP • 常规运营 → 使用默认阈值,通过 ROC 曲线选择最优平衡点 • 关键原则:每次调整阈值后,重新计算混淆矩阵并评估业务影响

3.7 代码示例:Python 构建混淆矩阵

以下代码展示如何使用 Python 的 sklearn 库构建混淆矩阵,并计算 AML 场景下的关键指标:

import numpy as np
from sklearn.metrics import confusion_matrix, classification_report

# 模拟 AML 场景数据(0=正常,1=可疑)
y_true = np.array([0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0])  # 真实标签
y_pred = np.array([0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0])  # 模型预测

# 构建混淆矩阵
cm = confusion_matrix(y_true, y_pred)
print("混淆矩阵(行=真实,列=预测):")
print(cm)
# 输出格式:
# [[TN  FP]
#  [FN  TP]]

# 提取四个值
tn, fp, fn, tp = cm.ravel()
print(f"\nTP(正确识别可疑): {tp}")
print(f"FP(误报): {fp}")
print(f"TN(正确放行): {tn}")
print(f"FN(漏报): {fn}")

# 计算关键指标
precision = tp / (tp + fp) if (tp + fp) > 0 else 0
recall = tp / (tp + fn) if (tp + fn) > 0 else 0
specificity = tn / (tn + fp) if (tn + fp) > 0 else 0
f1 = 2 * precision * recall / (precision + recall) if (precision + recall) > 0 else 0

print(f"\n=== AML 模型评估指标 ===")
print(f"精确率(Precision): {precision:.2%}")
print(f"召回率(Recall/TPR): {recall:.2%}")
print(f"特异度(Specificity/TNR): {specificity:.2%}")
print(f"F1 分数: {f1:.2%}")
print(f"假阴性率(FNR): {(1 - recall):.2%}")

# 使用 classification_report 快速输出
print("\n分类报告:")
print(classification_report(y_true, y_pred, target_names=['正常', '可疑']))
💡 实践建议:在 AML 项目中,建议将混淆矩阵的计算封装为自动化报表,每次模型迭代后自动输出,并与历史版本对比。重点关注 FN 的变化趋势——如果 FN 持续上升,说明模型正在退化,需要重新训练或调整特征。