近年來(lái),我們?cè)谧詣?dòng)模型選擇和超參數(shù)調(diào)優(yōu)方面取得了進(jìn)展,但機(jī)器學(xué)習(xí)流程中最重要的方面--特征工程,在很大程度上被我們所忽略。在本文中,我們將使用Featuretools庫(kù)來(lái)了解自動(dòng)化特征工程如何改變并優(yōu)化機(jī)器學(xué)習(xí)的工作方式。
Featuretools是一個(gè)開源的Python庫(kù),用于自動(dòng)化特征工程
自動(dòng)化特征工程是一種相對(duì)較新的技術(shù),用于解決真實(shí)世界數(shù)據(jù)集所面臨的一系列科學(xué)問(wèn)題。自動(dòng)特征工程能夠縮減時(shí)間成本,構(gòu)建更優(yōu)秀的預(yù)測(cè)模型,生成更有意義的特征,還能防止數(shù)據(jù)泄漏(data leakage)。它具有強(qiáng)大的功能,以至于我相信它將是任何機(jī)器學(xué)習(xí)工作流程的標(biāo)準(zhǔn)部分。
接下來(lái),我們將通過(guò)以下兩個(gè)項(xiàng)目來(lái)進(jìn)一步了解它的強(qiáng)大之處,這兩個(gè)項(xiàng)目都能體現(xiàn)自動(dòng)化特征工程的一些優(yōu)點(diǎn):
貸款還款預(yù)測(cè)(Loan Repayment Prediction):相比于手動(dòng)特征工程,自動(dòng)化特征工程能夠?qū)C(jī)器學(xué)習(xí)開發(fā)時(shí)間縮短10倍,同時(shí)還能提供更好的模型表現(xiàn)。
項(xiàng)目的Notebooks地址:
https://github.com/Featuretools/Automated-Manual-Comparison/tree/master/Loan%20Repayment
零售支出預(yù)測(cè)(Retail Spending Prediction):自動(dòng)化特征工程能夠通過(guò)內(nèi)部時(shí)間序列過(guò)濾器的處理,創(chuàng)造更有意義的特征,同時(shí)還能防止數(shù)據(jù)泄漏,從而成功實(shí)現(xiàn)模型的部署。
項(xiàng)目的Notebooks地址:
https://github.com/Featuretools/Automated-Manual-Comparison/tree/master/Retail%20Spending
手動(dòng)特征工程 vs自動(dòng)特征工程
特征工程是指獲取數(shù)據(jù)集并構(gòu)建解釋的特征變量的過(guò)程,而特征變量能夠用于訓(xùn)練機(jī)器學(xué)習(xí)模型并用于預(yù)測(cè)。通常,分布于多張表中的數(shù)據(jù)需要匯集到一張表中,其中行代表觀察量,而列代表特征。
手動(dòng)特征工程是一種傳統(tǒng)的特征工程方法,它主要是利用領(lǐng)域知識(shí)來(lái)構(gòu)建特征,一次只能產(chǎn)生一個(gè)特征,這是一個(gè)繁瑣,費(fèi)時(shí)又易出錯(cuò)的過(guò)程。此外,每次進(jìn)行手動(dòng)特征工程的代碼是針對(duì)特定的問(wèn)題,當(dāng)我們要解決一個(gè)新問(wèn)題、新數(shù)據(jù)集時(shí),我們需要重寫相關(guān)代碼。
自動(dòng)化特征工程是通過(guò)從一組相關(guān)的數(shù)據(jù)表中自動(dòng)提取有用且有意義的特征,這種方法能夠改變標(biāo)準(zhǔn)的工作流程,并適用于任務(wù)數(shù)據(jù)集的有關(guān)問(wèn)題。此外,它不僅減少了特征工程所需的時(shí)間,還創(chuàng)建了可解釋性的特征,并通過(guò)過(guò)濾與時(shí)間相關(guān)的數(shù)據(jù)來(lái)防止數(shù)據(jù)泄漏。
貸款還款項(xiàng)目
更快更好地構(gòu)建模型
Home Credit Loan 問(wèn)題是于今日在 Kaggle上結(jié)束的一項(xiàng)機(jī)器學(xué)習(xí)競(jìng)賽項(xiàng)目,其目標(biāo)是預(yù)測(cè)客戶是否能夠償還貸款。對(duì)于數(shù)據(jù)科學(xué)家而言,這個(gè)問(wèn)題的挑戰(zhàn)在于其數(shù)據(jù)的大小及所分布的范圍。我們來(lái)看下完整的數(shù)據(jù)集,可以看到分布在七張表中有5800萬(wàn)行數(shù)據(jù),而機(jī)器學(xué)習(xí)方法需要針對(duì)一張表進(jìn)行模型訓(xùn)練。此時(shí),特征工程就需要將每個(gè)客戶的所有信息提取并融合到一個(gè)表中。
特征工程需要從數(shù)據(jù)表格集中獲取所有的數(shù)據(jù)信息并整合到一張表中
對(duì)于這個(gè)問(wèn)題,我先是嘗試用傳統(tǒng)的手動(dòng)特征工程來(lái)解決,共花了10個(gè)小時(shí)手動(dòng)地創(chuàng)建一組特征。首先,我研究了其他數(shù)據(jù)科學(xué)家的工作,探索數(shù)據(jù)與研究,以便獲得必要的領(lǐng)域知識(shí)。然后我通過(guò)編程將所需的知識(shí)寫成代碼,每次構(gòu)建一個(gè)特征。對(duì)于一個(gè)手動(dòng)特征,我使用 3 個(gè)不同的表格,找到了客戶在之前貸款中延遲付款的總數(shù)。
最終,手動(dòng)特征工程取得了相當(dāng)不錯(cuò)的表現(xiàn):相比于基線特征,手動(dòng)特征工程取得了 65% 的性能改進(jìn),表明了特征工程的適用性和重要性。
然而,由于這種方法的效率很低,我無(wú)法在這里展開描述整個(gè)過(guò)程。對(duì)于手動(dòng)特征工程,每個(gè)特征花費(fèi)超過(guò) 15 分鐘的時(shí)間,因?yàn)槲矣玫倪@種方法一次只能創(chuàng)建一個(gè)特征。
手動(dòng)特征工程流程
除了繁瑣性和耗時(shí)等缺點(diǎn)外,手動(dòng)特征工程還有如下弊端:
只針對(duì)特定問(wèn)題:對(duì)于這個(gè)項(xiàng)目,我寫了幾個(gè)小時(shí)的代碼不能應(yīng)用于其他任何問(wèn)題
容易出錯(cuò):每行代碼都有可能產(chǎn)生錯(cuò)誤
此外,手動(dòng)特征工程所提取的特征還會(huì)受到人類創(chuàng)造力和耐心的限制:對(duì)于一個(gè)問(wèn)題,我們需要考慮大量的特征,而每個(gè)特征的構(gòu)建又需要大量的時(shí)間。
從手動(dòng)到自動(dòng)的特征工程
像 Featuretools 可以實(shí)現(xiàn)的功能那樣,自動(dòng)化特征工程能夠從一組相關(guān)的數(shù)據(jù)表中創(chuàng)建數(shù)千個(gè)特征,我們所需要知道的就是數(shù)據(jù)表的基本結(jié)構(gòu)以及它們之間的關(guān)系。我們將單個(gè)數(shù)據(jù)結(jié)構(gòu)稱為實(shí)體集(entity set),一旦擁有一個(gè)實(shí)體集,我們將在數(shù)據(jù)集中采用深度特征合成方法(DFS),通過(guò)調(diào)用一個(gè)函數(shù)來(lái)構(gòu)建數(shù)千個(gè)特征。
使用 Featuretools進(jìn)行自動(dòng)化特征工程
DFS 使用稱為“基元 primitives”的函數(shù)來(lái)聚合并轉(zhuǎn)換我們的數(shù)據(jù)。這些primitives的獲取可以跟獲取列的平均值或最大值一樣得簡(jiǎn)單,也可以通過(guò)基于主體的專業(yè)知識(shí)那樣相對(duì)復(fù)雜的方式來(lái)獲取,因?yàn)镕eaturetools允許我們針對(duì)任務(wù)自定義我們的 primitives。
特征基元(feature primitives)包括許多需要手動(dòng)完成的操作,但通過(guò) Featuretools,我們可以在任何關(guān)系數(shù)據(jù)庫(kù)中使用相同的確切語(yǔ)法,也就是說(shuō)在不同的數(shù)據(jù)集上我們也不需要重寫代碼就能夠使用這些操作。此外,當(dāng)我們將 primitives堆疊在一起以創(chuàng)建深層特征時(shí),DFS的強(qiáng)大之處就盡顯無(wú)疑了。
有關(guān) DFS的更多信息,可以參閱:
https://www.featurelabs.com/blog/deep-feature-synthesis/
下面,我將演示如何構(gòu)建這個(gè)過(guò)程。這里,我只需要一行的代碼就能使用DFS 操作,并使用7張表格數(shù)據(jù)為每個(gè)客戶創(chuàng)建數(shù)千個(gè)功能,如下所示,其中 ft代表導(dǎo)入的 featuretools庫(kù):
1#Deepfeaturesynthesis2feature_matrix,features=ft.dfs(entityset=es,3target_entity='clients',4agg_primitives=agg_primitives,5trans_primitives=trans_primitives)
以下是我們從 Featuretools自動(dòng)獲得的 1820 個(gè)功能中的一部分,包括:
客戶以前貸款所支付的最高總額。這是使用 3 個(gè)表中的 MAX和 SUM值創(chuàng)建的。
客戶信用卡的平均債務(wù)排名。這是使用 2 個(gè)表中的 PERCENTILE和MEAN值創(chuàng)建的。
客戶是否在申請(qǐng)過(guò)程中提交了兩份文件。這是使用 AND轉(zhuǎn)換和 1 個(gè)表創(chuàng)建的。
每一個(gè)特征都是使用簡(jiǎn)單的聚合構(gòu)建的,因此它也是可解釋的。 Featuretools不僅能夠創(chuàng)建許多我們手動(dòng)也能完成的相同特征,還有大量手動(dòng)無(wú)法創(chuàng)建的特征。這些特征要么是我們所無(wú)法考慮到,要么是需要昂貴的時(shí)間成本構(gòu)建。雖然并非每個(gè)特征都與我們的問(wèn)題相關(guān),而某些功能間還具有高相關(guān)性,所以相比于特征量不足而言,更多的特征可能會(huì)更有助于我們解決問(wèn)題。
經(jīng)過(guò)一些特征選擇和模型優(yōu)化后,這些特征在預(yù)測(cè)模型中的性能表現(xiàn)也更好,而整個(gè)模型的運(yùn)行時(shí)間為1小時(shí),與手動(dòng)過(guò)程相比縮減了 10 倍。Featuretools是個(gè)高??焖俚淖詣?dòng)特征工程庫(kù),它需要較少的領(lǐng)域?qū)I(yè)知識(shí),因此所需編寫的代碼行數(shù)也比手動(dòng)特征工程要少得多。
學(xué)習(xí) Featuretools需要花費(fèi)一些時(shí)間,但我認(rèn)為這是一項(xiàng)值得、能夠帶來(lái)回報(bào)的投資?;艘恍r(shí)時(shí)間學(xué)會(huì) Featuretools,你可以將其應(yīng)用于任何機(jī)器學(xué)習(xí)的特征工程問(wèn)題。
以下圖表是我對(duì)貸款償還項(xiàng)目的一些總結(jié):
自動(dòng)化特征工程vs手動(dòng)特征工程:開發(fā)時(shí)間、特征數(shù)以及性能對(duì)比
開發(fā)時(shí)間:考慮到最終的特征工程代碼所需的每一個(gè)特征時(shí)間--手動(dòng)特征工程需要10小時(shí),而自動(dòng)化特征工程只需要 1 小時(shí)。
生成的特征數(shù)量:手動(dòng)特征工程生成 30 個(gè)特征,而自動(dòng)化特征工程創(chuàng)建了 1820 個(gè)特征。
使用提取的特征訓(xùn)練模型所取得的相對(duì)于基線的性能改進(jìn):手動(dòng)特征工程性能改進(jìn)65%,而自動(dòng)化特征工程取得了 66% 的提升。
此外,我為第一個(gè)項(xiàng)目編寫的 Featuretools代碼還可以應(yīng)用于任何數(shù)據(jù)集,而手動(dòng)工程代碼則需要為了一個(gè)新的數(shù)據(jù)集重寫代碼。
零售支出項(xiàng)目
構(gòu)建有意義的功能并防止數(shù)據(jù)泄漏
第二個(gè)項(xiàng)目是客戶的零售支出預(yù)測(cè),所使用的數(shù)據(jù)集是在線的客戶交易記錄。該預(yù)測(cè)問(wèn)題是將客戶分為兩個(gè)部分,即下個(gè)月花費(fèi)超過(guò) 500 美元的人和花費(fèi)不超過(guò) 500 美元的人。每個(gè)客戶對(duì)應(yīng)多個(gè)標(biāo)簽,即將客戶在上個(gè)月的標(biāo)簽作為下個(gè)月的預(yù)測(cè)使用。例如,我們可以將客戶在 5 月份的支出作為標(biāo)簽,然后在 6 月份中使用,依此類推。
每個(gè)客戶都是多次使用的訓(xùn)練樣本
多次使用客戶標(biāo)簽會(huì)給創(chuàng)建訓(xùn)練數(shù)據(jù)帶來(lái)困難:給定某個(gè)月份,當(dāng)為客戶提取對(duì)應(yīng)特征時(shí),即便我們可以訪問(wèn)這些數(shù)據(jù),也無(wú)法從這個(gè)月中獲取未來(lái)幾個(gè)月的任何信息。在部署中,我們并沒(méi)有未來(lái)的數(shù)據(jù),因此無(wú)法使用它來(lái)訓(xùn)練模型。這也是我們經(jīng)常在現(xiàn)實(shí)世界數(shù)據(jù)集上所面臨的的挑戰(zhàn):由于模型無(wú)法在有效的數(shù)據(jù)集上進(jìn)行訓(xùn)練,因此在現(xiàn)實(shí)世界應(yīng)用中,這種模型的性能通常都很糟糕。
幸運(yùn)的是,這個(gè)問(wèn)題在 Featuretools中能夠很容易地解決。在深度特征合成(DFS)函數(shù)中,如上所示,其中截止時(shí)間表示我們不能使用任何數(shù)據(jù)作為標(biāo)簽的點(diǎn),而 Featuretools在構(gòu)建特征時(shí)會(huì)自動(dòng)地將時(shí)間考慮在內(nèi)。
給定某一月份,我們可以使用之前月份過(guò)濾掉的數(shù)據(jù)來(lái)構(gòu)建客戶的特征。請(qǐng)注意,調(diào)用我們創(chuàng)建的特征集的過(guò)程與貸款還款項(xiàng)目中的調(diào)用相同,只是多了一個(gè) cutoff_time參數(shù)。
1#Deepfeaturesynthesis2feature_matrix,features=ft.dfs(entityset=es,3target_entity='customers',4agg_primitives=agg_primitives,5trans_primitives=trans_primitives,6cutoff_time=cutoff_times)
運(yùn)行Deep Feature Synthesis得到的結(jié)果是一個(gè)特征表,即每個(gè)客戶在每個(gè)月對(duì)應(yīng)一個(gè)特征。我們可以使用這些特征和標(biāo)簽來(lái)訓(xùn)練我們的模型,然后對(duì)往后的任何月份進(jìn)行預(yù)測(cè)。此外,我們不用擔(dān)心構(gòu)建模型所使用的特征會(huì)包含未來(lái)的信息,也不用擔(dān)心由此導(dǎo)致不公平性及錯(cuò)誤的訓(xùn)練得分。
利用自動(dòng)化特征,我能夠構(gòu)建一個(gè)機(jī)器學(xué)習(xí)模型并用于預(yù)測(cè)模型某月的支出。結(jié)果表明,相比于基線模型取得的0.69 ROC AUC表現(xiàn),我們的模型明顯更優(yōu),能夠達(dá)到0.90 ROC AUC。
除了預(yù)測(cè)性能外,F(xiàn)eaturetools實(shí)現(xiàn)還能提供一個(gè)很有價(jià)值的東西:可解釋性功能。下面,我們來(lái)看看隨機(jī)森林模型中 15 個(gè)最重要的特征:
利用Featuretools,隨機(jī)森林模型所獲取的15個(gè)最重要特征
特征重要性告訴我們,影響客戶下個(gè)月支出預(yù)測(cè)的最重要因素。在這里,我們可以知道,用戶上月支出總和 SUM(purchases.total)和購(gòu)買數(shù)量 SUM(purchases.quantity)是影響下月支出預(yù)測(cè)的關(guān)鍵因素。雖然這些特征我們可以通過(guò)手動(dòng)構(gòu)建,但是我們擔(dān)心數(shù)據(jù)的泄漏,因此我們需要?jiǎng)?chuàng)建一個(gè)開發(fā)階段性能更好的模型。
如果該工具已經(jīng)能夠自動(dòng)創(chuàng)建一些有意義的特征而無(wú)需擔(dān)心其有效性,那么我們?yōu)槭裁催€要手動(dòng)實(shí)現(xiàn)呢?此外,對(duì)于這個(gè)問(wèn)題,自動(dòng)化特征是完全清晰的,也能夠向我們解釋現(xiàn)實(shí)世界的推理過(guò)程。
即使手動(dòng)特征工程需要花費(fèi)比 Featuretools多得多的時(shí)間,但我也無(wú)法創(chuàng)建出一組性能接近相同的特征。下圖顯示了使用在兩個(gè)數(shù)據(jù)集上使用訓(xùn)練的模型對(duì)未來(lái)月客戶支出預(yù)測(cè)的 ROC 曲線,其中越靠近左上角的曲線代表更好的性能:
自動(dòng)特征工程 vs手動(dòng)特征工程的 ROC曲線
其中越靠近左上部分的曲線表示越好的性能
我甚至不確定手動(dòng)特征是否是通過(guò)有效的數(shù)據(jù)創(chuàng)建的,但起碼 Featuretools是這樣實(shí)現(xiàn)的,因此我也不需要擔(dān)心時(shí)間相關(guān)問(wèn)題中的數(shù)據(jù)泄漏問(wèn)題。也許,無(wú)法通過(guò)手動(dòng)設(shè)計(jì)一組有用的特征可以表明數(shù)據(jù)科學(xué)家的失敗,但是如果自動(dòng)化工具能夠安全地我們實(shí)現(xiàn),那為什么我們不使用呢?
結(jié)論
拋開以上這些項(xiàng)目,我相信自動(dòng)化特征工程將會(huì)是機(jī)器學(xué)習(xí)工作流程中不可或缺的一部分。雖然該技術(shù)目前還不完美,但仍能顯著地提高我們的工作效率。
下面我總結(jié)了自動(dòng)化特征工程的一些要點(diǎn):
能將開發(fā)時(shí)間縮短 10 倍
能夠構(gòu)建相同甚至更好性能的模型
提供具有現(xiàn)實(shí)意義的可解釋功能
防止模型使用無(wú)效的、不正確的數(shù)據(jù)特征
適合現(xiàn)有的工作流程和機(jī)器學(xué)習(xí)模型
通過(guò)自動(dòng)化特征工程可以使這些工作變得更加簡(jiǎn)單,我們之前為大家介紹的基于 Python 的自動(dòng)特征工程可以教大家如何快速開始自動(dòng)創(chuàng)建機(jī)器學(xué)習(xí)特征。
-
代碼
+關(guān)注
關(guān)注
30文章
4728瀏覽量
68252 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8357瀏覽量
132328
原文標(biāo)題:手動(dòng)特征工程已經(jīng)OUT了!自動(dòng)特征工程才是改進(jìn)機(jī)器學(xué)習(xí)的方式
文章出處:【微信號(hào):rgznai100,微信公眾號(hào):rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論