每日最新頭條.有趣資訊

如何使用 DeepAR 進行時間序列預測?

機器之心轉載

來源:AWS部落格

作者:王元愷

在 2019 年的 WAIC 上,筆者在 AWS 展台中布置並展示了一個使用 DeepAR 進行時間序列預測的項目,受到了廣泛的來自客戶、參觀者以及同事的關注,其中大部分是被展示項目中真實的電商客戶的數據及成果吸引,進行了一定的經驗交流。在得到肯定之後,筆者在年前又與部分互聯網、旅遊行業的業務負責人溝通,發現時間序列預測有著廣泛的適用場景,能直接幫助決策者做出有數據支撐的重要決策。

圖1 WAIC 中展示的時間序列預測 DEMO

在本篇文章中,會簡要介紹時間序列預測的場景、常見的分類及對應算法、DeepAR 算法的優勢以及如何使用 DeepAR 算法進行時間序列預測。

場景介紹

絕大部分行業場景,尤其是互聯網行業,每天都會產生大量的數據。遊戲中每時每刻都會產生大量的玩家日誌信息;旅遊應用中每天有各類酒店各種交通工具的實時價格;涉及供應鏈和日銷量的零售電商,每月都為生產(購進)多少貨而發愁;就連生產電子元器件、供電箱等傳統生產企業,這些零件每時每刻都會產生大量的數據。而我們稱這種不同時間收到的,描述一個或多種特徵隨著時間發生變化的數據,為時間序列數據(Time Series Data)。

而結合上文中的時間序列數據,我們能夠做什麽?最顯而易見的是,我們可以通過過去產生的時間序列數據,來預測未來。我們可以通過遊戲歷史的玩家消費時間序列數據,預測該玩家在接下來一周的付費意願和付費大致金額,從而定製化的推送相關遊戲禮包和活動,這通常和傳統的用戶畫像是互補的。

旅遊應用中,利用歷史數據對未來酒店、機票的價格進行預測,從而為用戶推薦最低價的購買點(例如:提示用戶五天后購買會更便宜),這一個小功能就足夠獲取大量忠實用戶並實現變現,而北美已經有網站實現了這個功能來預測機票價格。有了每日銷量的歷史數據,我們可以預測接下來每天的銷量範圍,從而更有針對性的進貨或者推出折扣促銷政策,保證商品的供需平衡。

某大型供電箱生產銷售企業常常頭疼於電箱的維修難,維修貴,如果能利用傳感器收集上來的歷史數據訓練出模型,在電箱故障前提前預警,那不論是維修還是提前更換,成本總比電箱徹底不工作後再去維修要少。

一言以蔽之,時間序列預測就是通過多種維度的數據本身內在與時間的關聯特性,其中可能包含季節性、趨勢性等等特徵,利用歷史的數據預測未來的場景,細分場景除了上述所介紹的之外,還有很多很多,由於篇幅關係,這裡不做過多的展開介紹。

時序預測分類及算法

時序預測從不同角度看有不同分類。從實現原理的角度,可以分為傳統統計學、機器學習(又分非深度學習和深度學習)。

按預測步長區分,可以分為單步預測和多步預測,簡單來說就是一次預測未來一個時間單元還是一次預測未來多個時間單元的區別。

按輸入變量區分,可以分為自回歸預測和使用協變量進行預測,區別在於維度中是否含有協變量,例如預測未來銷售量時,如果隻接受時間和歷史銷售量數據,則是自回歸預測,如果可以接受氣象、經濟指數、政策事件分類等其他相關變量(稱為協變量),則稱為使用協變量進行預測。

按輸出結果區分,可以分為點預測和概率預測,很多模型隻提供了點預測而不提供概率預測,點預測模型後再加蒙特卡洛模擬(或其他轉化為概率預測的方式)往往不能準確反映模型輸出的預測概念,而在大多數場景下,概率預測更貼近事實情況,對於未來的預測本身就應該是一種概率分布。

按目標個數區分,可以分為一元、多元、多重時間序列預測。舉例理解,使用歷史的銷售量預測未來1天的銷售量為一元時間序列預測,使用歷史的進店人數、銷售量、退貨量預測未來1天的進店人數、銷售量、退貨量(預測目標有三個)為多元時間序列預測,使用歷史的紅燒牛肉面、酸菜牛肉面、海鮮面的銷售量預測未來1天的紅燒牛肉面、酸菜牛肉面、海鮮面的銷售量(預測目標有三種)為多重時間序列預測。

這些分類是不同角度下的分類,同一種算法往往只能是分類中的一種,例如傳統的統計學算法隻適合做自回歸預測而不適合協變量預測。

圖2 時序預測分類對應關係

時序預測算法有很多很多,在這裡隻介紹典型的四種算法,並著重介紹 DeepAR 算法。

圖3 四種時序預測算法

簡單移動平均 SMA 是統計學中易實現的一種算法,他能很有效的體現出數據長期的趨勢,但無法反映數據周期性的變化。將自回歸(AR)的算子加上移動平均(MA),就是 ARIMA 算法。回歸能夠反映數據的周期性規律,和移動平均形成互補,從統計學的角度可以很好的預測一元與時間強相關場景下的時間序列,由於原理簡單好理解,算法也只是一行數學公式, ARIMA 也常常在時間序列預測時先拿來做第一步實驗(baseline)。

長短期記憶算法 LSTM 是在循環神經網絡 RNN 的基礎上,引出了遺忘門和記憶門,從而可以在長期訓練的過程中篩選出我們需要的內容。在時間序列預測中,LSTM 對於一元預測場景的效果還是不錯的。

DeepAR 是一個自回歸循環神經網絡,使用遞歸神經網絡 (RNN) 結合自回歸 AR 來預測標量(一維)時間序列。在很多應用中,會有跨一組具有代表性單元的多個相似時間序列。DeepAR 會結合多個相似的時間序列,例如是不同方便麵口味的銷量數據,通過深度遞歸神經網絡學習不同時間序列內部的關聯特性,使用多元或多重的目標個數來提升整體的預測準確度。

DeepAR 最後產生一個可選時間跨度的多步預測結果,單時間節點的預測為概率預測,默認輸出P10,P50和P90三個值。這裡的P10指的是概率分布,即10%的可能性會小於P10這個值。通過給出概率預測,我們既可以綜合三個值給出一個值預測,也可以使用P10 – P90的區間做出相應的決策。有關 DeepAR 數學運算背景的更多信息,請參閱DeepAR:概率性預測與自回歸遞歸網絡。

DeepAR 算法優勢

時間序列預測在真正去做的時候,難免會遇到關於數據的問題,例如無法完整收集所有影響因素的數據,影響因素在未來具有不確定性,有時只有很少甚至沒有歷史數據。數據往往是卡住大多數時序預測工作負載最大的問題。

DeepAR 能夠在一定程度上減輕對數據的要求。作為一種監督學習算法,DeepAR 直接在模型內部補充缺省值。在導入數據的過程中,我們不需要人為的掃描數據尋找缺省值,不需要為如何填補缺省值大費周章,DeepAR 模型內部會解決這一問題。

利用 DeepAR,可以將時間序列與多個分組關聯,可以處理統計學難以處理的非線性問題和規模問題,可以在幾乎沒有歷史數據的情況下執行冷啟動時間序列預測,只需要有類似的事件序列相支持。例如,我有歷史方便麵的銷售數據若乾,現在新上市了一款自熱米飯,只有幾天的數據,依然可以使用 DeepAR 結合歷史方便麵的數據預測自熱米飯的未來銷售走勢。這也是算法的一大亮點。

聯合多重時間序列本身是一件挑戰性十足的事,數據樣本的不均衡導致了不同時間序列對於模型的影響程度是不同的。拿商品銷售為例,銷售數量多一個數量級,商品數量就少一個數量級,每個月賣10個的商品如果有100,000種,每個月賣100個的商品就只有10,000種,每個月賣1000個的商品就只有1000種。

這種不均衡樣本導致輸入值的量級差異,商品A每天銷售數百個,商品B每天銷售數萬個,兩個商品共同訓練時商品A的信息會被忽略掉,因為相對於B而言,A對神經網絡參數的影響太低。但是,A時間序列中隱含的信息是有價值的,數百個銷售額仍然能夠反映季節性和趨勢性的變化。

圖4 多重時間序列聯合的問題

而對於這種樣本量級差異的解決方法,需要對商品銷售量進行縮放,對應到神經網絡中,即輸入到神經網絡前除以v, 輸出後乘以v。如何選擇為每一個商品選擇對應的v是一個挑戰,實踐發現使用商品的歷史銷量均值是一個不錯的選擇。

圖5 多重時間序列聯合一個可行方案

在 DeepAR 中這些問題的方案都包含在了算法內部,從而省去了前期大量的數據規整和清洗工作。這也就使得從使用的角度上,DeepAR 的上手難度並不高。並且,在 Amazon SageMaker 和 Amazon Forecast 這兩個服務中,都可以快速方便的直接調用現成實現好的算法,輸入自己的數據進行訓練。

DeepAR 使用

如果您是一個剛上手機器學習的小白, Amazon Forecast 是一項完全託管的服務,可以使用包含 DeepAR 在內的機器學習算法來提供高度準確的預測,您可以手動指定算法或讓服務根據預測效果自己選擇。Amazon Forecast 以 Amazon.com 使用的相同技術為基礎,利用機器學習將時間序列數據與其他變量相結合,以獲得預測結果。

使用 Amazon Forecast 無需具備任何機器學習經驗。您只需要提供歷史數據,以及您認為可能會影響預測結果的任何其他數據。訓練、超參數調整、模型部署這些過程全部是服務自動執行,數個小時後就可以利用生成好的終端節點進行預測。Amazon Forecast 也能夠在模型上線後持續迭代並優化您的模型。

如果您想要動手來自行訓練,更多的定製化和手動處理數據,控制訓練過程,以及自定義部署流程,Amazon SageMaker是更好的選擇。Amazon SageMaker 是一項完全託管的服務,可以幫助開發人員和數據科學家快速構建、訓練和部署機器學習 (ML) 模型。

Amazon SageMaker 完全消除了機器學習過程中每個步驟的繁重工作,讓開發高質量模型變得更加輕鬆。Amazon SageMaker覆蓋了從數據打標簽到最終模型部署一整套的步驟支持和現成的容器化方法,使得開發人員和數據科學家可以專注於他們所擅長的業務以及科學研究之中。

DeepAR 作為 SageMaker 內建的算法,可以通過數行代碼調用,就可以直接開始模型訓練。SageMaker 也提供了數個 DeepAR 相關示例,可以在初期仿照示例筆電處理自己的業務數據並生成模型,降低學習曲線。

在 SageMaker 上啟用一個筆電實例, DeepAR的示例筆電在 Jupyter 的示例中可以找到:

點擊 Use,進入示例筆電:

圖6 SageMaker 中使用 DeepAR

使用內置算法DeepAR,我們需要設置容器的名稱 forecasting-deepar:

圖7 設置容器名稱

數據預處理,按照文檔中的數據格式要求進行數據預處理,設置時間序列的跨度,預測跨度,起始終止時間,並切分訓練和測試數據集:

圖8 數據預處理

SageMaker 中使用的是封裝好的 DeepAR 模型容器,我們只需要在筆電中指定相關的命令參數和訓練參數,就可以開始訓練。相面給出了一個示例定義:

圖9 訓練參數定義

模型訓練完成後,可以定義預測方法類,並一步調用 API 執行部署:

圖10 定義推理方式並部署

這樣我們就訓練好了一個 DeepAR 用於預測電力供應的模型,可以在筆電中繼續嘗試去預測接下來的幾組數據並與歷史數據進行比對。我們在實際使用SageMaker的過程中,可以先簡單跑一遍示例代碼,再逐步替換其中的數據、和改寫數據預處理的代碼。當您對相關代碼掌握後,可以嘗試獨立來編寫其他流程的代碼,自定義在每一個步驟中實現業務的需求。

最後,我希望通過這篇部落格能夠給您一些時間序列預測的指導,DeepAR 作為時間序列預測中一個亮點十足的算法,能夠幫助您短時間內取得不錯的準確率。Amazon Forecast 和 Amazon SageMaker 都能在不同階段給到您支持。

關於作者

王元愷:負責基於AWS的雲計算方案的架構設計,同時致力於AWS雲服務在國內和全球的應用和推廣。畢業於上海交通大學,畢業後直接加入AWS中國。對前沿技術如計算機視覺、自然語言處理及其應用有著深入的研究與熱情。在大規模全球同服遊戲、Serverless無伺服器架構以及人工智能等領域有著廣泛的設計與實踐經驗。

Amazon SageMaker1000元大禮包

現在,企業開發者可以免費領取 1000 元服務抵扣券,輕鬆上手Amazon SageMaker,除了本文介紹的內容外,還有更多應用實例等你體驗。

獲得更多的PTT最新消息
按讚加入粉絲團