你的模型是最好的還是最幸運的?選擇最佳模型時如何避免隨機性

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章