1. 程式人生 > >想讓機器學習與商業結合,最重要的是什麼?

想讓機器學習與商業結合,最重要的是什麼?

全文共6008字,預計學習時長12分鐘

圖片來源:IBM

純學術性地建立機器學習模型與為企業提供端對端的資料科學解決方案(如生產製造、金融服務、零售、娛樂、醫療保健)之間存在著巨大差異。

在機器學習方面,企業最常面臨的問題是什麼呢?除了培養機器學習模型,我們還能做什麼?如何準備資料?如何擴大資料集?為什麼特徵工程如此關鍵?如何將模型運用到生產實踐,成為完全可行的系統呢中?如果能從開源軟體中獲取所有的資料科學工具,資料科學平臺還有存在的意義嗎?

本文將回答以上部分問題,並揭示目前機器學習遇到的挑戰和困難,進一步通過具體行業案例提出最佳解決方案。

機器學習不僅僅是培養模型

不少資料科學家對機器學習還存在普遍誤解。

“假設你拿到一組有某種特徵的資料集,並需要推測其中某個變數,你會怎麼做?”

很多資料科學家都會做如下回答:

“我會把資料集拆分成培養/測試兩部分,執行LogisticRegression, Random Forest, SVM, Deep Learning, XGBoost程式……然後計算精確度、查全率、F1分數……最終挑選出最佳模型。”

但是,還有些問題被忽略了:

“這個過程中你有看過資料本身嗎?要是你遺漏了一些數值怎麼辦?如果你拿到錯誤的數值或是不良資料呢?你怎麼設定分類變數?你是怎麼做特徵工程的?”

本文中將介紹成功建立端對端機器學習系統的七個必要步驟,包括資料收集、資料監管、資料探查、特徵抽取、模型培養、估值和部署。

給我資料!

作為資料科學家,主要資源很明顯是資料。但有時資料採集本身也有困難。一個數據科學團隊可能會花費幾周甚至幾個月的時間來獲取合適的資料集。其中的困難包括:

獲取途徑:大部門企業資料都很敏感,尤其是政府、醫療保健和金融領域的相關資料。要共享資料集,簽署保密協議是常規流程。

資料分散:資料在組織內不同部門間散佈是很常見的。要拿到整體資料,需要各部門的同意。

專業指導:能獲取資料往往還不夠。由於獲取的資料太多,需要一位領域專家指導團隊從龐大的資料庫中挑選出合適的資料集。有時專家的缺席也會成為專案瓶頸,因為核心企業運營已使他們應接不暇。

隱私:模糊處理和匿名操作已經成為兩項獨立的研究領域,在處理敏感資料時這二者尤為重要。

標記:通常瞭解實際情況或標記會很有幫助,因為這讓團隊能夠應用很多可監控的學習演算法。然而,有時標記資料成本高昂,或由於法律限制團隊無法得到標記。在這些情況下,可以應用資料聚類等不可監控的方案。

資料生成器:如無法獲得資料或標記,可以去模擬它們。瞭解資料結構的相關資訊會對使用資料生成器很有幫助,除此以外,還可以瞭解數值變數的可能性分佈和名義變數的類別分佈。如果資料結構比較散亂,可藉助湯不熱(Tumblr)平臺,其上有許多標記影象。此外,推特(Twitter)可提供大量自由文字,卡歌網(Kaggle)則擁有特定領域和行業相關的資料集和解決方案。

大資料並不大

近十年,大資料供應商賣力宣傳,強調對大資料規模和功能的需求,掀起了一股大資料熱潮。也因此,“大資料並不大”這一觀點引發了更大的爭議。然而,我們需要明確區分原始資料(包括對所有對當前問題無幫助的資料)和特徵集(機器學習演算法的輸入矩陣)。將原始資料處理成特徵集的過程稱為資料處理,包含以下步驟:

1. 丟棄無效/不完整/髒資料。根據我們的經驗,此類資料可佔所有資料的一半。

2. 聚合一個或多個數據集,包括資料連線和組類聚合等操作。

3. 特徵選取/抽除。比如,除去唯一性標識等可能無關的特徵,並應用其它降維技術,如主成分分析。

4. 使用稀疏資料表示法或功能雜湊法,以減少存在許多零值資料集的記憶體佔用。

完成資料準備後,不難發現最終的特徵集——即機器學習模型的輸入內容——比初始的小很多;另一種常見情況是R或scikit-learn等記憶體框架足以培養模型。若特徵集規模仍十分龐大,可以使用ApacheSpark等大資料工具,儘管其演算法選擇有限。

髒資料!

髒資料很常見

人們當然希望能學習一些尚不瞭解的東西,但這一點非常重要:髒資料很常見。在企業合作中,很多客戶經常自豪於他們的資料湖泊建設,比如資料湖泊有多壯觀、他們可從中得出多少洞見等。因此,作為資料科學家,以下就是我們腦海中的景象:

但是,當客戶拿出實際資料時,情況更像是這樣:

在這種情況下,Apache Spark等大規模框架就顯得尤為重要,因為所有的資料監管轉化過程都需要在全部原始資料上完成。以下是幾個典型的監管案例:

異常檢測:負數年齡、浮點郵編和零值信用評分等都是無效資料,不修正這些數值會在培養模型時產生深刻的偏見。

缺失/錯誤數值填充:顯然,處理錯誤/缺失數值最常用的方法就是丟棄它們。另一個選擇是填充。比如,用相應特徵的平均數、中位數或眾數來代替缺失/錯誤數值。還有一種方法是插值,如建構模型來預測缺失數值的情況下的特徵。另外,填充中也可以運用領域知識。比方說處理病人資料時,有一項特徵是推斷病人是否患有癌症。如果缺失此類資訊,可以參考其問診資料,以確定此病人是否曾看過腫瘤科醫生。

虛擬編碼和功能雜湊:這兩種方法能很有效地把類別資料轉換成數值,尤其在基於係數的演算法中。比方說,有一項特徵是州名,顯示美國的各州名稱(如FL,CA,AZ)。將FL編碼為1,CA編碼為2,AZ編碼為3,會顯示出秩序感和重量級。這意味著AZ會比FL面積更大,而CA的面積是FL的兩倍大。一位獨熱編碼——也稱虛擬編碼——提供的解決方案是將類別欄對映到多個雙欄中,其中一欄為類別數值。

歸一化:若存在不同等級的特徵,係數相關的演算法就會產生偏見。比方說,特徵年齡在[0,100]範圍內用年表示,然而工資在[0,100,000]範圍內用美元表示。優化演算法可能僅僅因為工資的絕對數量級更大而更側重工資。因此,更推薦常態化演算法以及其他常用方法,如Z值推測、標準化(如果資料正常)及min-max特徵歸一化。

分箱:將實值欄對映到不同類別極為有效,如將一個迴歸問題轉化為分類問題。比方說,你想推測航班進港延誤的分鐘數。一個選擇是推測該航班是否會提前、準時抵達或延誤,並確定各類別的數值範圍。

特徵工程無處不在

總而言之,特徵就是機器學習演算法需要學習的特點。正如人們設想的那樣,干擾或無關資料會影響模型的質量,因此掌握好的特徵就十分關鍵。以下是幾個特徵工程中可使用的策略:

確定預測內容。每一個例項代表什麼?顧客?交易?病人?還是票據?確保特徵集的每一行都對應一個例項。

避免唯一性標識。它們不僅在大多數情況下不起作用,還有可能導致嚴重的過度擬合,尤其是在使用XGBoost等演算法時。

運用領域知識來匯出幫助衡量成功/失敗的新特徵。通過去醫院的次數可以推斷醫患風險;上月跨國交易的總量可推斷詐騙的可能性;申請貸款數額與年收入的比例可推斷信用風險。

運用自然語言處理技術從散亂自由文字中匯出特徵。比如LDA,TF-IDF,word2vec和doc2vec。

若存在大量特徵,可使用降維方法,如主成分分析和t-分佈領域嵌入演算法。

異常檢測無處不在

圖片來源:feature. fm.

如果要在企業機器學習的應用案例中挑選出最常見的一個,那就是異常檢測。無論是否研究詐騙偵查、生產測試、客戶流失、醫患風險、客戶失信抑或是系統崩潰預測,面臨的問題總是:我們能否大海撈針?這就引出了另一個與非平衡資料集有關的話題。

以下是幾個用於異常檢測的常見演算法:

1. 自動編碼器

2. 一類分類演算法,如單類支援向量機。

3. 信賴區間

4. 聚類

5. 運用過取樣和欠取樣法分類

6. 非平衡資料很常見

非平衡資料

比方說,你有一組資料集,標記有信用卡交易資訊。交易中的0.1%為不實資訊,而其餘99.9%均為正常交易。如果要建立一個從無虛假交易的模型,會發生什麼呢?這個模型在99.9%的情況下都會給出正確答案,所以其精確度為99.9%。這個常見的精確度謬誤可以通過考慮不同的度量標準來避免,如精準度、查全率。這些通過真陽性(TP,true positives)、真陰性(TN,true negatives)、假陽性(FP,false positives)、假陰性(FN,false negatives)等術語來表示:

真陽性 = 全部例項正確推斷為正

真陰性 = 全部例項正確推斷為負

假陽性 = 全部例項錯誤推斷為正

假陰性 = 全部例項錯誤推斷為負

在一個異常檢測的典型案例中,我們試圖將假陰性最小化——比如,忽略一筆虛假交易,忽略一塊有問題晶片,或將一個病人視為健康的——同時不會導致大量假陽性例項。

精準度 = 真陽性/(真陽性+假陽性)

查全率 = 真陽性/(真陽性+假陰性)

要注意精準度不利於假陽性,而查全率不利於假陰性。一個從不推測出虛假資訊的模型查全率為零,而精準度則未知。相反,一個總是推測出虛假資訊的模型則有著100%的查全率和極低的精準度——這是由於大量假陽性例項的存在。

非常不推薦在異常檢測中使用受試者工作特徵曲線(FPR)。因為假陽性率——FPR的基礎——很大程度上是基於資料集中的陰性例項數量(如假陽性+真陰性),使得在假陽性例項數量龐大的情況下FPR仍然很小。

受試者工作特徵曲線 = 假陽性/(假陽性+真陰性)

相反,錯誤發現率(FDR)有助於更好理解假陽性例項對於異常檢測模型的影響:

錯誤發現率 = 1 – 精準度 = 假陽性/(真陽性+假陽性)

別預測了,直接解釋原因!

一些專案並不旨在建立一個實時預測模型,而是解釋假設或分析哪些因素可以解釋特定行為,因為大多數機器學習演算法是基於相關性,而不是因果性。以下是一些例子:

· 什麼因素導致一位病人患病風險增加?

· 哪些藥品對血檢結果影響最大?

· 哪些保險規劃引數值可使利益最大化?

· 失信客戶有什麼特點?

· 流失客戶的簡況是什麼?

處理此類問題的一個可行辦法是計算特徵重要度,從Random Forests, Decision Trees和XGBoot等演算法中可以得到此資料。另外,LIME或SHAP等演算法則有助於解釋模型和預測,即使其源於神經網路或其它“黑盒”模型。

調整超引數

機器學習演算法有引數和超引數兩類引數。其不同之處在於:前者直接由演算法進行估測——如,迴歸的係數或神經網路的權值——而後者則並非如此,須由使用者手動設定——如,某片森林的樹木總數,神經網路的正則化方法,或支援向量機的核心功能。

為機器學習模型設定正確的超引數值十分重要。舉例而言,一個支援向量機的線性核心不能對無法線性分離的資料進行分類。再比如,如果最大深度和分裂數量設定得過高,一個樹型分類器可能出現過度擬合的情況;而最大特徵數量設定過低,其可能無法充分擬合。

為超引數找到最優數值是一個極為複雜的優化問題。以下是幾點建議:

1. 瞭解超引數的優先項。一片森林中,最相關的引數可能是樹木的數量和最大深度。然而,對於深度學習而言,優先項可能是學習率和層次數量。

2. 運用搜索技巧:gridsearch和random search。後者優先。

3. 運用交叉驗證:設定一個單獨測試組,將其餘資料分為k層並將其迭代k次,每一層都進行驗證(如,調整超引數),其餘的進行學習培養。最終,對全部層級進行平均質量度量標準的計算。

深度學習:萬金油?

過去幾年,深度學習一直是學術研究和行業發展的聚焦點。TensorFlow, Keras和Caffe等框架使複雜的神經網路通過高層級的應用程式介面(API)得以快速運用。應用程式不計其數,包括計算機視覺,聊天機器人,無人駕駛汽車,機器翻譯,甚至遊戲——同時打敗了全世界最頂級的圍棋手和國際象棋計算機玩家!

深度學習最主要的前提之一是資料增加後持續學習的能力,而這在大資料時代尤為有效(見下圖)。這種持續學習的能力與近來硬體方面的發展(如圖形處理器)互相結合,使大型深度學習工作的執行成為可能。而從前,由於資源限制,這是明令禁止的。

圖片來源:machinelearningmastery.com

那麼,這是否意味著深度學習是處理所有機器學習問題的萬金油呢?並不是。原因如下:

簡潔性

神經網路模型的結果十分依賴其結構以及超引數。大多數情況下,要正確調整模型,你需要有網路建構方面專業知識。另外,在此方面試錯的步驟也非常重要。

可解釋性

如上文提到,相當一部分實際案例不僅需要做出預測,還需要解釋預測背後的原因:為什麼貸款申請被拒絕?為什麼保險政策價格提高?儘管基於樹型結構和基於係數的演算法可以解釋,神經網路卻不行。

質量

從經驗來看,對於大多數結構化的資料集,神經網路模型的質量並不一定比RandomForests和XGBoot的模型質量更好。當涉及散亂資料(如影象、文字、音訊)時,深度學習的優勢更為突出。底線是:不要用獵槍去打蒼蠅。RandomForests和XGBoot等機器學習演算法已經足以處理大多數結構化的可監測的問題,而這些演算法也更容易調整、運用和解釋。深度學習在散亂資料問題和強化學習方面的作用不言而喻。

別洩露資料

處理一個預測航班到達時間延誤的專案時,如果使用資料集裡所有可用的特徵時,模型的精確度可以達到99%。不過,希望你會意識到,你可能用啟程延誤時間來推測進港延誤時間。這是資料洩露的典型案例。如果我們使用了任何預測時不可用或未知的特徵,就會造成資料洩露。大家要當心!

圖片來源:the Kini group.

開源軟體裡能找到一切資源,平臺還有什麼用處?

構建機器學習模型從未像今天這樣簡單。幾行R語言或Python語言程式碼足以建構一個模型,在網上甚至還能找到大量培養複雜神經網路的資源和課程。如今,Apache Spark十分有助於資料準備,它甚至能對大型資料集進行歸一處理。另外,docker和plumber等工具通過超文字傳輸協議(HTTP)簡化了機器學習模型的部署。似乎完全依靠開源平臺資源,就能構建一個端到端的機器學習系統。

就概念驗證而言,可能的確是這樣。一個大學生完全可以依靠開放原始碼完成畢業論文。但於企業而言,事情就沒有這麼簡單了。

畢竟開源軟體也存在不少缺陷。以下是幾項企業選擇大資料科學平臺的原因:

a. 開放資源整合:幾分鐘內就能開啟執行,支援多種環境,版本更新資訊透明。

b. 團隊協作:易於共享資料集、資料連結、程式碼、模型、環境和部署。

c. 管理和安全:不僅能管理資料,還可以對所有分析資產進行管理。

d. 模型管理、部署和再陪養

e. 模型偏見:檢測並修正有性別或年齡偏見的模型。

f. 輔助的資料管理:通過視覺工具來解決資料科學中最困難的問題。

g. 圖形處理器:對深度學習框架進行快速部署和配置,以促成其最優表現,如TensorFlow。

h. 無程式碼建模:專為不會編碼但想建構視覺模型的統計學家、專案專家以及管理人員設計。

留言 點贊 關注

我們一起分享AI學習與發展的乾貨
歡迎關注全平臺AI垂類自媒體 “讀芯術”

(新增小編微信:dxsxbb,加入讀者圈,一起討論最新鮮的人工智慧科技哦