我们奖励的究竟是哪种改进?
企业文档分类器的正确率从 92.3% 升至 96.5%,看起来应当升级,但新版本无法识别任何最少见类别的文档。这并不矛盾:多数类别的改善可以在数值上抵消一个类别的消失。本文解释如何阅读这一结果,以及每种指标回答什么问题。数据专为分析构造,不来自 EL-AI 客户或产品。
采用单标签分类:每份文档只有一个真实类别 A、B 或 C,也只预测一个类别。两个版本使用相同测试集:A 为 900、B 为 90、C 为 10,共一千。支持数指真实类别样本数,不是预测次数。为单独研究聚合方式,本文比较已经产生的决策,不讨论阈值或概率质量。
矩阵揭示百分比隐藏的内容
下表行是真实类别,列是预测类别,对角线是正确决策。模型 A 第一行表示识别 850 个 A,将 45 个错判为 B、5 个错判为 C。模型 B 识别 895 个 A,但把十个 C 全判为 A。正确总数从 850+65+8=923 升为 895+70+0=965。准确率除以一千,平等对待每份文档,并不承诺保护每个类别。
| 版本 / 真实 | A | B | C |
|---|---|---|---|
| A / A | 850 | 45 | 5 |
| A / B | 20 | 65 | 5 |
| A / C | 0 | 2 | 8 |
| B / A | 895 | 5 | 0 |
| B / B | 20 | 70 | 0 |
| B / C | 10 | 0 | 0 |
逐类分析:精确率、召回率与 F1
对类别 c,真正例 TP 在对角线上;假正例 FP 位于同列其他行;假负例 FN 位于同行其他列。精确率 TP/(TP+FP) 问预测为该类的有多少正确;召回率 TP/(TP+FN) 问实际该类的有多少被找到。两者不同:少做预测可能保持精确率,却漏掉很多真实案例。
F1 是精确率和召回率的调和平均,可直接用 2TP/(2TP+FP+FN) 计算,避免中间分母。模型 A 的 C 类 TP=8、FP=10、FN=2,F1=16/28≈0.571429,精确率 8/18,召回率 8/10=0.8。模型 B 的 TP=0、FP=0、FN=10,F1 与召回率均为零。没有 C 预测令精确率未定义,但 F1 分母为十,仍有定义。软件零除约定不能掩盖覆盖丢失。
三种聚合,三个问题
宏平均先算 K 个类别各自 F1,再算术平均,每类权重 1/K。A 的三项约为 (0.960452,0.643564,0.571429),均值 0.725148;B 为 (0.980822,0.848485,0),均值 0.609769。不能先平均精确率和召回率再取调和平均,因为 F1 非线性,运算次序重要。B 改善两类却完全丢失第三类,宏平均揭示这一点。
加权平均采用支持比例 0.90、0.09、0.01,A 约为 0.928042,B 为 0.959103。它回答另一问题,只给稀有 C 类 1% 权重。微平均先汇总 TP、FP、FN 再取比值。在完整单标签分类中,每次错误各增加一个 FP 和 FN;若正确数为 T,则 micro-F1=2T/[2T+2(N−T)]=T/N,即准确率。该等式不能直接推广到多标签或只选部分类别的情况。
| 指标 | A | B |
|---|---|---|
| accuracy / micro | 0.923 | 0.965 |
| macro-F1 | 0.725148 | 0.609769 |
| weighted-F1 | 0.928042 | 0.959103 |
| recall C | 0.8 | 0 |

宏平均也不能替我们做决定
类别等权不等于错误成本相同。若稀有类别业务影响很小,宏平均可能过度强调;若代表关键事件,等权仍可能不够。十个 C 的估计也比九百个 A 更不稳定。图是这个数据集的精确计数,不是未来优越性的统计证明。仍需独立测试、公开支持数、不确定性及预先确定的逐类验收标准。
代码读取矩阵、汇总行列并重建每个比值;附件保留两个版本及验证反差的断言。未执行 scikit-learn,只查阅其定义与约定,并用 Python 直接实现计数。处理 K×K 矩阵的工作量随 K² 增长;N 个标签可单次遍历构建矩阵。不把执行时间称作服务基准。
一种错误代价更高时,会改变什么?
设真实 C 类错误代价为 100 单位,其他错误为一单位,正确为零。这是合成成本,不是企业实测。A 错 50 个 A、25 个 B、2 个 C,总成本 50+25+2·100=275。B 分别错 5、20、10 个,总成本 5+20+10·100=1025。除以一千,每文档成本为 0.275 与 1.025,代码已核查。准确率更高的版本在该成本函数下反而更差。
平均成本是各错误计数乘相应代价之和,再除以 N。宏 F1 并不估计这个成本;两者只是在本例因不同理由均偏好 A。若所有错误代价为一,平均成本为 1−准确率,将偏好 B。因此选择需要业务目标,不能将某指标视为永远更优。复制每份文档也不会改变比值:分数本身不反映独立证据有多少。
对谁更好,对哪些案例更好?
B 在准确率和加权 F1 上更好,宏平均更差,且在此测试中完全不能识别 C。这些说法可以同时成立。评估专用模型须明确总体、类别、成本与覆盖要求,再综合阅读矩阵、支持数和指标。总分可以上升,而服务恰好失去我们需要保留的能力。
来源与计算
scikit-learn 1.9.1 — F1, averaging and undefined cases.
scikit-learn — multiclass aggregation definitions.
m=[[895,5,0],[20,70,0],[10,0,0]]
f=[];N=sum(map(sum,m))
for c in range(3):
tp=m[c][c];fp=sum(row[c] for row in m)-tp;fn=sum(m[c])-tp
f.append(2*tp/(2*tp+fp+fn))
print('accuracy',sum(m[c][c] for c in range(3))/N)
print('per-class F1',f,'macro',sum(f)/3)
assert f[2]==0
代码、数据与说明 · JSON. 教学计算使用 Python 3.14.0,图使用 Matplotlib 3.11.2。分析由 AI 辅助,不声称经过同行评审或人工审核。原创 ImageGen 封面仅作示意,不记录 EL-AI 人员、场所或实际安装。来源查阅于 2026 年 10 月 24 日。

