摘要:機(jī)器學(xué)習(xí)中最重要的領(lǐng)域之一是特征工程鳞仙,卻被嚴(yán)重地忽視了。這個(gè)重要領(lǐng)域中最成熟的工具就是Featuretools,一個(gè)開源的Python庫。在本文中卷仑,我們將使用這個(gè)庫來了解一下特征工程自動化將如何改變你進(jìn)行機(jī)器學(xué)習(xí)的方式。
隨著技術(shù)的快速發(fā)展麸折,在數(shù)據(jù)科學(xué)領(lǐng)域中锡凝,包括庫、工具和算法等總會不斷地變化的磕谅。然而私爷,一直都有這么一個(gè)趨勢,那就是自動化水平不斷地提高膊夹。
近些年來,在模型的自動化選擇和超參數(shù)調(diào)整方面取得了一些進(jìn)展捌浩,但是機(jī)器學(xué)習(xí)中最重要的領(lǐng)域 — 特征工程放刨,卻被嚴(yán)重地忽視了。這個(gè)重要領(lǐng)域中最成熟的工具就是Featuretools尸饺,一個(gè)開源的Python庫进统。在本文中,我們將使用這個(gè)庫來了解一下特征工程自動化將如何改變你更好地進(jìn)行機(jī)器學(xué)習(xí)的方式浪听。
特征工程自動化是一種相對較新的技術(shù)螟碎,但是,它解決了許多實(shí)際數(shù)據(jù)集的使用問題迹栓。在這里掉分,我們將用GitHub上的Jupyter Notebooks提供的代碼來看看其中兩個(gè)項(xiàng)目的結(jié)果和最終結(jié)論。
每個(gè)項(xiàng)目都強(qiáng)調(diào)了特征工程自動化的一些好處:
貸款償還能力預(yù)測:與人工特征工程相比克伊,自動化的特征工程可以將機(jī)器學(xué)習(xí)開發(fā)的時(shí)間縮短10倍酥郭,同時(shí)提供更好的建模性能表現(xiàn);(筆記)
消費(fèi)支出預(yù)測:自動化的特征工程通過內(nèi)部的處理時(shí)間序列過濾器來創(chuàng)建有實(shí)際意義的特征愿吹,同時(shí)防止數(shù)據(jù)泄漏不从,從而實(shí)現(xiàn)成功的模型部署;(筆記)
特征工程:人工與自動
特征工程是獲取數(shù)據(jù)集并構(gòu)造可解釋的變量—特征的過程犁跪,用于訓(xùn)練預(yù)測問題的機(jī)器學(xué)習(xí)模型椿息。通常歹袁,數(shù)據(jù)分布在多個(gè)表中,并且必須匯集到一個(gè)表之中寝优,其中的行包含觀察結(jié)果和列中的特征条舔。
傳統(tǒng)的特征工程方法是使用相關(guān)領(lǐng)域知識創(chuàng)建一個(gè)特征,這是一個(gè)冗長倡勇、耗時(shí)且容易出錯(cuò)的過程逞刷,稱為人工特征工程。人工特征工程是依賴于具體問題的妻熊,必須為每個(gè)新數(shù)據(jù)集重新編寫代碼夸浅。
特征工程自動化通過自動從一組相關(guān)的數(shù)據(jù)表中提取有用且有意義的特征,并使用一個(gè)可應(yīng)用于任何問題的框架扔役,來改進(jìn)這個(gè)標(biāo)準(zhǔn)工作流帆喇。它不僅減少了在特征工程上花費(fèi)的時(shí)間,而且還創(chuàng)建了可解釋的特征亿胸,并通過過濾具有時(shí)間依賴性的數(shù)據(jù)來防止數(shù)據(jù)泄漏坯钦。
貸款償還:建立更快更好的模型
當(dāng)數(shù)據(jù)科學(xué)家在處理家庭信貸貸款問題的時(shí)候,所面臨的主要難題是數(shù)據(jù)的大小和分布侈玄⊥竦叮看看完整的數(shù)據(jù)集,你會發(fā)現(xiàn)面對的是分布在7個(gè)表中的5800萬行數(shù)據(jù)序仙。
特征工程需要將一組相關(guān)表中的所有信息放到一個(gè)表中
我曾經(jīng)使用傳統(tǒng)的人工特征工程花了10個(gè)小時(shí)創(chuàng)建了一組特征突颊。首先,我查閱了其他數(shù)據(jù)科學(xué)家的成果潘悼,還查看了相關(guān)的數(shù)據(jù)律秃,并研究了問題域,以獲得必要的相關(guān)領(lǐng)域知識治唤。然后我將這些知識翻譯成代碼棒动,一次創(chuàng)建一個(gè)特征。作為單一的人工特征的一個(gè)例子宾添,我找到了客戶以前貸款的逾期還款總數(shù),這一操作需要用到3個(gè)不同的表辞槐。
最終人工設(shè)計(jì)的特征表現(xiàn)的相當(dāng)好掷漱,比基線特征提高了65%,表明了正確特征設(shè)計(jì)的重要性鹿榜。
然而海雪,效率卻非常低下锦爵。對于人工特征工程,我最終花了超過15分鐘來完成每個(gè)特征奥裸,因?yàn)槲沂褂脗鹘y(tǒng)的方法一次生成一個(gè)特性险掀。
人工特征工程過程
除了單調(diào)乏味和耗時(shí)之外,人工特征工程還有以下問題:
用于特定問題:我花費(fèi)了很長時(shí)間編寫的代碼并不能應(yīng)用于任何其它的問題湾宙;
易錯(cuò):每一行代碼都會有可能導(dǎo)致其它的錯(cuò)誤樟氢;
另外,最終的人工設(shè)計(jì)的特征受到了人類創(chuàng)造力和耐心方面的限制:我們只能考慮創(chuàng)建這么多的特征侠鳄,并且只能花費(fèi)這么多的時(shí)間埠啃。
特征工程自動化的承諾是通過獲取一組相關(guān)的表,并使用可以應(yīng)用于所有問題的代碼伟恶,來自動創(chuàng)建數(shù)以百計(jì)有用的特征碴开,進(jìn)而跨越這些限制。
從人工到自動化特征工程
特征工程自動化甚至允許像我這樣的新手博秫,在一組相關(guān)的數(shù)據(jù)表中可以創(chuàng)建數(shù)以千計(jì)的相關(guān)特征潦牛。我們只需要知道表的基本結(jié)構(gòu)以及它們之間的關(guān)系,我們在一個(gè)稱為實(shí)體集的單一數(shù)據(jù)結(jié)構(gòu)中來跟蹤它們挡育。一旦我們有了一個(gè)實(shí)體集巴碗,使用一個(gè)稱為深度特征合成(Deep Feature Synthesis,DFS)的方法即寒,我們就能夠在一個(gè)函數(shù)調(diào)用中創(chuàng)建數(shù)以千計(jì)的特征了良价。
使用FeatureTools的特征工程自動化過程
DFS使用稱為“primitives”的函數(shù)來進(jìn)行聚合和轉(zhuǎn)換數(shù)據(jù)。這些primitives可以簡單到僅獲取一個(gè)平均值或列的最大值蒿叠,也可以復(fù)雜到基于主題的專業(yè)知識,因?yàn)镕eatureTools允許我們定義自己的primitives蚣常。
特征primitives包括許多人工操作市咽,但是通過使用FeatureTools,我們可以在任何關(guān)系數(shù)據(jù)庫中使用相同準(zhǔn)確的語法抵蚊,而不是再重新編寫代碼并在不同的數(shù)據(jù)集中使用相同的操作施绎。此外,當(dāng)我們將primitives相互堆疊在一起來創(chuàng)建深層次的特征時(shí)贞绳,DFS的威力就來了谷醉。
深度特征合成是靈活的,它被允許應(yīng)用于任何數(shù)據(jù)科學(xué)領(lǐng)域的問題冈闭。它同時(shí)也是很強(qiáng)大的俱尼,通過創(chuàng)建深度特征來揭示我們對數(shù)據(jù)的推斷。
我會為你省去環(huán)境設(shè)置所需的幾行代碼萎攒,但DFS只在一行中運(yùn)行遇八。在這里矛绘,我們使用數(shù)據(jù)集中的所有7個(gè)表為每個(gè)客戶生成數(shù)千個(gè)特征:
# Deep feature synthesisfeature_matrix, features = ft.dfs(entityset=es,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? target_entity='clients',? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? agg_primitives = agg_primitives,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? trans_primitives = trans_primitives)
下面是我們自動從FeatureTools獲得的1820個(gè)特征中的一部分:
客戶以前貸款的最高總額。這是在3個(gè)表中使用1個(gè)MAX 和1個(gè)SUM 的primitive得來的刃永;
客戶以前的信用卡平均債務(wù)的百分比排名货矮,這在兩個(gè)表中使用了百分比(PERCENTILE)和平均值(MEAN)的primitive;
在申請過程中斯够,客戶是否提交了兩份文件囚玫,這將使用1個(gè)AND 轉(zhuǎn)換primitive和1個(gè)表;
這些特征中的任何一個(gè)都是用簡單的聚合創(chuàng)建的读规。FeatureTools創(chuàng)建了許多與我手工創(chuàng)建的相同的特征抓督,但也有數(shù)千個(gè)是我從未考慮過的。并不是每一個(gè)特征都與問題相關(guān)掖桦,有些特征是高度相關(guān)的本昏,然而,擁有太多的特征是一個(gè)比擁有太少的特征更好解決的問題枪汪。
在進(jìn)行了一些功能選擇和模型優(yōu)化之后涌穆,與人工特征相比,預(yù)測模型中的這些特征要稍好一些雀久,總體開發(fā)時(shí)間為1小時(shí)宿稀,與人工的過程相比減少了10倍。FeatureTools速度更快赖捌,這是因?yàn)樗枰念I(lǐng)域知識更少祝沸,而且要編寫的代碼行也少的相當(dāng)多。
我承認(rèn)學(xué)習(xí)Featuretools需要一點(diǎn)時(shí)間成本越庇,但這是一項(xiàng)有回報(bào)的投資罩锐。在花了一個(gè)小時(shí)左右的時(shí)間學(xué)習(xí)Featuretools之后,你就可以將其應(yīng)用于任何機(jī)器學(xué)習(xí)問題了卤唉。
以下的圖表總結(jié)了我在貸款償還問題上的經(jīng)驗(yàn):
自動和人工特征工程按時(shí)間涩惑、特征的數(shù)量和性能之間的比較
開發(fā)時(shí)間:10小時(shí)人工與1小時(shí)自動;
該方法創(chuàng)建的特征數(shù)量:30個(gè)人工特征與1820個(gè)自動特征桑驱;
相對于基線提高了的百分比是:65% 人工 vs 66% 自動
我的結(jié)論是竭恬,特征工程自動化不會取代數(shù)據(jù)科學(xué)家,而是通過顯著地提高效率熬的,使他們在機(jī)器學(xué)習(xí)的其它方面可以花費(fèi)更多的時(shí)間痊硕。
另外,我為第一個(gè)項(xiàng)目編寫的Featuretools代碼可以應(yīng)用于任何數(shù)據(jù)集押框,而人工工程的代碼則沒法再利用岔绸。
消費(fèi)支出:創(chuàng)建有意義的特征并防止數(shù)據(jù)泄漏
第二個(gè)數(shù)據(jù)集,在線時(shí)間戳的客戶交易記錄,預(yù)測問題是將客戶分為兩個(gè)部分亭螟,消費(fèi)超過500美元的客戶和消費(fèi)不會超過500美元的客戶挡鞍。但是,不是對所有標(biāo)簽使用一個(gè)月预烙,而是每個(gè)客戶多次使用一個(gè)標(biāo)簽墨微。我們可以把他們5月份的消費(fèi)支出作為一個(gè)標(biāo)簽,然后6月份的扁掸,等等翘县。
客戶被多次用作訓(xùn)練示例
在部署中,我們永遠(yuǎn)不會有未來的數(shù)據(jù)谴分,因此無法將其用于訓(xùn)練模型锈麸。企業(yè)通常會遇到這個(gè)問題,并且經(jīng)常部署一個(gè)在實(shí)際應(yīng)用中比在開發(fā)中更糟糕的模型牺蹄,因?yàn)檫@是使用無效的數(shù)據(jù)來進(jìn)行訓(xùn)練的忘伞。
幸運(yùn)的是,要確保我們的數(shù)據(jù)在時(shí)間序列問題中是有效的沙兰,這在FeatureTools中很簡單氓奈。在深度特征合成函數(shù)中,我們傳遞一個(gè)如上圖所示的dataframe鼎天,其中截止時(shí)間表示我們不能使用任何標(biāo)簽數(shù)據(jù)中過去的時(shí)間點(diǎn)舀奶,F(xiàn)eatureTools在創(chuàng)建特征時(shí)會自動考慮時(shí)間。
客戶在指定月份的特征是使用過濾到該月份之前的數(shù)據(jù)來創(chuàng)建的斋射。請注意育勺,用于創(chuàng)建特征集的調(diào)用與添加截止時(shí)間的貸款償還問題的調(diào)用相同。
# Deep feature synthesisfeature_matrix, features = ft.dfs(entityset=es,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? target_entity='customers',? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? agg_primitives = agg_primitives,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? trans_primitives = trans_primitives,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cutoff_time = cutoff_times)
執(zhí)行深度特征合成的結(jié)果是一個(gè)特征表罗岖,每個(gè)客戶一個(gè)月一個(gè)涧至。我們可以使用這些特征來訓(xùn)練一個(gè)帶有標(biāo)簽的模型,然后可以對任何月份進(jìn)行預(yù)測桑包。此外化借,我們可以放心,模型中的特征不會使用導(dǎo)致不公平優(yōu)勢的未來信息捡多,并產(chǎn)生誤導(dǎo)訓(xùn)練的分?jǐn)?shù)。
有了自動化特征铐炫,我能夠創(chuàng)建一個(gè)機(jī)器學(xué)習(xí)模型垒手,在預(yù)測一個(gè)月內(nèi)客戶消費(fèi)支出類別的時(shí)候,與已知為0.69的基線相比倒信,ROC AUC達(dá)到0.90科贬。
除了提供令人印象深刻的預(yù)測能力之外,F(xiàn)eatureTools的實(shí)現(xiàn)還為我提供了一些同樣有價(jià)值的東西:可解釋的特征“裾疲看一下隨機(jī)森林模型中的15個(gè)最重要的特征:
15個(gè)來自隨機(jī)森林模型的最重要的特征
特征的重要性告訴我們优妙,預(yù)測客戶將在下個(gè)月花多少錢的最重要素是他們之前花了多少錢SUM,以及購物的數(shù)量SUM憎账。這些是可以手工創(chuàng)建的特征套硼,但是我們不得不擔(dān)心數(shù)據(jù)泄漏的問題,并創(chuàng)建在開發(fā)中比部署中效果要好的模型胞皱。
如果可以創(chuàng)建有意義的特征工具已經(jīng)存在了邪意,而無需擔(dān)心任何特征的有效性,那么為什么要人工實(shí)現(xiàn)呢反砌?另外雾鬼,自動化特征在問題的上下文中是完全明確的,并且可以為我們的實(shí)際推理提供信息宴树。
自動化特征工程識別出最重要的信號策菜,實(shí)現(xiàn)了數(shù)據(jù)科學(xué)的主要目標(biāo):揭示隱藏在海量數(shù)據(jù)中的規(guī)律。
即使在人工特征工程上花費(fèi)的時(shí)間比我用FeatureTools花的時(shí)間多得多酒贬,那么我也無法開發(fā)出一組性能表現(xiàn)接近的特征又憨。下圖顯示了使用在兩個(gè)數(shù)據(jù)集上訓(xùn)練的模型對未來一個(gè)月的客戶銷售情況進(jìn)行分類的ROC曲線。左上方的曲線表示更準(zhǔn)確的預(yù)測:
比較自動的和人工的特征工程結(jié)果的ROC曲線同衣,左側(cè)和頂部的曲線表示其性能表現(xiàn)更好竟块。
我甚至不能完全確定人工特征是否使用了有效的數(shù)據(jù),但是通過FeatureTools我不必?fù)?dān)心時(shí)間依賴性問題中的數(shù)據(jù)泄漏耐齐。
我們在日常生活中使用自動安全系統(tǒng)浪秘,F(xiàn)eaturetools中的特征工程自動化是在時(shí)間序列問題中創(chuàng)建有意義的機(jī)器學(xué)習(xí)特征的安全方法,同時(shí)提供了卓越的預(yù)測性能表現(xiàn)埠况。
結(jié)論
我經(jīng)過了這些項(xiàng)目之后耸携,確信特征工程自動化應(yīng)該是機(jī)器學(xué)習(xí)工作流程中不可或缺的一部分。這項(xiàng)技術(shù)并不完美辕翰,但依舊能顯著地提高效率夺衍。
主要的結(jié)論就是特征工程自動化:
將執(zhí)行時(shí)間縮短了10倍;
在同一級別或更高級別上實(shí)現(xiàn)的建模性能喜命;
交付的具有實(shí)際意義的可解釋性特征沟沙;
防止使用不正確的數(shù)據(jù)而導(dǎo)致的模型無效;
適應(yīng)現(xiàn)有的工作流程和機(jī)器學(xué)習(xí)模型壁榕;
本文作者:【方向】
作者:阿里云云棲社區(qū)
鏈接:http://www.reibang.com/p/4a51424d27fe
來源:簡書
簡書著作權(quán)歸作者所有矛紫,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。