Uber如何用循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)預(yù)測(cè)極端事件?
在Uber系統(tǒng)內(nèi),事件預(yù)測(cè)使我們能夠根據(jù)預(yù)期用戶需求來提高我們的服務(wù)質(zhì)量。最終目標(biāo)是準(zhǔn)確地預(yù)測(cè)出在預(yù)定的時(shí)間內(nèi)Uber將會(huì)在何處,何時(shí)以及收到多少次的乘車請(qǐng)求。
一般來說,極端事件——諸如假期、音樂會(huì)、惡劣天氣和體育賽事等高峰旅行時(shí)間,只會(huì)提高工作規(guī)劃預(yù)測(cè)的重要性。在極端事件期間計(jì)算需求時(shí)間序列預(yù)測(cè)(demand time series forecasting)是異常檢測(cè)(anomaly detection),***資源分配(optimal resource allocation)和預(yù)算的關(guān)鍵組成部分。
但不可忽略的一個(gè)事實(shí)是,雖然極端事件預(yù)測(cè)在Uber操作中占有舉足輕重的作用,但數(shù)據(jù)稀疏性使得準(zhǔn)確的預(yù)測(cè)具有很大的挑戰(zhàn)性。比如元旦之夜(NYE),這是Uber最繁忙的日子之一??墒俏覀冎挥猩贁?shù)幾次元旦之夜的數(shù)據(jù)可以借鑒參考,而且每個(gè)實(shí)例可能有不同的用戶群組。除了歷史數(shù)據(jù),極端事件預(yù)測(cè)還取決于許多外部因素,包括天氣、人口增長(zhǎng)和諸如駕駛員激勵(lì)措施這樣的市場(chǎng)營(yíng)銷的變化。
在現(xiàn)實(shí)生活中,在標(biāo)準(zhǔn)R預(yù)測(cè)包中發(fā)現(xiàn)的經(jīng)典時(shí)間序列模型,通常和機(jī)器學(xué)習(xí)方法組合在一起,從而用于特殊事件的預(yù)測(cè),然而,這些方法對(duì)于Uber來說,既不靈活也不可擴(kuò)展。
在本文中,我們介紹一種將歷史數(shù)據(jù)和外部因素相結(jié)合的Uber預(yù)測(cè)模型,以便更精確地預(yù)測(cè)極端事件,突出其新架構(gòu),以及如何與先前的模型進(jìn)行比較。
創(chuàng)建Uber的新的極端事件預(yù)測(cè)模型
隨著時(shí)間的推移,我們意識(shí)到為了擴(kuò)大發(fā)展規(guī)模,我們需要升級(jí)我們的預(yù)測(cè)模型,從而準(zhǔn)確預(yù)測(cè)Uber市場(chǎng)的極端事件。
我們最終決定基于長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)架構(gòu)進(jìn)行時(shí)間序列建模,LSTM架構(gòu)是一種具有端到端建模特征,易于整合外部變量和自動(dòng)特征提取能力的技術(shù)。通過在多個(gè)維度上提供大量數(shù)據(jù),LSTM方法可以建造模擬復(fù)雜的非線性特征交互模型。
在選擇好架構(gòu)之后,我們?cè)u(píng)估了訓(xùn)練模型所需的數(shù)據(jù)儲(chǔ)存,如下所示:
在城市中隨時(shí)間推移而變化的規(guī)模性旅行次數(shù)是用于訓(xùn)練我們模型的歷史數(shù)據(jù)儲(chǔ)存的一部分。 請(qǐng)注意除夕夜期間數(shù)據(jù)的一個(gè)下跌,然后急劇上漲,表示人們?cè)诔σ蛊陂g乘用Uber回家。
其實(shí),極端事件的預(yù)測(cè)是一件很困難的事情,主要原因是它們的不頻繁性。為了克服這個(gè)數(shù)據(jù)缺陷,我們決定訓(xùn)練一個(gè)單一的、靈活的神經(jīng)網(wǎng)絡(luò)來一次性地對(duì)許多城市的數(shù)據(jù)進(jìn)行建模,從而大大提高了我們的準(zhǔn)確性。
用神經(jīng)網(wǎng)絡(luò)構(gòu)建新的架構(gòu)
我們的目標(biāo)是設(shè)計(jì)一個(gè)通用的、端到端的時(shí)間序列預(yù)測(cè)模型,它要具有可擴(kuò)展性,準(zhǔn)確性并且適用于異構(gòu)時(shí)間序列。為了實(shí)現(xiàn)這一點(diǎn),我們使用了數(shù)千個(gè)時(shí)間序列來訓(xùn)練一個(gè)多模塊神經(jīng)網(wǎng)絡(luò)。
我們測(cè)量和追蹤了原始的外部數(shù)據(jù),從而構(gòu)建了如下圖所示的神經(jīng)網(wǎng)絡(luò):
我們的模型是使用外部變量,包括天氣(例如降水、風(fēng)速和溫度預(yù)報(bào))和城市級(jí)信息(例如在特定地理區(qū)域內(nèi)的任何給定時(shí)間進(jìn)行的旅行,已注冊(cè) Uber用戶,本地假期或事件)的組合進(jìn)行訓(xùn)練的。
這個(gè)原始數(shù)據(jù)用于我們的訓(xùn)練模型中,來進(jìn)行包括日志轉(zhuǎn)換,縮放和數(shù)據(jù)轉(zhuǎn)換這樣簡(jiǎn)單的預(yù)處理。
用滑動(dòng)窗口進(jìn)行訓(xùn)練
神經(jīng)網(wǎng)絡(luò)中的訓(xùn)練數(shù)據(jù)集需要滑動(dòng)窗口X(輸入)和Y(輸出)來限定常規(guī)值(例如輸入大小)以及預(yù)測(cè)范圍。使用這兩個(gè)窗口之后,我們便可以通過最小化損失函數(shù)(loss function),如均方差(Mean Squared Error)來訓(xùn)練神經(jīng)網(wǎng)絡(luò)。
X和Y窗口都是以單個(gè)增量滑動(dòng)的,從而生成訓(xùn)練數(shù)據(jù),如下所示:
X和Y滑動(dòng)窗口是由批次,時(shí)間,特征(對(duì)于X而言)和預(yù)測(cè)特征(對(duì)于Y而言)組成的。
接下來,我們就解釋如何使用我們的訓(xùn)練數(shù)據(jù)來設(shè)計(jì)自定義的LSTM模型。
調(diào)整我們的LSTM模型
在測(cè)試期間,我們確認(rèn),與基線模型(其中包括單變量預(yù)測(cè)和機(jī)器學(xué)習(xí)元素的組合)相比,vanilla LSTM操作并沒有表現(xiàn)出優(yōu)異的性能。vanilla模型在未被訓(xùn)練的領(lǐng)域內(nèi)不能適應(yīng)時(shí)間序列,這導(dǎo)致在使用單個(gè)神經(jīng)網(wǎng)絡(luò)時(shí)表現(xiàn)并不是很好。
使用每一個(gè)時(shí)間序列要處理***指標(biāo)的方式來訓(xùn)練一個(gè)模型是不切實(shí)際的:根本沒有足夠的資源可用,更不用說時(shí)間的有限性了。此外,訓(xùn)練單一的vanilla LSTM不會(huì)產(chǎn)生競(jìng)爭(zhēng)性的結(jié)果,因?yàn)槟P筒荒軈^(qū)分不同的時(shí)間序列。雖然時(shí)間序列特征和輸入可以手動(dòng)加載到vanilla LSTM模型中,但這種方法是冗長(zhǎng)乏味且容易出錯(cuò)的。
為了提高我們的準(zhǔn)確度,我們?cè)谀P椭幸肓艘粋€(gè)自動(dòng)特征提取模塊,如下所示:
我們的模型由手動(dòng)派生的時(shí)間序列特征(左)和我們提出的具有自動(dòng)特征提取模型(右)的LSTM架構(gòu)組成。
我們決定構(gòu)建一個(gè)通過自動(dòng)特征提取模塊提供單一模型、異質(zhì)性預(yù)測(cè)的神經(jīng)網(wǎng)絡(luò)架構(gòu)。正如上圖所示,模型首先通過自動(dòng)、基于集成的特征提取來初始化網(wǎng)絡(luò);在提取特征向量后,再使用標(biāo)準(zhǔn)集成技術(shù)對(duì)其進(jìn)行平均。然后將***一個(gè)向量與輸入連接從而產(chǎn)生最終預(yù)測(cè)。
在測(cè)試期間,我們能夠?qū)崿F(xiàn)基于LSTM架構(gòu)的14.09%的對(duì)稱平均絕對(duì)百分比誤差(SMAPE)改進(jìn),同時(shí)比Uber的實(shí)時(shí)監(jiān)控和根本原因探索工具Argos中的經(jīng)典時(shí)間序列模型提升25%。
隨著我們的架構(gòu)的成功開發(fā)、定制和測(cè)試,現(xiàn)在正是將該模型投入生產(chǎn)使用的時(shí)候了。
使用新的預(yù)測(cè)模型
一旦計(jì)算了神經(jīng)網(wǎng)絡(luò)的權(quán)重,它們就可以以任何編程語(yǔ)言形式進(jìn)行導(dǎo)出和執(zhí)行。我們當(dāng)前的途徑是首先使用Tensorflow和Keras進(jìn)行離線訓(xùn)練,然后將生成的權(quán)重導(dǎo)出為本地Go代碼,如下所示:
該描述模型首先進(jìn)行離線訓(xùn)練,然后導(dǎo)出到目標(biāo)語(yǔ)言進(jìn)行本機(jī)執(zhí)行。
為了本文最初所設(shè)定的目標(biāo),我們建立了一個(gè)模型,使用的數(shù)據(jù)主要來自于美國(guó)五年間使用Uber來完成假期旅行的時(shí)間段,比如,像在圣誕節(jié)和元旦來臨的七天之前、之間和之后所產(chǎn)生的數(shù)據(jù)。
在一些城市進(jìn)行預(yù)測(cè)的期間,我們收集了使用之前的和現(xiàn)在的兩種模型所產(chǎn)生的平均SMAPE,如下所示:
我們的新預(yù)測(cè)模型的效果顯著優(yōu)于以前的預(yù)測(cè)模型。
例如,我們的新模式發(fā)現(xiàn),預(yù)測(cè)最困難的假期之一是圣誕節(jié),這與需求中的***錯(cuò)誤和不確定性相對(duì)應(yīng)。
我們描繪了一個(gè)城市200天的預(yù)期和實(shí)際完成旅行的圖表,如下所示:
一個(gè)城市200多天完成旅行次數(shù)的模擬,我們對(duì)同一數(shù)據(jù)的預(yù)測(cè)凸顯了我們新模型的準(zhǔn)確性
我們的測(cè)試結(jié)果表明,與我們的專有模型相比,現(xiàn)有的模型的預(yù)測(cè)精度提高了2-18%。
雖然神經(jīng)網(wǎng)絡(luò)對(duì)Uber來說益處頗多,但這種方法并不是“萬金油”。根據(jù)以往的經(jīng)驗(yàn),我們定義了一個(gè)三維思維,以此來決定神經(jīng)網(wǎng)絡(luò)模型是否適用于你的情況:(a)時(shí)間序列數(shù),(b)時(shí)間序列長(zhǎng)度和(c)時(shí)間序列之間的相關(guān)性。相對(duì)于經(jīng)典時(shí)間序列模型而言,這三個(gè)維度增加了神經(jīng)網(wǎng)絡(luò)方法進(jìn)行更準(zhǔn)確的預(yù)測(cè)的可能性。
未來預(yù)測(cè)
我們打算繼續(xù)使用神經(jīng)網(wǎng)絡(luò),為異構(gòu)時(shí)間序列創(chuàng)建一個(gè)通用的預(yù)測(cè)模型,作為一個(gè)獨(dú)立的、端到端模型或更大的自動(dòng)化預(yù)測(cè)系統(tǒng)中的構(gòu)建塊。如果你對(duì)這種研究比較感興趣的話,那么在2017年8月6日在悉尼的國(guó)際機(jī)器學(xué)習(xí)公約(International Machine Learning Convention)期間,可以查看Uber的時(shí)間序列研討會(huì)(http://roseyu.com/time-series-workshop/)。