供应链算法整理(一)--- 销量预估

        在供应链管理领域有较多的预估场景,例如送达时长预估、销量预估、用电量预估。特别的在智能供应链领域,销量和库存的管理的智能化也依赖销量预估,因此在本文我们整理了 销量预估的算法详细的技术方案。

        时间序列预测在最近两年内发生了巨大的变化,尤其是在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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第4篇:服务层抽象与复用逻辑

在业务系统复杂度指数级增长的今天&#xff0c;服务层&#xff08;Service Layer&#xff09;的合理设计直接影响着系统的可维护性和扩展性。本文将深入剖析 Egg.js 框架中的服务层架构设计&#xff0c;从基础实现到高级封装&#xff0c;全方位讲解企业级应用的开发实践。 一、…

Java学习手册:Spring 数据访问

一、Spring JDBC JdbcTemplate &#xff1a;Spring JDBC 提供了 JdbcTemplate 类&#xff0c;它简化了数据库操作&#xff0c;提供了丰富的 API 来执行数据库访问任务。JdbcTemplate 可以自动处理数据库连接的获取、释放&#xff0c;SQL 语句的执行&#xff0c;结果集的处理等…

递归、搜索和回溯算法《递归》

在之前的优选算法当中我们已经学习了一些基本的算法&#xff0c;那么接下来我们就要来学习算法当中的一大重要章节——递归、搜索和回溯算法&#xff0c;其实也就是大家常常听到的dfs、bfs&#xff1b;其实本质就是递归&#xff0c;在学习搜索、回溯等算法的过程当中我们会先来…

Java进阶--设计模式

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编制真正工程化&#xff0c;设计模式是软件工程的基石&#xff0c;如同大厦的一块块砖石一样&#xff0…

如何禁止AutoCAD这类软件联网

推荐二、三方法&#xff0c;对其他软件影响最小 一、修改Hosts文件 Hosts文件是一个存储域名与IP地址映射关系的文本文件&#xff0c;通过修改Hosts文件可以将AutoCAD的域名指向本地回环地址&#xff08;127.0.0.1&#xff09;&#xff0c;从而实现禁止联网的目的。具体步骤如…

深度学习框架搭建(Vscode/Anaconda/CUDA/Pytroch)

目录 ​​​​​​一 Vscode安装 二、Anaconda安装 三、更新显卡驱动 四、安装CUDA 五、安装Pytorch 六、Vscode配置 七、出现的问题汇总 ​​​​​​一 Vscode安装 在 Windows 上安装 访问 VS Code 官网 https://code.visualstudio.com/&#xff0c;点击 "Downl…

结构模式识别理论与方法

我们在前文《模式识别的基本概念与理论体系》中就已经提及“模式分类”。 具体内容看我的CSDN文章&#xff1a;模式识别的基本概念与理论体系-CSDN博客 模式的识别方法主要有统计模式识别方法和结构模式识别方法两大类。统计模式识别方法提出得较早&#xff0c;理论也较成熟…

12.多边形的三角剖分 (Triangulation) : Fisk‘s proof

目录 1.Fisks proof Trangulation Coloring Domination Pigeon-Hold Principle Generation 2.Orthogonal Polygons (正交多边形) Necessity of floor(n4) Sufficiency by convex Quadrilateralization Generalization 1.Fisks proof Trangulation 引入内对角线&…

面经-计算机网络——OSI七层模型与TCP/IP四层模型的对比详解

OSI七层模型与TCP/IP四层模型的对比详解 一、图示解析&#xff1a;分层封装结构 你提供的图清晰展示了网络通信中从应用层到物理层的封装过程&#xff0c;每一层都会对上层的数据加上自己的头部信息&#xff08;Header&#xff09;&#xff1a; 应用层&#xff1a; 应用…

React Native本地存储方案总结

1. AsyncStorage&#xff08;键值对存储&#xff09; 适用场景&#xff1a;简单键值对存储&#xff08;如用户配置、Token、缓存数据&#xff09;。特点&#xff1a;异步、轻量、API 简单&#xff0c;但性能一般&#xff0c;不推荐存储大量数据。安装&#xff1a;npm install …

Arduino程序函数详解与实际案例

一、Arduino程序的核心架构与函数解析 Arduino程序的核心由两个函数构成:setup() 和 loop()。这两个函数是所有Arduino代码的骨架,它们的合理使用决定了程序的结构和功能。 1.1 setup() 函数:初始化阶段 setup() 函数在程序启动时仅执行一次,用于完成初始化配置,例如设置…

【Unity】使用Socket建立客户端和服务端并进行通信的例子

Socket服务端: using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; public class SocketServer { public static Socket listenSocket;//监听Socket public static List<Socket>…

Qt connect第五个参数

在 Qt 中&#xff0c;QObject::connect 函数的第五个参数用于指定 连接类型&#xff08;Qt::ConnectionType&#xff09;&#xff0c;它决定了信号与槽之间的通信方式。以下是各枚举值的详解及使用场景&#xff1a; 1. Qt::AutoConnection&#xff08;默认值&#xff09; 行为…

【2025域适应科研日报】

本笔记主要为了记录自己的科研日报&#xff0c;前段时间刚开始想写的初衷也是为了自己的思考不跑偏&#xff0c;但是有几天又没有坚持下来&#xff0c;看到一位学长的文章&#xff0c;发现这种形式还是很有必要的&#xff0c;所以自己也打算坚持记录下来&#xff0c;由于还正在…

XrayR启动失败

公司要用服务器之间进行数据加密&#xff0c;这里用的XrayR 我使用的Centos 7。 我这里使用一键脚本安装后&#xff0c;/etc/XrayR目录下没有配置文件。 解决方案 XrayR安装时&#xff0c;系统没有unzip工具&#xff0c;也是会安装失败的&#xff0c;因为Centos7已经停止维…

鸿蒙文件上传-从前端到后端详解,对比jq请求和鸿蒙arkts请求区别,对比new FormData()和鸿蒙arktsrequest.uploadFile

需要权限&#xff1a;ohos.permission.INTERNET 1.nodejs自定义书写上传后端接口 传输过来的数据放在files?.image下 router.post(/upload,(req, res) > {var form new multiparty.Form();form.uploadDirpublic/images/uploads; //上传图片保存的地址(目录必须存在)fo…

编写教育网站后端页面笔记

callbacktitle.html 对应表: 对应的功能: 控制器层数据: 页面没有写内容 chapter.html 对应表: questionbank ,intofloortime,questionBank,title,didtitles,option,answer,analyse 对应的功能:问题反馈页面 控制器层数据(控制器类): ChapterQuestionbankTitle c…

日常开发小Tips:后端返回带颜色的字段给前端

一般来说&#xff0c;展示给用户的字体格式&#xff0c;都是由前端控制&#xff0c;展现给用户&#xff1b; 但是当要表示某些字段的数据为异常数据&#xff0c;或者将一些关键信息以不同颜色的形式呈现给用户时&#xff0c;而前端又不好判断&#xff0c;那么就可以由后端来控…

用spring-boot-maven-plugin打包成单个jar有哪些缺点优化方案

Spring Boot 的 Fat JAR&#xff08;通过 spring-boot-maven-plugin 打包&#xff09;虽然简化了部署&#xff0c;但也存在一些潜在缺点&#xff0c;需根据场景权衡&#xff1a; 1. 启动速度较慢 原因&#xff1a; Fat JAR 需要在启动时解压并加载所有依赖的 JAR 文件到类路径…

Flowable7.x学习笔记(十五)动态指定用户分配参数启动工作流程

前言 得益于之前我们的基础工程准备&#xff0c;我们终于可以正式启动工作流程了&#xff0c;在启动之前我们需要分配一下每个用户任务的用户信息&#xff0c;其中有三个选择&#xff1a;【办理人】/【候选组】/【候选用户】&#xff0c;我们需要将系统中的用户ID填入作为固定参…