假设一万个账户中只有十个是欺诈账户。一个永远预测“正常”的模型,准确率可以达到 99.9%,但它一个欺诈账户都没有识别出来。
所以分类模型评估不能只问“预测对了多少”,还要问:
对于二分类任务,预测结果可以分成四种:
| 结果 | 含义 | 例子 |
|---|---|---|
| TP | 真实为正,预测为正 | 真正识别出欺诈交易 |
| TN | 真实为负,预测为负 | 正常邮件被判为正常 |
| FP | 真实为负,预测为正 | 正常用户被误报为风险用户 |
| FN | 真实为正,预测为负 | 欺诈交易被漏掉 |
真实正类 真实负类
预测正类 TP FP
预测负类 FN TN
所有常见分类指标,都是从这四个数字计算出来的。
Accuracy 适合类别比较均衡、不同错误代价相近的场景。类别严重不平衡时,不应单独依赖它。
Precision 高意味着误报少。比如垃圾邮件过滤中,如果误把正常邮件送进垃圾箱,用户体验代价很高,就要关注 Precision。
Recall 高意味着漏报少。医疗筛查、欺诈检测和安全告警通常更关注 Recall。
F1 是调和平均数,只有 Precision 和 Recall 都不低时才会较高。
Specificity 也叫真负率,常用于医疗筛查和需要控制误报的场景。
| 业务重点 | 优先关注 |
|---|---|
| 类别均衡、错误代价接近 | Accuracy |
| 误报成本高 | Precision、Specificity |
| 漏报成本高 | Recall |
| 需要兼顾误报与漏报 | F1 |
| 类别极不平衡 | Recall、Precision、F1、PR-AUC |
| 需要比较整体排序能力 | ROC-AUC |
| 正类很稀少且关注正类识别 | PR-AUC |
指标没有绝对的“最好”,必须结合业务错误成本选择。
ROC 曲线以 False Positive Rate 为横轴、True Positive Rate 为纵轴,展示分类阈值变化时的整体表现。
ROC-AUC 越接近 1,说明模型把正类排在负类前面的能力越强;AUC 约为 0.5 时,模型接近随机猜测。
PR 曲线以 Recall 为横轴、Precision 为纵轴。正类非常稀少时,PR-AUC 往往比 ROC-AUC 更能反映模型对正类的实际识别能力。
ROC-AUC 更像“整体排序能力”的评价;PR-AUC 更关注正类稀少场景下 Precision 与 Recall 的取舍。
许多分类模型输出的是概率,而不是最终类别。默认规则通常是:概率大于等于 0.5 判为正类。
但如果漏报代价更高,可以降低阈值来提高 Recall;如果误报代价更高,可以提高阈值来提高 Precision。
from sklearn.metrics import precision_recall_curve
prob = model.predict_proba(X_valid)[:, 1]
precision, recall, thresholds = precision_recall_curve(y_valid, prob)
# 示例:选择满足 Recall >= 0.90 的最小阈值
valid = thresholds[recall[:-1] >= 0.90]
selected_threshold = valid[-1] if len(valid) else 0.5
阈值应该在验证集上选择,不能为了得到满意的结果而反复修改测试集阈值。
共 2 道精选测试题 · 答题进度已自动保存
下一章将进入回归指标与模型诊断,学习 MAE、MSE、RMSE、R²,以及如何通过学习曲线和误差分析定位模型问题。