1. 程式人生 > >近半年數據分析工作的總結----或者說所踩的坑的總結

近半年數據分析工作的總結----或者說所踩的坑的總結

發生 森林 分層 交叉測試 要求 但是 應用 而且 維數

1. 算法(數學)原理重要不重要?

不重要。因為不懂數學,你也可以把數據扔進Sas,選擇一個名字看起來有逼格的算法,然後CPU煎個雞蛋,結果就出來了。還能配上不明覺厲的圖形化結果。更有逼格的,網上搜一下‘R/Python xxxx算法 代碼‘,再吃個煎雞蛋,結果也出來了。塞到TableAU搞一下,打完收工! /攤手

不重要。因為不同算法,對同一套測試數據來說,結果都差不多。頂多這個算法好一點點,那個差一點點。結果很差說明算法完全不適用。

很重要。

不懂原理,就不會明白算法如何工作,每個參數代表的含義,如何去優化參數得出更好地結果。

不懂原理,就不會知道:樸素貝葉斯在小規模算法中效果更好。如果測試數據不是條件獨立,它杯具了。決策樹對數據表現形式要求不高,尤其是隨機森林,貌似是萬能算法。然而如果決策樹在測試數據上得分很高,它很有可能杯具了。線性回歸,最小二乘法容易實現,速度飛快。然而,如果數據不是線性關系,它杯具了。如果超出測試研究範圍,結果更杯具。Logistic回歸,包括嶺回歸,LASSO回歸,Elastic Net。後三者更適合高維數據。LR很快,但是只能處理2分類問題,而且精度不高。因為LR的輸出結果是概率,當概率接近於閾值時,其分類並不嚴肅。KNN分類簡單成熟,然而它計算量很大,需要大量的內存,它無法處理樣本不平衡問題。K均值聚類原理簡單,但是參數敏感,需要不斷調試。

不懂統計原理,就不會知道F檢驗是什麽,什麽是T檢驗,它們怎麽使用。如何判斷變量獨立還是線性相關。為什麽要用方差、均值、中位數、百分位數來描述一組數據的特性。為什麽數據的分布對算法這麽重要。為什麽出來正確率還要有錯誤率,召回率等其他指標?

結果得分很高,有時候並不代表算法參數很好,而是過擬合發生了。分層抽樣,交叉測試,改變算法是可以嘗試的方法。

關於算法的好多內容,我也記不清了。需要的時候找一找資料,就能看懂。

2. 在數據清洗中作弊?

為什麽說作弊?

這是我發現在工作中的一個疏忽後的總結。當時在補充某個變量的缺失值時,使用了線性回歸去擬合。經F、TR檢驗後效果還不錯。一時得意忘形把訓練和測試數據的缺失值都打了補丁。結果後來發現這個變量在測試中表現異常優異,在交叉測試中也一樣,因為這相當於考試前老師提前劃了重點,圈了例題。然而實際應用中它的表現卻讓人不忍直視。避免這種情形,需要將在測試數據中發現的規律應用到測試數據,而不是把訓練、測試數據放在一鍋裏燉出個未來。

3. 數據質量是重中之重!

所有基於虛假的、錯誤的數據的分析都是耍流氓

4. 厚臉皮向人請教,尤其是業務知識

數據分析不能閉門造車,要貼近一線用戶。只有他們才懂真實業務,更清楚數據分析的目標,或者說目標的意義。

以上內容純屬本人的絮叨,如有錯誤歡迎不吝指正

近半年數據分析工作的總結----或者說所踩的坑的總結