? ? ? ? 在供應鏈管理領域有較多的預估場景,例如送達時長預估、銷量預估、用電量預估。特別的在智能供應鏈領域,銷量和庫存的管理的智能化也依賴銷量預估,因此在本文我們整理了 銷量預估的算法詳細的技術方案。
????????時間序列預測在最近兩年內發生了巨大的變化,尤其是在kaiming的MAE出現以后,現在時間序列的模型也可以用類似MAE的方法進行無監督的預訓練。Makridakis M-Competitions系列(分別稱為M4和M5)分別在2018年和2020年舉辦(M6也在今年舉辦了)。2018年M4的結果表明,純粹的“ ML”方法在很大程度上勝過傳統的統計方法,這在當時是出乎意料的。在兩年后的M5[1]中,最的高分是僅具有“ ML”方法。并且所有前50名基本上都是基于ML的(大部分是樹型模型)。這場比賽看到了LightGBM(用于時間序列預測)以及Amazon's Deepar [2]和N-Beats [3]的首次亮相。N-Beats模型于2020年發布,并且優于M4比賽的獲勝者3%!
? ? ? ??
一、背景
1.1 銷量預估相關比賽
- ?1 Corporación Favorita Grocery Sales Forecasting
- ?2 天池新人實戰賽o2o優惠券使用預測
-
?3 [競賽] CCF2018-Top2-供應鏈預測
-
?4 [競賽] CCF BDCI 2019乘用車細分市場銷量預測
-
?5 JDATA如期而至-用戶購買時間預測
- ?6 m5 foreasting
- ?7 其他kaggle比賽
1.2 銷量預估相關論文
????????GitHub - hushuguo/awesome-time-series-papers: This repository offers a collection of recent time series research papers, including forecasting, anomaly detection and so on , with links to code and resources.
二、銷量預估算法的挑戰
2.1 技術挑戰 & 應對方案
技術挑戰 | 詳細???????? | 應對方案 |
零膨脹 | 同時分類商品銷量為0的概率,和回歸商品的銷量 | |
偏分布 | 長尾數據剔除,對銷量取log。減少數據右偏,把數據轉化為類似正態分布 | |
新商品 | 模型里保留新商品信息,loss里做mask | |
商品替代 | 多種算法預分組,引入商品類目、商品相似性 | |
其他業務影響 | 節假日 | 引入出行節假日數據,品類和單品聯合學習 |
營銷活動 | 營銷活動異構圖,提取營銷活動信息 | |
惡劣天氣 | 小時級天氣,惡劣天氣單獨訓練 | |
季節變化 |
2.1.1 零膨脹
詳細:零膨脹是人們在社會科學、自然中的計數資料的實際研究中,觀察事件發生數中含有大量的零值。
應對方案: 同時分類商品銷量為0的概率,和回歸商品的銷量
2.2.1 右偏分布
詳細: 偏態分布是與“正態分布”相對,分布曲線左右不對稱的數據次數分布,是連續隨機變量概率分布的一種。?
應對方案: 長尾數據剔除,對銷量取log
2.2.3 新商品
詳細:有大量新商品上架,或者部分商品因為不在架導致商品銷量為0
應對方案: 圖模型里保留商品新老品信息。
2.2.4 商品替代性
詳細: 部分商品有同款不同規格,另外一些商品相近。? ??
應對方案:?
2.2.5?其他業務影響
節假日
詳細:? ? ?
應對方案:?
營銷活動
詳細:? ? ?
應對方案:?
惡劣天氣
詳細:? ? ?
應對方案:?
季節變化
三、銷量預估算法的技術方案
3.1 時序模型
? ? ? ? Arima模型:
示例代碼:
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.stattools import adfuller
from sklearn.metrics import mean_absolute_error# 1. 加載數據
data = pd.read_csv('sales_data.csv', parse_dates=['date'], index_col='date')# 2. 檢查平穩性
result = adfuller(data['sales'])
print(f'ADF p-value: {result[1]:.3f}') ?# p<0.05則平穩# 3. 差分(若未平穩)
data['sales_diff'] = data['sales'].diff().dropna()# 4. 確定ARIMA參數
plot_acf(data['sales_diff'].dropna(), lags=20) ?# 觀察q值
plot_pacf(data['sales_diff'].dropna(), lags=20) # 觀察p值
plt.show()# 5. 訓練模型
model = ARIMA(data['sales'], order=(2, 1, 2)) ?# 根據ACF/PACF調整參數
results = model.fit()
print(results.summary())# 6. 預測未來7天
forecast = results.get_forecast(steps=7)
forecast_mean = forecast.predicted_mean
forecast_ci = forecast.conf_int()# 7. 可視化
data['sales'].plot(figsize=(12, 5), label='Observed')
forecast_mean.plot(label='Forecast', color='red')
plt.fill_between(forecast_ci.index, forecast_ci.iloc[:, 0], forecast_ci.iloc[:, 1], color='pink', alpha=0.3)
plt.title('ARIMA Sales Forecast')
plt.legend()
plt.show()
3.2 機器學習模型
3.2.1 特征
3.2.2 模型
樹模型:
????????Light GBM、XGB
?
深度序列模型:
????????TFT(google https://arxiv.org/pdf/1912.09363v1)
? ? ? ? DeepAR (Amazon)
3.3 新品長尾模型
3.4 路由模型
時間序列模型-Temporal Fusion Transformer - tinstone - 博客園
揭秘盒馬銷量預測核心算法的技術演進_數據_業務_銷售
?盒馬供應鏈算法實戰
阿里智慧供應鏈實踐:從“數字孿生”到“智能決策”
預測:方法與實踐(第三版)
Forecasting: Principles and Practice
智慧供應鏈的學習筆記(庫存管理、配補貨、倉間調撥、控制塔等)-CSDN博客
時間序列算法應用案例、工具庫學習筆記-CSDN博客
時序論文36|如何在充分利用時間戳信息?
A comprehensive survey of deep learning for time series forecasting: architectural diversity and open challenges | Artificial Intelligence Review
5個時間序列預測的深度學習模型對比總結:從模擬統計模型到可以預訓練的無監督模型(附代碼)
活動、節假日、促銷等營銷方式的因果效應評估——特征工程篇(一)_corporación favorita grocery sales forecasting論文-CSDN博客
5個時間序列預測的深度學習模型對比總結:從模擬統計模型到可以預訓練的無監督模型
時間序列預測 —— DeepAR 模型-CSDN博客
使用 Temporal Fusion Transformer 進行時間序列預測
時間序列算法應用案例、工具庫學習筆記-CSDN博客