來(lái)源:https://content.pivotal.io/blog/scoring-as-a-service-to-operationalize-algorithms-for-real-time
如果您只使用數(shù)據(jù)科學(xué)進(jìn)行一次性的、特別的分析,那么您就做錯(cuò)了。
毫無(wú)疑問(wèn),公司可以從這種一次性的數(shù)據(jù)科學(xué)實(shí)踐中獲益良多,而且大多數(shù)都是從這里開(kāi)始的。然而,當(dāng)數(shù)據(jù)科學(xué)能夠以一種持續(xù)的方式在實(shí)時(shí)場(chǎng)景中應(yīng)用時(shí),會(huì)產(chǎn)生更多的價(jià)值。我們不能僅僅構(gòu)建一個(gè)機(jī)器學(xué)習(xí)(ML)模型并分享其見(jiàn)解,我們必須進(jìn)入下一步并將其操作化,使其成為我們業(yè)務(wù)流程的一部分并實(shí)時(shí)影響結(jié)果。例如,當(dāng)我們可以實(shí)時(shí)記錄人類的動(dòng)作時(shí),什么是可能的呢?——就像一個(gè)系統(tǒng),它可以告訴你一個(gè)人正在以每小時(shí)30多英里的速度跑步或移動(dòng),而他們本不應(yīng)該這樣做,或者只是摔倒在地。
在這篇文章中,我們列出了基本組件——數(shù)據(jù)攝取、數(shù)據(jù)存儲(chǔ)、模型訓(xùn)練和模型評(píng)分——用于實(shí)時(shí)數(shù)據(jù)科學(xué)和整個(gè)建模管道的操作,所有這些都是部署在關(guān)鍵云計(jì)算環(huán)境中的微服務(wù)。我們還討論了為什么實(shí)時(shí)數(shù)據(jù)科學(xué)模型的運(yùn)行是最關(guān)鍵的,從實(shí)時(shí)數(shù)據(jù)科學(xué)中獲得最多的行業(yè),并引入了以個(gè)性化的人類活動(dòng)分類為中心的實(shí)時(shí)數(shù)據(jù)科學(xué)管道。
一、大數(shù)據(jù)科學(xué)模型
作為數(shù)據(jù)科學(xué)家,我們花費(fèi)了大量的時(shí)間來(lái)準(zhǔn)備和分析數(shù)據(jù),構(gòu)建機(jī)器學(xué)習(xí)模型,運(yùn)行實(shí)驗(yàn),編寫(xiě)一個(gè)成功的數(shù)據(jù)科學(xué)項(xiàng)目的代碼。成功的數(shù)據(jù)科學(xué)項(xiàng)目的關(guān)鍵是模型運(yùn)作化(Model operationalization)。
模型操作化是將數(shù)據(jù)科學(xué)管道(包括數(shù)據(jù)攝取、數(shù)據(jù)存儲(chǔ)、模型訓(xùn)練和模型評(píng)分)實(shí)現(xiàn)到現(xiàn)實(shí)世界中并將其應(yīng)用到實(shí)際數(shù)據(jù)的過(guò)程,在自動(dòng)化的、低延遲的、影響人的業(yè)務(wù)活動(dòng)中。預(yù)測(cè)模型需要互動(dòng)、成長(zhǎng)和活躍起來(lái)(通常是實(shí)時(shí)的),以真正引起變化和推動(dòng)行動(dòng)。模型操作化是數(shù)據(jù)科學(xué)工作流的全部?jī)r(jià)值所在。為此,生產(chǎn)就緒、高質(zhì)量的代碼是任何數(shù)據(jù)科學(xué)工作流的關(guān)鍵需求,必須采取關(guān)鍵步驟來(lái)加強(qiáng)數(shù)據(jù)流管道、嵌入數(shù)據(jù)驗(yàn)證檢查、支持異常處理和確保模型驗(yàn)證。它們還應(yīng)該在云本地堆棧上運(yùn)行,以實(shí)現(xiàn)可靠性、可訪問(wèn)性和可伸縮性。
二、實(shí)時(shí)數(shù)據(jù)科學(xué)的應(yīng)用
雖然有許多非實(shí)時(shí)數(shù)據(jù)科學(xué)用例,但實(shí)時(shí)數(shù)據(jù)科學(xué)是對(duì)許多應(yīng)用程序的需求,包括物聯(lián)網(wǎng)(物聯(lián)網(wǎng))、欺詐檢測(cè)、風(fēng)險(xiǎn)計(jì)算、健康相關(guān)警報(bào)、網(wǎng)絡(luò)分析、營(yíng)銷個(gè)性化、定制獎(jiǎng)勵(lì)程序等。
在物聯(lián)網(wǎng)領(lǐng)域,我們的重工業(yè)客戶努力實(shí)現(xiàn)零計(jì)劃外停機(jī),我們建立了針對(duì)高風(fēng)險(xiǎn)設(shè)備的預(yù)測(cè)模型。例如,關(guān)鍵數(shù)據(jù)科學(xué)團(tuán)隊(duì)最近與一個(gè)主要的油氣客戶合作,實(shí)現(xiàn)了泥漿馬達(dá)故障預(yù)測(cè)模型。將這一預(yù)測(cè)模型運(yùn)作化具有重大影響——據(jù)美國(guó)油氣記者稱,泥漿馬達(dá)故障可能占到非生產(chǎn)時(shí)間的35%,每次事故的成本為15萬(wàn)美元。關(guān)鍵數(shù)據(jù)科學(xué)團(tuán)隊(duì)還解決了許多其他的IoT問(wèn)題——利用傳感器數(shù)據(jù)檢測(cè)和跟蹤噴氣發(fā)動(dòng)機(jī)的退化,汽車的預(yù)測(cè)維護(hù),汽車駕駛員識(shí)別,虛擬機(jī)容量預(yù)測(cè),連接的汽車管道等。
無(wú)論在哪個(gè)領(lǐng)域,企業(yè)都能在數(shù)據(jù)科學(xué)模型的運(yùn)作化過(guò)程中實(shí)現(xiàn)巨大的價(jià)值,包括新的數(shù)據(jù)和恰當(dāng)?shù)捻憫?yīng)——所有這些都是實(shí)時(shí)的。
三、實(shí)時(shí)數(shù)據(jù)科學(xué):建立和評(píng)價(jià)一個(gè)個(gè)性化的活動(dòng)模型
為了使數(shù)據(jù)科學(xué)能夠?qū)崟r(shí)運(yùn)行,我們?yōu)檎麄€(gè)實(shí)時(shí)數(shù)據(jù)科學(xué)堆棧創(chuàng)建了一個(gè)示例管道——數(shù)據(jù)攝入、數(shù)據(jù)存儲(chǔ)、模型訓(xùn)練和模型評(píng)分。該管道使用Pivotal Cloud Foundry (PCF)、Pivotal Big data Suite、Spring Cloud數(shù)據(jù)流、Nodejs、RabbitMQ和基于python的開(kāi)源機(jī)器學(xué)習(xí)來(lái)演示實(shí)時(shí)數(shù)據(jù)科學(xué)。該管道構(gòu)建了一個(gè)定制的“個(gè)人活動(dòng)識(shí)別模型”,該模型使用智能手機(jī)上的流式加速度傳感器數(shù)據(jù)。為了將其應(yīng)用到業(yè)務(wù)場(chǎng)景中,這條管道將允許我們?cè)u(píng)估和評(píng)分幾乎所有流數(shù)據(jù)的feed,以驅(qū)動(dòng)實(shí)時(shí)操作。

四、實(shí)時(shí)建模管道
在圖1中,數(shù)據(jù)是通過(guò)移動(dòng)電話和移動(dòng)應(yīng)用程序的加速度計(jì)創(chuàng)建的,它是任何IoT或類似應(yīng)用程序流數(shù)據(jù)的代理。從那里,數(shù)據(jù)通過(guò)TCP通道以30Hz的頻率通過(guò)WebSocket協(xié)議發(fā)送。該數(shù)據(jù)位于Node.js端點(diǎn)上。我們可以為這個(gè)feed選擇一個(gè)更快的速率——30 Hz被確定為最優(yōu)的,基于在操作之前的研究。從那里,數(shù)據(jù)移動(dòng)到RabbitMQ。RabbitMQ是一個(gè)消息傳遞接口,它通過(guò)交換向其他服務(wù)發(fā)布數(shù)據(jù)。
為了開(kāi)發(fā)我們的模型,我們首先需要一個(gè)小的數(shù)據(jù)緩存來(lái)進(jìn)行訓(xùn)練。我們決定在Redis中緩存這些數(shù)據(jù),但是我們可以使用Pivotal GemFire,它對(duì)于高容量和延遲敏感的系統(tǒng)特別有用。Redis本身并不使用來(lái)自RabbitMQ的數(shù)據(jù),因此我們通過(guò)一個(gè)API調(diào)用部署Spring-XD流,以將來(lái)自RabbitMQ的數(shù)據(jù)傳輸?shù)絉edis。如圖2所示,傳輸?shù)絉edis的數(shù)據(jù)是訓(xùn)練數(shù)據(jù),它被用作特性工程和機(jī)器學(xué)習(xí)組件的輸入,這些組件是用Python編寫(xiě)的,作為一個(gè)微服務(wù)( microservice),可以使用Ian Huston的Anaconda Python構(gòu)建包部署到 Cloud Foundry。

我們的訓(xùn)練服務(wù)從Redis開(kāi)始每批訓(xùn)練。這些不是批處理數(shù)據(jù)上載,而是在體系結(jié)構(gòu)的近實(shí)時(shí)部分中使用的特定時(shí)間序列數(shù)據(jù)組。然后,構(gòu)建模型特征,并使用Python scikit- learning機(jī)器學(xué)習(xí)庫(kù)對(duì)機(jī)器學(xué)習(xí)模型進(jìn)行訓(xùn)練。
PCF訓(xùn)練應(yīng)用流程包括特征工程階段和模型訓(xùn)練階段。使用Python包numpy和scipy執(zhí)行特征工程。在特征工程中,應(yīng)用一秒移動(dòng)窗口,然后對(duì)每個(gè)窗口應(yīng)用帶通濾波器。對(duì)于每個(gè)窗口,使用時(shí)域匯總統(tǒng)計(jì)和頻域傅里葉變換系數(shù)生成特征。最后,對(duì)數(shù)據(jù)進(jìn)行隨機(jī)森林模型訓(xùn)練,得到的模型存儲(chǔ)在Redis中。
除了隨機(jī)森林算法外,我們還測(cè)試了支持向量機(jī)、邏輯回歸、樸素貝葉斯,但我們選擇了隨機(jī)森林模型進(jìn)行操作,因?yàn)樗谧R(shí)別不同的人類活動(dòng)方面表現(xiàn)得最好。在研發(fā)階段擁有快速測(cè)試多個(gè)模型的能力是很重要的,因?yàn)槊糠N方法都在準(zhǔn)確性、計(jì)算時(shí)間和可解釋性之間進(jìn)行權(quán)衡。最后,我們?yōu)槊總€(gè)訓(xùn)練階段選擇了20秒,因?yàn)樗谛阅芎蛯?shí)用性之間產(chǎn)生了最佳的權(quán)衡。


架構(gòu)的實(shí)時(shí)組件如圖4所示——模型得分應(yīng)用程序。這個(gè)應(yīng)用有兩個(gè)組件。首先,特征工程組件由來(lái)自RabbitMQ的流輸入窗口數(shù)據(jù)饋送,然后,這將饋送到預(yù)測(cè)組件。訓(xùn)練后的模型也從Redis中檢索,并對(duì)每個(gè)1秒的窗口進(jìn)行評(píng)分。最后,通過(guò)API調(diào)用訪問(wèn)計(jì)分應(yīng)用程序,并應(yīng)用上面描述的特性工程過(guò)程,并根據(jù)請(qǐng)求輸出活動(dòng)評(píng)分。使用這個(gè)API,任何外部應(yīng)用程序都可以為特定用戶請(qǐng)求當(dāng)前的移動(dòng)活動(dòng)狀態(tài),并基于最高的分?jǐn)?shù)獲得最可能的狀態(tài)。
五、Scoring-as-a-Service與云規(guī)模
通過(guò)將評(píng)分服務(wù)作為API提供,有兩個(gè)突出的好處。首先,多個(gè)應(yīng)用程序可以訪問(wèn)計(jì)分應(yīng)用程序,即使是在初始系統(tǒng)范圍之外的應(yīng)用程序。其次,公開(kāi)的API端點(diǎn)允許自治——應(yīng)用程序可以通過(guò)自己的開(kāi)發(fā)迭代集,而不需要部署其他應(yīng)用程序。
通過(guò)在關(guān)鍵的云計(jì)算和彈性運(yùn)行時(shí)服務(wù)中實(shí)現(xiàn)模型訓(xùn)練,我們也實(shí)現(xiàn)了一種高度可伸縮的方法。例如,當(dāng)有更多的傳感器需要訓(xùn)練,有更多的數(shù)據(jù)收集,或者有更多的實(shí)時(shí)查詢時(shí),我們可以擴(kuò)展我們的管道,只需要生成更多的應(yīng)用程序?qū)嵗?/p>