1. 程式人生 > >機器學習中的資料清洗與特徵處理綜述

機器學習中的資料清洗與特徵處理綜述

https://tech.meituan.com/machinelearning_data_feature_process.html

 

機器學習中的資料清洗與特徵處理綜述

caohao ·2015-02-10 11:30

背景

隨著美團交易規模的逐步增大,積累下來的業務資料和交易資料越來越多,這些資料是美團做為一個團購平臺最寶貴的財富。通過對這些資料的分析和挖掘,不僅能給美團業務發展方向提供決策支援,也為業務的迭代指明瞭方向。目前在美團的團購系統中大量地應用到了機器學習和資料探勘技術,例如個性化推薦、篩選排序、搜尋排序、使用者建模等等,為公司創造了巨大的價值。
本文主要介紹在美團的推薦與個性化團隊實踐中的資料清洗與特徵挖掘方法。主要內容已經在內部公開課"機器學習InAction系列"講過,本部落格的內容主要是講座內容的提煉和總結。

綜述

機器學習框架
如上圖所示是一個經典的機器學習問題框架圖。資料清洗和特徵挖掘的工作是在灰色框中框出的部分,即“資料清洗=>特徵,標註資料生成=>模型學習=>模型應用”中的前兩個步驟。
灰色框中藍色箭頭對應的是離線處理部分。主要工作是

  • 從原始資料,如文字、影象或者應用資料中清洗出特徵資料和標註資料。
  • 對清洗出的特徵和標註資料進行處理,例如樣本取樣,樣本調權,異常點去除,特徵歸一化處理,特徵變化,特徵組合等過程。最終生成的資料主要是供模型訓練使用。

灰色框中綠色箭頭對應的是線上處理的部分。所做的主要工作和離線處理的類似,主要的區別在於1.不需要清洗標註資料,只需要處理得到特徵資料,線上模型使用特徵資料預測出樣本可能的標籤。2.最終生成資料的用處,最終生成的資料主要用於模型的預測,而不是訓練。
在離線的處理部分,可以進行較多的實驗和迭代,嘗試不同的樣本取樣、樣本權重、特徵處理方法、特徵組合方法等,最終得到一個最優的方法,在離線評估得到好的結果後,最終將確定的方案在線上使用。
另外,由於線上和離線環境不同,儲存資料、獲取資料的方法存在較大的差異。例如離線資料獲取可以將資料儲存在Hadoop,批量地進行分析處理等操作,並且容忍一定的失敗。而線上服務獲取資料需要穩定、延時小等,可以將資料建入索引、存入KV儲存系統等。後面在相應的部分會詳細地介紹。

本文以點選下單率預測為例,結合例項來介紹如何進行資料清洗和特徵處理。首先介紹下點選下單率預測任務,其業務目標是提高團購使用者的使用者體驗,幫助使用者更快更好地找到自己想買的單子。這個概念或者說目標看起來比較虛,我們需要將其轉換成一個技術目標,便於度量和實現。最終確定的技術目標是點選下單率預估,去預測使用者點選或者購買團購單的概率。我們將預測出來點選或者下單率高的單子排在前面,預測的越準確,使用者在排序靠前的單子點選、下單的就越多,省去了使用者反覆翻頁的開銷,很快就能找到自己想要的單子。離線我們用常用的衡量排序結果的AUC指標,線上的我們通過ABTest來測試演算法對下單率、使用者轉化率等指標的影響。

特徵使用方案

在確定了目標之後,下一步,我們需要確定使用哪些資料來達到目標。需要事先梳理哪些特徵資料可能與使用者是否點選下單相關。我們可以借鑑一些業務經驗,另外可以採用一些特徵選擇、特徵分析等方法來輔助我們選擇。具體的特徵選擇,特徵分析等方法我們後面會詳細介紹。從業務經驗來判斷,可能影響使用者是否點選下單的因素有:

  • 距離,很顯然這是一個很重要的特徵。如果購買一個離使用者距離較遠的單子,使用者去消費這個單子需要付出很多的代價。 當然,也並不是沒有買很遠單子的使用者,但是這個比例會比較小。
  • 使用者歷史行為,對於老使用者,之前可能在美團有過購買、點選等行為。
  • 使用者實時興趣。
  • 單子質量,上面的特徵都是比較好衡量的,單子質量可能是更復雜的一個特徵。
  • 是否熱門,使用者評價人數,購買數等等。

在確定好要使用哪些資料之後,我們需要對使用資料的可用性進行評估,包括資料的獲取難度,資料的規模,資料的準確率,資料的覆蓋率等,

  • 資料獲取難度
    例如獲取使用者id不難,但是獲取使用者年齡和性別較困難,因為使用者註冊或者購買時,這些並不是必填項。即使填了也不完全準確。這些特徵可能是通過額外的預測模型預測的,那就存在著模型精度的問題。
  • 資料覆蓋率
    資料覆蓋率也是一個重要的考量因素,例如距離特徵,並不是所有使用者的距離我們都能獲取到。PC端的就沒有距離,還有很多使用者禁止使用它們的地理位置資訊等。
    使用者歷史行為,只有老使用者才會有行為。
    使用者實時行為,如果使用者剛開啟app,還沒有任何行為,同樣面臨著一個冷啟動的問題。
  • 資料的準確率
    單子質量,使用者性別等,都會有準確率的問題。

特徵獲取方案

Ok,在選定好要用的特徵之後,我們需要考慮一個問題。就是這些資料從哪可以獲取?只有獲取了這些資料我們才能用上。否則,提一個不可能獲取到的特徵,獲取不到,提了也是白提。下面就介紹下特徵獲取方案。

  • 離線特徵獲取方案
    離線可以使用海量的資料,藉助於分散式檔案儲存平臺,例如HDFS等,使用例如MapReduce,Spark等處理工具來處理海量的資料等。

  • 線上特徵獲取方案
    線上特徵比較注重獲取資料的延時,由於是線上服務,需要在非常短的時間內獲取到相應的資料,對查詢效能要求非常高,可以將資料儲存在索引、kv儲存等。而查詢效能與資料的資料量會有矛盾,需要折衷處理,我們使用了特徵分層獲取方案,如下圖所示。
    服務架構
    出於效能考慮。在粗排階段,使用更基礎的特徵,資料直接建入索引。精排階段,再使用一些個性化特徵等。

特徵與標註資料清洗

在瞭解特徵資料放在哪兒、怎樣獲取之後。下一步就是考慮如何處理特徵和標註資料了。下面3節都是主要講的特徵和標註處理方法

##標註資料清洗
首先介紹下如何清洗特徵資料,清洗特徵資料方法可以分為離線清洗和線上清洗兩種方法。

  • 離線清洗資料
    離線清洗優點是方便評估新特徵效果,缺點是實時性差,與線上實時環境有一定誤差。對於實時特徵難以訓練得到恰當的權重。
  • 線上清洗資料
    線上清洗優點是實時性強,完全記錄的線上實際資料,缺點是新特徵加入需要一段時間做資料積累。

樣本取樣與樣本過濾

特徵資料只有在和標註資料合併之後,才能用來做為模型的訓練。下面介紹下如何清洗標註資料。主要是資料取樣和樣本過濾。

資料取樣,例如對於分類問題:選取正例,負例。對於迴歸問題,需要採集資料。對於取樣得到的樣本,根據需要,需要設定樣本權重。當模型不能使用全部的資料來訓練時,需要對資料進行取樣,設定一定的取樣率。取樣的方法包括隨機取樣,固定比例取樣等方法。

除了取樣外,經常對樣本還需要進行過濾,包括

  • 1.結合業務情況進行資料的過濾,例如去除crawler抓取,spam,作弊等資料。
  • 2.異常點檢測,採用異常點檢測演算法對樣本進行分析,常用的異常點檢測演算法包括
    • 偏差檢測,例如聚類,最近鄰等。
    • 基於統計的異常點檢測演算法
      例如極差,四分位數間距,均差,標準差等,這種方法適合於挖掘單變數的數值型資料。全距(Range),又稱極差,是用來表示統計資料中的變異量數(measures of variation) ,其最大值與最小值之間的差距;四分位距通常是用來構建箱形圖,以及對概率分佈的簡要圖表概述。
    • 基於距離的異常點檢測演算法,主要通過距離方法來檢測異常點,將資料集中與大多數點之間距離大於某個閾值的點視為異常點,主要使用的距離度量方法有絕對距離 ( 曼哈頓距離 ) 、歐氏距離和馬氏距離等方法。
    • 基於密度的異常點檢測演算法,考察當前點周圍密度,可以發現區域性異常點,例如LOF演算法

特徵分類

在分析完特徵和標註的清洗方法之後,下面來具體介紹下特徵的處理方法,先對特徵進行分類,對於不同的特徵應該有不同的處理方法。

根據不同的分類方法,可以將特徵分為(1)Low level特徵和High level特徵。(2)穩定特徵與動態特徵。(3)二值特徵、連續特徵、列舉特徵。

Low level特徵是較低級別的特徵,主要是原始特徵,不需要或者需要非常少的人工處理和干預,例如文字特徵中的詞向量特徵,影象特徵中的畫素點,使用者id,商品id等。Low level特徵一般維度比較高,不能用過於複雜的模型。High level特徵是經過較複雜的處理,結合部分業務邏輯或者規則、模型得到的特徵,例如人工打分,模型打分等特徵,可以用於較複雜的非線性模型。Low level 比較針對性,覆蓋面小。長尾樣本的預測值主要受high level特徵影響。 高頻樣本的預測值主要受low level特徵影響。

穩定特徵是變化頻率(更新頻率)較少的特徵,例如評價平均分,團購單價格等,在較長的時間段內都不會發生變化。動態特徵是更新變化比較頻繁的特徵,有些甚至是實時計算得到的特徵,例如距離特徵,2小時銷量等特徵。或者叫做實時特徵和非實時特徵。針對兩類特徵的不同可以針對性地設計特徵儲存和更新方式,例如對於穩定特徵,可以建入索引,較長時間更新一次,如果做快取的話,快取的時間可以較長。對於動態特徵,需要實時計算或者準實時地更新資料,如果做快取的話,快取過期時間需要設定的較短。

二值特徵主要是0/1特徵,即特徵只取兩種值:0或者1,例如使用者id特徵:目前的id是否是某個特定的id,詞向量特徵:某個特定的詞是否在文章中出現等等。連續值特徵是取值為有理數的特徵,特徵取值個數不定,例如距離特徵,特徵取值為是0~正無窮。列舉值特徵主要是特徵有固定個數個可能值,例如今天周幾,只有7個可能值:周1,周2,...,週日。在實際的使用中,我們可能對不同型別的特徵進行轉換,例如將列舉特徵或者連續特徵處理為二值特徵。列舉特徵處理為二值特徵技巧:將列舉特徵對映為多個特徵,每個特徵對應一個特定列舉值,例如今天周幾,可以把它轉換成7個二元特徵:今天是否是週一,今天是否是週二,...,今天是否是週日。連續值處理為二值特徵方法:先將連續值離散化(後面會介紹如何離散化),再將離散化後的特徵切分為N個二元特徵,每個特徵代表是否在這個區間內。

特徵處理與分析

在對特徵進行分類後,下面介紹下對特徵常用的處理方法。包括1.特徵歸一化,離散化,預設值處理。2.特徵降維方法。3.特徵選擇方法等。

特徵歸一化,離散化,預設值處理

主要用於單個特徵的處理。

  • 歸一化
    不同的特徵有不同的取值範圍,在有些演算法中,例如線性模型或者距離相關的模型像聚類模型、knn模型等,特徵的取值範圍會對最終的結果產生較大影響,例如二元特徵的取值範圍為[0,1],而距離特徵取值可能是[0,正無窮),在實際使用中會對距離進行截斷,例如[0,3000000],但是這兩個特徵由於取值範圍不一致導致了模型可能會更偏向於取值範圍較大的特徵,為了平衡取值範圍不一致的特徵,需要對特徵進行歸一化處理,將特徵取值歸一化到[0,1]區間。常用的歸一化方法包括1.函式歸一化,通過對映函式將特徵取值對映到[0,1]區間,例如最大最小值歸一化方法,是一種線性的對映。還有通過非線性函式的對映,例如log函式等。2.分維度歸一化,可以使用最大最小歸一化方法,但是最大最小值選取的是所屬類別的最大最小值,即使用的是區域性最大最小值,不是全域性的最大最小值。3.排序歸一化,不管原來的特徵取值是什麼樣的,將特徵按大小排序,根據特徵所對應的序給予一個新的值。

  • 離散化
    在上面介紹過連續值的取值空間可能是無窮的,為了便於表示和在模型中處理,需要對連續值特徵進行離散化處理。常用的離散化方法包括等值劃分和等量劃分。等值劃分是將特徵按照值域進行均分,每一段內的取值等同處理。例如某個特徵的取值範圍為[0,10],我們可以將其劃分為10段,[0,1),[1,2),...,[9,10)。等量劃分是根據樣本總數進行均分,每段等量個樣本劃分為1段。例如距離特徵,取值範圍[0,3000000],現在需要切分成10段,如果按照等比例劃分的話,會發現絕大部分樣本都在第1段中。使用等量劃分就會避免這種問題,最終可能的切分是[0,100),[100,300),[300,500),..,[10000,3000000],前面的區間劃分比較密,後面的比較稀疏。

  • 預設值處理
    有些特徵可能因為無法取樣或者沒有觀測值而缺失,例如距離特徵,使用者可能禁止獲取地理位置或者獲取地理位置失敗,此時需要對這些特徵做特殊的處理,賦予一個預設值。預設值如何賦予,也有很多種方法。例如單獨表示,眾數,平均值等。

特徵降維

在介紹特徵降維之前,先介紹下特徵升維。在機器學習中,有一個VC維理論。根據VC維理論,VC維越高,打散能力越強,可容許的模型複雜度越高。在低維不可分的資料,對映到高維是可分。可以想想,給你一堆物品,人腦是如何對這些物品進行分類,依然是找出這些物品的一些特徵,例如:顏色,形狀,大小,觸感等等,然後根據這些特徵對物品做以歸類,這其實就是一個先升維,後劃分的過程。比如我們人腦識別香蕉。可能首先我們發現香蕉是黃色的。這是在顏色這個維度的一個切分。但是很多東西都是黃色的啊,例如哈密瓜。那麼怎麼區分香蕉和哈密瓜呢?我們發現香蕉形狀是彎曲的。而哈密瓜是圓形的,那麼我們就可以用形狀來把香蕉和哈密瓜劃分開了,即引入一個新維度:形狀,來區分。這就是一個從“顏色”一維特徵升維到二維特徵的例子。

那問題來了,既然升維後模型能力能變強,那麼是不是特徵維度越高越好呢?為什麼要進行特徵降維&特徵選擇?主要是出於如下考慮:1. 特徵維數越高,模型越容易過擬合,此時更復雜的模型就不好用。2. 相互獨立的特徵維數越高,在模型不變的情況下,在測試集上達到相同的效果表現所需要的訓練樣本的數目就越大。 3. 特徵數量增加帶來的訓練、測試以及儲存的開銷都會增大。4.在某些模型中,例如基於距離計算的模型KMeans,KNN等模型,在進行距離計算時,維度過高會影響精度和效能。5.視覺化分析的需要。在低維的情況下,例如二維,三維,我們可以把資料繪製出來,視覺化地看到資料。當維度增高時,就難以繪製出來了。在機器學習中,有一個非常經典的維度災難的概念。用來描述當空間維度增加時,分析和組織高維空間,因體積指數增加而遇到各種問題場景。例如,100個平均分佈的點能把一個單位區間以每個點距離不超過0.01取樣;而當維度增加到10後,如果以相鄰點距離不超過0.01小方格取樣單位超一單位超正方體,則需要10^20 個取樣點。

正是由於高維特徵有如上描述的各種各樣的問題,所以我們需要進行特徵降維和特徵選擇等工作。特徵降維常用的演算法有PCA,LDA等。特徵降維的目標是將高維空間中的資料集對映到低維空間資料,同時儘可能少地丟失資訊,或者降維後的資料點儘可能地容易被區分

  • PCA演算法
    通過協方差矩陣的特徵值分解能夠得到資料的主成分,以二維特徵為例,兩個特徵之間可能存線上性關係(例如運動的時速和秒速度),這樣就造成了第二維資訊是冗餘的。PCA的目標是發現這種特徵之間的線性關係,並去除。

  • LDA演算法
    考慮label,降維後的資料點儘可能地容易被區分

特徵選擇

特徵選擇的目標是尋找最優特徵子集。特徵選擇能剔除不相關(irrelevant)或冗餘(redundant )的特徵,從而達到減少特徵個數,提高模型精確度,減少執行時間的目的。另一方面,選取出真正相關的特徵簡化模型,協助理解資料產生的過程。
特徵選擇的一般過程如下圖所示:
特徵選擇的過程 ( M. Dash and H. Liu 1997 )
主要分為產生過程,評估過程,停止條件和驗證過程。

特徵選擇-產生過程和生成特徵子集方法

  • 完全搜尋(Complete)
    • 廣度優先搜尋( Breadth First Search )
      廣度優先遍歷特徵子空間。列舉所有組合,窮舉搜尋,實用性不高。
    • 分支限界搜尋( Branch and Bound )
      窮舉基礎上加入分支限界。例如:剪掉某些不可能搜尋出比當前最優解更優的分支。
      其他,如定向搜尋 (Beam Search ),最優優先搜尋 ( Best First Search )等
  • 啟發式搜尋(Heuristic)
    • 序列前向選擇( SFS , Sequential Forward Selection )
      從空集開始,每次加入一個選最優。
    • 序列後向選擇( SBS , Sequential Backward Selection )
      從全集開始,每次減少一個選最優。
    • 增L去R選擇演算法 ( LRS , Plus-L Minus-R Selection )
      從空集開始,每次加入L個,減去R個,選最優(L>R)或者從全集開始,每次減去R個,增加L個,選最優(L<R)。

其他如雙向搜尋( BDS , Bidirectional Search ),序列浮動選擇( Sequential Floating Selection )等

  • 隨機搜尋(Random)
    • 隨機產生序列選擇演算法(RGSS, Random Generation plus Sequential Selection)
      隨機產生一個特徵子集,然後在該子集上執行SFS與SBS演算法。
    • 模擬退火演算法( SA, Simulated Annealing )
      以一定的概率來接受一個比當前解要差的解,而且這個概率隨著時間推移逐漸降低
    • 遺傳演算法( GA, Genetic Algorithms )
      通過交叉、突變等操作繁殖出下一代特徵子集,並且評分越高的特徵子集被選中參加繁殖的概率越高。

隨機演算法共同缺點:依賴隨機因素,有實驗結果難重現。

特徵選擇-有效性分析

對特徵的有效性進行分析,得到各個特徵的特徵權重,根據是否與模型有關可以分為1.與模型相關特徵權重,使用所有的特徵資料訓練出來模型,看在模型中各個特徵的權重,由於需要訓練出模型,模型相關的權重與此次學習所用的模型比較相關。不同的模型有不同的模型權重衡量方法。例如線性模型中,特徵的權重係數等。2.與模型無關特徵權重。主要分析特徵與label的相關性,這樣的分析是與這次學習所使用的模型無關的。與模型無關特徵權重分析方法包括(1)交叉熵,(2)Information Gain,(3)Odds ratio,(4)互資訊,(5)KL散度等

特徵監控

在機器學習任務中,特徵非常重要。

  • 個人經驗,80%的效果由特徵帶來。下圖是隨著特徵數的增加,最終模型預測值與實際值的相關係數變化。
    特徵重要性
  • 對於重要的特徵進行監控與有效性分析,瞭解模型所用的特徵是否存在問題,當某個特別重要的特徵出問題時,需要做好備案,防止災難性結果。需要建立特徵有效性的長效監控機制
    我們對關鍵特徵進行了監控,下面特徵監控介面的一個截圖。通過監控我們發現有一個特徵的覆蓋率每天都在下降,與特徵資料提供方聯絡之後,發現特徵資料提供方的資料來源存在著問題,在修復問題之後,該特徵恢復正常並且覆蓋率有了較大提升。
    特徵監控
    在發現特徵出現異常時,我們會及時採取措施,對服務進行降級處理,並聯系特徵資料的提供方儘快修復。對於特徵資料生成過程中缺乏監控的情況也會督促做好監控,在源頭解決問題。

機器學習InAction系列講座介紹:結合美團在機器學習上的實踐,我們進行一個實戰(InAction)系列的介紹(帶“機器學習InAction系列”標籤的5篇文章),介紹機器學習在解決問題的實戰中所需的基本技術、經驗和技巧。本文主要介紹了資料清洗與特徵處理,其他四篇文章主要介紹了機器學習解決問題流程和模型訓練、模型優化等工作。

參考

《elements of statistical learning》
http://en.wikipedia.org/wiki/Supervised_learning
http://www.cnblogs.com/heaad/archive/2011/01/02/1924088.html
http://zh.wikipedia.org/zh-cn/維數災難
http://www.cs.waikato.ac.nz/ml/weka/
http://blog.csdn.net/lihaifeng555/article/details/4543752
http://blog.csdn.net/abcjennifer/article/details/8002329
http://www.cnblogs.com/leftnoteasy/archive/2011/01/08/lda-and-pca-machine-learning.html



 

發現文章有錯誤、對內容有疑問,都可以關注美團技術團隊微信公眾號(meituantech),在後臺給我們留言。我們每週會挑選出一位熱心小夥伴,送上一份精美的小禮品。快來掃碼關注我們吧!

公眾號二維碼