機器學習的第一個難點,是數據探索性分析

2021-03-01 AI科技大本營

當我們在進行機器學習領域的學習和研究時,遇到的第一個難點就是數據探索性分析(Exploratory Data Analysis)。雖然從各種文獻中不難了解到數據探索性分析的重要性和一般的步驟流程,但是在面對實際問題時,往往會有不知道從哪兒下手以及不知道怎麼根據分析結果來優化算法的困境。本文通過對真實業務場景數據的探索性分析及建模與優化,嘗試對其進行解構,揭示其真實的意圖和作用,希望能對同行有所啟示。本文採用kaggle平臺上正在進行的Jane Street 市場交易預測比賽數據,該比賽要求參賽選手設計一個量化交易預測模型,利用全球主要證券所得市場數據識別最有效的交易,從而實現回報最大化。

數據探索性分析首先要根據數據集所描述的主體含義,即這個數據集蘊含的背景知識,確定其所屬的問題領域,通常通過對業務的深刻理解實現。以Jane Street市場交易預測比賽數據為例,我們首先要理解這個交易預測模型的目的是實現交易牟利最大化,也就是最大限度的實現「低買高賣」,但是由於市場的波動性這個目的很難實現。因此給定一組交易的歷史相關數據(例如股票市場的)和歷史回報率,希望能訓練出模型,能夠根據當前交易的實時相關數據,準確預測該交易的未來回報率,從而篩選出那些回報率高的交易進行操作,回報率低的交易不進行操作。通過對業務背景的解讀,我們大致判斷這是一個時間序列類的預測問題,根據操作和不操作兩種行為,進一步判斷出其是時間序列二分類預測問題。有了對問題領域的大致判斷,接下來結合業務背景知識對數據集進一步展開分析。首先觀察數據集中訓練集和測試集的特徵列,如圖1所示。

發現訓練集比測試集多了五列特徵,分別是resp_1、resp_2、resp_3、resp_4、resp,resp大致可以猜測代表回報率,可是為什麼有五列回報率?我們再回到業務背景中去找答案,業務背景中描述resp_1~resp_4代表不同時間範圍內的回報率。不是很理解什麼含義,分析一下resp和resp_1~resp_4的相關性,使用熱力圖進行可視化分析。

通過熱力圖可視化相關性發現,這五列回報率間存在很明顯的相關性,並且越臨近的列相關性越高。再選取前10行數據用折線圖觀察下各列回報率的波動狀況。

大致可以理解,每筆交易的回報率都是隨著時間時刻變化的,resp代表交易時刻的回報率,resp1~resp4代表交易時刻前四個時點的回報率。也就是說,每筆交易的回報率本身也是一個時間序列,在預測進行交易是否進行時,可以依據當前時刻的resp值進行判斷,也可以嘗試依據給定時間周期內整體的回報率趨勢進行判斷。如果依據當前時刻resp值進行是否交易的判斷,resp<0時目標值action=0,且resp>0時目標值action=1,則數據集的目標值分布如下圖(a)所示,如果依據回報率區間整體均值和最大值進行是否交易的判斷,其目標值分布如下圖(b)和(c)所示。回報率的使用對目標值分布有一定的影響,可能是影響模型準確性的因素之一。

    圖(a)        圖(b)        圖(c)
通過對數據業務背景的解讀,我們已經得知所需要解決的是一個典型的時間序列二分類預測問題,並且其目標值需要通過一組時間序列來確定。當對整體問題有了大致了解,接下來就需要針對具體的特徵變量進行具體分析,分析從三個方面進行。特徵含義往往結合特徵變量的名稱。部分特徵變量往往通過名稱就可以大致了解其含義,了解其特徵含義可以幫助我們更好的理解數據本身,協助建模。本文中使用的數據總共有133列特徵,其中名稱有意義的特徵列為『date』,『weight』和『ts_id』,其他列從』feature_0』~』feature_129』,明顯是做過匿名處理的特徵,暫不做分析。對名稱有意義的特徵進行分析。其中『ts_id』列因為標明是ID列,並且其序號從0開始到2390490無重複,與數據集行數相同,並且因為是時間序列類數據,故可認定其為按一定時間先後排序的交易序列號。『date』列顧名思義可知是日期類,觀察其具體取值是從0~500的整數,估計每個取值代表一天,並且『date』每個取值對應的交易數量不同,其分布如下圖所示,橫坐標代表』date』取值,縱坐標代表每一個』date』取值區間對應的『ts_id』數量。可以發現交易數量的分布並不平穩,大致以date值85為界限,之前與之後的交易數據分布有明顯的差異。

『weight』列含義為權重,結合背景知識中權重和回報率一起作為評價函數的輸入項,並且』weight』為0的交易不影響最終評價函數的評分,大致可以判斷其是一個代表交易的盈利率或者說重要性的指標。觀察其分布如下圖所示。

其中權重為0的數據大約佔總數據量的17.1%,也就是說原始數據集中有17.1%的交易數據,是否進行交易對評價結果不產生影響,可以在訓練模型時去掉。接下來對『feature_0』~』feature_129』這130維特徵進行分析,雖然特徵已經做了匿名處理,但是還提供了一個features.csv的文件,描述了特徵的一些情況,對其進行分析。文件總共包含30個標籤,分別對130維特徵進行了True和False的標記,對每維特徵的標籤數量分析如圖7所示。可以發現『feature_0』特徵比較特殊,一個標籤也沒有,其他特徵都至少存在一個標籤,最多不超過四個標籤,『feature_0』特徵可能需要給與比較多的關注。經過前面的分析,對數據已經有了相對清晰的認知,接下來要對『feature_0』~『feature_129』這130維特徵做「髒數據」分析,主要包括缺失值和異常值的分析。缺失值分析可以通過統計特徵集中的null值個數實現,各特徵的缺失率如下圖所示。 

可以分析得知,130維特徵中有88維特徵存在缺失值,平均缺失率大致為2.18%,最大缺失率為16.55%,缺失率最大的四個特徵是『feature_17』,『feature_18』,』feature_27』,』feature_28』,考慮到缺失率沒有超過50%,可以先不處理,也可以在建模時用均值或者分位數填充。異常值分析可以考慮使用箱線圖,部分特徵的箱線圖如下圖所示:

從圖9中發現,除了『feature_0』外,其他特徵都存在許多偏離較大的異常值,可以考慮進行移除。完成特徵「髒數據」分析後通常會繼續對特徵進行統計分布分析。首先判斷特徵是否是正態分布的,對於非正態分布的特徵可以考慮進行相應轉換。之所以希望特徵是正態分布的,是因為機器學習領域的很多模型是基於數據服從正態分布的假設,所以如果數據服從正態分布,會對模型的訓練效果有比較明顯的提升。可以使用Q-Q圖對特徵進行分析,部分特徵的Q-Q圖如下圖所示。 

可以發現,很多特徵變量的數據分布都不是正態的,後續可以使用數據變化對其進行處理其次對比訓練集和特徵集的數據分布是否一致,對於分布不一致的特徵,考慮進行刪除處理。本文使用KDE分布圖來進行觀察。130維特徵中沒有發現訓練集和測試集明顯分布不一致的特徵。

最後對特徵的相關性進行分析,用來發現特徵變量和目標變量間、以及特徵變量之間的關係,為特徵工程中提取特徵做準備。本文使用相關性熱力圖來進行觀察。觀察與目標值’resp』相關性最高的10個特徵變量。

發現一個非常有意思的現象,與目標值’resp』相關性最高的10維特徵,彼此間的相關性也非常高,建模時如果選擇線性回歸模型,需要對相關性高的特徵多加關注。

所有的數據探索性分析最終都是為建模進行服務的。通過上文的數據探索性分析,可以指導我們進行建模。通過對數據業務背景的解讀,我們得知需要建立的是一個基於時間序列的二分類預測模型,可以先採用決策樹類模型做基礎模型,本文使用了Xgboost分類模型,不對原始數據做任何處理,直接用xgboost模型進行預測分類,訓練集和驗證集比例為7:3時,基礎得分為4078.620。首先結合對特徵含義的分析。考慮過濾掉weight特徵值為0的特徵,模型得分提升到4292.947,同時調整訓練集和驗證集的比例分布,當訓練集和驗證集比例為9:1時,模型得分提升到4601.8。用resp_1,resp_2,resp_3,resp_4,resp五列回歸值的均值判斷action取值,替代單純的根據resp判斷action取值,模型得分提升到5277.285。其次結合對特徵異常值的分析。由於使用的是樹類模型,對缺失值不敏感,可以將缺失值統一處理為-999,也可以用特徵的均值替代,對於樹類模型來說,模型得分沒有明顯的提升。接下來考慮對部分非正態分布的特徵進行轉化,當對標籤為』feature_1』,』feature_2』,』feature_41』,』feature_42』的特徵進行log變化,將其轉換為正態分布時,模型得分提升到了6310.758。根據數據探索性分析的結果,完成了第一輪的建模和優化,將模型得分從基礎分4078.620,提升到了6310.758,提升率達到54.7%,效果很顯著。第一輪建模和優化完成後進入了一段瓶頸期,於是再次回到數據探索性分析,嘗試解構出更多的信息。仍然從特徵開始,我注意到『date』這一列特徵,作為時間序列類問題最重要的特徵,應該有繼續挖掘的價值。首先結合不同日期值交易數量分布圖(圖5),可以觀察到以date=85為界限,之前的日交易頻率明顯比之後的高,不了解是因為什麼原因導致的。根據kaggle網站上的一些建議,嘗試放棄掉前85天的數據,只用後415天的數據進行建模,模型得分提升到了6390,再稍微調整下參數,最終達到了6405.901。調整參數的時候,發現之前建模時犯了一個錯誤,date這維特徵本身有時間約束,建模時不能用未來的數據對歷史的數據做驗證,所以改變了之前隨機劃分訓練集和測試集的方式,改變使用前385天的數據訓練,後30天的數據驗證,模型得分提升到了7040.166,嘗試調整下訓練集和測試集的比例,當使用前375天的數據訓練,後40天的數據驗證時效果最好,模型得分為8757.05,,在第一輪的基礎上又提升了38.7%。僅僅通過兩輪數據探索性分析,便極大地優化了模型,顯著提升了預測的效果,由此可見其重要性。並且數據探索性分析可以持續迭代進行,不斷挖掘出數據集內隱藏的一些特徵,加深我們對於背景知識的理解,指引我們進行有效的特徵工程,並且為建立模型和優化模型提供理論依據,是進行數據挖掘和機器學習最有效的輔助手段。 

相關焦點

  • 一文總結EDA探索性數據分析
    探索性數據分析(Exploratory Data Analysis,EDA)是一種探索數據的結構和規律的一種數據分析方法。其主要的工作包含:對數據進行清洗,對數據進行描述(描述統計量,圖表),查看數據的分布,比較數據之間的關係,培養對數據的直覺和對數據進行總結。EDA可以幫助我們找到適合的數據模型,本文針對文本數據,將進行具體的數據探索性分析講解。
  • 如何使用Pandas-Profiling進行探索性數據分析
    當開始一個新的機器學習項目時,獲得機器學習數據集之後的第一步就是要了解它。我們可以通過執行探索性數據分析(EDA)來實現這一點。這包括找出每個變量的數據類型、目標變量的分布、每個預測變量的不同值的數量、數據集中是否有重複值或缺失值等。進行EDA探索機器學習數據集的過程往往是非常耗時的。什麼是Pandas-Profiling?
  • 全流程記錄第一個Kaggle項目:探索性數據分析(EDA)和數據處理(附圖文代碼)
    目錄 第一篇:全流程記錄新手的第一個Kaggle項目:泰坦尼克預測從Top89%到Top10% (內附附數據集和代碼)連結:第二篇(本文):探索性數據分析(EDA)和數據處理第三篇:特徵工程和模型選擇為何要做 探索性數據分析:Exploratory Data Analysis(EDA)是指對已有數據在儘量少的先驗假設下通過作圖、制表、方程擬合、計算特徵量等手段探索數據的結構和規律的一種數據分析方法,由美國統計學家John Tukey在上世紀70年代提出。沒錯,鼎鼎有名的「箱線圖」就是他發明的。
  • 乾貨 :18個免費的探索性數據分析工具
    因為,我本可以選擇不需要會編程就可以使用的數據分析工具並避免那些痛苦。數據挖掘是預測建模不可缺少的一部分。除非你知道過去發生了什麼否則你無法做出預測。掌握數據挖掘最重要的技能就是好奇心,它是免費的卻不是每個人都擁有的東西。我寫這篇文章是為了幫助你們了解可用於探索性數據分析的各種免費工具。時下,在市場中可以找到非常多的免費且有趣的工具來幫助我們工作。
  • 案例 :探索性文本數據分析的新手教程(Amazon案例研究)
    在一個機器學習項目的全流程中是沒有捷徑可走的,比如我們無法在收集齊所需的數據後直接跳到模型搭建的階段。我們需要有條理地規劃方法,而在此過程中探索性數據分析(EDA)階段是十分重要的。在我從事這一領域的前期,總是急切地要深入研究機器學習算法,但這常常得到不確定性的結果。通過個人經歷和導師的建議,我意識到在探索和理解數據上花時間是必要的。
  • 帶你和Python與R一起玩轉數據科學: 探索性數據分析(附代碼)
    本系列將介紹如何在現在工作中用兩種最流行的開源平臺玩轉數據科學。先來看一看數據分析過程中的關鍵步驟 – 探索性數據分析。內容簡介本系列將介紹如何在現在工作中用兩種最流行的開源平臺玩轉數據科學。本文先來看一看數據分析過程中的關鍵步驟 – 探索性數據分析(Exploratory Data Analysis,EDA)。探索性數據分析發生在數據收集和數據清理之後,而在數據建模和分析結果可視化展現之前。然而,這是一個可反覆的過程。做完某種EDA後,我們可以嘗試建立一些數據模型或者生成一些可視化結果。同時,根據最新的分析結果我們又可以進行進一步的EDA,等等。
  • 探索性因素分析與驗證性因素分析的差異
    研究者的假定是每個指標變量都與某個因子匹配,而且只能通過因子載荷憑知覺推斷數據的因子結構。驗證性因子分析的主要目的是決定事前定義因子的模型擬合實際數據的能力,以試圖檢驗觀測變量的因子個數和因子載荷是否與基於預先建立的理論的預期一致。驗證性因子分析的主要目的是決定事前定義因子的模型擬合實際數據的能力,以試圖檢驗觀測變量的因子個數和因子載荷是否與基於預先建立的理論的預期一致。
  • 探索性因子分析(EFA)與驗證性因子分析(CFA)--應用篇
    因子分析是基於相關關係對眾多數據進行降維(即簡化)的數據處理方法,目的在於挖掘出眾多數據後的某種結構。因子分析可分為:探索性因子分析和驗證性因子分析。探索性因子分析的英文縮寫為EFA(exploratory factor analysis),驗證性因子分析的英文縮寫為CFA(confirmatory factor analysis)。
  • 乾貨丨18個免費的探索性數據分析工具,值得收藏
    因為,我本可以選擇不需要會編程就可以使用的數據分析工具並避免那些痛苦。數據挖掘是預測建模不可缺少的一部分。除非你知道過去發生了什麼否則你無法做出預測。掌握數據挖掘最重要的技能就是好奇心,它是免費的卻不是每個人都擁有的東西。我寫這篇文章是為了幫助你們了解可用於探索性數據分析的各種免費工具。時下,在市場中可以找到非常多的免費且有趣的工具來幫助我們工作。
  • 探索性分析
    作者:夏雨驕陽  封面:吉江SPSS中,探索分析是對變量進行深入和詳盡的描述性統計分析,它在一般描述性統計指標的基礎上,增加關於數據其他特徵的文字與圖形描述,分析結果更加細緻與全面,有助於對數據做進一步分析。
  • 數據分析技術:決策樹分析;機器學習入門模型
    首選可以根據是否有分類目標將以上這些方法分成兩大類:聚類分析與其它分析方法。聚類分析在將研究對象分類之前是沒有目標類別的,或者說是探索性的,例如,某公司希望做細做深市場,那麼就需要對它們目前的客戶進行分類,分析不同類別客戶的屬性區別,然後才能有針對性的對不同類別客戶採用不同的營銷手段。
  • 五個給機器學習和數據科學入門者的學習建議
    學習通過 Pandas、Numpy 和 Matplotlib 進行數據分析、操作和可視化一旦你已經掌握了一些 Python 技巧,就會開始想要學習如何處理和操作數據,為了實現這一目的,你需要熟悉 Pandas、Numpy 和 Matplotlib。
  • 你想成為數據科學家嗎?不要把機器學習當成入門第一課
    1.機器學習僅是數據科學的一小部分。數據科學和機器學習就像是圖中所示的矩形和正方形。機器學習是數據科學的一部分,但數據科學並不一定是機器學習,就像正方形是一種矩形,但矩形不一定是正方形一樣。事實上,機器學習建模僅佔數據科學家工作的5-10%,其餘大部分時間基本投入在其他地方。
  • 大數據分析與機器學習有什麼區別
    如果從更大的角度看,人工智慧也將成為每個增長業務的一部分,越來越多的人熟悉大數據,大數據分析和機器學習等技術術語,並使用它們來解決複雜的分析問題。 通過處理足夠的數據,公司可以使用大數據分析技術來發現,理解和分析資料庫中複雜的原始數據。機器學習是大數據分析的一部分,它使用算法和統計信息來理解提取的數據。
  • 驗證性因子分析與探索性因子分析的區別 | 附:量表編制步驟
    最近有老師問驗證性因子分析和探索性因子分析的區別,是不是在做量表的時候需要做驗證性因子分析?那麼是在什麼時候做?很明顯,編制量表的時候一定是需要做驗證性因子分析的。1.在進行探索性因子分析的時候,量表條目最終能形成幾個條目是未知的。
  • 比較探索性因子分析(EFA)與驗證性因子分析(CFA)的--理論篇
    探索性(EFA)和驗證性(CFA)因子分析,二者都用於檢驗結構效度,如果對因子結構有事先的假設和理論基礎,通常採用CFA;如果沒有事先的假設,純粹依據數據來分析結果,則採用EFA。探索性因子分析(EFA):驗證性因子分析(CFA):驗證量表的維度或面向性,決定最有效因子結構;驗證因子的階層關係;評估量表的信度和效度我們舉例說明:假設現在要設計一份量表型的調查問卷,根據調研文獻和前期訪談,總共設計3個潛在變量,然後為每個潛在變量設計
  • Pandas自動進行探索性數據分析,節省可視化和理解數據的時間
    根據Wikipedia的說法,探索性數據分析(EDA)是一種分析數據集以總結其主要特徵的方法,通常使用視覺方法。因此,EDA是理解基礎數據,變量分布及其相關性的過程。這使得EDA成為構建任何統計模型之前任何數據科學過程中的第一步。
  • 拓撲數據分析與機器學習的相互促進
    【編者按】拓撲數據分析(TDA)和機器學習(ML)的區別與聯繫讓不熟悉TDA的人撲朔迷離,本文通過兩個定義,解釋了TDA和ML的不同,以及TDA和ML如何相互促進,為何會相互促進,並通過一個設備故障分析的案例(5000個樣本,複雜度適中,48個連續特徵)來進行證明。
  • 初學者:快速了解數據分析
    比如我們需要對數據執行檢查,進行數據清理,轉換以及數據建模,通過這些方式來達到我們需要的目的,得出相應的結論,做出正確的決策——我們把這一系列過程稱為數據分析。在統計應用中,數據分析可以又分為探索性數據分析(EDA)和驗證性數據分析(CDA)。
  • 數據清洗和探索性分析案例分享(一)
    這篇寫寫數據清洗的具體案例分享,由於篇幅可能比較大,探索性數據分析部分可能下篇再講。