1. 程式人生 > >資料探勘中易犯的錯誤

資料探勘中易犯的錯誤

缺乏資料(Lack Data )

對於分類問題或預估問題來說,常常缺乏準確標註的案例。例如:欺詐偵測(Fraud Detection):在上百萬的交易中,可能只有屈指可數的欺詐交易,還有很多的欺詐交易沒有被正確標註出來,這就需要在建模前花費大量人力來修正;信用評分(Credit Scoring):需要對潛在的高風險客戶進行長期跟蹤(比如兩年),從而積累足夠的評分樣本。

太關注訓練(Focus on Training )

就象體育訓練中越來越注重實戰訓練,因為單純的封閉式訓練常常會訓練時狀態神勇,比賽時一塌糊塗。實際上,只有樣本外資料上的模型評分結果才真正有用!(否則的話,直接用參照表好了!)例如:-癌症檢測(Cancer detection):MD Anderson 的醫生和研究人員(1993)使用神經網路來進行癌症檢測,驚奇地發現,訓練時間越長(從幾天延長至數週),對訓練集的效能改善非常輕微,但在測試集上的效能卻明顯下降。-機器學習或電腦科學研究者常常試圖讓模型在已知資料上表現最優,這樣做的結果通常會導致過度擬合(overfit)。解決方法:解決這個問題的典型方法是重抽樣(Re-Sampling)。重抽樣技術包括:bootstrap、cross-validation、jackknife、leave-one-out...等等。

只依賴一項技術(Rely on One Technique )

這個錯誤和第 10 種錯誤有相通之處,請同時參照其解決方法。沒有對比也就沒有所謂的好壞,辯證法的思想在此體現無遺。“當小孩子手拿一把錘子時,整個世界看起來就是一枚釘子。”要想讓工作盡善盡美,就需要一套完整的工具箱。不要簡單地信賴你用單個方法分析的結果,至少要和傳統方法(比如線性迴歸或線性判別分析)做個比較。研究結果:按照《神經網路》期刊的統計,在過去 3 年來,只有 1/6 的文章中做到了上述兩點。也就是說,在獨立於訓練樣本之外的測試集上進行了開集測試,並與其它廣泛採用的方法進行了對比。解決方法:使用一系列好的工具和方法。(每種工具或方法可能最多帶來 5%~10%的改進)。

提錯了問題(Ask the Wrong Question )

一般在分類演算法中都會給出分類精度作為衡量模型好壞的標準,但在實際專案中我們卻幾乎不看這個指標。為什麼?因為那不是我們關注的目標。專案的目標一定要鎖定正確的目標,例如:欺詐偵測(關注的是正例!)(Shannon 實驗室在國際長途電話上的分析):不要試圖在一般的通話中把欺詐和非欺詐行為分類出來,重點應放在如何描述正常通話的特徵,然後據此發現異常通話行為。模型的目標:讓計算機去做你希望它做的事大多數研究人員會沉迷於模型的收斂性來儘量降低誤差,這樣讓他們可以獲得數學上的美感。但更應該讓計算機做的事情應該是如何改善業務,而不是僅僅側重模型計算上的精度。

只靠資料來說話(Listen (only) to the Data )

“讓資料說話”沒有錯,關鍵是還要記得另一句話:兼聽則明,偏聽則暗!如果資料+工具就可以解決問題的話,還要人做什麼呢?投機取巧的資料:資料本身只能幫助分析人員找到什麼是顯著的結果,但它並不能告訴你結果是對還是錯。經過設計的實驗:某些實驗設計中摻雜了人為的成分,這樣的實驗結果也常常不可信。

使用了未來的資訊(Accept Leaks from the Future )

看似不可能,卻是實際中很容易犯的錯誤,特別是你面對成千上萬個變數的時候。認真、仔細、有條理是資料探勘人員的基本要求。預報(Forecast)示例:預報芝加哥銀行在某天的利率,使用神經網路建模,模型的準確率達到 95%。但在模型中卻使用了該天的利率作為輸入變數。金融業中的預報示例:使用 3 日的移動平均來預報,但卻把移動平均的中點設在今天。解決方法:要仔細檢視那些讓結果表現得異常好的變數,這些變數有可能是不應該使用,或者不應該直接使用的。給資料加上時間戳,避免被誤用。

拋棄了不該忽略的案例(Discount Pesky Cases )

到底是“寧為雞頭,不為鳳尾”,還是“大隱隱於市,小隱隱於野”?不同的人生態度可以有同樣精彩的人生,不同的資料也可能蘊含同樣重要的價值。異常值可能會導致錯誤的結果(比如價格中的小數點標錯了),但也可能是問題的答案(比如臭氧洞)。所以需要仔細檢查這些異常。研究中最讓激動的話語不是“啊哈!”,而是“這就有點奇怪了……”資料中的不一致性有可能會是解決問題的線索,深挖下去也許可以解決一個大的業務問題。例如:在直郵營銷中,在對家庭地址的合併和清洗過程中發現的資料不一致,反而可能是新的營銷機會。解決方法:視覺化可以幫助你分析大量的假設是否成立。

輕信預測(Extrapolate )

依然是辯證法中的觀點,事物都是不斷髮展變化的。人們常常在經驗不多的時候輕易得出一些結論。即便發現了一些反例,人們也不太願意放棄原先的想法。維度咒語:在低維度上的直覺,放在高維度空間中,常常是毫無意義的。解決方法:進化論。沒有正確的結論,只有越來越準確的結論。

試圖回答所有問題(Answer Every Inquiry )

有點像我爬山時鼓勵自己的一句話“我不知道什麼時候能登上山峰,但我知道爬一步就離終點近一步。”“不知道”是一種有意義的模型結果。模型也許無法 100%準確回答問題,但至少可以幫我們估計出現某種結果的可能性。

隨便地進行抽樣(Sample Casually )

降低抽樣水平。例如,MD 直郵公司進行響應預測分析,但發現數據集中的不響應客戶佔比太高(總共一百萬直郵客戶,其中超過 99%的人未對營銷做出響應)。於是建模人員做了如下抽樣:把所有響應者放入樣本集,然後在所有不響應者中進行系統抽樣,即每隔10 人抽一個放入樣本集,直到樣本集達到 10 萬人。但模型居然得出如下規則:凡是居住在 Ketchikan、Wrangell 和 Ward Cove Alaska 的人都會響應營銷。這顯然是有問題的結論。(問題就出在這種抽樣方法上,因為原始資料集已經按照郵政編碼排序,上面這三個地區中不響應者未能被抽取到樣本集中,故此得出了這種結論)。解決方法:“喝前搖一搖!”先打亂原始資料集中的順序,從而保證抽樣的隨機性。

提高抽樣水平。例如,在信用評分中,因為違約客戶的佔比一般都非常低,所以在建模時常常會人為調高違約客戶的佔比(比如把這些違約客戶的權重提高 5 倍)。建模中發現,隨著模型越來越複雜,判別違約客戶的準確率也越來越高,但對正常客戶的誤判率也隨之升高。(問題出在資料集的劃分上。在把原始資料集劃分為訓練集和測試集時,原始資料集中違約客戶的權重已經被提高過了)解決方法:先進行資料集劃分,然後再提高訓練集中違約客戶的權重。

太相信最佳模型(Believe the Best Model )

還是那句老話“沒有最好,只有更好!”可解釋性並不一定總是必要的。看起來並不完全正確或者可以解釋的模型,有時也會有用。“最佳”模型中使用的一些變數,會分散人們太多的注意力。 (不可解釋性有時也是一個優點)一般來說,很多變數看起來彼此都很相似,而最佳模型的結構看上去也千差萬別,無跡可循。但需注意的是,結構上相似並不意味著功能上也相似。解決方法:把多個模型集裝起來可能會帶來更好更穩定的結果。