特徵工程自動化如何為機器學習帶來重大變化
本文為 AI 研習社編譯的技術博客,原標題 :
Why Automated Feature Engineering Will Change the Way You Do Machine Learning
作者 |Will Koehrsen
翻譯 | 葉夢琦
校對 | 醬番梨 審核 | 約翰遜·李加薪 整理 | 立魚王
https://towardsdatascience.com/why-automated-feature-engineering-will-change-the-way-you-do-machine-learning-5c15bf188b96
數據科學中有一些確定性--隨著新方法的發展,庫,工具,和演算法也在持續發展。然而,有一個沒有淘汰的趨勢,就是朝著更高的自動化。
近年來,在自動化模型選擇和超參數調參有了些進展,但機器學習管線中最重要的一面,特徵工程,很大程度上被忽視了。在這關鍵領域中,最有力的入口是Featuretools,一個開源Python庫。在這篇文章中,我們將用這個庫來看,自動化特徵工程將更好地改變你實踐機器學習的方式。
自動化特徵工程是一項更新的技術,但,在用它解決一系列,使用真實世界數據集的數據科學問題後,我確信它應該成為任何機器學習工作流的標準部分。在此,我們將查看兩個項目的結果和結論,項目代碼。
每個項目突出一些自動特徵工程的好處:
貸款還款預測:自動特徵工程,對比手動特徵工程,能夠減少10倍機器學習開發時間,同時達到更好的模型表現。
零售支出預測:自動特徵工程通過內部處理時間序列過濾器來創建有意義的特徵並防止數據泄漏,從而實現成功的模型部署。
請自由研究代碼並嘗試Featuretools!(揭秘:我給Feature Labs打工,開發庫的公司。這些項目使用了免費,開源版本的Featuretools)。
特徵工程: 人工vs. 自動
特徵工程是利用數據集和構造可用於訓練預測問題機器學習模型的解釋變數?-?特徵?-?的過程。通常,數據分散在多個表中,必須收集到一個表中,其中包含每行觀察結果和每列特徵。
傳統的特徵工程方法是使用領域知識一次構建一個特徵,這是一個繁瑣、耗時和容易出錯的過程,稱為手動特徵工程。手工特性工程的代碼與問題有關,必須為每個新的數據集重新編寫。
自動特徵工程改進了這一標準工作流程,自動從一組相關數據表中提取有用和有意義的特徵,該框架可以應用於任何問題。它不僅減少了功能工程所花費的時間,而且通過過濾時間依賴的數據來創建可解釋的特性和防止數據泄漏。
與手動特性工程相比,自動化特徵工程更高效、更可重複,使您能夠更快地構建更好的預測模型。
貸款償還:更快地建立更好的模型
數據科學家處理家庭信貸貸款問題(目前在Kaggleon運行的機器學習競賽,目的是預測貸款是否將由客戶償還)面臨的主要困難是數據的大小和傳播。看一看完整的數據集,您就會遇到分布在七個表中的5800萬行數據。機器學習需要一個用於培訓的表,因此功能工程意味著將每個客戶的所有信息合併到一個表中。
特徵工程要求將一組相關表中的所有信息捕獲到一個表中。
我第一次嘗試這個問題時使用了傳統的手動特徵工程:我花了10個小時,手工創建了一組特徵。我首先閱讀了其他數據科學家的工作,探索了數據,研究了問題區域,以獲取必要的領域知識。然後我將知識轉化為代碼,一次構建一個功能。作為單個人工特徵的示例,我發現客戶在以前的貸款中支付的延遲付款總數是使用3個不同的表所需的操作。
最終人工設計的特徵表現得很好,相對於基線特徵(相對於頂級排行榜分數)獲得了65%的改進,這表明了正確的特徵工程的重要性。
然而,效率低下甚至開始描述這一過程。對於人工特徵工程,我每次建立特徵超過15分鐘,因為我一次使用了傳統的製作單一功能的方法。
人工特徵工程過程
除了繁瑣和費時的手工特性工程是:
特定問題:我花了許多小時編寫的所有代碼都不能應用於任何其他問題
容易出錯:每一行代碼都是犯錯誤的另一個機會
最後的人工設計特徵受到人類創造力和耐心的限制:我們只有那麼多的特徵可以考慮去構建,而我們必須花那麼多的時間來完成它們。自動化特徵工程的希望是通過使用一組相關表並使用可以應用於所有問題的代碼自動構建數百個有用的特徵,從而超越這些限制。
從人工到自動特徵工程
正如Featuretools中實現的那樣,自動化特徵工程甚至允許像我這樣的域新手從一組相關數據表中創建數千個相關特性。我們需要知道的是我們表的基本結構以及它們之間的關係,我們稱為在實體集的單個數據結構中跟蹤它們 。一旦我們有一個實體集,一個使用名為深度特徵合成(DFS)的方法,就我們能夠在一個函數調用中構建數千個特性 。
使用Featuretools的自動化特徵工程流程。
DFS使用稱為「原語」函數來聚合與轉換我們的數據。這些原語可以像獲取列的平均值或最大值一樣簡單,或者它們可以是複雜的並且基於主題專業知識,因為 Featuretools允許我們定義我們自己的自定義基元。
功能原語包括我們已經手動手動完成的許多操作,但是使用Featuretools,而不是重寫代碼以將這些操作應用於不同的數據集,可以我們在任何關係資料庫中使用 相同的確切 語法。此外,當我們將基元堆疊在一起以創建深層特徵時,DFS的強大功能就出現了。(有關DFS的更多信息,請查看該技術發明人之一的博客文章。)
深度特徵綜合是靈活的 - 使之能被應用於任何數據科學問題 - 並且功能強大 - 通過創建深層特徵來揭示我們數據的本質。
我將為您節省設置所需的幾行代碼,但DFS的操作只需一行。在這裡,我們 使用數據集中的所有7個表為每個客戶端創建數千個功能( ft 是導入的featuretools庫):
以下是我們從Featuretools自動獲得的1820個功能中的一些:
客戶以前貸款支付的最高總額。這是使用3個表中的MAX和SUM原語創建的 。
客戶在平均先前信用卡債務方面的百分位排名。這在兩個表中使用 PERCENTILE 和 MEAN原語。
客戶是否在申請過程中提交了兩份文件。這使用 AND 轉換原語和1個表。
這些功能中的每一個都是使用簡單的聚合構建的,因此是人類可解釋的。Featuretools創建了許多我手動完成的相同功能,但也有成千上萬的我從未想過 - 或者有時間實現。並非每個功能都與問題相關,並且某些功能具有高度相關性,但是,功能太多是一個比太少功能更好的問題!
經過一些功能選擇和模型優化後,與手動功能相比,這些功能在預測模型中略勝一籌,總體開發時間為1小時,與手動過程相比減少了10倍。Featuretools要快得多,因為它需要較少的領域知識,並且因為編寫的代碼行要少得多。
我承認學習Featuretools需要花費一些時間,但這是一項可以帶來回報的投資。花了一個小時左右來學習Featuretools後,您可以將其 應用於任何機器學習 問題。
以下圖表總結了我對貸款償還問題的經驗:
自動和手動功能工程按時,功能數量和性能之間的比較。
開發時間:考慮製作最終功能工程代碼所需的所有內容:10小時手動和1小時自動化
該方法生成的特徵數量:30個功能手冊與1820自動化
相對於基線的改進是使用在特徵上訓練的模型與基線公共排行榜得分相比的基線增益百分比:65%手動與66%自動化
我的想法是,自動化特徵工程不會取代數據科學家,而是通過顯著提高效率,使她可以將更多時間花在機器學習管道的其他方面。
此外,我為第一個項目編寫的Featuretools代碼可以應用於任何數據集,而手動工程代碼必須被丟棄並完全重寫為下一個數據集!
零售支出:構建有意義的功能並防止數據泄漏
對於第二個數據集,即在線時間戳客戶交易的記錄,預測問題是將客戶分為兩個部分,即下個月花費超過500美元的人和不會花費超過500美元的人。但是,不是對所有標籤使用一個月,而是每個客戶多次成為標籤 。我們可以將他們在5月份的支出用作標籤,然後在6月份使用,依此類推。
每個客戶多次用作培訓示例
多次使用每個客戶作為觀察結果會給創建培訓數據帶來困難:在為特定月份的客戶製作功能時,即使我們可以訪問這些數據,我們也不能使用未來幾個月的任何信息 。在部署中,我們永遠 不會有未來的數據 ,因此不能用它來訓練模型。公司經常在這個問題上掙扎,並且經常部署一個在現實世界中比在開發中更糟糕的模型,因為它是使用無效數據訓練的。
幸運的是,確保我們的數據在時間序列問題中有效在Featuretools中很簡單。在深度特徵合成功能中,我們傳遞如上所示的數據幀,其中截止時間表示我們不能使用任何數據作為標籤的點,並且Featuretools 在構建特徵時自動將時間考慮在內。
使用在月份之前過濾的數據構建給定月份中的客戶的功能。請注意,創建我們的功能集的調用與添加cutoff_time的貸款還款問題的調用相同。
運行Deep Feature Synthesis的結果是一個功能表,每個客戶 每月一個。我們可以使用這些功能來訓練帶有我們標籤的模型,然後對任何月份進行預測。此外,我們可以放心,我們模型中的功能不會使用未來的信息,這將導致不公平的優勢併產生誤導性的培訓分數。
通過自動化功能,我能夠建立一個機器學習模型,與預測一個月的客戶支出類別的0.69相比,知情基線(猜測與上個月相同的支出水平)達到0.90 ROC AUC。
除了提供令人印象深刻的預測性能之外,Featuretools實現還給了我同樣有價值的東西:可解釋的功能。看看隨機森林模型中15個最重要的特徵:
15隨機森林模型中最重要的Featuretools功能。
功能重要性告訴我們,客戶將在下個月花費多少的最重要預測因素是他們之前花費了多少 SUM(purchase.total) 以及購買數量 SUM(購買量)。這些是我們可以手工構建的功能,但是我們將不得不擔心泄漏數據並創建一個在開發中比在部署中更好的模型。
如果該工具已經存在以創建有意義的功能而無需擔心我們的功能的有效性,那麼為什麼要手動執行?此外,自動化功能在問題的背景下是完全清晰的,可以告知我們的現實推理。
自動化特徵工程確定了最重要的信號,實現了數據科學的主要目標:揭示隱藏在大量數據中的真知灼見。
即使花在手動功能工程上的時間比使用Featuretools花費的時間多得多,我也無法開發出一組性能接近相同的功能。下圖顯示了使用在兩個數據集上訓練的模型對未來一個月的客戶銷售進行分類的ROC曲線。左側和頂部的曲線表示更好的預測:
ROC曲線比較自動和人工特徵工程結果。
左側和頂部的曲線表示更好的性能。
我甚至不確定人工特徵是否是使用有效數據製作的,但是使用Featuretools實現,我不必擔心時間相關問題中的數據泄漏。也許這種無法手動設計一組有用的有效功能可以說明我作為數據科學家的失敗,但如果該工具能夠安全地為我們做到這一點,為什麼不使用它呢?
我們在日常生活中使用自動安全系統,Featuretools中的自動化功能工程是在時間序列問題中構建有意義的機器學習功能同時提供卓越預測性能的安全方法。
結論
我完成這些項目,確信自動化特徵工程應該是 機器學習工作流程中不可或缺的一部分。該技術並不完美,但仍可顯著提高效率。
主要結論是自動化特徵工程:
將實施時間縮短了10倍
在相同級別或更高級別實現建模性能
提供具有現實意義的可解釋功能
防止使模型無效的不正確數據使用
適合現有的工作流程和機器學習模型
「工作更聰明,而不是更努力」可能是陳詞濫調,但有時候陳詞濫調有道理:如果有一種方法可以在較小的時間投入中以相同的表現完成相同的工作,那麼顯然這是一種值得學習的方法。
Featuretools 將永遠免費使用和開源(歡迎貢獻),並有幾個例子 -? 這是我寫的一篇文章 ?- 讓你在10分鐘內上手。您作為數據科學家的工作是安全的,但使用自動化功能工程可以使其變得更加容易。
※數據工程師和數據科學家有什麼不同
※AI 的偏差,取決於人們如何使用機器學習系統
TAG:AI研習社 |