阿里云天池供应链大赛(一)
- 使用历史平均来预测未来的需求
- 使用测试集真实数据进行过拟合的结果
一、问题描述
名词定义
库存水位
在仓库存数量,用来满足需求。
补货时长(交货时间,lead_time)
从下达补货指令到货物到仓可用的时长。
本赛题初赛时的补货时长为14天,即假设1号A货物的库存水位为0,此时下达A货物补货指令,补货量为10,则1号至14号A货物的库存水位均为0,15号时A货物的库存水位为10。
补货在途
下达补货指令后还未到仓的货物量总和。
上例中1号至14号A货物的补货在途为10,其他时段为0。
若在8号再次下达补货量为10的补货指令,那么1号至7号的补货在途为10,8号至14号的补货在途为20,15号至21号的补货在途为10,其他时段为0。
补货策略
本赛题场景使用周期性盘点的补货策略,每周一为补货决策日,决定货物的补货量。
历史需求
货物历史需求量的时间序列,值得注意的是,因为云产品有购买与释放的概念,所以本赛题场景下需求量会为负数,即云产品被用户释放。
补货单元
货物的唯一标识。
赛题场景
基于给定过去一段时间的历史需求数据,同时结合当前的库存数据、补货时长、补货在途以及补货单元的相关信息(产品维度与地理纬度),参赛者需要自己提出方案,在补货决策日确定每一补货单元的补货量。最直接的方案,可通过历史需求数据,对未来的需求进行预测,结合当前库存水位以及补货在途的货物判断14天后的库存水位能否满足14天后的一系列需求(因为当日补货14天后才能到货),考虑对应的补货量,达到在保障一定服务水平的情况下,实现最低库存成本的效果;当然也可采用end to end的整体优化方案,实现该目标。库存量视角的变化过程如下图所示。
我们会给一个训练集,供参赛选手训练模型并验证模型效果使用。同时,初赛时我们会提供一个测试集,选手需要为按时间读取20210302-20210607的需求数据,并根据历史需求数据以及补货在途,决定补货量,并把决策结果CSV文件输出到指定位置。(由于赛题特殊与评价机制的问题,初赛时给选手透出了未来数据,选手在初赛时将其作为未知数据调整算法,不允许在决策时使用当前日之后的未来数据。)
由于库存控制是一个前后相关的决策过程,两次补货决策并不独立,因此我们会提供一段时间的数据,由选手在时间轴上进行多次补货决策,最后在较长的时间段内评价选手方案的好坏。在复赛时,选手需要提交一个docker镜像,镜像中需要包含用来进行库存管理所需的所有内容,如模型、脚本等,未来的需求数据以及到货时间将通过流评测的方式给出。镜像中的脚本需要能根据所得的需求量,根据历史需求数据以及先前所做的决策,决定补货量,并把决策结果CSV文件输出到指定位置;初赛时测试集文件将线下交给选手。
相关参考
https://web.mit.edu/2.810/www/files/readings/King_SafetyStock.pdf
https://abcsupplychain.com/safety-stock-formula-calculation/
数据描述
训练集包含如下信息:
虚拟资源使用量历史数据
demand_train.csv为虚拟资源使用量历史数据,包含7列。每列的含义如下:
字段 | 说明 |
---|---|
unit | 单元 |
ts | 日期 |
qty | 资源使用量 |
geography | 地理信息 |
geography_level | 地理聚合维度 |
product | 产品信息 |
product_level | 产品聚合维度 |
inventory_info.csv为虚拟资源库存数据,包含7列。每列的含义如下:
字段 | 说明 |
---|---|
unit | 单元 |
ts | 日期 |
qty | 库存量 |
geography | 地理信息 |
geography_level | 地理聚合维度 |
product | 产品信息 |
product_level | 产品聚合维度 |
geography_tuopu.csv为地理拓扑数据,包含3列。每列的含义如下:
字段 | 说明 |
---|---|
geography_level_1 | 地理层级1 |
geography_level_2 | 地理层级2 |
geography_level_3 | 地理层级3 |
product_tuopu.csv为产品层级信息,包含2列。每列的含义如下:
字段 | 说明 |
---|---|
product_level_1 | 产品层级1 |
product_level_2 | 产品层级2 |
unit_weight.csv为库存单元的库存信息,包含2列。每列的含义如下:
字段 | 说明 |
---|---|
unit | 单元 |
weight | 权重 |
复赛阶段,测试集的数据格式和初赛阶段相同,但是测试集的内容不会提供给参赛选手。选手需要在docker代码中从指定的数据集目录中读取测试集内容,进行特征工程和模型预测,最后输出的格式和初赛一致,输出后续一段时间内决策日需要补货的集合(如果有预训练权重则docker代码中需包含本地训练好的模型)。
提交格式
在初赛中,预测结果的提交格式为CSV压缩的ZIP文件。文件中的每一行表示在未来的时间段内每个决策日每个库存单元需要补充的量,具体包含:补货单元、日期和补货量(用逗号隔开),形式如下:
"unit1","20210308",12"unit1","20210315",11"unit1","20210322",9**注:在复赛中,参赛选手需
要提交docker镜像,具体的提交方式及规范请参见到时发布的容器镜像提交说明。**
评价指标
综合指标
另外
评测时按时间顺序更新上述变量,完毕后用上述公式计算指标。
#初赛评测程序伪代码如下
#intransit 是用来记录预计到达的资源的中间变量
init intransit[][] = 0
for i in I:for d in D:#初始库存值已给出qty_inventory[i,d] = qty_inventory[i,d - 1]#qty_replenish即为选手提交的补货决策if qty_replenish[i,d] > 0:#lead_time 为交货时间,在交货时间之后供应会到达intransit[i,d + lead_time] += qty_replenish[i,d]# 可用库存加上到达的库存qty_inventory[i,d] = max(qty_inventory[i,d] + intransit[i,d], 0)# 需求没有被满足的量,当天需求量和可用库存量进行比较stockout[i,d] = max(demand[i,d] - qty_inventory[i,d], 0)if demand[i,d] < 0:# 净需求为负时候,表示释放,可用库存会增加,释放的量和已使用的量取小qty_inventory[i,d] = max(qty_inventory[i,d] + min(abs(demand[i,d]),qty_using[i,d - 1]), 0)else:# 净需求为正的时候,可用库存进行扣减,>=0qty_inventory[i,d] = max(qty_inventory[i,d] - demand[i,d], 0)# 前一天的保有量+今天被满足的量qty_using[i,d] = max(qty_using[i,d - 1] + demand[i,d] - stockout[i,d], 0)
二、解题思路:
28w+训练数据
6w+测试数据
思路:
针对代码中的forecast_function进行修改,目前baseline用的是历史数据的平均值
目前的预处理采用的是通过unit的这一个值来对历史上的数据进行逐个分析(测试集2021.3.2之前)
qty:历史的当日资源使用量,同样作为重要的特征进行计算,这个可以考虑结合geography这个进行多时序之间的关联性去做预测;
geography_level:目前这个变量还没有做预处理,全部都是一个值
geography:这里目前看到的是每个unit对应的是同一个值,因为是地址所以脱敏了,但是同样官方给出了geo_topo的一个对应关系表,可以通过一定的与处理手段将此特征作为一个聚合的指标。
product_level2:表示的是商品的大类
product:表示是某个类型的商品目前也是脱敏状态,同样的也有product_topo对应关系表,需要构思如何去处理好这个特征;
聚合的方法:一阶平滑二阶平滑;
每个仓位的历史数据长度:
632个仓位信息:
地理信息地址81个
19个商品product
**举例18个Unit的历史数据趋势:**分别对应的是0-9和10-18这几个Unit,因为这个变量脱敏了我们考虑后期转为数值型方便计算存储。
- 目前的baseline思路:
在每次日期来到补货日的时候进行该Unit的历史数据搜索,并取历史数据的平均值,然后将平均值copy90份返回,在补货策略部分,将这90份中的前14份,也就是一个补货周期在途时间,加上安全库存作为补货判断阈值条件也就是未来14天可能需要的存货量。如果在途的加上目前的库存大于这个值就不用补货,小于就要补货。注意如果补货策略为肯定的,那么在途补货量需要更新一次。
- 目前需要解决的问题:
实际上这与传统的时间序列预测会略有不同,传统的可能相对容易,针对的是1个对象未来的某项指标进行预测;可能是未来的某一段时间(一周或者一个月)当然这个预测的周期越长难度越大。目前我们暂时如果按照baseline的补货策略,我们需要获得每个Unit在每个补货周期日的未来14天需求,像这样的Unit之前说了一共有632个,那么补货周期日光在测试集里面。
- 数据预处理的思路:(特征工程)
- 不同于baseline我们首先希望用上geography_level, product_level进行分层次预测。然后目前有81个地理位置,和632个仓位,如果用lstm的话初步的策略是进行labelencoder对这些标签进行编码,如果可行的话可以考虑one-hot-encode,这个时候qty是作为label的,目前进行了尝试不论是独热编码还是labelencoder都是学不到任何东西的。
- 当然LSTM我们首先还是考虑单变量的形式,目前测试某个仓位的结果如下:
- 如果采用ARIMA这种自相关的模型,那么我们考虑的因素就只是历史的qty
存在的问题:每次预测用了最新的真实观测值来更新模型,所以拟合的非常的好,这样的结果也很假,B榜肯定是不可行的,但是单变量-》多变量的转换还仍旧是个大问题。
值得参考的优胜方案:
- https://www.kaggle.com/ceshine/lgbm-starter 同样是单变量的问题
- 仔细阅读数据描述和概述。如果可能,可以尝试探索领域知识。
- 在阅读任何论文、讨论或Notebook之前,尝试自己创建一个基线。这有助于在将您的思想锁定在其他人所说的内容之前产生全新的想法。
- 建立可行的交叉验证策略并提交到排行榜。确保您的CV策略也适用于 LB,这一点很重要。
- 阅读,阅读和学习!充分探索与该主题相关的论文,在论坛和笔记本中寻找灵感。
- 开始在模型方面或功能方面调整基线。一次只调整一件事,所以你知道是什么导致模型改进/表现更差。
- 尽可能多地探索新方法,不要在行不通的事情上纠缠太久。
- 如果其他一切都让你失望,模型集成是最稳定的改进方式。
- 选择具有良好 CV 分数的提交。
特征选择删除不重要的特征,有助于减少数据中的噪声。在 Mechanism of Action 竞赛期间,论坛和讨论帖中的方法对我们设计的模型没有帮助。在这种情况下,不要害怕深入研究并阅读论文。由于我处理的案例多标签分类并不常见,因此我找不到任何简单的教程。我找到了一篇论文,旨在比较使用问题转换的多标签特征选择。
阅读研究论文似乎令人生畏,但能够浏览它们并从长页技术术语中掌握关键词是一项至关重要的技能。对于像我这样的初学者来说,试图理解你遇到的每一篇论文的每一个细节是不可能的。只有当我找到我需要和将使用的论文时,我才会尝试理解论文中的每一个单词和引用。
- 将模型调整为具有非线性拓扑结构或为表格数据构建类似 ResNet 的结构化网络不仅在 MoA 竞赛中获得了一些惊人的结果,而且在接下来的 Jane Street Market Prediction 中也获得了一些惊人的结果,我们在其中排名第16。
- 探索不同类型的自动编码器,例如去噪、变分和稀疏编码器,可以为您的数据带来令人惊讶的变化,而不仅仅是简单的特征工程和选择可以实现的。
- 模型融合。组合不同模型的结果可以为您的解决方案增加多样性,从而使其更加稳健和稳定。无论什么建模技巧奏效,合奏总是我在比赛中的“最后手段”。
- 始终关注新论文并探索论坛中提到的内容之外的内容。调整激活函数(尝试swish而不是 ReLU)和优化器(尝试AdaBelief而不是 Adam 等)之类的小东西可能只会从模型中挤出一些性能。
- 跳出框框思考!使用一维CNN对表格数据进行特征提取。或者使用DeepInsight,将表格数据转换为图像,利用 CNN 的优势。
不要沉迷于现在的工作,继续前进并花更多时间探索可以带来改进的新事物。
参加 Kaggle 比赛并获得奖牌并非易事,但通过正确的学习方法和工具,这个过程可以变得更容易。
- 检查讨论帖子和阅读公共笔记本非常有帮助。每天都有新想法出现,我通过论坛中提到的论文和笔记本中使用的库了解了一些最新且引人入胜的模型和工具。其中之一是TabNet,这是一种通过使用顺序注意将特征选择合并到模型中来对表格数据进行建模的新方法。这个模型让我在 MoA 比赛中获得银牌。
- 最后,拥有稳定而强大的管道对于在最终的私人排行榜中取得出色表现最为关键。浪费时间过度拟合以在公共排行榜中获得额外的 0.0001 是没有意义的。始终相信您当地的交叉验证分数,因为训练数据量大于公共排行榜的数据量。
只是按复制粘贴对学习或赢得比赛没有帮助。永远不要复制别人的工作,我可以从他们的想法中得到启发,甚至使用他们的建模方法,绝不提交其他人的工作作为我的解决方案。
在接触新事物时,我养成了查找所有我不理解的东西的习惯,直到我可以自信地向其他人解释这个主题。
合并到模型中来对表格数据进行建模的新方法。这个模型让我在 MoA 比赛中获得银牌。
- 最后,拥有稳定而强大的管道对于在最终的私人排行榜中取得出色表现最为关键。浪费时间过度拟合以在公共排行榜中获得额外的 0.0001 是没有意义的。始终相信您当地的交叉验证分数,因为训练数据量大于公共排行榜的数据量。
只是按复制粘贴对学习或赢得比赛没有帮助。永远不要复制别人的工作,我可以从他们的想法中得到启发,甚至使用他们的建模方法,绝不提交其他人的工作作为我的解决方案。
在接触新事物时,我养成了查找所有我不理解的东西的习惯,直到我可以自信地向其他人解释这个主题。
阿里云天池供应链大赛(一)相关推荐
- 阿里云天池大赛赛题解析――深度学习篇
作者:天池平台 出版社:电子工业出版社 品牌:电子工业出版社 出版时间:2021-09-01 阿里云天池大赛赛题解析――深度学习篇
- 500位全球算法开发者零奖金参加阿里云天池大赛 AI预测台风助力防灾减灾
9月26日,在杭州云栖大会 GEEKLAND 现场,由阿里云天池大赛主办的追风少年-台风图像时间序列预测 Hackathon 正式举行. 大赛旨在召集全球算法开发者,聚焦人工智能与气象的深度结合,探寻 ...
- 【读书向】阿里云天池大赛赛题解析——可视化
[读书向]阿里云天池大赛赛题解析--可视化 目录 [读书向]阿里云天池大赛赛题解析--可视化 箱型图 获取异常数据的函数 直方图和Q-Q图 KDE分布图 线性回归图 特征变量的相关性 Box-Cox变 ...
- 40万奖金 | 阿里云天池第三届数据库性能大赛,广邀英才挑战创新上云
简介:日前,"第三届数据库大赛--创新上云性能挑战赛"在阿里云天池官网正式开赛.据悉,本次大赛由阿里云.英特尔联袂主办,聚焦数据库核心技术场景,探索新介质极致性能,挑战海量数据高效 ...
- 阿里云天池大赛赛题解析——深度学习篇
阿里云天池大赛赛题解析--深度学习篇 (豆瓣)图书阿里云天池大赛赛题解析--深度学习篇 介绍.书评.论坛及推荐 https://book.douban.com/subject/35596114/
- 资金流入流出预测(上)(阿里云天池大赛)
文章目录 前言 比赛介绍 采用不同的模型预测以及结果分数 prophet模型 1数据加载 2数据探索与预处理 2.1数据特征探索 2.2按照时间聚合目标值total_purchase_amt和tota ...
- 阿里云天池大赛赛题解析(深度学习篇)--阅读笔记1--赛题一
阿里云天池大赛赛题解析(深度学习篇)–阅读笔记1 [x]表示遇到不懂的知识,将在[知识补充]给出具体讲解. 文章目录 阿里云天池大赛赛题解析(深度学习篇)--阅读笔记1 前言 赛题一 瑞金医院MMC人 ...
- 【啃书】【阿里云天池大赛赛题解析】目录
算法与业务结合的开发步骤:业务理解->数据探索->特征工程->模型训练->模型验证->特征优化->模型融和.其中蕴含着模型的重构与参数的优化. 实际业务场景应用机器 ...
- 阿里云天池大赛赛题(机器学习)——天猫用户重复购买预测(完整代码)
目录 赛题背景 全代码 导入包 读取数据(训练数据前10000行,测试数据前100条) 读取全部数据 获取训练和测试数据 切分40%数据用于线下验证 交叉验证:评估估算器性能 F1验证 Shuffle ...
最新文章
- Vim的一些使用技巧
- 在ubuntu14.04 64位中使用jd-gui
- C# WPF MVVM开发框架Caliburn.Micro Screens, Conductors 和 Composition⑦
- java 字符串文字筛选_重新开始Java的原始字符串文字讨论
- tornado学习笔记day04-执行顺序
- java json path_Java使用JSONPath解析JSON完整内容详解
- 云图说|DRS数据对比——带您随时观测数据一致性
- 硬派SUV坦克500撞色款预计年底上市
- 今天心情有点糟....
- vector java 复制_Java代码性能优化的 40+ 细节
- NYOJ--41--三个数从小到大排序
- C# ping 局域网扫描
- Environment 的使用
- 关于投票活动主办方对于微信上投票怎样刷票及微信投票怎样查刷票
- PartialDependencePlots
- 调用新浪网址缩短服务生成网址短链接
- 中医五行学说详细资料
- 强推:raw图片处理软件DxO PhotoLab
- 疫情大考之后 企业数字化转型或将出现报复性增长
- 腾讯云服务器配置code-server
热门文章
- 1677 treecnt(贡献)
- 钉钉ppt放映显示备注_PPT的备注怎么用,放映PPT时如何显示备注 来看看吧
- 电信诈骗瞄准“徐玉玉”们,扣问网络安全教育短板
- LTE学习-OFDM
- IDM无法找到服务器magnet IDM服务器禁止访问此文件
- 一键还原涂鸦图片_请问有没有大神能把图片涂鸦的去掉,还原被涂鸦
- 荷兰专用服务器1g无限流量,sharktech:荷兰机房1Gbps带宽不限流量服务器简单测评...
- RN中热更新CodePush使用
- 新手真无线蓝牙耳机怎么选?大神推荐高颜值时尚主流蓝牙耳机推荐
- WEB攻防-通用漏洞SQL读写注入ACCESS偏移注入MYSQLMSSQLPostgreSQL