在機器學習中,很多時候你會掙紮于怎麼提高模型的準确率。在這種時刻,數據探索的一些方法将幫助你解決這個問題。這個指導将幫助你理解數據探索中的主要技術。請記住你輸入的變量的數據質量決定了你模型輸出量的質量。所以當你的商業問題提出來以後,你需要花費很多時間在數據準備和探究上面,一般來說,數據清理,探究和準備大概占據了一個項目70%的時間。下面是準備,理解,清理你用于建立預測模型的數據的幾個步驟,我會一個一個來介紹
1.變量确定
2.單變量分析
3.雙變量分析
4.處理缺失值
5.處理離群值
6.變量轉換
7.變量創建
首先上部會介紹1,2,3,4四個部分。
變量确定
首先,你需要确認你的輸入變量(預測指标)和你的輸出變量(目标變量)是什麼,接着,你需要确認數據的種類和分類。下面用一個簡單的例子來說明,假設現在我們想要預測學生是否玩闆球(cricket),現在我們需要确定輸入變量,輸出目标變量,以及每一個變量的分類和種類,下面是部分原數據
Student_ID:學生編号
Gender:性别(F-女,M-男)
Pre_EXAM_Marks:之前的考試分數
Height(cm):身高(厘米)
WeightCaregory(kgs):體重(千克)
Play Cricket:玩闆球(1:玩闆球,0:不玩闆球)
下面這個圖是以上變量的分類和種類圖
從上圖可以看到,輸入變量(預測變量Predictor)是性别,之前的考試分數,身高,體重。而輸出值(目标變量Target)是是否玩闆球。學生編号和性别是字符變量(Character),是否玩闆球,之前的考試分數,身高,體重是數字變量(Numeric)。從連續和非連續來分類的話,性别和是否玩闆球是非連續變量(Categorical),之前考試的分數,身高和體重是連續變量(Continuous)
單變量分析
在這個步驟,我們需要一個變量一個變量的去做分析,單變量分析的方法取決于你需要分析的變量是連續的還是非連續的。
連續型變量(Continuous Variable):對于連續型變量我們需要知道這個變量的中心(central tendency)和展布(spread or dispersion),下面是描述變量中心還有展布的指标量,以及用什麼圖來進行可視化。
中心:平均值,中位數,衆數,最小值,最大值
展布分布:範圍,四分位數,内距(四分位距),方差,标準差,偏态與峰度
可視化方法:直方圖(最右的圖),箱線圖(中間一個圖)
非連續型變量(Categorical Variable):對于非連續型變量,我們使用頻率表來顯示每一個分類的分布,同時我們也可以計算每一個分類的百分比。一般可以使用條形圖或者箱線圖來可視化
雙變量分析
雙變量分析是用來找出兩個變量之間的關系,我們尋找兩個變量間有顯著水平的相關聯和非相關聯性。雙變量分析可以是非連續型變量和非連續型變量,非連續型變量和連續型變量還有連續型變量和連續型變量。下面我們将一個一個情形來說明。
連續型變量和連續型變量:對于兩個連續型變量,一般可視化我們使用散點圖。散點圖很好的顯示了兩個變量的關系,這個關系可以是線性也可以是非線性的。
上面的六個圖,左上是很強的正相關,意思是指當其中一個變量增加時,另外一個變量增加,上面正中間的是中等強的正相關,右上是沒有相關性,左下是中等強的負相關,意思是指當其中一個變量增加時,另外一個變量減少,下面正中間是很強的負相關,右下是非線性的相關。一般散點圖隻是顯示了兩連續變量之間的關系,但是并沒有顯示關系的強度大小。所以我們使用一個指标相關(Correlation)來顯示關系強度的大小,相關的大小可以從-1到 1。其中“-1”指的是完美的負線性相關,“ 1”指的是完美的正線性相關,“0”指的是沒有線性相關(但是可能有非線性的關系)。計算相關的公式如下
相關=變量X和Y的協方差/變量X的方差和變量Y的方差乘積的平方根
如果使用Excel,可以用CORREL()來計算兩個變量的相關。如果使用SAS可以使用PROC CORR來計算相關,如果用R,可以使用cor.test()來計算相關。如果用Python,可以使用numpy.corrcoef()來計算。下面是用EXCEL計算相關的例子,X和Y的相關系數是0.65。
非連續變量和非連續型變量:
雙向表(two-way table):我們可以用一個雙向表來分析兩個非連續變量的關系,雙向表的行代表一個非線性變量的分類,列代表另一個非線性變量的分量,然後每個小格(cell)可以顯示數目還有所占的百分比(雙向表是下面最左邊的表)。
堆積柱圖(Stacked Column Chart):這個其實就是雙向表的可視化(上面右邊兩個表)
卡方檢驗(Chi-square Test):這個檢驗是用來檢驗變量關系的顯著性。主要是比較兩個及兩個以上樣本率( 構成比)以及兩個分類變量的關聯性分析。其根本思想就是在于比較理論頻數和實際頻數的吻合程度或拟合優度問題。它會反饋用卡方分布計算的p值,當p=0的時候,這兩個變量是相互依賴的(dependent),當p=1的時候,可以理解為這兩個變量獨立(independent),當p值小于0.05的時候,意味着有95%的信心這兩個變量的依賴性是顯著的。卡方檢驗的統計量是
其中O表示實際觀察到的頻數,而E表示當這兩個變量獨立的時候,雙向表中每個cell的理論頻數。
非連續變量和連續型變量:
對于探索連續變量和非連續變量的關系,對于可視化,我們可以畫非連續變量每一個分類的箱線圖(boxplot)。而如果想用統計方法來檢驗它們之間的關系是否顯著,可以使用Z檢驗,t檢驗或者方差分析(ANOVA)。一般Z檢驗用于樣本比較大的情況,檢驗的是兩組之間的均值是否有顯著不同。t檢驗一般用于樣本比較小的情況(每一組都小于30),檢驗的也是兩組之間均值是否有顯著不同。而ANOVA是用來檢驗多于兩組的時候, 多個組的均值是否有不同。
缺失值處理
在數據清理中,我們經常會遇到很差的數據,會有很多缺失值,如果訓練數據中有缺失值的話會讓訓練出來的模型有偏差或者不夠拟合數據。缺失值出現的原因也有很多種,它們一般出現在兩個階段
數據抓取:在抓取數據過程中,因為沒有符合抓取的指導或者要求,而造成的一種缺失,這種缺失比較容易被發現并且很快的改正
數據收集:在數據收集階段的缺失比較難改正,因為有大概四種不同的情況
完全随機缺失(Missing Completely at Random):這種情況是指對每一個觀測值,缺失的概率是一樣的。打個比方,比如現在需要一群人上報自己的收入,對于每一個上報者,在上報之前先丢硬币,如果是正面就上報收入,如果是反面就隐瞞收入。因此對每個觀測值都有一半的機會缺失或者不缺失。
随機缺失(Missing at Random):随機缺失是指缺失值是任意缺失的但是對不同的輸入變量和分組,缺失值的比例是不同的。比如當我們想收集女性的年齡時,女性比起男性會有更多的缺失值(很好理解,女性一般不太喜歡被訪問年齡)。
缺失依賴于未觀測到的自變量 (Missing that depends on unobserved predictors):
當缺失值不是任意随機的,而是和某些我們沒有觀測到的值有關。打個比方,比如在醫藥研究中,如果一種治療方法引起了病人身體的不适應,那麼病人有很大的概率會提前從這個研究中退出導緻最後他/她的觀測值是缺失的,這種缺失不是任意的而是和身體不适應相關的。
缺失值依賴于缺失值本身 (Missing that depends o the missing value itself):
當缺失的概率直接和缺失值本身有關的時候。比如,一般很高收入和很低收入的人不太喜歡被訪問收入多少,因此收入會有缺失值。
處理缺失值的方法
a. 删除:表删除(List-wise Deletion)和對删除(Pair-wise)
通常的數據表中,行代表樣本,列代表不同的變量。在列表删除中,隻要一行有任何一個變量的值有缺失,我們就删除一整行的信息。簡單是這個方法的主要優勢,但是很大的劣勢也是這樣嚴格的删除會導緻樣本量的減少。在成對删除中,我們對每一個變量就用它不缺失的樣本數進行逐個分析,這種方法盡量的保留了樣本個數,但是不好的是對每一個變量你所使用的樣本個數也不一樣。兩種删除方法如下圖例子所示,左邊是表删除,而右邊是對删除,你可以看到左下圖任何一行有缺失就會被劃掉删除,而右下表,對性别(gender),勞動力(manpower),銷售(sales)變量每一個分别删除缺失值,而不是一行全部劃掉。
主要備注:删除的方法隻能用于完全随機缺失(Missing Completely at Random)的情況,随意删除不随機的缺失值會使數據産生bias。
b. 均值(mean)/衆數(mode)/中位數(median)替換法
替換法是用估計的值去替換缺失值的方法。這個方法的目的是利用已知的可以定義的不缺失的數據去幫助估計缺失的數據。均值/衆數/中位數這三個都是經常被廣泛使用的方法。這種替換法一般也有兩大類:
第一種就是一半的替換,就是我們計算缺失的變量剩下不缺失的數據的均值,衆數或者中位數來替換缺失值。例如上圖那個例子,對勞動力那一個變量的缺失值,我們計算不缺失的勞動力的數據得到28.33,然後用這個值來替換缺失值。
第二種就是相似替換,比如在上圖那個例子裡的勞動力,我們分别計算不缺失的男和女的勞動力平均值,分别是男29.75而女25,因此對于男,缺失的勞動力就用29.5替代,而對于女,缺失的勞動力就用25替代。
c.預測模型
用預測模型來估算缺失值也是一種理論比較成熟的方法。一般我們會把數據集分為兩個部分,一個部分完全沒有缺失值,而另一個部分含有缺失值。沒有缺失值的數據集作為我們的訓練數據集來得到預測模型,而有缺失值的數據集作為檢驗數據集,而缺失的變量就作為要預測的目标輸出量。下一步,我們用訓練集生成一個預測模型,用其他的變量來預測缺失的變量,然後把預測模型用到檢驗數據集來得到缺失部分的預測值。我們可以使用回歸,方差分析,邏輯回歸或者其他的機器學習的方法去做預測模型。
不過這個方法也有明顯的缺點,如果缺失的變量與其他的變量沒有什麼關系,這個預測将會不準确。
d. 最近鄰居法(KNN)
在這個替換方法中,我們用缺失值周圍的離它最近或者是最相似的其他變量來估算。一般兩個變量的相似度是有距離來決定的。距離的定義可以有多種。這個方法的優點就是缺失值是連續的或者非連續的變量都可以替換。不需要對每一個缺失的變量生成預測模型。數據變量間的關系也都被考慮進去了。而缺點是對于很大的數據集,這個方法很耗時,因為它會搜索所有的相似變量,而且k值的選擇(就是缺失值周圍選k個點)也是很重要的,高的k值會讓幾乎和缺失變量不相關的變量包含進來,而低的k值都會把很相關的變量可能排除出去。
在機器學習中,很多時候你會掙紮于怎麼提高模型的準确率。在這種時刻,數據探索的一些方法将幫助你解決這個問題。這個指導将幫助你理解數據探索中的主要技術。請記住你輸入的變量的數據質量決定了你模型輸出量的質量。所以當你的商業問題提出來以後,你需要花費很多時間在數據準備和探究上面,一般來說,數據清理,探究和準備大概占據了一個項目70%的時間。下面是準備,理解,清理你用于建立預測模型的數據的幾個步驟,我會一個一個來介紹
1.變量确定
2.單變量分析
3.雙變量分析
4.處理缺失值
5.處理離群值
6.變量轉換
7.變量創建
在下部會介紹5,6,7三個部分。
處理離群值
離群值(Outlier)經常會引起很多錯誤的模型估算和預測。簡單的講,離群值就是離整體數據分布或者模式很遠的觀測點。舉個簡單的例子,一個研究顯示一般人的年收入是8萬,但是發現其中有兩個用戶的年收入有4塊錢或者400百萬,這兩個用戶就可以看成是離群點。下圖就是一個箱線圖的離群點的例子,被圈出來的就是離群點。
離群值的種類
離群值一般有兩個種類,一個是一元離群值,一個是多元的離群值。比如上面箱線圖的離群值點。這種離群值一般是在我們觀察單變量的分布的時候。 而多元離群值是指多維的空間,如果想找到他們,你必須看數據點的多維分布。讓我們用身高和體重之間的關系來理解一元和多元離群值。如下圖,左下和左中分别是身高和體重分别的箱線圖,我們并沒有看到離群值,而當我們畫出右下圖的身高體重散點圖的時候,我們發現了三個離群值。
知道了離群值的分類,每次當我們遇到離群值的時候,最好的辦法就是找到為什麼這些值會離群。離群值産生的原因也可以分為兩大類
假的離群(就是誤差)/非自然的離群:
1.輸入誤差:就是在數據收集中産生的人為的錯誤,比如數據記錄,數據輸入錯誤都會引起離群值。打個比方,一個顧客的年收入有十萬元,而數據輸入員将它輸入成了100萬元,是原來的十倍。這個就會造成離群點。
2.測量誤差:這是最常見的離群值的來源,這個一般是由測量儀器的錯誤造成的。比如,你有十個測量儀器,其中9個是準确的一個是壞的。那麼被壞儀器測量的組将會比其他儀器測量的組高或者低一些。這樣會引起離群點。
3.故意的離群值:這個經常發生在一些有敏感數據的自我報告中。打個比方,比如青少年一般會少報他們一周喝酒的數量,隻有很少的一部分青少年會如實彙報。那麼因為大部分人都少報,那實際彙報的那些數據反而看起來像離群點了。
4. 數據處理誤差:當我們做數據分析的時候,我們會從不同的平台抓取數據,那麼這些抓取和轉換回來帶一些誤差,從而産生離群值。
5. 樣本誤差:很簡單的比方,比如我們要測量一般運動員的身高,但是我們不小心把幾個籃球隊員算進去了,因此這些造成了離群值。
自然離群
當一個離群值不是因為誤差引起的,那麼就是自然離群值,比如,有時候在比賽中,前面五十名比後面的幾百個人好太多,那一般不是因為誤差,因為離群值很多,那這種情況,就屬于自然離群,我們需要單獨對待這一部分人。
離群值的影響
離群值會很明顯的改變數據分析與建模的結果,他們有很多的不好的影響
1.它們會增加誤差的方差,而一般誤差的方差平方根會作為統計量的分母,因為減小統計量的大小,造成p值變大,從而降低模型的統計功效。
2.如果離群值是非随機分布的,那麼它們會影響數據正态性分布。而很多線性模型的假設就是輸出變量Y是正态分布。
3.離群值還會影響估計值,讓其差生偏差
4.離群值也會影響很多統計方法的統計假設比如線性回歸,方差分析。
為了容易理解,我們看一個簡單的例子,如下圖
在右上圖,因為有了離群值300,而導緻标準差,均值什麼的都産生了很大變化。這會完全改變你的統計估計。
離檢驗離群值
絕大多數探測離群值的方法都是可視化數據,我們使用不同的可視化方法,比如箱線圖,頻率圖,散點圖。當然也有一些簡單判斷的準則。比如對于一元離群值,對于任意的數據,一般的範圍是正負1.5倍的四分衛距(IQR)這種。而二元或多元離群值一般是用一種距離計算來判斷,比如馬氏距離或者線性回歸中的Cook距離。
移除離群值
絕大多數處理離群值的方法與缺失值比較類似,可以删除或者轉換,或者替換。
删除觀測值: 如果是因為非自然的離群值,而且數量很少的話,我們可以移除它們。
轉換以及給變量分組:轉換變量可以減少離群值,比如給變量取自然對數。然後對變量進行分組也是個不錯的轉換方法。比如對于分組過的變量,決策樹就可以很好地處理這些離群值。而且我們還可以給不同的觀測值不同的權重。比如下圖右邊就是把左邊的觀測值進行了取自然對數過後得到的新觀測值。
替換: 類似于缺失值的替換,我們也可以替換離群值,可以使用均值,中位數,衆數等方法。如果是非自然的離群值,我們可以用統計方法去預測離群值。
單獨處理:與缺失值處理不同以及增加的一項,就是單獨處理了。如果離群值數量很多,我們在統計建模中,應該把它們單獨作為一組單獨分析。一般來說比較流行的統計方法,有那種對不同的組分别建模然後給權重進行聯合的方法。
變量變換
現在讓我們跳到數據探索的最後一個階段:特征工程。在介紹6.變量變換和7.變量創建時,先介紹一下特征工程,因為6和7是特征工程很重要的組成部分。特征工程是建模中很重要的一步,是怎麼從已有的數據中提取更有用信息的藝術。你并不添加任何數據,而是讓你現有的數據怎麼變得更加有用。一般特征工程的前五步就是我之前介紹的1,2,3,4,5.而後面兩步就是變量變換和變量創建。這兩步對你模型的預測準确度有很大的影響。
在數據建模中,變量變換是指一個變量用其相關的函數變換之後的值來表示。打個比方,我們用x取對數之後的值來取代x的值。也可以說,變量變換改變了變量的分布。那什麼時候我們需要使用變量變換呢。下面是四種情況:
1.當我們想要改變一個變量的scale活着标準化它想讓這個變量的變得更容易理解。如果你的數據有不同的scales,這種改變并不改變變量的分布的形狀
2.當我們想要把變量之間非線性的關系變成線性的。一般來講,線性關系比非線性的關系容易讓人理解。變量變量可以幫助我們完成這個。一般散點圖可以讓我們可視化兩個連續變量之間的關系。比如取對數變換是我們經常用的方法。
3. 比起傾斜分布的變量,我們更喜歡對稱分布的變量。對稱分布的變量比較容易解釋而且也易于用于參數估計。比如一般線性回歸會要求誤差服從正态分布,這裡的正太分布就是對稱分布的一種。對于參數模型,我們一般都有變量的分布假設,而很多時候,我們都假設變量是對稱分布,模型的理論推導也是建于對稱分布而來的。因此每當你有遇到很傾斜的分布的時候,最好對變量做一些變換。比如,對于向右傾斜的分布,我們可以去平方根或者立方根,也可以去對數。而對于向左傾斜的分布,我們可以平方,或者立方或者指數化我們的變量。比如右下圖向右傾斜的分布我們就指數化我們的變量
4. 有時候變量變換是來自于項目的要求,或者說能更好的完成項目的任務。打個比方,在某個人力資源的分析中,我們發現,年齡和員工的表現有很大的關系。年齡越大,表現越好。從應用的觀點來看,一般更喜歡把年齡分層成比如<30歲,30-45歲,>45歲,然後對每一組年齡層,采用不同的策略。這種方法就叫做變量分層(binning)
知道什麼時候做變量變換了,那有哪些變量變換的基本方法呢
取對數:一般用于向右傾斜分布的變量,但是它不能用于0或者負值
平方根/立方根:平方根或者立方根變量也可以改變變量分布,不過不如取對數明顯。但是立方根有自己的優勢,它可以用于0值還有負值。平方根變量可以用于含0的正值。
分組(binning):這個适用于分組變量,很多時候這種分組是建立于商業理解上。比如我們會把收入分為高收入,中等收入和低收入。當然我們有兩個變量還可以一起做多元分組。
變量建立
變量建立是利用原有的變量創建新變量的過程。打個比方,我們有日期的輸入變量(日-月-年),我們可以利用這個變量建立專門的日,月,年,星期,工作日等等比之前的輸入變量日期更好的變量。這個方法有時候用來強調變量的一些隐藏信息和關系。下面這個表就是把日期(date)變成三個新的變量(New_Day,New_Month,New_Year)的例子。
當然創建變量有很多方法,下面就介紹其中的兩種:
創建派生的變量:
這個是從原有的變量中通過函數或者其他的方法得到新的派生變量。比如kaggle競賽中很有名的泰坦尼克号數據,很多參賽者會喜歡從人的名字變量中創建Master,Mr,Mrs和Miss這四個新變量。那一般怎麼決定派生變量呢。大部分時候要按你的商業要求來。
創建虛拟的變量:
還有一個普遍的情況就是創建所謂的虛拟變量,一般用虛拟變量把非線性的變量變成數值變量。虛拟變量又叫指标變量。比如對于性别(gender)有男和女兩種,那麼我們可以建立兩個新的變量一個叫Var_Male,它的值為 1(男)和0(女),然後Var_Female變量,它的值為 0(男)和1(女)。如果非連續變量有n層(大于2),那麼可以創建n-1個虛拟變量。下面這個圖就是用性别變量(gender)來創建兩個虛拟變量(dummy variable)。
數據探索就介紹完了。總之,任何時候都不要小看data exploration,它是你建立模型的第一步。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!