特徵工程自動化實現的是更聰明地工作而不是更努力地工作!

點擊上方關注,All in AI中國

特徵工程自動化將節省您的時間,構建更好的預測模型,創建有意義的功能並防止數據洩漏。

數據科學中幾乎沒有確定性,因為它總是隨著更好的方法開發,庫、工具和算法不斷變化。然而,有一個不會消失的趨勢就是自動化水平在不斷提高中。

近年來,在自動化模型選擇和超參數調整方面取得了進展,但機器學習流程(特徵工程)最重要的方面在很大程度上被忽略了。這個關鍵領域中最有能力的入口是Featuretools,它是一個開源的Python庫。在本文中,我們將使用此庫來了解特徵工程自動化將如何改變您機器學習的方式,使得它變得更好。

特徵工程自動化實現的是更聰明地工作而不是更努力地工作!

Featuretools是一個用於自動化功能工程的開源Python庫

特徵工程自動化是一種相對較新的技術,但在使用它來解決使用真實數據集的大量數據科學問題之後,我認為它應該是每一個機器學習工作流程的標準部分。在本文中,我們一起看看其中兩個項目的結果和結論,以及GitHub上的Jupyter Notebooks提供的完整代碼。( https://github.com/Featuretools/Automated-Manual-Comparison)

每個項目都強調了特徵工程自動化的一些優點:

  • 貸款還款預測:與手動特徵工程相比,自動化特徵高工程可將機器學習開發時間縮短10倍,同時提供更好的建模性能。
  • 零售支出預測:自動化特徵工程通過內部處理時間序列篩選器來創建有意義的功能並防止數據洩漏,從而實現成功的模型部署。

特徵工程:手動VS自動

特徵工程是獲取數據集和構建解釋變量的過程,它們可用於訓練預測問題的機器學習模型。通常,數據分佈在多個表中,並且必須收集到一個表中,其中的行包含列中的觀察數據和特性。

特徵工程的傳統方法是使用領域知識一次構建一個功能,這是一個繁瑣、耗時且容易出錯的過程,稱為手動特徵工程。手動特徵工程的代碼與問題有關,必須為每個新數據集重寫。

特徵工程自動化通過從一組相關數據表中自動提取有用且有意義的特徵,並使用可應用於任何問題的框架,改進了此標準工作流程。它不僅減少了特徵工程所花費的時間,還創建了可解釋的功能,並通過過濾與時間相關的數據來防止數據洩漏。

與手動特徵工程相比,自動化特徵工程更高效、更可重複,使您能夠更快地構建更好的預測模型。

貸款還款:更快地建立更好的模型

數據科學家面臨的主要的困難是數據的大小和傳播範圍,目前在Kaggle上運行的機器學習競賽,其目標是預測貸款是否將由客戶償還。看一下完整的數據集,你就會遇到分散在七個表中的5800萬行數據。機器學習需要一個表進行訓練,因此特徵工程意味著在一個表中整合關於每個客戶端的信息。

特徵工程自動化實現的是更聰明地工作而不是更努力地工作!

特徵工程需要將一組相關表中的所有信息捕獲到一個表中

我對該問題的第一次嘗試使用了傳統的手動特徵工程:總共花了10個小時手工創建一組功能。首先,我閱讀其他數據科學家的工作,探索數據,並研究問題領域,以獲得必要的領域知識。然後我將這些知識翻譯成代碼,一次構建一個功能。作為單個手動功能的一個示例,我找到了客戶對之前貸款的延遲付款總數,這項操作需要使用3個不同的表格。

最終的手動工程功能表現相當不錯,比基線功能(相對於最高排行榜得分)提高了65%,表明了正確的特徵工程的重要性。

然而,效率低下甚至沒有開始描述這個過程。對於手動特徵工程,最終每個功能花費超過15分鐘,因為我使用傳統方法一次製作一個功能。

特徵工程自動化實現的是更聰明地工作而不是更努力地工作!

手動特徵工程過程

除了繁瑣耗時外,手動特徵工程還包括:

  • 具體問題:我寫了幾個小時的所有代碼都不能應用於任何其他問題
  • 容易出錯:每一行代碼都是有可能犯錯此外,最終的手工設計功能受到人類創造力和耐心的限制:

我們可以考慮構建的功能只有這麼多,我們製作它們的時間也只有這麼多。

從手動到自動特徵工程

正如Featuretools中實現的那樣,自動化特徵工程甚至允許像我這樣的領域新手從一組相關數據表中創建數千個相關功能。我們需要知道的是我們表的基本結構以及它們之間的關係,我們在稱為實體集的單個數據結構中跟蹤它們。一旦我們有一個實體集,使用一個名為深度特徵合成(DFS)的方法,我們就能夠在一個函數調用中構建數千個特性。

特徵工程自動化實現的是更聰明地工作而不是更努力地工作!

使用Featuretools的自動化特徵工程流程

DFS使用稱為“基元”的函數來聚合和轉換我們的數據。這些原語可以像獲取列的平均值或最大值一樣簡單,或者它們可以是複雜的並且基於主題專業知識,因為Featuretools允許我們定義自己的自定義基元。

特徵原語包括我們已經手動完成的許多操作,但是使用Featuretools,而不是重寫代碼以在不同的數據集上應用這些操作,我們可以在關係數據庫中使用相同的確切語法。此外,當我們將基元堆疊在一起以創建深層特徵時,DFS的強大功能就出現了。

深度特徵合成是靈活的,允許它應用於任何數據科學問題,並且功能強大,通過創建深層特徵來揭示我們數據中的洞察力。

我將為您節省設置所需的幾行代碼,但DFS的操作只需一行。在這裡,我們使用數據集中的7個表為每個客戶端創建數千個功能(ft是導入的featuretools庫):

特徵工程自動化實現的是更聰明地工作而不是更努力地工作!

以下是我們從Featuretools庫自動獲得的1820個功能中的一些:

  • 客戶以前貸款支付的最高總額。在這3個表中是使用MAX和SUM原語創建的。
  • 按以前平均信用卡債務計算的百分比排名,在這兩個表中使用了PERCENTILE和MEAN原語。
  • 客戶是否在申請過程中提交了兩份文件。這使用了AND轉換原語和1個表。

這些功能中的每一個都使用簡單的聚合構建,因此是人類可解釋的。 Featuretools創建了許多與我手動構建相同的功能,但也有成千上萬的功能我從未想過 ,或者說是有時間實現。並非每個特徵都與問題相關,並且某些特徵具有高度相關性,但多一些總比少一些要好。

經過一些特徵選擇和模型優化後,與手動功能相比,這些功能在預測模型中略勝一籌,總體開發時間為1小時,與手動過程相比減少了10倍。 Featuretools要快得多,因為它需要較少的域知識,並且因為編寫的代碼行數要少得多。

我承認學習Featuretools需要花費一些時間,但這是一項可以帶來回報的投資。花了一個小時左右來學習Featuretools後,您可以將其應用於其他機器學習問題。

以下圖表總結了我對貸款償還問題的經驗:

特徵工程自動化實現的是更聰明地工作而不是更努力地工作!

特徵工程自動化實現的是更聰明地工作而不是更努力地工作!

特徵工程自動化實現的是更聰明地工作而不是更努力地工作!

自動和手動特徵工程的時間、功能數量和性能之間的比較

  • 開發時間:考慮製作最終特徵工程代碼所需的一切:手動10小時與自動1小時
  • 該方法生成的特徵數量:30個特徵手冊VS1820自動化
  • 相對於基線的改進是使用受過特徵訓練的模型與基線公共排行榜得分相比的基線增益百分比:65%手動與66%自動化

我的想法是,自動化特徵工程不會取代數據科學家,而是通過顯著提高效率,使她可以將更多時間花在機器學習管道的其他方面。

此外,我為第一個項目編寫的Featuretools代碼可以應用於任何數據集,而手動工程代碼必須被丟棄並完全重寫為下一個數據集!

零售支出:構建有意義的功能並防止數據洩漏

對於第二個數據集,一個記錄客戶交易在線時間戳的數據集,預測問題是將客戶分為兩個部分,即下個月花費超過500美元的人和不會花費超過500美元的人。但是,不是對所有標籤使用一個月,而是每個客戶多次成為標籤。我們可以將他們在5月份的支出用作標籤,然後在6月份使用,依此類推。

特徵工程自動化實現的是更聰明地工作而不是更努力地工作!

每個客戶多次用作訓練示例

多次使用多個客戶作為觀察結果會給創建訓練數據帶來困難:在為特定月份的客戶製作功能時,即使我們可以訪問這些數據,我們也不能使用未來幾個月的任何信息。在部署中,我們永遠不會擁有未來的數據,因此無法使用它來訓練模型。公司經常在這個問題上掙扎,並且經常部署一個在現實世界中比在開發中更糟糕的模型,因為它是使用無效數據進行訓練的。

幸運的是,在Featuretools中,確保我們的數據在時間序列問題中有效是很簡單的。在深度特徵合成功能中,我們傳遞如上所示的數據幀,其中截止時間表示我們不能為標籤使用任何數據,並且Featuretools在構建特性時自動考慮了時間。

客戶在給定月份的特徵是使用過濾到月份之前的數據構建的。請注意,創建我們的功能集的調用與添加cutoff_time的貸款還款問題的調用相同。

特徵工程自動化實現的是更聰明地工作而不是更努力地工作!

運行Deep Feature Synthesis的結果是得到一個特徵表,每個客戶每月一個。我們可以使用這些功能來訓練帶有我們標籤的模型,然後對任何月份都進行預測。此外,我們可以放心,我們模型中的功能不會使用未來的信息,這將導致不公平的優勢併產生誤導性的訓練分數。

通過自動化功能,我能夠構建一個機器學習模型,ROC-AUC曲線它達到了0.90 ,而基準線(猜測與上月相同的支出水平)為0.69。

除了提供令人印象深刻的預測性能外,Featuretools實現還為我提供了同樣有價值的東西:可解釋的特徵。看看隨機森林模型中15個最重要的特徵:

特徵工程自動化實現的是更聰明地工作而不是更努力地工作!

15種隨機森林模型中最重要的Featuretools功能

特徵重要性能夠告訴我們,客戶將在下個月花多少錢的預測因素是根據他們之前花費了多少錢和購買數量。這些是我們可以手工構建的特徵,但是我們將不得不擔心洩漏數據並創建一個在開發中比在部署中做得更好的模型。

如果該工具已經存在,可以創建有意義的特徵而無需擔心我們的有效性,那麼為什麼要手工實現呢?此外,自動化的特徵在問題的背景下是完全清晰的,並且可以為我們的現實世界的推理進行推理。

自動化特徵工程確定了最重要的信號,實現了數據科學的主要目標:揭示隱藏在大量數據中的洞察力。

即使花在手動特徵工程上的時間比使用Featuretools花費的時間多得多,我也無法開發出一組性能接近的特徵。下圖顯示了使用在兩個數據集上訓練的模型對未來一個月的客戶銷售進行分類的ROC曲線。左側和頂部的曲線表示更好的預測:

特徵工程自動化實現的是更聰明地工作而不是更努力地工作!

ROC曲線比較了自動和手動特徵工程的結果。左側和頂部的曲線表示具備更好的性能

我甚至不完全確定是否使用了有效的數據來實現手動特徵,但是使用Featuretools實現,我不必擔心時間相關問題中的數據洩漏。也許這種無法手動設計一組有用的有效功能說明了我作為數據科學家的失敗,但是如果該工具是為了我們安全地做到這一點,為什麼不使用它呢?

我們在日常生活中使用自動安全系統,Featuretools中的自動化特徵工程是在時間序列問題中構建有意義的機器學習功能的同時提供卓越預測性能的安全方法。

結論

離開這些項目,我確信自動化特徵工程應該是機器學習工作流程中不可或缺的一部分。該技術並不完美,但仍能顯著提高效率。

主要結論是自動化特徵工程:

  • 將實施時間縮短了10倍
  • 在相同級別或更高級別實現建模性能
  • 提供具有現實意義的可解釋功能
  • 防止不適當的數據使用會使模型失效
  • 適合現有的工作流程和機器學習模型

“更聰明地工作,而不是更努力地工作”可能是陳詞濫調,但有時候陳詞濫調是有道理的:如果有一種方法可以在較小的時間投入中以相同的表現完成相同的工作,那麼顯然這是一種值得學習的方法。

特徵工程自動化實現的是更聰明地工作而不是更努力地工作!


分享到:


相關文章: