嚴選時序預測算法實踐

時序預測算法在電商場景中有着大量的應用場景,基於嚴選的實際業務需求,我們開發沉澱了一套時序預測算法系統,實現了 “數據 - 模型 - 服務” 的完整鏈路,並落地於網易嚴選的補貨、調撥、投放、搜索、推薦等多個業務場景。

1 背景

我們把不同時間收到的,描述一個或多種特徵隨時間發生變化的數據稱爲時間序列數據,例如商品的每天的銷量,股價每天的漲跌等等。對於這類數據,我們往往會希望通過算法去預測其未來的走勢,這類算法統稱爲時序預測算法。

時序預測算法在電商場景中有着大量的應用場景,例如我們需要預測商品未來的銷量,來決定補多少貨;需要預測 APP 未來的流量,來決定具體的搜推策略等等。

基於上述需求背景,我們開發沉澱了一套時序預測算法系統,實現了 “數據 - 模型 - 服務” 的完整鏈路,並落地於網易嚴選的補貨、調撥、投放、搜索、推薦等多個業務場景。

2 嚴選應用

時序預測算法再嚴選主要有以下應用場景:

2.1 商品銷量預測

供應鏈採購補貨系統

2.2 倉間商品調撥量預測

倉間調撥業務

2.3 倉庫單量預測

2.4 廣告流量預測

DSP 後臺系統

2.5 App 流量預測

(相關技術已發表專利 7 篇)

3 時序預測算法實踐

要讓時序預測的算法在嚴選場景中更好的落地,產生業務價值,主要需要解決以下幾個問題:

圍繞上述問題,我們開發了一套完整的算法服務系統,一方面對外提供統一的預測服務接口,助力算法落地應用;另一方面給算法開發提供了標準化的範式和便利的工具,提升了迭代開發效率。

3.1 整體架構

算法系統的整體架構如下圖所示:

預測系統整體架構

3.2 數據特徵

時序預測算法的基礎是大量的數據,特別是歷史時序數據。在網易嚴選,一方面圍繞着用戶對嚴選商品的瀏覽、購買等各種行爲,每天可以產生海量的用戶行爲數據;另一方面嚴選自身的經營運作也沉澱了大量的商品數據以及業務數據。這些在嚴選產生的數據可以通過數倉、後端的基建方便的收集到。此外,我們還收集了許多外部數據,與嚴選數據彙總到一起,主要包括:

通過從嚴選內部及外部收集了上述數據,我們進行了初步的清洗以及特徵抽取,構建了預測算法的基礎數據特徵庫。並且,基於預測算法的實際取數特點,抽象出了一套專用的數據模型用於特徵數據的結構化,並最終基於 ES 集羣和 Redis 集羣,實現了數據的存儲落地。

3.3 算法模型

在嚴選的實踐中,用到了很多不同的時序預測算法模型。我們基於具體的應用場景,會使用不同的一種或多種具體模型。總的來說,這些算法模型可以分爲以下三種類型:

3.3.1 經典統計學時序模型

這類模型具有悠久的歷史,是時序預測領域最經典、最常見的一類模型,普遍應用於傳統零售、製造業。這類模型往往基於一定的先驗假設,通過相對簡潔、直觀的計算公式給出預測結果。

Prophet 模型對歷史時序數據的分解

3.3.2 傳統機器學習模型

這類模型隨着機器學習算法的發展而逐步運用於大型企業的複雜預測場景當中。這類模型算法通過 “特徵 - 樣本點” 的形式對預測問題進行建模,通過在大量數據上進行訓練,模型可以學習到繁雜歷史特徵之間的複雜關係,找出其中規律並將其推廣到未來,以實現時序數的預測。傳統機器學習模型也是目前電商行業使用最廣泛的一種算法模型。

對商品銷量預測問題樣本點建模

3.3.3 深度學習模型

近幾年來,深度學習算法在各個領域大放異彩。我們在嚴選的時序預測場景中同樣也開始引入了深度學習算法。這類模型是在傳統機器學習模型基礎上演變而來,具有更加複雜的模型結構。

基於深度模型實現時間序列的概率分佈預測

基於 Seq2Seq 思想,包含多模態 Attention 機制的的 MASS 模型結構

需要特別說明的是,我們在長期的時序預測實踐中發現,預測效果的好壞並不會隨着模型複雜度的上升而變好。特別是深度學習模型,在 NLP、CV 領域帶來了革命性效果提升的同時,在時序預測應用中卻並沒有體現出顯著優勢。近期學術界的一些研究也提出並驗證了這一觀點。在實際應用中,目前取得最好預測效果的依然是諸如 XGBoost 等傳統機器學習模型。此外,對於嚴選的大部分落地場景,算法預測的可解釋性幾乎和準確性同等重要,因此,具體預測模型一定是結合業務需求選擇最適合的,不能盲目追求 “高大上” 的算法。

3.4 算法服務

由於 Python 對各類算法模型的友好性以及數據處理的易用性,因此我們基於 Tornado 框架開發了預測算法的服務框架。爲各種不同的算法模型定義了統一的輸入輸出接口標準,不同的算法模型可以以插件的形式靈活接入服務,大大提升了開發效率,保障算法模型的敏捷迭代上線。

與此同時,定義了預測任務的標準範式,支持了預測任務的自動拆解,進而實現了大型預測任務的分佈式計算。例如當執行一次全量商品的銷量預測任務時,會自動按 SKU 將預測拆分成多個子任務,分發到多個服務實例上並行的執行預測計算,大大提升了預測服務性能。

算法服務框架

此外,通過一系列的工程優化,這套服務框架還支持了算法參數的配置化與熱更新、算法熱插拔、橫向可拓展等特性,並且以 Tornado 爲基礎,抽象封裝出了一套更適合線上算法服務的 Python 服務 SDK——Typhoon,並開源發佈。

Typhoon SDK

4 後記

在大部分用到時序預測的應用場景中,提升預測的準確率似乎是解決業務痛點的最佳手段。例如在供應鏈補貨場景中,如果能把未來的銷量預測的十分準確,那麼所有滯銷、缺貨的問題一下子都能迎刃而解。然而,預測的準確率並不能無限制的提升,幾乎所有的預測場景,都會在幾輪迭代後快速的到達瓶頸。本質上來看,存在兩方面原因:

綜上所述,對於各種時序預測場景來說,需要理性看待預測算法的價值和邊界,不能沉迷於算法的迭代優化乃至準確率的提升,應當更多從全盤業務的角度,用更全面的手段來解決實際問題。

以採購補貨爲例,基於概率分佈預測,在相同準確率下對成本的 TRADE OFF

本文由作者授權嚴選技術團隊發佈

網易有數 網易有數是網易數帆旗下大數據技術與服務品牌,以 “數據價值” 爲導向,聚焦於企業 “看數”、“管數”、“用數”等業務場景,提供全鏈路大數據技術及產品服務,致力於盤活企業數據生產力,加速實現數字化轉型。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/Dqlq069Qq-XwxAembyyggw