在实际机器学习中,我们往往会遇到一个问题:数据严重不均衡(Skewed Dataset)
这会导致:
- 准确率(Accuracy)完全失效
- 需要新的评估指标(Precision / Recall / F1)
一、倾斜数据集(Skewed Dataset)
1.1 什么是倾斜数据集?
某一类数据远多于另一类
举例
垃圾邮件检测:
- 99%:正常邮件
- 1%:垃圾邮件
1.2 为什么 Accuracy 会失效?
假设模型什么都不做:全部预测为"正常邮件"
那么:
- 准确率 = 99% (看起来很高)
- 实际效果 = 完全没用
1.3 正确做法:使用新的评估指标
我们需要关注:
- 精确率(Precision)
- 召回率(Recall)
1.4 混淆矩阵(Confusion Matrix)
定义:
| 预测正类 | 预测负类 | |
|---|---|---|
| 实际正类 | TP | FN |
| 实际负类 | FP | TN |
1.5 小总结
倾斜数据集下:
Accuracy 不可靠
必须使用 Precision / Recall
二、精确率(Precision)与召回率(Recall)
2.1 精确率(Precision)
预测为正的里面,有多少是真的?
举例
垃圾邮件检测:
- 预测为垃圾邮件:100封
- 实际垃圾邮件:80封
Precision = 80%
2.2 召回率(Recall)
实际为正的,有多少被找出来?
举例
实际垃圾邮件有100封:
- 找到80封
Recall = 80%
2.3 一句话理解
- Precision:预测准不准
- Recall:找得全不全
三、Precision vs Recall 的权衡(Trade-off)
3.1 为什么会冲突?
因为"判定标准(阈值)"不同
情况一:严格判断(高门槛)
- 只有非常确定才判为正类
结果:
- Precision ↑(更准)
- Recall ↓(漏掉很多)
情况二:宽松判断(低门槛)
- 只要有一点可能就判为正类
结果:
- Recall ↑(找得更多)
- Precision ↓(误判变多)
3.2 举例
医疗诊断(癌症检测)更重要的是:
- Recall(召回率)
因为:
- 宁可误诊(FP)
- 也不能漏诊(FN)
垃圾邮件过滤 更重要的是:
- Precision(精确率)
因为:
- 不能把正常邮件当垃圾
3.3 可视化理解(阈值变化)
阈值高 → Precision高,Recall低
阈值低 → Recall高,Precision低
3.4 F1 Score(折中指标)
当你想平衡两者:
特点
- 同时考虑 Precision 和 Recall
- 常用于不均衡数据集
3.5 小总结
Precision 和 Recall 没有"谁更好",只有:
哪个更符合业务目标
四、实战策略总结
4.1 遇到倾斜数据集怎么办?
不看 Accuracy,看 Precision / Recall / F1
4.2 如何选择指标?
| 场景 | 更重要指标 |
|---|---|
| 医疗诊断 | Recall |
| 风控(诈骗检测) | Recall |
| 搜索推荐 | Precision |
| 垃圾邮件 | Precision |
4.3 调参方向
通过"调整阈值"控制:
- 提高 Precision → 提高阈值
- 提高 Recall → 降低阈值
五、最终总结
在不平衡数据中:
"预测对多少"不重要,重要的是"对的是什么"