Time-Series
2000 種不同產品的時間序列預測策略?
首先,我意識到我的問題非常廣泛,因此可能很難回答這個問題。
您對如何解決需要對 2000 多種不同產品進行預測/預測的“問題”有任何建議嗎?換句話說,每種產品都需要不同的預測/預測。我有 2 年的周級歷史數據(即每種產品每週的需求)。
我需要在很短的時間內完成這項工作:我有大約一周的時間來完成這項工作,因此我正在尋找可以快速製作相對較好的預測模型的方法。為每個產品創建模型並逐個仔細檢查其性能太耗時了。
我想根據方差對產品進行細分,這樣我就可以對方差低的產品使用簡單的模型。雖然這可能並不理想,但這將是縮小我需要創建的模型數量的一種快速方法。
如果您對解決這個問題有任何實用的建議,我們將不勝感激。
跟進@StephanKolassa 的回答:
- 我同意 Stephan 的觀點,即 R 中預測包中的 ETS() 可能是您最好和最快的選擇。如果 ETS 沒有給出好的結果,您可能還想使用Facebook 的 Prophet 包(Auto.arima 很容易使用,但是根據我的經驗,兩年的每週數據對於 ARIMA 模型來說是不夠的數據)。就我個人而言,我發現 Prophet 在您有促銷和節日活動數據可用時更易於使用,否則 ETS() 可能會更好。您真正的挑戰更多是如何在大量時間序列上有效地迭代您的預測算法的編碼挑戰。您可以查看此響應以獲取有關如何自動生成預測的更多詳細信息。
- 在需求預測中,經常執行某種形式的分層預測,即您有 2000 種產品,您需要對每個單獨的產品進行單獨的預測,但產品之間的相似之處可能有助於預測。您希望找到某種方法將產品沿產品層次結構組合在一起,然後使用層次結構預測來提高準確性。由於您正在尋找單個產品級別的預測,因此請嘗試使用自上而下的分層方法。
- 有點牽強,但我想把它說出來:亞馬遜和優步使用神經網絡來解決這類問題,他們沒有對每個產品/時間序列進行單獨的預測,而是使用一個巨大的循環神經網絡來預測批量的所有時間序列。請注意,他們最終仍然對每種產品進行單獨的預測(在 Uber 的情況下,它是每個城市的流量/需求,而不是產品),他們只是使用一個大型模型(LSTM 深度學習模型)一次性完成所有工作。這個想法在精神上類似於分層預測,因為神經網絡從不同產品歷史之間的相似性中學習,從而得出更好的預測。Uber 團隊已經提供了他們的一些代碼(通過 M4 競賽 Github 存儲庫),但它是 C++ 代碼(不完全是統計人群最喜歡的語言)。Amazon 的方法不是開源的,您必須使用他們的付費Amazon Forecast 服務來進行預測。
關於您的第二條評論:您需要區分預測銷售和預測需求。需求是不受限制的,如果突然一件商品很受歡迎,而您的客戶想要 200 件,那麼您手頭只有 50 件並不重要,您的需求仍然是 200 件。
在實踐中,直接觀察需求是非常困難的,所以我們用銷售作為需求的代表。這有一個問題,因為它沒有考慮客戶想要購買產品但它不可用的情況。為了解決這個問題,連同歷史銷售數據,有關庫存水平和缺貨的信息要么直接包含在模型中,要么用於在生成預測模型之前對時間序列進行預處理。
通常,不受約束的預測首先由預測引擎生成,然後傳遞到計劃系統,然後添加您提到的約束(即需求是 500 個單位,但只有 300 個單位可用)以及其他約束(安全庫存、演示庫存、預算限制、促銷計劃或新產品推出等…)——但這屬於計劃和庫存管理的一般範疇,而不是預測本身。