機器學習算法原理系列篇4:建模流程(上)

精彩人工智能相關文章,微信搜索  : robot-learner , 或掃碼

機器學習建模流程涉及到幾個重要的步驟,如下圖所示。在下面的篇章中,我們就每一個步驟展開討論。

 

 

 

    1. 數據收集

獲得有效的數據是建模的第一個步驟。這個過程可能是一次性的,也有可能是長期的,需要仔細的計劃和執行。具體而言,建模人員應該從下面幾個方面來考慮數據的獲取問題:

  1. 數據源
    1. 業務類型決定了數據的來源,信用貸款和車貸涉及的數據可能大不相同。
    2. 考慮數據涉及業務是成熟業務還是新業務。成熟業務意味這數據的歸集已經規範化,而新業務意味數據字段可能都要重新開始設計。
    3. 瞭解要具體解決的問題,比如需求是反欺詐,那麼可能數據來源包含了用戶在app上的點擊行爲;如果需求是信用預測,那麼需要對接大量第三方外部數據。
  2. 數據格式
    1. 數據涉及字段的類型可能多種多樣,比如數值型,文本型,圖像,音頻和視頻。不同的類型需要不同的處理手段。
    2. 數據的獲取是通過批量的方式還是流式處理。批量的獲取可能會導致數據量特別大,需要用到大數據處理工具;而流式處理通常有成熟的流式計算方式。
    3. 數據文件的類型多種多樣,比如csv,parquet, excel, database 表格等。
  3. 數據存儲
    1. 如果數據儲存在傳統的關係型數據庫,需要通過SQL查詢的方式獲得數據。
    2. 越來愈多的非關係型數據庫,比如HBase, Elastics Search 等也是存儲數據的有效方式,爲我們獲得數據提供了新的途徑。

 

 

 

 

    1. 數據清洗和轉換

 

數據清洗和轉換的主要目的在於檢測數據的質量,做出合理的改進,從而避免在模型實施階段產生不必要的誤差和提高質量。

 

首先查看和了解待建模的數據,可以通過統計分析和探索性的數據分析方法,和EDA (exploratory data analysis)等不同的方法。統計分析主要是通過統計手段,得到數據不同維度的主要統計特徵,比如數據量,均值,方差,缺失值數量,最小值,最大值等。通過統計分析,可以對數據有一個基本的瞭解。EDA主要通過可視化的方法,更加直觀查看數據的分佈等特性。基本的數據可視化手段包括折線圖(line chart),直方圖(histogram),散點圖(scatter plot),箱線圖(box plot)等。如果數據量太大,可以通過隨機抽樣的方式,挑選數據進行可視化的分析。下面幾張圖展示的就是的常用的鳶尾花(iris flower)數據的四個特徵的可視化展示。

 

下圖是三種不同的鳶尾花(setosa, versicolor, virginica)的四個特徵的折線圖分佈。四個特徵分別爲:sepal length (萼片長度), sepal width (萼片寬度), petal length (花瓣長度), petal width (花瓣寬度)。從這些折線圖中可以清楚的看到,花瓣長度和花瓣寬度對種類有比較好的區分程度,而萼片寬度的區分程度最弱。

下圖是鳶尾花四個特徵的散點圖,從二維平面進一步展示了特徵兩兩組合對種類的區分性。

 

下圖展示了鳶尾花四個特徵的箱線圖。箱線圖是一個直觀的查看特徵分佈是否正太分佈(normal distribution)的有效手段。

                    

      1. 數據偏度和峯度

 

偏度(skewness)是統計學上用來統計數據分佈非對稱程度的量化方法。下圖分佈顯示了正偏態,正態,和負偏態的幾種分佈情形。

 

 

峯度(kurtosis)能夠反映數據分佈和正態分佈相比,其峯部和尾部的區別。如果數據峯度值顯著偏離0,則表明數據不服從正態分佈。下圖分別顯示了正峯度和負峯度的兩種情況。

 

 

 

在數據清洗過程中,我們之所以查看數據的偏度和峯度,是因爲這些指標都和數據都是衡量數據是否正態分佈的方法。而數據符合正態分佈特性,一方面是某些算法的基本假設,因此我們運用相應算法時候有必要提前檢查假設是否成立。另一方面,數據分佈滿足正態分佈是一個優良特性,對於算法的收斂性和可解釋性都很有好處。在實際建模過程中,如果某些數據維度的分佈顯著偏離正態,我們可以通過數據轉化的手段使之儘量向正態分佈靠近。一般說來,如果偏度爲低中程度,比如偏度爲標準誤差的2-3倍,可以通過根號取值來轉換。如果高度偏度,可以取自然對數或者10爲基數的對數。以收入這個數據維度爲例,下圖示展示了正態轉換的結果。

 

 

 

 

 

      1. 數據歸一化    

 

數據歸一化的背景是指建模時候涉及的數據維度或者特徵有很多,但是這些特徵通常在不同的尺度上。比如收入可能在1千到幾萬,但是年齡的範圍則在0-100之間。把數據歸一化就是通過轉換手段把所有的特徵轉換到相同的尺度範圍以內。數據歸一化的最大好處是能夠讓許多機器學習算法優化速度更快,比如梯度下降涉及的算法。當然有些算法,比如決策樹本身對數據歸一化並不敏感。是否進行數據歸一化,取決模型具體運用的算法和建模人員對問題的理解和評判。

 

常用的數據歸一化方法有兩種:

  1. min-max 標準化

                              

 

其中x是待歸一化的特徵變量,xmin是特徵變量的最小值,xmax是特徵變量的最小值,x*是歸一化後的新特徵值,且範圍在0到1之間。需要注意的是,xmin  和xmax是在歷史數據的找到的最小值和最大值。當模型被應用到預測新數據時候,需要考慮出現超過歷史最小值和最大值的特殊情況,從而使歸一化後的新特徵超出0到1的範圍。因此需要事先考慮這種偶然的越界會不會對模型預測產生不利的影響,如果有潛在的風險,需要進行相應的異常處理。比如把超過1的數值設定爲1。

 

  1. Z-score 標準化

                                    

其中x是待歸一化的特徵變量,μ是特徵變量的均值,δ是特徵變量的標準差。如果x的分佈接近正態分佈,則歸一化後的新特徵變量則近似平均值爲0,方差爲1的標準正態分佈。

 

      1. 數據缺失值的處理

 

實際業務中,數據或多或少的存在缺失值,而建立的模型通常只能處理完整的數據。因此數據缺失值的合理處理至關重要。缺失值的處理應該考慮以下幾個步驟和方法:

  1. 首先要深入理解造成數據缺失的原因,不能一味的追求補全缺失值。缺失值造成的原因有可能是業務的原因,比如有些字段本身有可能存在默認空值的情況。也有可能是數據前期處理過程中造成的失誤,一旦找到原因,缺失值就會重新完整。因此真正的瞭解缺失值形成的原因以後,才能用技術的手段加以正確處理,而不會導致額外的偏差。
  2. 在某些線下的一次性分析中,如果數據量比較大,並且捨棄有缺失值的數據點不會造成任何系統偏差,可以考慮簡單的去掉有缺失值得數據,從而簡化缺失值處理流程。
  3. 查看出現缺失值的特徵變量,統計缺失值比例,如果缺失值比例過大,補全缺失值的收益將會減小,甚至會造成偏差。對這種缺失值比例過大的特徵變量,應該考慮在建模過程完全捨棄。
  4. 對於確定需要補全缺失值的特徵變量,分以下兩種情況:
    1. 對於數值型特徵變量,可以用平均值,中位數,衆數,或者任何符合業務需求的值來填補。如果特徵變量分佈接近正態,那麼平均值,中位數,衆數都不會相差太大,但是如果分佈偏離正態較多,需要注意平均值不能代表最典型的數據。這個時候中位數或者衆數會更有代表意義。
    2. 對於枚舉型特徵變量,通常用最常見的枚舉值去代替缺失值。
  5. 補全缺失值的其他注意事項:
    1. 對於枚舉型特徵變量,需要結合實際業務,有可能缺失值本身是非常有意義的,並不需要用其他值來代替。比如有一個讓用戶填寫的是否有房產的特徵,如果用戶選擇不填,那麼會出現缺失值。但是這種不填寫的行爲本身有意義。在這種情況下,創一個表示空值的枚舉值 (比如 NA)可以很好的規避缺失值的問題,也能更好的提高模型效果。
    2. 對於數值型特徵,除了用平均數,中位數等值來代替以外,可以建立一個新的模型來預測。比如把待補全缺失值的特徵作爲目標變量,其他所有特徵作爲自變量,建立一個新模型,用訓練好的模型來自動預測缺失值。另一個方法是考慮用相鄰數據點的特徵變量值來補全缺失值。
    3. 對於缺失值處理過的特徵變量,可以考慮創造一個新的布爾特徵變量,用來專門表示該特徵的值是否是缺失處理得到的。把這新的特徵加入模型,可能更好的反映實際情況,從而提高模型效果。

 

 

      1. 數據不平衡的處理

 

數據不平衡的現象是在分類預測的問題中,數據本身的分佈使得各個類別的比例相差非常大。不平衡的現象是比較普遍的,比如反欺詐業務中,欺詐客戶的比例要遠遠小於正常客戶的比例,可以達到1:1000的水平。在數據建模時候,比較理想的情況是數據的種類相差不大,因爲平衡的數據使得算法的收斂和算法的評價都相對容易和準確。在前面的模型評價章節我們曾經介紹過,不平衡的數據種類可能使得某些評價指標具有誤導性。比如只看準確率的話,一個隨機模型在不平衡的反欺詐業務中,準確率都可以達到99.9%。

 

在數據清洗的過程中,我們可以通過以下的一些手段來處理數據,從而使數據的種類相對平衡。需要指出的是,平衡數據只需要在訓練模型時候使用。在評價模型的時候,用數據的真實比例更加貼近實際情況,從而更加準確。

  1. 數據重新抽樣

根據對不同種類的處理,可以有兩種不同方法:

    1. Under-sampling (欠採樣):如果數據量足夠大,可以對數量比較多的種類數據(大類)進行隨機抽樣,減少其數量,使其和數量比較小的種類(小類)數據量大概匹配。
    2. Over-sampling (過採樣): 如果數據量比較小,不能再減小總的數據量,可以對小類數據進行有放回的隨機採樣,從而增加其數據量,使其和大類數據量相當。除了隨機複製已有數據以外,也可以人工合成新數據,即原樣本中不存在的數據,從而避免數據出現重複。如何合理的合成數據是另一個課題,最簡單的方法就是對每一特徵分佈進行擬合,從而用得到的單個特徵分佈隨機產生新的數據的每一個特徵。還有另一種方法稱作SMOTE(Synthetic Minority Over-sampling Technique)。該方法基於距離選擇鄰居樣本,用鄰居樣本對選擇樣本的一個屬性增加噪聲,每次處理一個屬性。這樣就構造了更多的新生數據。
  1. 選擇合適算法

不同的算法對數據不平衡的處理效果是不一樣的,通常而言,決策樹相關的算法能更好的處理不平衡數據。這是因爲決策樹是基於規則,它的結構決定了它可以自動學習不同種類的特徵,而不完全依賴於數據量。

 

    3. 調整算法懲罰權重

通過改變算法中對每個類別的懲罰權重,可以對分類器的小類樣本數據增加權值,降低大類樣本的權值。這種算法比如penalized-SVMpenalized-LDA算法。 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章