是時候懟一波AutoML了
- 2019 年 12 月 6 日
- 筆記
本文授權轉載自:AI前線
作者 | Denis Vorotyntsev
譯者 | 核子可樂 編輯 | 陳思
導讀:2018 年,谷歌推出 Cloud AutoML,宣稱不論有沒有機器學習相關的背景,哪怕是個 IT「小白」,都可以通過 AutoML 簡單、高效地進行工作所需的模型訓練,AutoML 甚至被稱為「下一代」機器學習系統。此後,有關 AutoML 的消息層出不窮。 然而,近期的一篇文章卻認為:AutoML 似乎有些炒作過度。該文章的作者更是對此進行了一番實驗:他的方案在幾乎所有測試場景下都獲得了高於 AutoML 的分數。

我在自己的日常工作中使用過 AutoML,參加過幾次 ML 競賽,外加兩次 AutoML 技術比賽。我覺得 AutoML 提出的建模流程自動化概念非常重要,但多少還是有點吹過頭的感覺。雖然特徵工程以及用於超參數優化的元學習等關鍵概念值得肯定,而且擁有可觀的潛力,但就目前來講,購買打包出售的 AutoML 工具基本上就是在浪費金錢。
以下所有內容都以數據為基礎。
AutoML 是什麼?
數據科學項目
一切數據科學項目都涉及幾個基本步驟:從業務角度提出問題(選擇任務與成功指標)、收集數據(收集、清潔、探索)、建立模型並評估性能、在生產場景中部署模型並觀察模型的實際表現。

跨行業數據挖掘標準流程
流程中的各個部分對項目的成功都至關重要。但是,從成熟的機器學習角度來看,建模部分無疑最為關鍵。只有完善的 ML 模型,才能為企業創造更多價值。
在建模階段,數據科學家們需要解決優化問題:利用一套給定的數據集識別並最大化所選指標。這個過程非常複雜,需要以下幾種不同類型的技能:
- 特徵工程,有時更像是種藝術而非科學;
- 超參數優化,要求我們對算法以及 ML 核心概念擁有深入的理解;
- 軟件工程技能,用於確保輸出的代碼易於理解及部署。
AutoML 的意義,正在於幫助我們完成以上工作。

ML 建模類似於藝術、科學加上軟件工程的綜合體
AutoML
AutoML 的輸入內容包括數據與任務(分類、回歸、建議等),輸出結果則為生產就緒模型。這類模型能夠預測到原本並不存在的數據。數據驅動流水線中的每個決策環節都是一項超參數。AutoML 的基本思路,就是找到這樣的超參數,確保其取值能夠在合理的時間內給出得分良好的決策結果。
- AutoML 選擇一種數據預處理策略,包括:如何處理不平衡數據;如何填補缺失值;刪除、替換或保留異常值;如何編碼類別與多類別列;如何避免目標泄漏;如何防止內存錯誤等等;
- AutoML 生成新的特徵並從中選擇有意義的條目;
- AutoML 負責選擇模型(線性模型、K 最近鄰、梯度增強以及神經網絡等);
- AutoML 對所選模型的超參數進行調優(例如基於樹狀結構的模型或架構的樹數與子分支採樣、神經網絡的學習率與輪數等);
- AutoML 實現模型的穩定集成,並儘可能提高得分。

AutoML 的意義
AutoML 將填補數據科學市場當中「供應」與「需求」之間的缺口
如今,越來越多的企業開始收集數據,或者希望利用已經收集到的數據實現業務潛能:即從中獲取實際價值。但在另一方面,市場上擁有良好技術背景的數據科學家非常有限,因此供求之間就出現了缺口。AutoML 希望填補這部分缺口。
然而,打包出售的解決方案真能給企業帶來任何價值嗎?我個人答案是否定的。
這些企業需要的是完整流程,但 AutoML 只是一款工具。工具再先進,也無法彌補戰略層面的不足。 在開始使用 AutoML 之前,請首先與諮詢企業開展項目合作,從而幫助我們預先建立起數據科學策略。大多數 AutoML 解決方案供應商都在提供諮詢服務,這絕不是巧合,而是切實存在的市場需求。

這個主意好像不怎麼樣,對吧?(來自《南方公園》第 2 季第 17 集)
AutoML 能夠幫助數據科學團隊節省時間
根據《2018 年 Kaggle 機器學習與數據科技調查》報告,典型的數據科學項目會將 15% 到 26% 的時間投入到模型的選擇或者構建當中。無論是「人工工時」還是計算時間,這都代表着一種巨大的消耗。如果目標或數據發生變更(例如需要添加新特徵),則整個流程還得再來一遍。AutoML 能夠幫助公司內的數據科學家們節約時間,並把寶貴的精力投入到更重要的工作當中(比如坐着發獃……)。

利用 AutoML,我們只需要幾行代碼就能讓整個體系運轉起來
然而,既然數據科學團隊的核心工作內容就不是建模,那麼企業的流程顯然已經存在問題。一般來講,即使是模型性能的小幅提升,也足以為企業帶來可觀的經濟回報。在這種情況下,投入建模的時間越長,那麼回報應該就越高:
規則過度簡化:如果從模型獲取的收益>數據科學團隊的時間成本,則不需要節約時間。
如果從模型獲取的收益<= 數據科學團隊的時間成本,那麼是不是當初選擇的就不是正確的業務問題??
在這方面,最好的辦法是為數據科學團隊的日常任務編寫腳本以節約時間,而不是使用現成的打包解決方案。我就曾為日常任務編寫過幾套腳本,包括自動特徵生成、特徵選擇、模型訓練以及超參數調優等等,而且直到現在仍在經常使用。
AutoML 優於普通數據科學家
遺憾的是,除了「開源 AutoML 基準」之外,我們並沒有「Tabular AutoML 對人類基準」可供參考。論文作者將多套 AutoML 庫的性能與調整後的隨機森林性能進行了比較,結果發佈於 2019 年 7 月 1 日。

我很好奇,並決定親自做做基準測試。我利用二進制分類的三套數據集對自己的性能與 AutoML 解決方案進行了比較,具體包括 credit、KDD Upselling 以及 mortgages 數據集。我將原始數據集拆分為訓練數據集(按目標分層隨機分配了 60% 的數據量)以及測試數據集(剩餘 40% 數據)。
我的基準解決方案相對簡單,在這裡沒有對數據進行任何深入研究,也沒有建立任何高級特徵:
- 5-StratifiedKFold;
- 用於分類的 Catboost Encoder;
- 用於數字列對的數學運算符(+-*/)。新特徵數量被限定為 500;
- 模型:LightGBM,使用默認參數;
- 混合 OOF 排名預測。
我為 AutoML 使用了兩套標準庫,分別為 H2O 與 TPOT。我以多種時間間隔對其進行訓練:最低 15 分鐘,最高 6 個小時。通過以下指標,我得出了令人驚訝的結果:
得分 =(曲線下面積 / 基準曲線下面積)*100%

首先,我的方案在幾乎所有場景下都獲得了高於 AutoML 的分數。我有點難過,因為我原本打算在工作里用 AutoML 偷偷懶的,沒想到它這麼不中用。?
其次,AutoML 的得分並沒有隨着時間的推移而提高,這意味着我們無論等待多久都沒有意義:它在 15 分鐘與 6 小時場景下的得分一樣,都很低。
AutoML 壓根就得不到高分。
總 結
- 如果你的企業第一次使用數據科學,請考慮僱用一名顧問。
- 你應該儘可能提升工作的自動化水平……
- .……但現成解決方案得分相對較低,似乎不是什麼理想的選擇。
PS: 引擎跟汽車是兩碼事

在本文中,我討論的是工具,但請記住,建模部分只是整個數據科學流水線中的一小部分。我經常把項目比喻成一輛汽車,建模部分(機器學習模型)的輸出就像是一台引擎。
引擎確實非常重要,但仍然跟汽車是兩個概念。我們需要投入大量時間來設計出精妙、完善且複雜的特徵,選擇神經網絡的架構或調整隨機森林參數,從而構建起強大的引擎。但是,如果沒有兼顧到汽車的其他部分,那麼這一切可能只是在浪費時間。
了要解決的問題(對業務理解不深)或者模型過於複雜,就必須進行重新訓練(數據探索)或者發現模型無法應用於實際生產(部署階段)。
最後,大家可能會發現自己面臨著進退兩難的境地:經過數天甚至數周的艱苦建模之後,拿出的只是一輛擁有強大引擎的單車。
工具非常重要,但策略至關重要。

原文鏈接:
https://towardsdatascience.com/automl-is-overhyped-1b5511ded65f