你的模型是最好的还是最幸运的?选择最佳模型时如何避免随机性

kaggle比赛里经常会发生shake up的现象,说的直接点就是在有切榜或多榜单的比赛中,可能存在榜单排名激烈震动的情况,例如下面这个例子:Data Science Bowl 2017

我们看到,第一名是从公榜上升了130多名,而第5名则上升了349.

公榜结果就是好的模型私榜不一定就好,因为Kaggle是模拟real world的时刻在变化的数据,不一定遵从过去的规律,用过去的数据是无法确定就能预测未来的。一般情况下shake的原因可以归为如下几种:1.数据不同分布2.数据量太小3.异常值影响较大4.metric过于敏感5.模型太接近6.overfit等。那么第一名中的模型与第二名中的模型之间有什么区别呢?

如果你的答案是:“区别在于,第一款模型比第二型模型更好,因为它具有较小的损失”,那么这个回答就太仓促了。事实上,

我们如何才能确定测试集上更好的度量标准意味的是更好的模型,而不是一个更幸运的模型呢?

对于数据科学家来说,知道模型选择中哪一部分是偶然发挥的作用是一项基本技能。在本文中,我们将说明如何量化选择最佳模型过程中涉及的随机性。

什么是“最好模型”?

首先,我们需要明确定义所说的“最佳模型”。

假设有两个模型A和B,我们想选择最好的一个。最好的模型是在看不见的数据上表现最好的模型,这个应该是一个公认的判断方式

所以我们收集了一些测试数据(在训练期间没有使用的),并在此基础上评估我模型。假设模型A的ROC值为86%,模型B为85%。这是否意味着模型A比模型B更好?就目前我们掌握的信息而言:是的。

但在一段时间之后,又收集了更多的数据并将其添加到测试集中。现在模型A仍然是86%,但模型B增加到87%。那么现在来说,B比A好了,对吧

所以可以定义如下:

对于一个给定的任务,最好的模型是在所有可能的不可见数据上表现最好的模型。

这个定义的重要部分是“所有可能”。我们能够访问的数据是有限的,所以测试数据集只是所有可能的不可见数据的一小部分。这就像是说我们永远都不知道什么才是最好的模型!

为了处理这个问题,我们需要一个新的概念。

Universe

我们将将所有可能的看不见数据的集合称为“Universe”。在现实世界中,我们永远无法观察到完整的Universe,而只有一个从Universe中随机采样的测试数据集。

模型的真正性能是其在Universe上的性能, 在这种情况下该模型的真实ROC得分为80.4%。但是我们永远无法观察到Universe,我们永远无法观察到模型的真实ROC。

我们观察到的是在测试集上计算的ROC分数。有时它会更高(81.6%),有时会更低(79.9%和78.5%),但是我们无法知道真正的ROC分数与观察到的ROC得分有多远。

我们所能做的就是尝试评估该过程中涉及多少随机性。为此需要模拟Universe并从中取样许多随机测试数据集。这样我们就可以量化观察到的分数的离散度。

如何模拟Universe?

我们的目标是获得具有给定ROC评分的样本(观测结果),有一种非常简单的方法可以做到这一点。

首先需要设定的所需的个体数量(通常是一个很大的数字)。然后设置流行率prevalence(上面的例子是2分类问题,所以只有正负样本),即阳性的百分比(可以将其保留为50%,这是默认值)。第三步是选择我们想要在Universe中的ROC分数。最后可以计算Universe中每个个体的预测概率:负的必须在0和1之间均匀间隔,而正的必须在α和1之间均匀间隔。

其中可以通过以下公式从ROC获得α:

在Python中,使用以下函数实现:

完整文章:

https://avoid.overfit.cn/post/b276c19ddaf44edc96db60b36db3034b

posted @ 2022-08-11 11:08  deephub  阅读(48)  评论(0编辑  收藏  举报