考虑以下场景:我有一批数据,其特征和标签的分布相似。
假设有4000000个负标签和25000个正标签
由于这是一个高度不平衡的数据集,我对负标签进行了欠采样,使得我的训练集(取自其中一批数据)现在包含25000个正标签和500000个负标签。
现在我在训练后尝试从测试集中(来自另一批数据)测量精确度和召回率。我使用了XGBoost,设定了30个估计器。
如果我使用所有40000000个负标签,我得到的精确度-召回率得分(在0.7阈值下为0.1精确度和0.1召回率)比使用一小部分例如500000个负标签时(在0.3阈值下为0.4精确度和0.1召回率)更差。
这可能发生的原因是什么?
我有几个想法:
- 这500000个负标签的特征与整体40000000个负标签中的其他标签大不相同。但当我绘制各个特征时,它们的中心趋势与子集非常接近。
当负标签数量增加时,还有其他方法可以识别为什么我的精确度-召回率会更低更差吗?
有什么方法可以比较这些分布吗?
我的欠采样训练是否是导致这种情况的原因?
回答:
为了理解这一点,我们首先需要了解精确度和召回率是如何计算的。为此,我将使用以下变量:
P – 总正样本数
N – 总负样本数
TP – 真阳性样本数
TN – 真阴性样本数
FP – 假阳性样本数
FN – 假阴性样本数
重要的是要注意:
P = TP + FN
N = TN + FP
现在,精确度是 TP/(TP + FP)
召回率是 TP/(TP + FN),因此是 TP/P。
准确率是 TP/(TP + FN) + TN/(TN + FP),即 (TP + TN)/(P + N)
在你的情况下,数据是不平衡的,我们知道 N>>P。
现在想象一个随机模型。我们通常可以说,对于这样的模型,准确率大约为50%,但这只是在数据平衡的情况下。在你的情况下,将会有更多的FP和TN,而不是TP和FN,因为随机选择数据更有可能返回一个负样本。
因此,我们可以确定负样本的百分比 N/(T+N) 越高,我们得到的FP和TN就越多。也就是说,每当你的模型无法选择正确的标签时,它会从P和N中随机选择一个标签,而大多数情况下会选择N。
回顾一下,FP是精确度中的分母?这意味着随着N/(T+N)的增加,精确度也会下降。
对于召回率,其推导中既没有FP也没有TN,因此随着N/(T+N)的增加不太可能发生太大变化。正如你在例子中看到的,它显然保持不变。
因此,我建议尝试使数据平衡以获得更好的结果。1:1.5的比例应该可以。你也可以使用不同的指标,比如结合精确度和召回率的F1分数,以更好地理解性能表现。
还可以查看这里关于如何处理不平衡数据的其他建议