CCF-BDCI大数据与计算智能大赛TOP4-京东生鲜

2023 CCF 大数据与计算智能大赛《线上线下全场景生鲜超市库存履约一体化决策》top4南山论剑

  • 摘要
  • 1 数据预处理
    • 1.1 数据整合
    • 1.2 数据划分
  • 2 特征工程
    • 2.1 静态特征
    • 2.2 动态特征
  • 3 方案设计
    • 3.1 数据构造
    • 3.2 模型训练
    • 3.3 模型融合
    • 3.4库存分配
    • 3.5 方案对比

链接: CCFBDCI-线上线下全场景生鲜超市库存履约一体化决策

摘要

在中国拥有万亿市场规模的生鲜商品,已成为全场景多业态零售商的引流明星。生鲜商品货架期短、易损耗、价格变化频繁,同时多业态销售又增加了新的不确定性。
全场景多业态生鲜超市订单有线上和线下两个来源,门店备货也采用前场(超市门店)+后场(门店仓库)的布局。门店日常经营中,每天经常面临两个重要决策:1)总备货量:根据商品销售历史和最新信息,预估商品未来销量,决定每日备货总量。2)前后场库存分配:根据线上线下订单分布来决策商品库存在前后场的分配。前后场库存分配不好会增加履约成本,降低履约效率。
该任务的难点主要体现在两个方面。1)多目标时序预测:有12家门店,各门店有1000种商品,结合起来就需要预测12000个目标。2)多步长时序预测:要预测8月31号后未来两周内每日的线上线下备货数量。
多目标方面,对于12000个目标将每个目标细分为一个具体的样本,基于历史数据构造特征,预测第i天的线上线下销量。多步长方面,分别将后14天的线上线下销量作为标签进行回归预测,尝试了滑动窗口、14个单步长预测、多步长预测等方案。为了保证训练数据的质量,需要按时间截取历史数据并进行缺失值填充。充分利用官方提供的5类数据集,结合实际业务提取商品类别、销售状况、售价、折扣和天气状况的组合特征。分别尝试xgb、lgbm、catboost等机器学习模型,lstm、多头注意力机制、transformer等深度学习模型。并按照不同的数据构造方法,不同的数据划分方法,构造数据集训练模型。结合不同的特征组合、模型类型和训练方案,尽可能实现模型融合的差异化。
关键词
电商零售、多目标时序预测、多步长时序预测

1 数据预处理

1.1 数据整合

整合商品类别、销售状况、售价、折扣和天气状况5类数据集。因为预测指标是销量,所以我们需要将销售状况作为主表,以门店id,商品id作为主键,拼接其他4张表。
1.主表的处理:因为需要将每个目标当作一个具体的样本,针对销售状况表需要以门店id商品id为行,时间为列将其展开,方便在时间维度上截取每个样本的销量数据。
2.商品类别和天气状况表:商品类别根据商品id,天气状况截取一段时间数据根据门店id,拼接在主表后面。
3.售价和折扣表:和销售状况表类似,以门店id商品id为行,时间为列展开,根据预测日期的时间节点动态的截取时间窗口内的数据拼接在主表后面。

1.2 数据划分

赛题需要预测9/1-9/14号的数据,可以将时间节点8/18后14天的数据作为训练集的标签,时间节点依次向前滑动一周,每滑动一次就会有12000个样本,滑动10次训练集的样本量就有120000个。预测线下线上销量,需要根据下单渠道将数据集分为线上线下单独预测。

在这里插入图片描述

图1:各月份销量数据商品种类
时间越早销量数据信息越少,为了尽可能的减少缺失数据,我们根据数据的缺失情况,截取了23/1/1到23/8/31的数据。

在这里插入图片描述

图2:数据预处理流程图

2 特征工程

2.1 静态特征

1.商品各级类别对商品销量,商品价格,商品折扣的平均值,最大最小值进行统计。
2.促销编号对商品销量,商品价格,商品折扣的平均值,最大最小值进行统计。
3.促销类型编号对商品销量,商品价格,商品折扣的平均值,最大最小值进行统计。
在这里插入图片描述

图3:静态特征提取

2.2 动态特征

1.截取预测时间段的天气类型、气温最大最小值、商品价格和商品销售和剩余库存状况数据。
2.截取预测时间段的天气类型、促销编号、商品类别拼接后的数据。
3.截取预测时间段的商品促销编号、促销类型编号、促销折扣率、促销条件阈值等折扣信息。
4.统计销售状况、售价、折扣在标签时间节点前的3、7、14、30、60、140天数据的平均值,最大最小值。
5.统计星期i的销售状况、售价、折扣在标签时间节点前的3、7、14、30、60、140天数据的平均值,最大最小值。
6.统计售价折扣、售价折扣*销量在标签时间节点前的3、7、14、30、60、140天数据的平均值,最大最小值。
在这里插入图片描述

图4:动态特征提取

3 方案设计

3.1 数据构造

1.构造门店商品数据集。以具体的门店商品构造样本,门店id商品id为行 ,每天的销量为列,根据时间节点滑窗构造更多的数据。

在这里插入图片描述

图5:数据构造
2.直接拼接商品销售表,以商品门店在每一天的数据构造样本,门店id商品id日期为行 当天销量为列,构造单条数据的数据集。

3.2 模型训练

按照构造的两种不同数据集,提取静态特征、动态特征,分成线上线下两个标签进行优化,模型训练可以是基于全部数据也可以基于门店或商品类别细分的数据,分别使用xgb、lgb、catboost进行回归预测。
在这里插入图片描述

图6:模型训练

3.3 模型融合

在这里插入图片描述

图7:模型融合
基于特征工程构造3类差异性大的特征组合,分别以单个门店商品作为样本和以门店商品每天的数据作为样本构造数据集,模型使用xgb、lgb、catboost三类机器学习模型,分别按门店划分,商品类别划分和所有数据训练模型。
在特征、数据构造、模型选择和模型训练这四个方面进行差异性构造,以便对三类预测结果进行加权融合。

3.4库存分配

在这里插入图片描述

图8:库存分配
1.销售状况表中会缺失100多个门店商品,导致缺失的商品无法通过上述方案预测。在其他4张表中并不会缺失这100多个门店商品,所以需要根据其他4张表构建特征,在销售状况表中抽取销量数据作为标签重新训练一个模型,用来预测.销售状况表中缺失100多个门店商品。
2.赛题在后场分配上做了限制:1000 种目标商品中当日该门店后场最多备货 200 种商品。需要对每个商品的后场预测销量进行降序排序取top200,其余的填充为0。
3.所有商品中,有些商品是按个数交易的,如:馒头、鸡腿、螃蟹,需要精确到个位数。有些商品是按斤两交易的,如:牛肉、西瓜、西红柿,需要精确到小数点后两位。要根据历史数据找出需要保留到小数点后两位的商品,再对这些商品的预测数据进行处理。

3.5 方案对比

方案 A榜成绩
数据拼接+lgb 173W
静态特征+lgb 195W
静态动态特征+lgb 214W
静态动态特征+xgb 221W
分门店训练xgb 228W
分商品类型训练xgb 226W
三种训练方案+xgb融合 236W
构造数据+三种训练方案+xgb融合 252W
特征组+构造数据+三种训练方案+xgb/lgb/cat融合 261W

在这里插入图片描述

表1:方案结果对比

致谢
感谢datafountain、CCF能够为我们提供这样一个优秀的平台,让我们学习磨练技术。感谢胡峰老师和王进老师的悉心指导。感谢本次大赛的所有工作人员。

参考
[1] CHEN,T.&C.Guestrin.Xgboost:A scalable tree boosting system[C].In Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining,2016,15(6):785-794.
[2] Ke,Meng,Finley et al.Lightgbm:a highly efficient gradient boosting decision tree[C].31ST Annual Conference on Neural information Processing Systems,2017:3149-3157.
[3] 微软亚洲研究院《开源:LightGBM:三天内收获GitHub1000+星》[EB/OL].https://www.sohu.com/a/123480446_133098.
[4] Kaggle,M5ForecastingAccuracy,top1.https://www.kaggle.com/
competitions/m5-forecasting-accuracy/discussion/163684.
[5] Kaggle,Corporación Favorita Grocery Sales Forecasting,top1.
https://www.kaggle.com/c/favorita-grocery-sales-forecasting/
discussion/47582.

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

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

相关文章

解决:如何在opencv中得到与matlab立体标定一样的矫正图?(python版opencv)

目的:采用一样的标定参数,matlab中和opencv中的立体矫正图像是一样的吗?不一样的话怎么让它们一样? 结论:不一样。后文为解决方案。 原因:注意matlab的标定结果在matlab中的用法和在opencv中的用法不一样&a…

STM32 从0开始系统学习2

目录 C语言基础 位操作 extern 修饰符 typedef 封装复杂的类型 寄存器基础知识 STM32F103架构简单描述(建议先不看) 存储器映射 寄存器映射 寄存器地址计算 下面简单的聊一聊一些需要的前置知识基础。 C语言基础 位操作 这个在单片机里算基操…

Windows通过netsh控制安全中心防火墙和网络保护策略

Windows通过netsh控制安全中心防火墙和网络保护策略 1. 工具简介 【1】. Windows安全中心 【2】. netsh工具 netsh(Network Shell) 是一个Windows系统本身提供的功能强大的网络配置命令行工具。 2. 开启/关闭防火墙策略 在设置端口(禁用/启用)前&am…

中国人寿财险青岛市分公司普惠金融助力民生保障

普惠金融是金融业的重要组成部分,也是服务实体经济、保障民生的重要途径。国寿财险青岛市分公司始终坚持以人民为中心的发展思想,大力发展普惠金融业务,不断提升金融服务的覆盖面和便捷性。 在服务“三农”方面,国寿财险青岛市分…

【宝塔面板】宝塔面板使用docker部署chatGPT-Next-web

1111111 chatGPT-Next-web大家并不陌生,就是下面的这个界面,下面请大家跟随小编部署下这个web 我们先感谢下源码的博主: https://github.com/Dooy/chatgpt-web-midjourney-proxy 本教程部署也很简单,就2步 1、创建容器编排模版 …

云原生后端概述

目录 云原生后端概述 云原生后端的核心特点 云原生后端的架构组件 云原生后端的常见技术栈 云原生后端与传统后端架构的对比 结论 云原生后端概述 随着企业对数字化转型需求的不断增加,云原生后端逐渐成为构建现代应用程序的核心方法。云原生(Clo…

股票基金大通证券申购大宗交易代理-VUE源码开源版

前后端vue开源 服务端java开源 这套是开源的 1.环境 环境 php7.4 sql 5.7 Nginx1.2 tomcat-8 redis 放行1-65535 2.创建5个网站。xxx.com替换你的域名 ftp.xxx.com api.xxx.com agent.xxx.com admin.xxx.com wap.xxx.com api设置反向代理 代理名称 api 目标URL http://127.…

Spring boot快速集成开发

目录 1. 创建 Spring Boot 项目 2. 项目结构 3. 编写代码 3.1 创建实体类 3.2 创建数据访问层 3.3 创建服务层 3.4 创建控制器 4. 配置数据库 5. 启动应用 6. 运行项目 7. 测试 API 8. H2 控制台 在 Spring Boot 中快速集成开发的步骤通常包括创建项目、添加依赖、编写…

Qt 学习第 天:线程与多线程

1024程序员快乐,如果这博客让你学习到了知识,请给我一个免费的赞❤️ 一、创建界面文件 LCDnumber 二、创建mythread类,继承QObject 三、在MyThread.h文件做修改,并且加上函数声明 引入头文件,改变继承 #ifndef MY…

迁移学习|ResNet18

一、导入库 二、设置随机种子 三、数据增强和数据加载 四、加载预训练模型 五、定义损失函数和优化器 六、学习率调度器 七、训练模型 八、可视化训练过程 九、总结 1. 常见优化器概述 1.1 随机梯度下降(SGD: Stochastic Gradient Descent) 简介&…

C++图形库

建议大家多逛逛GitHub,特别是DevWeekly,它每周都会筛选一些优秀的开源项目、开源工具、技术文章等,可以多去看看。接下来不废话了,列举一些我认为较好的C图形库,希望对大家学习有帮助。 NanoVG NanoVG是一个2D图形库…

使用yield压平嵌套字典有多简单?

我们经常遇到各种字典套字典的数据,例如: nest_dict {a: 1,b: {c: 2,d: 3,e: {f: 4}},g: {h: 5},i: 6,j: {k: {l: {m: 8}}} } 有没有什么简单的办法,把它压扁,变成: {a: 1,b_c: 2,b_d: 3,b_e_f: 4,g_h: 5,i: 6,j_k_l_…

【Linux系统内核探索】进程调度

文章目录 进程调度什么是进程调度?进程调度算法task_struct的链式结构 总结 进程调度 什么是进程调度? 进程调度是操作系统内核的核心功能之一,负责在多个进程之间分配CPU时间,使得系统能够同时运行多个进程。因为计算机的CPU资…

MongoDB的基本操作

🌷数据库准备 🎈Mongoshell 1.在指定目录下创建mongodb文件夹、其子文件log和data以及mongodb.log cd /home/ubuntu mkdir -p mongodb/data mkdir -p mongodb/log touch mongodb/log/mongodb.log 执行mongodb命令启动mongdb服务 mongod --dbpath /h…

SwiftUI:单个App支持设置多语言

SwiftUI 全新多语言方案 简化本地化的字符串- WWDC21 - 视频 本地化您的SwiftUI app - WWDC21 - 视频 构建全球化App:本地化的示例- WWDC22 - 视频 构建支持多语言的App - WWDC24 - 视频 单个App支持设置多语言 工程 Info.plist里添加 键值UIPrefersShowingLangua…

DDD重构-实体与限界上下文重构

DDD重构-实体与限界上下文重构 概述 DDD 方法需要不同类型的类元素,例如实体或值对象,并且几乎所有这些类元素都可以看作是常规的 Java 类。它们的总体结构是 Name: 类的唯一名称 Properties:属性 Methods: 控制变量的变化和添加行为 一…

大数据Azkaban(二):Azkaban简单介绍

文章目录 Azkaban简单介绍 一、Azkaban特点 二、Azkaban组成结构 三、Azkaban部署模式 1、solo-server ode(独立服务器模式) 2、two server mode(双服务器模式) 3、distributed multiple-executor mode(分布式多…

Threejs 实现3D 地图(01)创建基本场景

"d3": "^7.9.0", "three": "^0.169.0", "vue": "^3.5.10" <script setup> import { onMounted,ref } from vue import * as THREE from three import * as d3 from "d3"; //莫开托坐标 矫正地图…

Vertx实现一个通用的MqttServer

mqtt协议介绍 简介 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布/订阅范式的“轻量级”消息协议&#xff0c;由 IBM 发布。 IoT 设备要运作&#xff0c;就必须连接到互联网&#xff0c;设备才…

数据分析-Apache_hive

任务一 创建库及外部表 在 comm 数 据 库 下 创 建 一 个 名 为 dws_behavior_log的外部表&#xff0c;如果表已存在&#xff0c;则先删除&#xff1b;分 区字段为dt&#xff0c;即根据日期进行分区&#xff1b;另外&#xff0c;要求指定表的存 储路径为HDFS的/behavior/dws/d…