老渔民阿海在渔村生活了四十年,最宝贝的东西有两样:一张祖传的渔网,和一个记了几十年的账本。每次出海回来,他不急着卖鱼,先坐在码头上分拣、清点:网里的鱼是实实在在的收获;网里缠着的水草垃圾是误打误撞捞上来的;从破洞溜走的鱼最让他心疼;还有那些本就没打算捞的石头贝壳,留在海里也无妨。这四笔账——网里的鱼、网里的垃圾、漏掉的鱼、留在海里的杂物——恰好就是机器学习里评估模型时最底层的四个计数。把模型想成一张渔网,把真实情况想成大海,预测得对不对,全在这四笔账里。而准确率、精确率、召回率、F1,就是根据这四笔账算出的四种成绩单:准确率问你整体蒙对了几成,精确率问你捞上来的东西里鱼占几成,召回率问海里所有的鱼你捞到了几成,F1 则是两张成绩单的调和平均。看懂这四个指标,你就拿到了评估任何 AI 模型的第一把尺子。

岗位关联

对 AI 从业者而言,评估指标是模型上线前的验收标准:选错指标,轻则成绩虚高,重则业务崩盘。理解四者的计算与取舍,是调模型、写报告、定方案的底层基本功。

目录
  1. 可视化演示
  2. 混淆矩阵基础
  3. 准确率详解
  4. 精确率详解
  5. 召回率详解
  6. F1综合指标
  7. 场景选择策略
  8. 实践挑战对策
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

本节配有交互动效(进入视口后自动加载,约 3KB)。

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

混淆矩阵基础

阿海收网后的第一件事,就是把渔获分成四筐:红筐装网里的鱼,绿筐装误捕的水草垃圾,黑筐装漏网的鱼,白筐装留在海里的杂物。老伴笑他连垃圾都记账,阿海却说:“不清四笔账,后头全是糊涂账。”

机器学习评估的第一步同样如此:把“真实”和“预测”摆成一张 2×2 的表,每个格子记录一类样本的数量,这张表就是混淆矩阵(Confusion Matrix)。行是真实标签,列是预测标签,两两组合正好四个格子。

二分类任务中,被关注的那一类叫正例(Positive),另一类叫负例(Negative)。四个格子分别是:TP 真阳性——真实为正且预测为正;FP 假阳性——真实为负却预测为正,也就是误报;FN 假阴性——真实为正却预测为负,也就是漏报;TN 真阴性——真实为负且预测为负。对应渔夫的账本:TP 是网里的鱼,FP 是网里的垃圾,FN 是漏网的鱼,TN 是留在海里的杂物。

四筐账记完,阿海发现后面所有指标不过是这四笔账的组合运算。记住口诀——TP 鱼、FP 垃圾、FN 漏网、TN 杂物,就抓住了评估指标的钥匙。

TP=真实为正且预测为正的样本数,FP=真实为负但预测为正的样本数\text{TP}=\text{真实为正且预测为正的样本数},\quad \text{FP}=\text{真实为负但预测为正的样本数}
这个公式定义了混淆矩阵中最关键的两个“打错”格子,是后面所有指标的分母来源。
  1. 真实为正(真鱼)样本的天然标签是正例,相当于渔夫眼中“这是一条真鱼”。
    真实为正\text{真实为正}
  2. 预测为正(捞进网)模型判定样本为正例,相当于渔网把这条鱼捞了上来。
    预测为正\text{预测为正}
  3. TP 与 FP 的计数两个条件都满足就是 TP;“真实为负但预测为正”则是 FP,属于纯误捕。
    TP=∣真实为正∩预测为正∣,FP=∣真实为负∩预测为正∣TP=|\text{真实为正}\cap\text{预测为正}|,\quad FP=|\text{真实为负}\cap\text{预测为正}|

准确率详解

傍晚会计来收账,问阿海今天“整体干得咋样”。阿海拨了一遍算盘:判对的鱼 40 条,判对的杂物 30 块,判错的 30 个——整体对了七成。

这就是准确率(Accuracy)的直觉:在所有预测里,猜对的比例。它不问鱼和杂物的区别,只看“对了没有”,是最直观、最常用的指标,也是入门第一课。

但准确率有个致命陷阱:类别不均衡时它容易“虚高”。假若这片海里 99% 是杂物、只有 1% 是鱼,阿海干脆不撒网、直接报“海里没有鱼”,准确率也有 99%。这不是本事,是偷懒——所以老道的渔夫绝不只看总账。

Accuracy=TP+TNTP+TN+FP+FN\text{Accuracy}=\displaystyle\frac{TP+TN}{TP+TN+FP+FN}
准确率 = 判对的样本数 ÷ 全体样本数。分子把两个“对”的格子相加,分母把四个格子的账全点一遍。
  1. 分子 TP+TN判对的鱼和判对的杂物,即所有“干对了”的样本。
    TP+TN=判对的正例+判对的负例TP+TN=\text{判对的正例}+\text{判对的负例}
  2. 分母样本总数TP、TN、FP、FN 四笔账加起来恰好等于参与评估的全部样本。
    TP+TN+FP+FN=样本总数TP+TN+FP+FN=\text{样本总数}
  3. 整体比值判对数除以总数,得到一个 0 到 1 的比值,越接近 1 表示整体越准。
    Accuracy=判对总数样本总数\text{Accuracy}=\frac{\text{判对总数}}{\text{样本总数}}

精确率详解

鱼贩子对着阿海的网兜直摇头:装得满满当当,一大半却是海草、塑料袋。“捞上来的东西,得是鱼才算数。”从此阿海多了一个指标——精确率。

精确率(Precision)回答的问题是:在所有被模型判为正例(捞进网)的样本里,有多少是真正的正例(鱼)?它的分母不是全体样本,而是“预测为正”的那一兜货。精确率高,意味着误报少、净货多。

垃圾邮件过滤就是典型场景:把一封正常邮件误删,用户可能永远看不到重要消息,代价极高,所以宁可漏掉一些垃圾邮件,也要保证被拦截的条条都是垃圾——这时精确率是首选指标。但阿海马上意识到:网眼越密货越纯,那些刁钻的鱼会不会也从网边溜走?这就要看下一节的召回率。

Precision=TPTP+FP\text{Precision}=\displaystyle\frac{TP}{TP+FP}
精确率 = 网里的真鱼 ÷ 捞上来的全部东西。它只关心“捞的这一兜干不干净”,不关心海里还有多少鱼。
  1. 分母 TP+FP所有被捞进网的东西,不管是鱼还是垃圾,恰是“预测为正”的全部样本。
    TP+FP=网里的鱼+网里的垃圾TP+FP=\text{网里的鱼}+\text{网里的垃圾}
  2. 分子 TP其中真正是鱼的那部分。
    TP=网里的真鱼TP=\text{网里的真鱼}
  3. 比值含义真鱼占一兜货的比例,越接近 1 说明网越“精准”,垃圾越少。
    Precision=真鱼捞上来的全部东西\text{Precision}=\frac{\text{真鱼}}{\text{捞上来的全部东西}}

召回率详解

渔村来了新生意:环保局请阿海清剿入侵鱼种,要求把这片海域里的入侵鱼捞得越干净越好。这回鱼贩子不挑垃圾了,改成盯着海里看:“还有鱼没抓着,不许收网!”阿海明白了,这活儿拼的不是纯度,是覆盖率。

召回率(Recall)回答的问题是:在所有真实为正例(海里所有的鱼)里,模型捞到了多少?它的分母是“真实为正”的那一拨,分子仍然是 TP(网里的鱼)。召回率高,意味着漏报少、捞得全。

癌症筛查、反欺诈、地震预警都是召回率优先的场景:把真病人漏掉,比让健康人白跑一趟可怕得多。现在阿海手里有了两个指标——网里要纯(精确率),海里要净(召回率)。可问题来了:网眼调小,货纯了但漏鱼;网眼调大,捞全了但垃圾多。两个指标此消彼长,到底怎么给这趟出海打分?下一节,渔村的“综合绩效”出场。

Recall=TPTP+FN\text{Recall}=\displaystyle\frac{TP}{TP+FN}
召回率 = 捞上来的鱼 ÷ 海里的全部鱼。它只关心“该抓的抓到没有”,不关心网里掺了多少垃圾。
  1. 分母 TP+FN海里全部鱼,包括捞上来的和漏掉的,恰是“真实为正”的所有样本。
    TP+FN=网里的鱼+漏网的鱼TP+FN=\text{网里的鱼}+\text{漏网的鱼}
  2. 分子 TP其中被捞上来的那一部分。
    TP=网里的真鱼TP=\text{网里的真鱼}
  3. 比值含义鱼群中被捕获的比例,越接近 1,漏网之鱼越少。
    Recall=捞上来的鱼海里的全部鱼\text{Recall}=\frac{\text{捞上来的鱼}}{\text{海里的全部鱼}}

F1综合指标

年底渔村评先进,阿海精确率 90 分、召回率 10 分。会计说:平均一下,50 分,中等水平。阿海不服:我有一科很优秀啊!老村长一句话点醒他:“偏科的学生不能算优秀,两门都得扎实。不许拿一科的高分补另一科的低分,就用调和平均。”

算术平均算的是 (90+10)/2=50,把高分和低分“拉平”了;调和平均却对低分极其敏感:2×90×10/(90+10)=18,一科偏科,总分立刻崩盘。这正是 F1 的设计初衷——不让精确率和召回率互相掩护。

如果两科重要程度不同,还可以用 Fβ 公式调整权重:β>1 更看重召回率,β<1 更看重精确率。阿海最后总结:F1 不是“两个数字的平均数”,而是“两个指标互相绑定的合同”——一个拖后腿,总分就崩。正因如此,F1 成为类别不均衡场景下最常用的综合评价指标。

F1=2×Precision×RecallPrecision+Recall\text{F1}=\displaystyle\frac{2 \times \text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}
F1 是精确率与召回率的调和平均。两科都硬,总分才高;任何一科掉队,总分都会惨不忍睹。
  1. 分子 2×P×R两个成绩相乘,任何一科为 0,整体直接归零——偏科的代价被放大。
    2×Precision×Recall2 \times \text{Precision} \times \text{Recall}
  2. 分母 P+R两科成绩之和,用于把结果归一化到 0 到 1 之间。
    Precision+Recall\text{Precision} + \text{Recall}
  3. 整体比值即调和平均,它恒小于或等于算术平均;只有当两科相等时,F1 才等于它们本身。
    F1≤Precision+Recall2\text{F1} \le \frac{\text{Precision}+\text{Recall}}{2}

场景选择策略

阿海现在养成了习惯:出海前先问买家要什么。给高级餐厅供货,只要最好的鱼,垃圾零容忍,那就把网眼调小,宁可少捞,追求高精确率;替环保局清剿入侵鱼,一条漏网都不行,那就把网撒得又宽又密,追求高召回率;卖给批发市场,好坏都收,那就精确率和召回率都要顾,盯紧 F1。

选指标的本质,是给“错误”定价。误报(FP)代价高,就压 FP,看精确率;漏报(FN)代价高,就压 FN,看召回率;两者代价接近,看 F1;类别均衡、错误代价对称,才放心用准确率兜底。技术选型没有万能指标,只有把业务目标翻译成数学目标。

阿海把这个案例贴在船头:指标是业务目标的影子,影子选错了,船就会开错方向。选定指标之后,还要提防海上的暗礁——类别不平衡、阈值漂移、多鱼种混捕,这些实践中的坑,下一节逐一拆解。

Accuracy偷懒模型=TNTN+FP=9901000=0.99\text{Accuracy}_{\text{偷懒模型}}=\displaystyle\frac{TN}{TN+FP}=\frac{990}{1000}=0.99
这是在 1000 个样本里只有 10 条鱼的海域,“不撒网”模型的准确率。数字漂亮,实际一条鱼都没抓到。
  1. 先数清海况一共 1000 个样本,其中 990 个是杂物、10 条是鱼——极度不平衡。
    N=1000,正例=10,负例=990N=1000,\quad \text{正例}=10,\quad \text{负例}=990
  2. 偷懒模型的四笔账永远预测“负例”,于是 TP=0、FP=0、FN=10、TN=990。
    TP=0,FP=0,FN=10,TN=990TP=0,\quad FP=0,\quad FN=10,\quad TN=990
  3. 代入准确率公式把账本数字代入,得到 0.99——看起来优秀,实际召回率为 0。
    Accuracy=0+9900+990+10+0=0.99\text{Accuracy}=\frac{0+990}{0+990+10+0}=0.99

实践挑战对策

海况多变,阿海总结出三个老坑:有的海湾鱼极少(类别不平衡),技术员拿不准该把网撒多密(阈值设定),还有的海域同时有七八种鱼要分别统计(多分类)。老渔夫的经验,正是工程师踩坑后的心得。

类别不平衡时,单看准确率会被“虚高”欺骗,对策是转看精确率、召回率和 F1,或用重采样、调整类别权重来“治疗”;阈值设定是那张渔网的分界绳——同一个模型,阈值左移,召回率上升而精确率下降,右移则相反,工程上常画出曲线来挑选平衡点;多分类问题无法直接套用二分类公式,标准做法是“先算每类的指标,再求平均”。

阿海的账本越记越厚,渔网却越用越明白:评估从来不是套公式,而是先理解四笔账,再选对一组口径。把这些实践中的暗礁摸清,你就能在任何数据集上又快又准地给模型打分——就像阿海扫一眼四个筐,心里就有了数。

Macro-F1=1C∑c=1CF1c\text{Macro-F1}=\displaystyle\frac{1}{C}\sum_{c=1}^{C}\text{F1}_c
Macro-F1 把每个类别轮流当作正例,算出一个 F1,再对所有类别取平均。每一类都有平等的发言权,稀有类别不再被淹没。
  1. C 表示类别总数例如同时捕捞三种鱼时,C=3。
    C=类别数C=\text{类别数}
  2. F1_c 表示第 c 类的 F1把“第 c 类”当作正例、其余所有类当作负例,套用二分类公式计算。
    F1c=2PcRcPc+Rc\text{F1}_c=\frac{2P_cR_c}{P_c+R_c}
  3. 取平均把全部 C 个 F1 相加后除以 C,得到各类同等权重的综合指标,比整体准确率更公平。
    Macro-F1=F11+F12+⋯+F1CC\text{Macro-F1}=\frac{\text{F1}_1+\text{F1}_2+\cdots+\text{F1}_C}{C}

AI 应用场景

医疗影像病灶初筛

阶段:模型评估与选择(上线前评估)

解决的问题:传统阅片依赖放射科医生逐张查看,疲劳状态下漏诊率高。AI 当“第一道筛网”,把可疑影像全部捞出来;筛网捞得宽,会带出大量正常影像,但代价只是增加复查工作量,远小于漏掉一个真病人。因此评估以召回率为主、精确率为辅。

具体案例:某三甲医院乳腺癌钼靶筛查项目中,AI 模型召回率达到 99.2%,意味着 100 位真病人最多漏掉 1 位;精确率约 65%,多出的 35% 由医生复核排除,漏诊数量大幅下降。

电商搜索相关性排序

阶段:线上效果评估(A/B 测试与指标监控)

解决的问题:用户搜"iPhone 15"却返回一堆手机壳,点击率会暴跌。搜索排序必须优先保证前排结果高度相关,少量长尾商品没被召回可以接受——这正是精确率优先的思路,和渔夫给高级餐厅供货同理。

具体案例:某电商平台把“前 10 条精确率”作为搜索排序的核心指标,相关性达标后再用召回率监控覆盖面,双指标齐上,搜索 GMV 明显提升。

银行交易反欺诈

阶段:模型上线后的持续监控与调优

解决的问题:漏掉一笔盗刷要赔钱,误冻一张卡要挨骂,误报与漏报的代价接近,因此用 F1 做综合评价,并通过调整阈值在两者之间寻找平衡点。

具体案例:某银行风控模型在 9:1 的不平衡交易数据上用 F1 调参,在精确率 72%、召回率 68% 的平衡点选定阈值,欺诈拦截率提升 2.3 倍。

Python 演示

python34 行
# 从零实现准确率/精确率/召回率/F1, 并用不平衡数据演示准确率虚高陷阱  def evaluate(y_true, y_pred):    # 输入两组 0/1 列表, 返回混淆矩阵四计数和四个评估指标    if len(y_true) != len(y_pred):        raise ValueError("两个列表长度不一致")    tp = sum(1 for a, b in zip(y_true, y_pred) if a == 1 and b == 1)    fp = sum(1 for a, b in zip(y_true, y_pred) if a == 0 and b == 1)    fn = sum(1 for a, b in zip(y_true, y_pred) if a == 1 and b == 0)    tn = sum(1 for a, b in zip(y_true, y_pred) if a == 0 and b == 0)    acc = (tp + tn) / len(y_true)    prec = tp / (tp + fp) if (tp + fp) else 0.0    rec = tp / (tp + fn) if (tp + fn) else 0.0    f1 = 2 * prec * rec / (prec + rec) if (prec + rec) else 0.0    return {"TP": tp, "FP": fp, "FN": fn, "TN": tn, "ACC": acc, "PRE": prec, "REC": rec, "F1": f1}  def main():    # 场景一: 类别均衡的小测试集    y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0]    y_pred = [1, 0, 0, 1, 0, 1, 0, 0, 1, 1]    print("场景一(均衡数据):", evaluate(y_true, y_pred))     # 场景二: 990 个负例 + 10 个正例, 模型永远预测负例    y_true2 = [0] * 990 + [1] * 10    y_pred2 = [0] * 1000    result = evaluate(y_true2, y_pred2)    print("场景二(不平衡数据):", result)    print("注意: 准确率 0.99 看似很高, 但召回率为 0, 一个正例都没抓到")  if __name__ == "__main__":    main()
目的:用纯 Python 从零实现四个评估指标,并在两组数据上对比,直观看到“准确率虚高”陷阱。
  1. tp = sum(1 for a, b in zip(y_true, y_pred) if a == 1 and b == 1)用 zip 把真实和预测逐对配对,两边同为 1 才计数,统计网里的鱼 TP。
  2. prec = tp / (tp + fp) if (tp + fp) else 0.0除零保护:预测正例数为 0 时精确率记 0,而不是抛异常。
  3. return {"TP": tp, "FP": fp, "FN": fn, "TN": tn, "ACC": acc, "PRE": prec, "REC": rec, "F1": f1}把四笔账和四个指标打包成字典一次返回,方便打印观察。
  4. y_true2 = [0] * 990 + [1] * 10用列表乘法构造 990 个负例加 10 个正例的极端不平衡数据。
  5. y_pred2 = [0] * 1000模拟“永远预测负例”的懒惰渔夫模型,一条鱼都不捞。
  6. if __name__ == "__main__":让文件既能用 python demo.py 直接运行,也能被其他模块安全导入。

常见误区

误区“我这模型在测试集上准确率 99%,肯定是好模型!”初学者常把准确率当作模型的唯一命根。

正解在类别严重不平衡时(如 99% 负例),一个永远预测负例的“懒惰模型”也能拿到 99% 准确率。准确率只回答“整体对了多少”,不回答“正例抓得准不准、全不全”。对不平衡数据,要看精确率、召回率和 F1。用渔夫的比喻说:一个天天报告“海里没有鱼”的渔夫,准确率再高也是一网没打。

为何常见:准确率最直观、最好算,人们从小“考试打几分”的思维惯性,让人默认它等于模型好坏,忽略了样本分布的影响。

误区“精确率和召回率是矛盾的,模型只能保住一个。”很多初学者在同一阈值下对比,得出“鱼和熊掌不可兼得”的结论。

正解两者确实存在权衡,但它们是同一张网、同一根分界绳的两个视角。你可以通过移动阈值在两者之间滑动:极左取召回、极右取精确、中间取 F1 最大。并不是物理上只能要一个,而是要在“网里纯度”和“海里覆盖率”之间找平衡点。

为何常见:初学者常在固定阈值下比较,发现一个升一个降,就误以为是宿命,忽略了阈值本身可以调整。

误区“精确率就是判对的占全部的比值,跟准确率差不多吧?”被“精确”两个字带偏。

正解准确地说,精确率的分母是“预测为正”的样本数(TP+FP),分子是其中真正为正的(TP);召回率的分母才是“真实为正”的样本数(TP+FN)。两者分子相同、分母不同,含义完全不同。一句口诀:精确率看“捞上来的货干不干净”,召回率看“海里的鱼捞得全不全”。

为何常见:“精确”这个词容易让人联想到“整体判得很准”,于是被字面意思误导,和准确率混为一谈。

误区“F1 不就是把精确率和召回率加起来除以二嘛。”初学者凭日常经验想当然。

正解F1 用的是调和平均:F1 = 2PR/(P+R)。当两数差异很大时,调和平均远低于算术平均,能有效惩罚偏科。比如 P=90、R=10 时,算术平均是 50,F1 却只有 18。F1 的设计初衷就是防止一个指标靠另一个指标“带飞”。

为何常见:算术平均最常出现在日常生活中,人们习惯性套用“平均一下”的思维,忽略了 F1 刻意采用调和平均的良苦用心。

误区“多分类评估?算一下判对的比例不就行了,什么 TP、TN 根本不用管。”初学者想用一个数字打发一切。

正解多分类下“判对比例”依然可用,但它会掩盖各类别之间的差异——某个稀有类别表现再差,只要其他类别样本够多,整体准确率照样好看。标准做法是:把每一类轮流当正例、其余当负例,算出各类的精确率、召回率、F1,再求宏平均(Macro)或微平均(Micro)。类比渔夫:海里有三种鱼,只报“总渔获量”会让珍贵的石斑鱼被漏抓还不自知。

为何常见:二分类概念学太熟,遇到多分类总想简化成单一数字,忽略类别间的结构性差异。

面试题

Q1. 精确率的计算公式是?

单选题 · easy

  • A.TP 除以 TP 加 FN
  • B.TP 除以 TP 加 FP← 正确答案
  • C.TP 加 TN 除以样本总数
  • D.两倍 PR 除以 P 加 R

答案:B。精确率的分母是所有被预测为正的样本(TP+FP),分子是其中真正的正例 TP,B 正是“网里的鱼除以网里全部东西”。A 是召回率,C 是准确率,D 是 F1。用渔夫账本记:A 问海里的鱼捞全没有,B 才问网上的货纯不纯。

Q2. 准确率的计算公式是?

单选题 · easy

  • A.正确预测数占全体样本的比值← 正确答案
  • B.预测为正的样本数占全体比值
  • C.真实为正且预测为正的比值
  • D.真实为正且预测为正除以预测为正

答案:A。准确率 = (TP+TN)/(TP+TN+FP+FN) = 正确预测数 ÷ 样本总数,对应 A。B 只数正例预测,C 接近召回率的分母,D 是精确率的分子分母结构。渔夫视角:准确率是把四筐货全点一遍,看“干对的”占几成。

Q3. 召回率低说明模型存在什么问题?

单选题 · mid

  • A.误报的正例数量太多
  • B.漏报的正例数量太多← 正确答案
  • C.误报的负例数量太多
  • D.样本数量太少无法训练

答案:B。召回率 = TP/(TP+FN),分母是真实为正的全部样本,召回率低意味着 FN(漏网之鱼)很多,即漏报太多。A、C 描述的误报对应精确率低;D 与召回率无直接关系。渔夫版解释:海里的鱼没捞上来几条,要么网眼太大,要么撒网策略出了问题。

Q4. 垃圾邮件过滤场景,误删正常邮件代价极高,应优先优化哪个指标?

单选题 · mid

  • A.准确率,因为整体最重要
  • B.精确率,减少正常邮件误删← 正确答案
  • C.召回率,多抓垃圾邮件
  • D.F1,综合平衡两者

答案:B。“误删正常邮件”属于 FP(把负例判成正例),代价高的错误要重点压住,对应指标是精确率 TP/(TP+FP)。选召回率会让拦截更全、但误删更多;准确率在不平衡数据上会虚高;F1 是两者妥协,无法单独表达“误报最贵”的业务约束。就像给高级餐厅供货,垃圾一条都不能混进网里。

Q5. 已知 TP=90, FP=10, FN=30, TN=70,召回率是多少?

单选题 · mid

  • A.0.75← 正确答案
  • B.0.90
  • C.0.80
  • D.0.70

答案:A。召回率 = TP/(TP+FN) = 90/(90+30) = 0.75。分母别记成 TP+FP(那是精确率),更别用全体样本(那是准确率)。渔夫视角:海里一共 120 条鱼,捞上来 90 条、漏了 30 条,捞到的比例就是 0.75。

Q6. F1 分数在数学上的性质是?

单选题 · hard

  • A.精确率与召回率的算术平均
  • B.精确率与召回率的调和平均← 正确答案
  • C.精确率与召回率的几何平均
  • D.精确率与召回率的最大值

答案:B。F1 = 2PR/(P+R),是调和平均,特点是“偏科受罚”:P=90、R=10 时算术平均为 50,调和平均只有 18。几何平均对低分也敏感但不如调和平均强烈;最大值则完全无视拖后腿的指标。渔村评先进的道理:两门课都得扎实,一门低分总评就崩。

Q7. 正例仅占 1% 的不平衡数据上,某模型把所有样本都预测为负例,下列判断正确的是?

单选题 · hard

  • A.准确率 99% 说明模型表现优秀
  • B.准确率 99% 但召回率为 0← 正确答案
  • C.准确率 99% 但精确率为 99
  • D.准确率 99% 且 F1 为 0.99

答案:B。全预测负例时 TP=0、FP=0、FN=10、TN=990,准确率 990/1000=0.99,但召回率 TP/(TP+FN)=0,F1 也为 0;精确率分子分母都是 0,按惯例记 0 而非 99。这正是不撒网的“懒惰渔夫”:总账好看,一个正例也没抓到。

Q8. 下列哪些属于混淆矩阵中的基本计数?

多选题 · mid

  • A.真阳性 TP 计数← 正确答案
  • B.假阳性 FP 计数← 正确答案
  • C.曲线下面积 AUC
  • D.真阴性 TN 计数← 正确答案

答案:ABD。混淆矩阵的四个格子是 TP、FP、FN、TN,分别对应网里的鱼、网里的垃圾、漏网的鱼、留在海里的杂物,A、B、D 都在其中。AUC 是 ROC 曲线下的面积,属于另一类评估指标,不是基本计数。

Q9. 在模型不变的前提下,想提高召回率可以怎么做?

多选题 · hard

  • A.降低阈值捕获更多正例← 正确答案
  • B.提高阈值只保留高置信正例
  • C.撒网更广覆盖更多水域← 正确答案
  • D.单独减少负例样本数量

答案:AC。降低阈值会让更多样本被预测为正例,通常召回率上升、精确率下降;等效地,“撒网更广”也能捞到更多正例。提高阈值方向相反,会降低召回率;单独删负例并不改变 TP 与 FN 的比值,无法系统性提升召回率。这就像调渔网的分界绳:往左拉更激进,往右拉更保守。

Q10. 关于 Macro-F1 的说法正确的有?

多选题 · extreme

  • A.先算各类 F1 再取平均← 正确答案
  • B.对稀有类别更加敏感← 正确答案
  • C.与准确率数值完全等价
  • D.每个类别权重完全相同← 正确答案

答案:ABD。Macro-F1 把每个类别轮流当正例算出 F1,再对所有类别取算术平均,A、D 正确。由于每类权重相同,稀有类别表现差会明显拉低总分,因此它比整体准确率更能暴露不平衡问题,B 正确。C 错误:准确率与 Macro-F1 在数值上并不等价。就像渔民分别统计多种鱼的捕捞质量再求平均,总渔获量再高也掩盖不了某一种鱼几乎捞不到。