最近公司準備上線一個推薦/廣告架構的系統,自己是演算法從業但不是這個方向(數據量級偏小),在這個領域是個小白,蒐集資料的過程中發現很多大神都提到了樣本採樣,樣本採樣方式等等,說採樣要下很大很大的功夫,我個人淺顯的理解是採樣無非是oversampling,undersampling,改損失函數之類的,這些工程上都很好實現,邏輯並不複雜,為什麼會說要下非常大的功夫呢?推薦/廣告場景over/under sampling就是簡單的複製或者隨機抽樣嗎,還是套路比較多?樣本重要程度為何能和演算法,特徵等相提並論?不知道是否有這方面相關的工程論文或者資料可以推薦,或者諸位這方面的經驗分享,感謝。


採樣最直接的原因是減小數據量

互聯網公司每天的日誌文件就有幾十幾百個G,不可能全部拿來做模型訓練。

這就涉及到如何選取數據的問題,一般有兩種:正採樣和負採樣,而使用的更多的是負採樣,因為正採樣增加了正樣本,從而可能導致最終的模型過擬合,而負採樣就不容易。

當然還有其他一些方法,如利用演算法構造一些樣本,也是採樣的一種。

確定了採樣的方法後,就要考慮採多少比例的樣本。這個問題影響到模型的最終性能指標,但可惜的是目前沒有一個rule of thumb或者說最佳實踐可以參考,只能去按照比例一個一個去試,看最後哪個比例的auc或者mape表現好就用哪個。

可以看下十幾年前kdd或者acm的論文,那時還沒有用到分散式計算,對於如何採樣的研究比較多。


你這一口氣問了好幾個問題呀。

我就在這個問題下面說下我自己對採樣的理解吧。也算是一個總結。

大數據這個名詞的火熱程度連很多平民老百姓都知道了。 我們都知道用大數據可以用來分析出很多有價值的結論出來。 但是大數據不是隻有足夠大就好了。 給你好幾T的數據,但是好多數據複雜混亂。 甚至有好多錯誤的記錄。用這樣的數據去做預測,任你有千般手藝, 也難烹飪出好的飯菜。 所以一定要嚴控數據質量。 這個是推薦系統的起點。 起點錯誤,則滿盤皆輸。 這部分工作需要很多人去做,一方面日誌數據上報的人員務必保證數據準確。 但是僅有足夠準確的上報日誌就足夠了麼? 基本上,在任何一個推薦系統下, 正負樣本比例都是極度不均衡的。 推薦系統,也往往更care正向數據。 而我們care的數據,在用戶行為裏佔比卻極低。 所以我們在推薦的時候,務必要凸顯出正向樣本的價值。 我們沒有辦法把每個正樣本和每個負樣本同等看待。 很明顯,我們希望正樣本能多多益善,正負樣本要均衡纔好。順其自然的,採樣問題就出現了。

over sampling 和 under sampling都是非常簡單的樣本採樣方式。 這兩種方式非常簡單粗暴。 粗暴的演算法往往副作用也非常明顯。 over sampling容易過擬合。 under sampling則容易丟失重要的樣本信息。 這兩種情況都是推薦系統不願意看到或者不希望看到的。 需要極力避免的。 於是乎,各種各樣的採樣方法就出現了。

關於採樣方法, 我也只瞭解過幾個比較知名的。 採樣方法好壞的關鍵是如何保留對結果重要的有用的信息。 先說一些我瞭解的比較簡單的採樣方法。 我在工程之中使用過一個降採樣的變種。 大家都知道降採樣容易丟失可能重要的樣本信息。所以,我在降採樣的時候, 就會考慮哪些負樣本含有的信息量多, 哪些樣本含有的信息量少。 沿著這個思路, 在降採樣方面就可以做很多的事情。 不過這部分都是基於業務的。 在這裡泛泛而談也說不出個所以然。 簡單來說就是前期做好數據分析。 認真鑽研數據,揣摩用戶心理。 肯定能研究出不少結論來。 至少至少可以剔除一些無效樣本吧。 不詳談了。

接下來就說說我看過的一些比較知名的採樣相關的論文了。SMOTE演算法,Adacost演算法都是比較有名且有效的。 具體的就需要看論文了。其實我自己也沒有完全掌握這些演算法。 我的演算法之路,還是十分之漫長呀。希望能和題主多討論一下。共同學習。


我認為負樣本下採樣其實是對負樣本的置信度較低的體現,比如在推薦的場景下,一屏給用戶展示了N個item,其實都是召回出來和用戶的相關性很大的。用戶點擊了某一個item,說明對這個item感興趣,這點是沒有疑問的。但是一定能認為用戶完全不喜歡沒點過的item嗎?我覺得是不一定的。

所以採用隨機下採樣或者給負樣本降權的方式,來表達這種較低的置信度。這兩者的效果應該是一致的,並且下採樣還能減少樣本數據量,所以通常用的比較多。


採樣還是很重要的,現實中採樣是為了幫助得到的數據更為準確,比如說random的話,就是隨機採,不考慮用戶點擊這個事實;而有些策略則把從某次click前的un-click數據作為負例。當然,效果如何需要離線和線上都做一些實驗來看看。另一種就是implicit的場景,正例知道,而負例不知道,所以之前的IRGAN,其實也可以是一種採樣的策略,one-class也可以看作是一種採樣策略。可以看一些相關paper,實際中這其實也是一個很好的research topic。


over 或者under sampling,都是在採到的樣本上做文章。他們所說的採樣是指從數據源上獲取數據的動作,怎麼設計這個過程,使得數據的質量更高,確實是非常重要的問題。這是演算法能不能做好的源頭問題。


《Ad Click Prediction: a View from the Trenches》

題主還記得大神們的名字和資料的位置嗎?我沒太明白為什麼採樣方式要花很大力氣,而且一般就不需要去採樣吧,有多少樣本算多少樣本就可以了。


樓上說的都對,這塊邏輯上並沒有很複雜。

1.數據這一塊就是樣本的正確性和合理性,

正確性:行為採集是否準確。

合理性:正負樣本採集是否從業務上來說是準確的。比如,使用下單還是使用點擊做正樣本等

2. 關於採樣多種比例正樣本過採樣就好。

多種正反饋合理配比,多種權重過採樣,進行多次實驗就好。


單純的下採樣不重要,結合業務理解能夠增加樣本價值、凸顯樣本信息量的下採樣才重要。

——沃茲基梭德

(這個問題下的答主也是有意思。一個ColdPlay,一個RadioHead,還有一個什麼專輯,名字我忘記了...)


over sampling和 under sampling 都是非常簡單的採樣方法


推薦閱讀:
相關文章