過度擬合(overfitting)是指資料模型在訓練集裡表現非常滿意,但是一旦應用到真實業務實踐時,效果大打折扣;換成學術化語言描述,就是模型對樣本資料擬合非常好,但是對於樣本資料外的應用資料,擬合效果非常差。在我們資料分析挖掘業務實踐中,就是“模型搭建時表現看上去非常好,但是應用到具體業務實踐時,模型效果顯著下降,包括準確率、精度、效果等等顯著下降”。
過擬合的第一個原因,就是建模樣本抽取錯誤,包括(但不限於)樣本數量太少,抽樣方法錯誤,抽樣時沒有足夠正確考慮業務場景或業務特點,等等導致抽出的樣本資料不能有效足夠代表業務邏輯或業務場景;
過擬合的第二個原因,就是樣本里的噪音資料干擾過大,大到模型過分記住了噪音特徵,反而忽略了真實的輸入輸出間的關係;
過擬合的第三個原因,就是在決策樹模型搭建中,如果我們對於決策樹的生長沒有合理的限制和修剪的話,決策樹的自由生長有可能每片葉子裡只包含單純的事件資料(event)或非事件資料(no event),可以想象,這種決策樹當然可以完美匹配(擬合)訓練資料,但是一旦應用到新的業務真實資料時,效果是一塌糊塗。
過擬合的第四個原因,就是建模時的“邏輯假設”到了模型應用時已經不能成立了。任何預測模型都是在假設的基礎上才可以搭建和應用的,常用的假設包括:假設歷史資料可以推測未來,假設業務環節沒有發生顯著變化,假設建模資料與後來的應用資料是相似的,等等。如果上述假設違反了業務場景的話,根據這些假設搭建的模型當然是無法有效應用的。
過擬合的第五個原因,就是建模時使用了太多的輸入變數,這跟上面第二點(噪音資料)有些類似,資料探勘新人常常犯這個錯誤,自己不做分析判斷,把所有的變數交給軟體或者機器去“撞大運”。須知,一個穩定優良的模型一定要遵循建模輸入變數“少而精”的原則的。
上面的原因都是現象,但是其本質只有一個,那就是“業務理解錯誤造成的”,無論是抽樣,還是噪音,還是決策樹,神經網路等等,如果我們對於業務背景和業務知識非常瞭解,非常透徹的話,一定是可以避免絕大多數過擬合現象產生的。因為在模型從確定需求,到思路討論,到搭建,到業務應用驗證,各個環節都是可以用業務敏感來防止過擬合於未然的。
入世,出世,都是一樣的“道”,所謂“道”從來不離開我們半步,只是看我們自身是否足夠清淨,足夠醒悟,足夠真實而已。佛法有八萬四千法門,但是這些林林總總的都是不同的方便路徑,歸根結底,佛法的根本只是“認識我們與生俱來的本來面目,真如自性”而已。
過擬合的產生,原因種種,不一而足,但是這種分類和剖析只是人為的方便而已,防止過擬合的終極思路就是真正透徹理解業務背景和業務邏輯,有了這個根本,我們一定可以正確抽樣,一定可以發現排除噪聲資料,一定可以在決策樹、神經網路等演算法中有效防止過擬合產生的。
當然,除了上面“業務透徹瞭解”這個根本外,也有一些技術層面的方法來防止過擬合的產生,雖然是“術”的層面,但是很多人熱衷於這些技巧,所以,在這裡也順便列舉如下:
最基本的技術手段,就是合理、有效抽樣;包括分層抽樣,過抽樣,等等,用不同的樣本去檢驗模型;
另外,事前準備幾個不同時間視窗,不同範圍的測試資料集、驗證資料集,把模型在不同的資料集裡分別“交叉檢驗”,是目前業界防止過擬合的最常用的手段了;
第三,建模時目標觀測值的數量太少,如何分割訓練集和驗證集的比例,需要建模人員靈活掌握;
第四,如果資料太少的話,謹慎使用神經網路模型,只有足夠多的資料的情況下,神經網路模型才可以有效防止過擬合的產生。並且,使用神經網路時,一定要事先有效篩選輸入變數,千萬不能一股腦把所有變數放進去。
機器學習中的欠擬合
欠擬合指的是模型在訓練和預測時表現都不好的情況。
一個欠擬合的機器學習模型不是一個良好的模型並且由於在訓練資料上表現不好這是顯然的。
欠擬合通常不被討論,因為給定一個評估模型表現的指標的情況下,欠擬合很容易被發現。矯正方法是繼續學習並且試著更換機器學習演算法。雖然如此,欠擬合與過擬合形成了鮮明的對照。