分类
逻辑回归先输出“是正类的概率”。分类这一章要解决更实际的问题:概率到多少才算正类?错判的代价不同,该看哪项指标?怎样比较两个模型?
- 区分“概率模型输出”和“最终分类标签”。
- 读懂 TP、FP、TN、FN 及其在混淆矩阵中的位置。
- 按误报、漏报和类别不平衡选择正确指标。
- 解释 ROC、AUC、预测偏差以及二分类、多类别、多标签的区别。
阈值与混淆矩阵
二元分类不是模型直接说“是”或“否”。它先给正类概率 p,再把 p 与阈值比较。阈值是产品和业务的选择,0.5 只是常见默认值,不是自然规律。
1.1 阈值该怎么选
| 模型给出的正类概率 | 阈值为 0.50 | 阈值为 0.95 | 解释 |
|---|---|---|---|
| 0.51 | 正类 | 负类 | 刚超过默认门槛,并不表示很有把握 |
| 0.99 | 正类 | 正类 | 在严格门槛下仍被判为正类 |
它只代表“模型认为正类概率刚好超过一半”。若一次漏诊比十次误报更危险,通常应降低阈值;若自动拦截一笔正常支付的伤害更大,则应提高阈值。阈值要由错误代价和处理能力决定。
- 疾病筛查、危险物种检测、欺诈初筛。
- 希望尽量不要错过真实正类。
- 通常降低阈值,接受更多误报。
- 把正常邮件移入垃圾箱、拒绝正常支付。
- 希望被报出来的正类更可靠。
- 通常提高阈值,接受更多漏报。
类别极不平衡时尤其不能机械地选 0.5。例如正类只占 0.01% 时,阈值要结合人工审核能力、误报成本和实际正类比例制定。
1.2 四种结果组成混淆矩阵
预测为正的数量通常减少,所以 TP 和 FP 常一起减少;预测为负的数量增加,TN 和 FN 常一起增加。这就是指标之间权衡的根源。概率刚好等于阈值时应判正还是判负,取决于所用框架的实现;上线前要把这条规则写清楚并一致测试。
准确率、召回率、精确率与 F1
没有一项指标在所有业务中都最好。指标只是把混淆矩阵的四格用不同方式相加或相除,重点在于它把哪类错误视为最重要。
| 指标 | 公式 | 它真正问的问题 | 适合关注 |
|---|---|---|---|
| 准确率 Accuracy | (TP+TN)/(TP+TN+FP+FN) | 总体有多少判断正确? | 类别大致平衡时的粗略概览 |
| 召回率 Recall / TPR | TP/(TP+FN) | 所有真实正类,找回了多少? | 漏报代价高 |
| 精确率 Precision | TP/(TP+FP) | 报为正的里面,有多少是真的? | 误报代价高 |
| 假正例率 FPR | FP/(FP+TN) | 真实负类有多少被误报? | 控制误报比例 |
| F1 | 2PR/(P+R) | 精确率和召回率能否同时兼顾? | 类别不平衡且两者都重要 |
2.1 只看准确率会被“高分”骗过
假设 1,000 笔交易里只有 10 笔欺诈。一个模型永远预测“正常”,会正确预测 990 笔,准确率达到 99%;但它没有识别任何欺诈,TP=0、召回率=0。这种模型在业务上几乎没有价值。
准确率 99%
召回率 = 0%
一个典型的类别不平衡陷阱召回率 80%
还要看 FP 与精确率
是否更好取决于误报成本2.2 用一个混淆矩阵手算指标
设验证集结果为 TP=40、FP=10、TN=930、FN=20:
这里准确率看起来很高,但它受大量 TN 的影响。若业务目标是尽量抓到欺诈,就必须重点看召回率;若人工审核成本高,也不能忽视精确率。
降低阈值通常会提高召回率,却可能降低精确率;提高阈值则常出现相反趋势。因此比较两个模型时,要么在同一个阈值下比较,要么把整条 ROC 或 PR 曲线一起看。
如果模型没有预测任何正类,精确率的分母 TP+FP 等于 0,结果会是未定义(NaN)。这表示当前阈值或模型让“预测为正”这件事根本没有发生,应该回看样本数、阈值和混淆矩阵。
漏掉正类更严重,优先召回率;误报正类更严重,优先精确率或 FPR;正负类相近时可参考准确率;两者都重要且类别不平衡时看 F1 和 PR 曲线。
ROC、AUC 与模型排序
前面的指标都固定在一个阈值上。如果想知道模型在所有阈值下的表现,就可以画 ROC 曲线:横轴是假正例率 FPR,纵轴是真正例率 TPR,也就是召回率。
ROC所有阈值的取舍图
每个点对应一个阈值下的 FPR 与 TPR。
AUC = 1完美排序
随机拿一个正类和负类,正类总被排在前面。
AUC = 0.5接近随机
正负类的排序没有有效信息。
3.1 AUC 衡量排序能力,不会替你决定阈值
AUC=0.93 表示模型整体上很擅长把正类排在负类前;但最终选阈值仍要看代价。如果误报很严重,可以从 ROC 上选择 FPR 很低的点;如果漏报更严重,则选择 TPR 更高的点。
- 先设定可接受的最大 FPR。
- 在这个约束下选 TPR 尽量高的阈值。
- 例如自动拒付前通常会更保守。
- 先设定最低可接受 TPR(召回率)。
- 在这个约束下控制 FPR。
- 例如疾病初筛通常会更宽松。
它比随机排序还差。先检查正负类定义、标签和分数方向是否写反;若只是分数方向完全反了,把排序反过来理论上会得到超过 0.5 的 AUC,但这不是跳过数据排查的理由。
ROC/AUC 在类别大致平衡时便于比较。正类非常少时,精确率–召回率曲线通常更能看出“报出来的正类到底准不准”。
预测偏差与多类别分类
4.1 预测偏差:快速检查整体校准
预测偏差比较一批预测的平均值与对应标签的平均值:
例如评估集里 5% 是垃圾邮件,模型在同分布数据上的平均预测概率也应接近 5%。如果平均预测为 50%,说明整体明显高估了正类。这并不能直接定位原因,但能快速发出信号:训练数据可能有偏或带噪声、训练与线上分布可能漂移、正则化可能过强、特征可能不足,或者数据处理流水线存在错误。
模型可能在每个样本上都给出 0.05,平均值恰好正确,却无法区分哪封邮件真是垃圾邮件。预测偏差适合做早期健康检查,还要和 AUC、召回率等一起看。
4.2 类别超过两个时,先问“能否同时属于多个类”
- 一张手写图片只能是 0~9 中的一个数字。
- 输出各类别概率,通常总和为 1。
- 可用 Softmax 或多个二分类器处理。
- 一张照片可以同时有“海滩”“日落”“人物”。
- 每个标签需要单独的概率和阈值。
- 各标签概率不要求相加为 1。
若类别 A、B、C 互斥,可以先判断“属于 A 或 B”还是“属于 C”;只有落入前者时,再判断“A 还是 B”。这是一种层级拆分思路。它适合类别之间本来就有清晰层级的场景;若没有这种结构,也可以直接训练一个一次输出 A、B、C 概率的多类别模型。
分类先把概率按阈值转成标签,再用混淆矩阵记录四种结果。精确率、召回率、F1、ROC/AUC 只是从不同角度衡量错误;该选哪一个,取决于误报、漏报和类别分布。
本模块术语速查
- 阈值
- 把概率转为正负类别的业务门槛。
- TP / FP / TN / FN
- 四种预测结果,构成混淆矩阵。
- 精确率
- 预测为正的样本中,真正为正的比例。
- 召回率
- 全部真实正类中,被模型找回的比例。
- FPR
- 全部真实负类中,被误报为正的比例。
- F1
- 精确率与召回率的调和平均。
- ROC / AUC
- 所有阈值的表现曲线及其排序能力摘要。
- 预测偏差
- 平均预测概率与平均标签的差。
- 多类别
- 一个样本只属于多个类别中的一个。
- 多标签
- 一个样本可同时属于多个标签。