Posts

Showing posts from August, 2017

機器學習之陷阱 - Imbalance Class Classification

Image
幾年前的筆者,一直覺得Build Model是一件很不可思議的事,一提到建模這個課題,就會眼前一亮,充滿好奇和期待,不知道讀者們有沒有嘗試過在做分類(Classification)的時候,一看到數據,也沒有想太多,直接就把數據倒進模型作訓練,再看看Performance有多少,看到準確度有92%,表現很不錯吧,我看的是不一定了,為了讓讀者們更好理解文中的意思,我會採用"十個男人九個滾"的例子來闡釋。 假設我收集了100個男人的資料,9成2的人都曾經對伴侶不忠,其餘的就管它是還在考慮或是打死不會,目的是從這些會出軌和不會的男人身上,讓我的Model學習出軌的男人特點,從而預測其他男人會否對伴侶不忠,剛才說過我的模型有92%的準成度,筆者還以為可以慶功食牛雜,女人們以為可以試試伴侶是否不忠的時候,才發現所有的男人都被預測為"出軌",當中包括真的會出軌的92人, 其餘8個白白被"砌了生豬肉",還未出去滾已慘遭被判為出軌,要是這樣,倒不如直接說成"十個男人十個滾",連Build Model的氣力也省去了,所以零分重作吧! Actual / Predict           滾             沒滾 / 唸緊   滾 92 0 沒滾 / 唸緊 8 0 但是為何會發生這種事呢?明明準確度很高,結果卻不似預期。其實原因很簡單,這都是數據的類別分佈出現不均勻和分類器(Classifier)的設計所造成的,因為一般的Classifier的學習目標是優化準成度,透過獲得愈少的誤差,才不會考慮類別的分佈,也就是少數的聲音很容易被埋沒,導致Classifier難以從少數類別的Pattern中學習,最壞的結果就是剛才的結果:所有數據都分成同一類別。 雖然Imbalance Class不是一個新鮮的問題,但對於入門級的人,想要對模型或數據分析技巧更上一層樓的話,這些基礎是少不了,如果沒有這些理論在背後支持,我相信街上每一個的Programmer也會比你強,只要寫幾句Coding,便能輕鬆實現建模,測試和預測,那麼你就好好想一下作為數據分析師的價值何在。...