別把引擎當汽車:AutoML不值得……

全文共3101字,預計學習時長6分鐘算法

別把引擎當汽車:AutoML不值得……

貓和老鼠,第70集——機器貓(1952)微信

平常工做中,我常常用到AutoML(Automated Machine Learning,自動機器學習),在參加ML競賽時,也用過幾回AutoML來輔助主模型,還參加過兩次AutoML競賽。我認爲,AutoML自動化建模過程的想法是很棒的,但這一領域其實被吹吹捧得言過其實了。在將來,一些重要概念,如特徵工程、元學習超參優化,能夠釋放AutoML的潛能;可是目前,一站式的AutoML做爲一種工具,只會徒增開銷。網絡

下文提到的全部數據和操做都是關於表格數據的。機器學習

別把引擎當汽車:AutoML不值得……

什麼是AutoML?

數據科學項目工具

數據科學項目包括幾個基本步驟:從商業角度提出問題(選擇任務和成功與否的指標)、收集數據(收集、清理、探索)、建模及評估模型性能,以及在生產環境中應用模型並觀察其性能。性能

別把引擎當汽車:AutoML不值得……

數據挖掘跨行業標準流程學習

該流程的每一部分都對項目的成功相當重要。然而,機器學習專家認爲,建模過程是最基本的。設計良好的機器學習模型能夠爲公司帶來不少潛在價值。測試

給定一個數據集和目標(特定指標值越大越好),數據科學家須要在建模過程當中解決優化問題。這一過程很是複雜,須要多種技巧:優化

1. 須要將特徵工程看成一種藝術,而不只僅是一門科學;編碼

2. 優化超參須要深入理解算法和ML核心概念;

3. 須要運用軟件工程技術來輸出簡潔易懂、便於應用的代碼。

此時,AutoML就能派上用場了。

別把引擎當汽車:AutoML不值得……

ML建模既是一種藝術,也是一門科學,仍是軟件工程。

AutoML

AutoML的輸入是數據和任務(分類、迴歸、推薦等),輸出則是生產就緒、能預測未知數據的模型。數據驅動管道的每個決策都是一個超參。AutoML的關鍵在於找到可以在合理時間內給出良好分數的超參。

• AutoML用於數據預處理的方法:如何處理數據不平衡;如何填補空值;移除、替代或保留異常值;如何給類別和多個類別列編碼;如何避免目標泄露;如何避免內存錯誤等等;

• AutoML生成並選出有意義的新特徵;

• AutoML選擇模型(線性模型、K-Nearest Neighbors、Gradient Boosting、神經網絡等);

• AutoML調節所選模型的超參(如,樹模型中數的數量和子採樣的數量、神經網絡中的學習率和epoch數);

• 有條件的話,AutoML能夠生成一組穩定的模型集合來提升分數。

別把引擎當汽車:AutoML不值得……

別把引擎當汽車:AutoML不值得……

AutoML發展動力

AutoML將會填補數據科學市場中「供給」和「需求」之間的空白

如今,愈來愈多的公司要麼剛開始收集數據,要麼想要從已收集的數據中獲取潛在價值——他們都想從中分一杯羹。然而,可以知足公司需求、具備相關經驗的數據科學家卻不多。市場供需不平衡,缺口擴大。AutoML剛好能夠填補這一空缺。

可是AutoML這種一站式的解決方案可否給公司創造價值呢?在我看來,答案是否認的。

這些公司須要的是一個過程,而AutoML僅僅是一個工具。工具上的先進彌補不了戰略上的缺失。在開始使用AutoML前,能夠先考慮和諮詢公司合做,制定一個數據科學戰略。這也是爲何大部分AutoML供應商不只提供解決方案,還提供諮詢的緣由。這其中很有技巧。

別把引擎當汽車:AutoML不值得……

看起來並非一個好計劃(《南方公園》,s2e17)

AutoML能夠幫助數據科學團隊節省時間

根據2018年Kaggle機器學習和數據科學調查報告,一個普通的數據科學項目,其15%-26%的時間會花在建模或選擇模型過程上。這一過程既要求人力,又要求計算時間。一旦目標或數據發生變更(好比說增長了新的特徵),則須要再重複一遍該過程。而AutoML能夠幫助數據科學家節省這一時間,從而把時間放在更重要的事情上(如椅上擊劍)。

別把引擎當汽車:AutoML不值得……

只需幾行代碼就可使用AutoML

若是一家公司的數據科學團隊說建模並非他們最重要的任務,那麼這家公司的數據科學過程顯然是有問題的。一般,模型性能的一點點提高就能爲公司帶來巨大利益。這樣一來,在建模上花的時間是很是有意義的。

Oversimplified rules:if (Gain from model > Costs of DS team time) → Time savings are not needed.

if (Gain from model <= Costs of DS team time) → Are you solving the right problem?

寫下數據科學團隊每日任務的腳本,能夠在未來節省時間,比使用一站式的解決方案要好得多。我已經寫了一些用於自動化平常任務的腳本,包括自動化特徵生成、特徵篩選、模型訓練、超參調節等,如今天天都會用到。

AutoML表現優於普通數據科學家

不幸的是,除了開源AutoML基準,咱們沒有任何可以有效比較表格AutoML和人類數據科學家的基準。2019年7月1日,也就是幾個月前,幾位做者發表了一篇文章,比較了調參後的隨機森林和幾個AutoML庫的性能。其結果以下圖所示:

別把引擎當汽車:AutoML不值得……

出於好奇,我決定製定本身的基準。我將個人模型的性能和AutoML解決方法進行了比較,使用了三個二分類數據集,包括信用數據、KDD促銷數據和按揭貸款數據。隨機將每一個數據集中的60%分爲訓練集(按目標分層),剩下40%爲測試集。

個人基礎模型很是簡單,既沒有深刻挖掘數據,也沒有建立高級特徵:

1. 5折StratifiedKFold;

2. 對分類列使用Catboost Encoder(不熟悉Catboost Encoder的讀者能夠先參考我之前的文章:分類編碼基準);

3. 對數值列對使用數學操做(+-*/)。新特徵限制爲500。

4. 模型爲LightGBM,使用默認參數;

5. 融合OOF排序預測。

我使用了兩個AutoML標準庫:H2O和TPOT,並使用多個時間間隔對它們進行訓練,從15分鐘到6小時不等,結果很是使人驚訝。衡量指標以下:

Score = (ROC AUC / ROC AUC of my baseline) * 100%

別把引擎當汽車:AutoML不值得……

首先,幾乎在全部狀況下,個人基礎模型都完勝AutoML。這讓我有點失望,畢竟我原本還打算讓AutoML幹髒活累活,我能趁機放鬆一下。可是看樣子也沒法實現了。

其次,隨着訓練間隔時間的增加,AutoML的分數並無提升。這意味着無論咱們等多久,15分鐘也好,6小時也罷,獲得的分數都是同樣的低。

AutoML並不總能獲得高分。

別把引擎當汽車:AutoML不值得……

總結

1. 若是公司是第一次接觸數據科學,建議聘請一個諮詢師。

2. 儘量使工做自動化。

3. 一站式解決方案並非個好的選擇——它的分數過低了。

PS:別把引擎當汽車

別把引擎當汽車:AutoML不值得……

這篇文章講的是工具,可是咱們也須要意識到,建模只是整個數據科學項目管道的一部分。我以爲將項目類比爲汽車很是貼切。這樣一來,建模的輸出——也就是機器學習模型——就能夠看做是汽車引擎。

毫無疑問,引擎是汽車最基本的組件,但它並不能表明一輛車。若是忽視了其餘部分,那麼花再多時間在創造高端、周到、複雜的特徵、選擇神經網絡結構或調節模型參數上,也是徒勞無功的。

若是解決問題的方向是錯的(從商業角度理解),或者數據有誤差須要從新訓練(數據探索),又或者模型太複雜,不能用於生產(應用階段),那麼就算模型可以取得很高的分數,也沒法用於實踐。

到最後,你可能會發現本身處在一個很愚蠢的情境下:在花了很多天或數週,辛辛苦苦完成建模以後,你騎的是一輛車籃裏裝着汽車引擎的慢吞吞的自行車。

工具是基礎;戰略是關鍵。

別把引擎當汽車:AutoML不值得……

別把引擎當汽車:AutoML不值得……

推薦閱讀專題

別把引擎當汽車:AutoML不值得……

別把引擎當汽車:AutoML不值得……

別把引擎當汽車:AutoML不值得……

別把引擎當汽車:AutoML不值得……

別把引擎當汽車:AutoML不值得……

留言 點贊 關注

咱們一塊兒分享AI學習與發展的乾貨
歡迎關注全平臺AI垂類自媒體 「讀芯術」


(添加小編微信:dxsxbb,加入讀者圈,一塊兒討論最新鮮的人工智能科技哦~)

相關文章
相關標籤/搜索