3. 评估指标体系入门
在金融文本模型评估中,最危险的做法是只看一个数字就下结论。金融场景的样本分布、误判代价和业务目标差异极大,同一个模型在“准确率”上表现优异,却可能在真正关心的风险事件上几乎失效。本节从混淆矩阵出发,建立一套可解释、可对比、可落地的指标体系。
一、核心原理:从混淆矩阵到指标族
所有二分类指标几乎都源自混淆矩阵。以“金融文本是否属于风险事件”为例,正类为“风险”,负类为“非风险”:
| 真实\预测 | 预测为正(风险) | 预测为负(非风险) |
|---|---|---|
| 真实为正(风险) | TP(真正例) | FN(假负例,漏报) |
| 真实为负(非风险) | FP(假正例,误报) | TN(真负例) |
由此可定义:
- 准确率 Accuracy = (TP+TN) / 总数,衡量整体判对比例。
- 精确率 Precision = TP / (TP+FP),预测为风险中真正风险的比例,关注“误报”。
- 召回率 Recall = TP / (TP+FN),真实风险中被抓出的比例,关注“漏报”。
- F1 = 2·P·R / (P+R),精确率与召回率的调和平均。
- AUC:ROC 曲线下面积,衡量模型对正负样本的排序能力,与阈值无关。
- MCC:马修斯相关系数,综合 TP、TN、FP、FN,取值 [-1,1],类别极不平衡时更稳健。
金融文本中正类往往极少(如违约公告、异常交易描述),此时准确率会被大量负类“稀释”。例如 1000 条文本中仅 10 条风险,全部预测为“非风险”也能得到 99% 准确率,但召回率为 0。因此必须结合精确率、召回率、F1 与 MCC 综合判断。
二、方法流程:如何计算与解读
在金融文本项目中,建议按以下流程建立指标基线:
- 明确正类定义:是“违约”“欺诈”“负面舆情”还是“合规风险”,不同定义直接改变 TP/FN 的边界。
- 划分训练集、验证集、测试集,并保持时间顺序,避免未来信息泄漏。
- 在验证集上计算混淆矩阵,再派生各指标。
- 根据业务代价选择阈值:漏报代价高则降低阈值提高召回,误报代价高则提高阈值提高精确。
- 用测试集做最终报告,同时给出 AUC 与 MCC 作为稳健性参考。
from sklearn.metrics import (accuracy_score, precision_score, recall_score,
f1_score, roc_auc_score, matthews_corrcoef)
y_true = [0,0,1,1,0,1,0,0,1,0]
y_pred = [0,0,1,0,0,1,1,0,1,0]
y_prob = [0.1,0.2,0.8,0.4,0.3,0.9,0.6,0.2,0.7,0.1]
print("Accuracy :", accuracy_score(y_true, y_pred))
print("Precision:", precision_score(y_true, y_pred))
print("Recall :", recall_score(y_true, y_pred))
print("F1 :", f1_score(y_true, y_pred))
print("AUC :", roc_auc_score(y_true, y_prob))
print("MCC :", matthews_corrcoef(y_true, y_pred))
三、案例/场景:金融文本中的指标取舍
假设某银行用模型识别“贷款合同中的隐性违约条款”。测试集 2000 条,其中真实风险 40 条。模型 A 预测风险 60 条,命中 30 条;模型 B 预测风险 35 条,命中 28 条。
- 模型 A:Precision=50%,Recall=75%,F1≈60%,误报 30 条。
- 模型 B:Precision=80%,Recall=70%,F1≈74.7%,误报 7 条。
若业务目标是“尽量不漏”,模型 A 更合适;若人工复核成本极高,模型 B 更优。AUC 可进一步判断两个模型在不同阈值下的整体排序能力,而 MCC 在正类仅 2% 的情况下比 F1 更能反映真实相关性。
在金融文本中,建议同时报告“固定阈值下的 P/R/F1”与“阈值无关的 AUC/MCC”。前者对应实际部署效果,后者用于模型选型与稳定性比较。
四、误区与复盘
常见误区一:用准确率汇报不平衡数据。误区二:只看 F1 不看业务代价。误区三:在测试集上反复调阈值导致过拟合。误区四:忽略文本长度、领域漂移对指标的影响。
复盘时建议保留每次实验的混淆矩阵、阈值、样本分布和指标快照,形成可追溯的评估日志。只有把指标与金融业务代价绑定,评估才真正有意义。