3. 模型评估指标体系(一)
在医学影像AI中,分类任务是最常见的建模形式之一:肺结节良恶性判别、乳腺钼靶BI-RADS分级、眼底图像糖网分级、病理切片肿瘤亚型分类等,本质上都是把一张(或一组)影像映射到某个类别标签。要判断一个分类模型“好不好”,不能只看它“准不准”,而必须从多个角度拆解它的错误结构。本节围绕混淆矩阵展开,系统梳理准确率、敏感度、特异度、PPV、NPV、F1、AUC-ROC与AUC-PR这八个核心指标的定义、计算方式,以及在医学影像场景中容易踩的解读陷阱。
一、一切从混淆矩阵开始
分类指标几乎都可以从混淆矩阵推导。以二分类为例,把“阳性”定义为“患病/恶性/需要干预”,把“阴性”定义为“无病/良性/无需干预”,则测试集上的预测结果可归入四个格子:
- TP(真阳性):实际阳性,模型也判为阳性;
- FN(假阴性):实际阳性,模型判为阴性——漏诊;
- FP(假阳性):实际阴性,模型判为阳性——误诊;
- TN(真阴性):实际阴性,模型也判为阴性。
四个数字一旦确定,绝大多数指标就是它们的比值组合。理解每个指标“分母是谁”,是避免误读的关键。
二、阈值无关指标:准确率、敏感度、特异度
准确率(Accuracy)是最直观的指标,等于(TP+TN)/总数,表示模型判对的比例。它在类别均衡时很有参考价值,但在医学影像中往往具有欺骗性。假设某筛查任务中恶性结节仅占1%,一个把所有样本都判为“良性”的模型准确率高达99%,却漏掉了全部阳性病例。因此,看到准确率时必须同时问一句:阳性率是多少?
敏感度(Sensitivity,Recall,召回率)等于TP/(TP+FN),回答“真正有病的人里,模型抓出了多少”。在筛查场景(如肺癌低剂量CT筛查、糖网筛查)中,敏感度直接对应漏诊风险,通常要求尽可能高,例如不低于90%。特异度(Specificity)等于TN/(TN+FP),回答“真正没病的人里,模型排除了多少”。特异度低意味着大量健康人被误判为阳性,带来不必要的穿刺、活检与心理负担。
敏感度与特异度是一对“跷跷板”:把分类阈值调低,更多样本被判为阳性,敏感度上升、特异度下降;阈值调高则相反。因此单独报告某一阈值下的敏感度/特异度并不完整,必须说明阈值如何选取,或直接给出ROC曲线。
三、阈值相关指标:PPV、NPV与F1
PPV(阳性预测值,精确率)等于TP/(TP+FP),回答“模型判为阳性的人里,真正有病的比例是多少”。它直接对应临床上的“阳性结果可信度”。NPV(阴性预测值)等于TN/(TN+FN),回答“模型判为阴性的人里,真正没病的比例”。
这里有一个极易被忽视的陷阱:敏感度和特异度是模型的内在属性,不随患病率变化;而PPV和NPV会随患病率显著变化。例如某模型敏感度90%、特异度90%,在患病率50%的人群中PPV约为90%;但若用于患病率1%的筛查人群,PPV会骤降到约8.3%——也就是说,模型报出的阳性里九成以上是假阳性。这就是为什么同一个模型在不同医院、不同人群中的“阳性预测值”可能天差地别。
F1分数是PPV与Recall的调和平均:F1 = 2·PPV·Recall/(PPV+Recall)。它同时惩罚漏诊和误诊,在类别不平衡时比准确率更能反映模型对少数类的识别能力。但F1默认精确率与召回率同等重要,若临床更看重敏感度,可改用Fβ分数(β>1偏向召回率)。
四、曲线指标:AUC-ROC与AUC-PR
上述指标都依赖一个固定阈值。为了评估模型在所有阈值下的整体表现,引入ROC曲线:横轴为FPR(1-特异度),纵轴为TPR(敏感度),遍历所有阈值得到一条曲线。AUC-ROC即曲线下面积,取值0.5(随机)到1.0(完美)。它的概率解释是:随机取一个阳性样本和一个阴性样本,模型给阳性打分更高的概率。AUC-ROC对类别不平衡相对不敏感,这是它的优点,也是它在医学影像中的隐患——当阳性极其罕见时,FPR的微小绝对变化就能让ROC曲线看起来很漂亮,但临床上的假阳性数量依然巨大。
AUC-PR以Recall为横轴、Precision为纵轴,曲线下面积即AUC-PR。在阳性率极低的任务(如罕见病筛查、病灶检测)中,AUC-PR比AUC-ROC更能反映实际临床价值。一个模型可能AUC-ROC达到0.95,但AUC-PR只有0.3,意味着在保证召回率时精确率很低,阳性结果大量是假的。因此,报告结果时建议同时给出AUC-ROC与AUC-PR,并结合患病率说明。
五、一个可复算的示例
假设某肺结节良恶性分类模型在200例测试集上运行,其中恶性80例、良性120例。取阈值0.5时,混淆矩阵为:TP=68,FN=12,FP=18,TN=102。据此可计算:
准确率 = (68+102)/200 = 85.0%
敏感度 = 68/(68+12) = 85.0%
特异度 = 102/(102+18) = 85.0%
PPV = 68/(68+18) = 79.1%
NPV = 102/(102+12) = 89.5%
F1 = 2×0.791×0.850/(0.791+0.850) = 81.9%
若把阈值降到0.3,模型更倾向判阳性,假设变为TP=76,FN=4,FP=40,TN=80,则敏感度升至95%,特异度降至66.7%,PPV降至65.5%。这组对比清楚展示了阈值移动如何改变指标组合:筛查场景可能接受低特异度换取高敏感度,而确诊场景则相反。评估时必须结合临床用途选择阈值,而不是默认0.5。