供应链算法整理(一)--- 销量预估
在供应链管理领域有较多的预估场景,例如送达时长预估、销量预估、用电量预估。特别的在智能供应链领域,销量和库存的管理的智能化也依赖销量预估,因此在本文我们整理了 销量预估的算法详细的技术方案。
时间序列预测在最近两年内发生了巨大的变化,尤其是在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博客