P4-6.4 补充学习:评估指标的问题地图¶
Section ID:
P4-6.4Version:v2026.07.24
副标题: ROC、PR、log loss、calibration、silhouette 分别回答什么评估问题?
在 P4-6.1 和 P4-6.2 里,我们先抓住了评价指标的作用,以及按问题类型区分的差异。但是,只要开始读实际文档或库文档,很快就会碰到更陌生的名字。
- ROC curve
- PR curve
- log loss
- calibration
- silhouette score
这段补充学习的目的,不是去长篇计算公式。目的是把这些指标 到底是在回答什么问题 接起来。
本补充学习的范围¶
这一节是第一次读 ROC、PR、log loss、calibration、silhouette 的补充学习,它们经常出现在分类和聚类里。这里比起细节证明,更专注 什么时候会看到它们,为什么会看到它们。
- 为什么 ROC 和 PR 曲线会接到 score 与 threshold 的问题上?
- 为什么 log loss 会让人不只看对错,还要一起看概率输出?
- 为什么 calibration 会让人重新怀疑
看起来像概率的分数? - 为什么 silhouette 会让人在 clustering 里即使没有标准答案,也还能去读结构?
这一节先收束一个问题:为什么在阅读评价指标时,ROC、PR、log loss、calibration、silhouette 这些名字会分别出现。ROC/PR 和 calibration 会在 P4-15.3 再次出现,cluster 结构读取与 silhouette 的连接会在 P4-17.1、P4-17.2 继续展开。
用补充学习:第一次如何读 ROC、PR、对数损失(log loss)、校准(calibration)、轮廓系数(silhouette)恢复的概念连接¶
- 能说明 ROC 和 PR 曲线是通过改变 threshold 来读取分类性能的工具。
- 能说明 log loss 是连概率输出的自信程度也一起读取的指标。
- 能把 calibration 解释成分数和真实频率是否匹配。
- 能把 silhouette score 解释成同时看 cluster 内部紧密度与 cluster 之间分离度的内部标准。
先抓住大地图¶
这五个名字,其实分别在回答不同问题。
| 项目 | 先读的问题 |
|---|---|
| ROC curve | 如果改变区分正负类的标准,会发生什么变化? |
| PR curve | 在正类稀少的情况下,precision 与 recall 的平衡会怎样变化? |
| log loss | 不只是对错,而是错的时候到底有多过度自信? |
| calibration | 像 0.8 这样的分数,现实里真的大约意味着 80% 频率吗? |
| silhouette | 即使没有答案 label,分组是不是仍然紧密且分离? |
也就是说,这些指标会在 accuracy 一个指标不够用的时候 出场。
如果把这一节的角色再压缩一点,它就是 在读正文评价问题时,暂时需要更细分的读分数标准时,绕进来一下的地方。
| 当前卡住的问题 | 在这段补充学习里先看什么 | 要回去的正文位置 |
|---|---|---|
| 分类分数看懂了,但 threshold 一变会有什么不同? | ROC, PR | P4-6.2, P4-15.3 |
| accuracy 看起来还行,但概率分数本身能不能直接信? | log loss, calibration | P4-6.2, P4-15.3 |
| 做出了 clustering 结果,但没有答案 label 时还能不能读结构? | silhouette | P4-17.1, P4-17.2 |
这些补充指标会被拿出来,是以 当前问题是不是正文里的指标已经足够,还是需要更细的读取框架 为标准。
| 当前问题 | 这一节先看什么 | 原因 |
|---|---|---|
| threshold 一变,FP/FN 平衡会怎样变化? | ROC, PR | 因为分类分数和 threshold 变化会一起移动 |
| 概率分数的自信程度本身能不能信? | log loss, calibration | 因为只看对错还不够看概率解释 |
| 没有答案时,cluster 结构是不是像样? | silhouette | 因为需要另外的内部结构标准 |
所以,这一节不是取代正文的新评价章,而是用来更细地读取正文里已经立好的 按问题类型分开的问题 的绕行节。在这里把名字和问题接上之后,再回到正文里的分类、聚类、threshold 调整场景去读,会最自然。
第一次读时,不只要抓住 这个指标能告诉什么,也最好一起抓住 它单独还不能告诉什么。
| 名字 | 它主要告诉什么 | 它单独还不能充分告诉什么 |
|---|---|---|
| ROC | 整体区分能力的全景 | 实际运营里该选哪个 threshold |
| PR | 正类决策质量的变化 | 分数本身能不能像概率一样被信任 |
| log loss | 概率输出是否过度自信 | 高分是否和真实频率一致 |
| calibration | 分数解释的可信度 | model 是否把正负类区分得好 |
| silhouette | cluster 结构的内部质量 | 这个 cluster 在实际业务解释上是否有用 |
先抓住这张表,后面看到这些看起来很像的名字时,就不容易只记住名称差异,而忘掉判断层位的差异。
ROC 和 PR 曲线会把 threshold 问题显露出来¶
在 P4-6.2 里,我们说过 classification 不只是把类别猜对,还包括怎样把分数变成决策。ROC 和 PR 曲线,就是让这一点可以被读出来的工具。
ROC 和 PR 曲线会显示:只要把 model 给出的分数,从哪个值开始当正类这件事改掉,误报与漏报的平衡也会一起变。
ROC curve 会用 false positive rate 和 true positive rate 来显示这个平衡。PR curve 则用 precision 和 recall 来显示。
之所以要把两者分开读,原因如下。
| 工具 | 特别有用的场景 |
|---|---|
| ROC curve | 想看整体区分能力的时候 |
| PR curve | 正类很稀少,而且 precision-recall 平衡特别重要的时候 |
例如,在 fraud detection、disease screening、anomaly transaction detection 这类正类比例很低的问题里,PR curve 往往会更直观。
初学者很容易漏掉的一点是:曲线看起来不错 这句话,还没有帮你把决策规则做完。ROC 和 PR 会显示 model 对分数的区分能力到什么程度,但到了实际 service 里,还是必须决定到底在哪个 threshold 上切分成 block、review、pass。也就是说,曲线不是代替决策的答案,而更像是一张让人讨论应该从哪里切开的地图。
读这两条曲线时,如果先按下面这个问题顺序来读,就不容易混乱。
| 先看的问题 | 从 ROC 这边读到的感觉 | 从 PR 这边读到的感觉 |
|---|---|---|
| model 整体上有没有把正负类分开的能力? | 看 TPR 和 FPR 的整体平衡 | 它不直接回答,但能看到 recall 的变化 |
| 在正类稀少的现实里,正类决策质量还撑得住吗? | 在类别不平衡场景下直觉会变弱 | 因为 precision 一起出现,所以更直接 |
| threshold 稍微往下调一点,会先摇到什么? | 看 FPR 会不会很快上升 | 看 recall 上升时 precision 会掉多少 |
也就是说,ROC 往往更像在展示 整体区分能力全景,而 PR 往往更直接在展示 正类决策的成本结构。
把 ROC 和 PR 接到真实判断上¶
即使是同一个 model,只要 threshold 放的位置不同,运营结果就会差很多。
- 一般来说,threshold 调高,正类判定会更谨慎,FP 可能减少。
- 但这样也会让 FN 增加,也就是漏掉更多真正正类。
- threshold 调低后,recall 可能会上升,但 precision 可能会急剧变差。
因此,ROC 和 PR 不只要和 model 分数看起来还行吗 一起读,还要和 这个业务到底更承受不了哪一种错误 一起读。若是 spam 拦截,更重要的可能是不要让正常邮件错误过多;若是疾病筛查,更重要的可能是尽量少漏掉风险案例。
用一个很小的数值场景来读,会更直观。
| threshold 变化 | precision | recall | 读起来的感觉 |
|---|---|---|---|
| 0.80 | 0.94 | 0.41 | 警报很谨慎,但漏得很多 |
| 0.50 | 0.82 | 0.73 | 可能是一个相对平衡的点 |
| 0.20 | 0.48 | 0.93 | 几乎都抓到了,但误报负担变大 |
这张表说明:ROC 和 PR 不是在简单说 好/坏,而是在帮助读 在什么成本结构下,哪个 threshold 更合适。
ROC 和 PR 不能独自回答的问题¶
即使 ROC 和 PR 很有用,它们也不能独自解决下面这些问题。
0.82这个分数,真的可以直接读成 82% 风险吗?- 高分案例那一组,实际危险比例是不是也差不多这么高?
- 改完 threshold 以后,人工复核人力、客户不满、运营成本到底会增加多少?
也就是说,ROC 和 PR 能帮助启动决策边界讨论,但它们并不会把分数解释的可信度一口气讲完。
log loss 会连概率输出的自信程度一起看¶
accuracy 先看的是对了还是错了。但有些 model 可能 虽然答对了,却非常没有把握;反过来,也可能 答错了,却非常自信。
log loss 正是为了读这个差别而出现。
log loss 会把答错视为问题,但如果是用非常高的概率去说错,它会惩罚得更重。
也就是说,log loss 会让 classification 变成 连概率输出也一起评价 的读取方式。
所以,log loss 会和下面这些问题更自然地接上。
- 这个 model 只看对错就够了吗?
- 还是说,连分数的自信程度也应该一起看?
之所以需要这个指标,是因为即使是 同样答对了,答案质量也可能不同。比如两个 model 都把正答类猜对了,但一个给 0.51,另一个给 0.95,那它们在后面的 threshold 调整、排序、后续决策里的用处就会不同。
还有更危险的场景。
| 情况 | 如果只看 accuracy | log loss 会更敏感地看到什么 |
|---|---|---|
| 用 0.51 勉强答对 | 会被算成答对 | 因为把握很弱,不会给高评价 |
| 用 0.55 答错 | 会被算成答错 | 看作答错了,但过度自信还不算特别严重 |
| 用 0.99 答错 | 也只是答错 | 会把它当成非常危险的过度自信来重罚 |
所以,log loss 不只是在问 错没错,它还在问 错得有多危险。
什么场景下更该先想起 log loss¶
- 当预测概率会被直接拿去排序、排优先级、做自动批准标准时
- 当后面还很可能调 threshold,因此分数本身的质量很重要时
- 当 accuracy 一样,但需要分辨哪个 model 给出的分数更值得信任时
这些场景下,只看 accuracy 和 F1 往往不够,还必须更细地读概率输出的样子。
再加一个简单对照,意图会更清楚。
| model | accuracy | 正答类概率例子 | 读起来的感觉 |
|---|---|---|---|
| 模型 A | 0.90 | 像 0.51、0.54、0.58 这样勉强答对 | 虽然答对,但分数把握很弱 |
| 模型 B | 0.90 | 像 0.88、0.91、0.95 这样很明确地答对 | 即使 accuracy 一样,也更容易接到后续决策 |
也就是说,log loss 有助于分辨:在同样的正确率下,哪个 model 的分数更值得信任。
但 log loss 也不能单独解决一切。即使 log loss 很低,也不能立刻说 如果分数是 0.8,就真的有 80% 这么高。这个问题还得再用 calibration 去确认。
calibration 会看分数和真实频率是否匹配¶
就算 model 说了 0.82,也不代表现实世界里这个分数就一定精确对应 82% 的频率。calibration 就是在看这个差距。
calibration 这个视角会问:把相近分数的案例聚在一起之后,这个分数和真实发生频率是不是差不多。
例如,如果拿到 0.8 左右分数的 100 个案例里,大约有 80 个是真正正类,那就可以读成 calibration 还比较吻合。如果只有 40 个,那这个分数的解释就要更小心。
这个视角在下面这些场景里尤其重要。
- 把风险分数当作优先级来使用的服务
- 概率解释会直接接到决策上的场景
- 定 threshold 时,必须相信分数大小本身的场景
因为 P4-15.3 还会再回到 threshold 调整和 calibration,所以这一节先把 看起来像概率的分数,也必须重新检查 这个视角接上。
初学者尤其容易混淆的是:分类做得好 和 概率说得好 并不是同一种能力。有些 model 也许能把正负类排得比较有顺序,但分数值本身仍可能和实际频率不符。也就是说,ranking 可能还行,但 probability interpretation 可能很差。
像下面这样区分,会更清楚。
| 问题 | 更接近的工具 |
|---|---|
| 能不能把谁更危险按顺序排出来? | ROC、PR 这样的区分视角 |
像 0.8 这样的数字,真的能当 80% 来读吗? | calibration 视角 |
例如,如果只把 0.8 以上风险分数的案例交给人审,那么运营方关心的不只是 风险排序大体对不对,还会想知道 0.8 以上这一组,现实里是不是真的属于高风险群体。这时,calibration 就会直接连到 threshold 政策、人力配置和对客户的可解释性。
不要轻率误解 calibration¶
calibration 好,并不自动代表分类性能就好。反过来,分类性能好,也不保证 calibration 就好。
- 可能存在很会区分,但概率解释过度夸张的 model。
- 也可能存在概率看起来像样,但实际区分能力很弱的 model。
- 所以,现实里必须把
会不会区分和分数解释准不准分开来看。
用一个短对照场景来看,可以这样读。
| 分数区间 | model 说的正类概率 | 实际正类比例 | calibration 读法 |
|---|---|---|---|
| 0.8 附近案例组 | 大约 80% | 大约 78% | 比较吻合 |
| 0.8 附近案例组 | 大约 80% | 大约 43% | 这个分数过度自信 |
这个差别不只是一个小数值误差,它会摇动很多实际决策:该选多少人工复核对象、如何向客户解释风险分数、threshold 应该放在哪里。
反过来,即使 calibration 看起来不错,也还没结束。因为分数解释可能很准,但真正把正负类分开的能力仍然可能弱。所以,calibration 是看 概率口吻是否可信 的工具,并不是代表整个分类问题的万能分数。
silhouette 是在没有标准答案时读取 cluster 结构的内部标准¶
我们在 P4-6.2 里已经看过,在 clustering 里可能根本没有答案 label。silhouette score 就是这种场景下经常出现的内部评价标准。
silhouette score 是一种标准:同一个 cluster 里面越近、和别的 cluster 越远,就越像是更好的分组。
silhouette 可以理解成:同时比较 和自己 cluster 的接近程度 与 和最近其他 cluster 的距离。
所以,silhouette 有助于下面这些问题。
- 当前分组是不是混得太厉害?
- 如果 cluster 数改变,结构会不会变得更好?
因为 P4-17.1 和 P4-17.2 还会再遇到 clustering 结果解释和 cluster 质量指标,所以这里先把 即使没有答案,也能读结构的内部标准 这个点固定住。
读 silhouette 时,最好暂时放下读分类指标时的习惯。因为在这里,首先问的不是 到底对了多少答案,而是 这个分组本身看起来是否自然。
下面这个问题顺序会有帮助。
| 问题 | silhouette 为什么能帮忙 |
|---|---|
| 同一个 cluster 里的样本是不是没有离得太远? | 它反映 cluster 内部紧密度 |
| 最近的其他 cluster 是不是足够远? | 它反映 cluster 之间分离度 |
| cluster 数增加或减少时,结构有没有变得更好? | 它能作为内部结构比较标准 |
但 silhouette 也不是万能的。即使数值高,也不保证这个 cluster 在真实业务解释里就一定有用。例如,购买模式被非常干净地分成三群,也不能立刻说它们就是 好 cluster,如果这些分组根本接不到营销策略或运营政策。
所以,silhouette 先帮助的是 从数学上看,这个分组是不是整齐,但它并不会单独回答 从业务上看,这个分组是不是有用。
最好也一起记住这个短对照场景。
| cluster 结果 | silhouette 读法 | 紧接着会来的下一个问题 |
|---|---|---|
| cluster 内部紧密,彼此分离良好 | 结构看起来比较像样 | 能给这组分群贴上名字吗? |
| cluster 之间重叠很多 | 结构看起来不稳定 | 是 cluster 数不对,还是特征构成有问题? |
| 数值高,但解释很模糊 | 数学分离还可以 | 这是不是能接到实际工作的分群标准? |
正因为这样,silhouette 通常很适合作为 第一道内部检查工具,但它不会变成最终解释负责人。clustering 最后还是要走到 人能给这组分群读出什么名字,才能接到真正使用上。
即使在同一个问题里,问题也会分叉¶
即使只看 fraud detection 这种一个 classification 问题,问题也会像下面这样分成几条线。
| 同一个问题里的细分提问 | 更该先拿出的名字 | 原因 |
|---|---|---|
| 如果把阻断 threshold 从 0.7 降到 0.5,会发生什么? | ROC, PR | 因为 FP/FN 与 precision/recall 的平衡都会一起动 |
| 如果 accuracy 一样,哪个 model 错得更危险、更自信? | log loss | 因为想更重地看过度自信的错答 |
| 风险分数 0.8 能不能直接写进政策? | calibration | 因为必须确认分数与真实频率是否吻合 |
| 客户类型分组是否真的形成了结构? | silhouette | 因为得先看没有答案 label 的内部结构 |
也就是说,一个问题里有很多指标,并不是在说它被无端复杂化了,而是在说:即使是一个问题,里面也会有不同层位的判断。
再按不同层位把这五个指标重新捆起来¶
如果把到这里的内容再压缩一次,这五个名字并不是同一种指标。
| 指标 | 更接近的层位 | 核心问题 |
|---|---|---|
| ROC, PR | 分类分数与 threshold 调整 | 应该在什么地方把分数切成决定? |
| log loss | 概率输出质量 | 错的时候,到底有多危险地过度自信? |
| calibration | 分数解释的可信度 | 像 0.8 这样的数字,到底能信多少? |
| silhouette | cluster 结构的内部质量 | 即使没有答案,这个分组也像样吗? |
也就是说,ROC 和 PR 会在 决策边界移动时 出现,log loss 会在 要看概率自信时 出现,calibration 会在 必须相信概率解释时 出现,而 silhouette 会在 要读没有答案的结构时 出现。
只要不把这些层位混在一起,即使在同一个 classification 问题里,也能把问题拆开来读。
| 同一个 fraud detection 问题里的提问 | 先拿出的工具 |
|---|---|
| 该在哪个位置把分数切成阻断标准? | ROC, PR |
| 这个 model 在答错时是不是太自信? | log loss |
风险分数 0.8 真的能当成 80% 来读吗? | calibration |
| 高风险客户分组是否真的形成结构? | silhouette |
不必一次把这五个名字都背住¶
真正重要的不是背指标名字,而是把它们和问题接起来。
| 问题 | 对应的名字 |
|---|---|
| 改 threshold 会发生什么? | ROC, PR |
| 概率输出是不是太自信? | log loss |
| 分数和真实频率匹不匹配? | calibration |
| 没有答案 label 时,分组结构是不是还像样? | silhouette |
也就是说,这些指标全都是在 accuracy 一个不够用的时候 才被拿出来的工具。
案例与示例¶
案例 1. fraud detection 分数很高,但真实运营判断还是摇晃¶
支付系统正在给每一笔交易打一个 fraud 风险分数。人最先使用的标准,是 是不是海外支付、是不是和平常不同的时间段、是不是在很短时间里尝试了很多次 这样的信号。
在只用 accuracy 和 recall 比较 model 的阶段,一走到真实运营,就会出现更复杂的问题。有的 model 看起来正负类分得不错,但只要 threshold 稍微一动,误报就会剧增;有的 model 会给出很多 0.8 这样的概率分数,但实际上那些案例并没有那么危险。再把客户按 cluster 分组时,人又会想另外看看高风险交易是否会聚到某些分组里。
这时,ROC 和 PR 会让人读出 threshold 变化时到底动了什么,log loss 会让人读出答错时到底有多过度自信,calibration 会让人检查分数本身到底能信多少,而 silhouette 会在没有答案 label 的客户分组结构里出现。
flowchart TD
A["欺诈风险分数"]
B["调整阈值"]
C["检查 精确率-召回率 的变化"]
D["检查分数置信度"]
E["检查分数与频率是否匹配"]
F["检查无标签客户群组"]
A --> B --> C
A --> D
A --> E
A --> F
同样的判断,也可以用一小段代码输出确认。下面的例子会从同一组二分类概率输出里计算 ROC-AUC、PR-AUC、log loss、calibration bin,再在另一组小的 cluster 坐标上计算 silhouette。
输出示例如下。
这个输出说明,指标名字变多是有原因的。ROC-AUC 和 PR-AUC 会从不同角度读取同一组概率排序,log loss 会把概率自信程度作为惩罚来读。calibration bin 让我们看到类似 看起来像 0.483 的分数组里,真实阳性频率是 0.667 这样的关系。silhouette 问的不是有没有对上答案 label,而是给定 cluster 内部是否紧密、彼此之间是否分开。
可检验的结果也会随着问题不同而不同。只要 threshold 一动,就要分别看 precision 和 recall 的摆动;只要看高风险分数组,就要确认它和真实欺诈比例是否吻合;只要看 cluster,就要单独看 cluster 里面的交易是不是真的彼此相似。所以,这些指标不该被读成 新名字,而该被读成对 更具体问题 的回应工具。
检查清单¶
- 能不能说明在什么时候,该在正文的 accuracy/precision/recall 之后把 ROC 和 PR 拿出来?
- 能不能说明为什么 log loss 和 calibration 会让人重新怀疑
看起来像概率的分数? - 能不能说明 silhouette 在 clustering 里回答的是哪一种内部问题?
- 能不能说明评价指标会变多,不是因为 model 更复杂了,而是因为我们提出的问题更具体了?
- 能不能说明 ROC 和 PR 读的是 threshold 改变时的分类平衡,log loss 读的是概率输出的自信程度,calibration 读的是分数和真实频率是否匹配?
- 能不能说明
指标很多这句话,其实连着好结果的含义不只一个?
出处与参考资料¶
- scikit-learn developers, Metrics and scoring: quantifying the quality of predictions, 确认日期: 2026-06-29.
- scikit-learn developers, Probability calibration, 确认日期: 2026-06-29.
- scikit-learn developers, Clustering performance evaluation, 确认日期: 2026-06-29.