赞
踩
名词定义
库存水位
在仓库存数量,用来满足需求。
补货时长(交货时间,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:
# 净需求为正的时候,可用库存进行扣减,>=0
qty_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,因为这个变量脱敏了我们考虑后期转为数值型方便计算存储。
在每次日期来到补货日的时候进行该Unit的历史数据搜索,并取历史数据的平均值,然后将平均值copy90份返回,在补货策略部分,将这90份中的前14份,也就是一个补货周期在途时间,加上安全库存作为补货判断阈值条件也就是未来14天可能需要的存货量。如果在途的加上目前的库存大于这个值就不用补货,小于就要补货。注意如果补货策略为肯定的,那么在途补货量需要更新一次。
实际上这与传统的时间序列预测会略有不同,传统的可能相对容易,针对的是1个对象未来的某项指标进行预测;可能是未来的某一段时间(一周或者一个月)当然这个预测的周期越长难度越大。目前我们暂时如果按照baseline的补货策略,我们需要获得每个Unit在每个补货周期日的未来14天需求,像这样的Unit之前说了一共有632个,那么补货周期日光在测试集里面。
存在的问题:每次预测用了最新的真实观测值来更新模型,所以拟合的非常的好,这样的结果也很假,B榜肯定是不可行的,但是单变量-》多变量的转换还仍旧是个大问题。
特征选择删除不重要的特征,有助于减少数据中的噪声。在 Mechanism of Action 竞赛期间,论坛和讨论帖中的方法对我们设计的模型没有帮助。在这种情况下,不要害怕深入研究并阅读论文。由于我处理的案例多标签分类并不常见,因此我找不到任何简单的教程。我找到了一篇论文,旨在比较使用问题转换的多标签特征选择。
阅读研究论文似乎令人生畏,但能够浏览它们并从长页技术术语中掌握关键词是一项至关重要的技能。对于像我这样的初学者来说,试图理解你遇到的每一篇论文的每一个细节是不可能的。只有当我找到我需要和将使用的论文时,我才会尝试理解论文中的每一个单词和引用。
不要沉迷于现在的工作,继续前进并花更多时间探索可以带来改进的新事物。
参加 Kaggle 比赛并获得奖牌并非易事,但通过正确的学习方法和工具,这个过程可以变得更容易。
只是按复制粘贴对学习或赢得比赛没有帮助。永远不要复制别人的工作,我可以从他们的想法中得到启发,甚至使用他们的建模方法,绝不提交其他人的工作作为我的解决方案。
在接触新事物时,我养成了查找所有我不理解的东西的习惯,直到我可以自信地向其他人解释这个主题。
合并到模型中来对表格数据进行建模的新方法。这个模型让我在 MoA 比赛中获得银牌。
只是按复制粘贴对学习或赢得比赛没有帮助。永远不要复制别人的工作,我可以从他们的想法中得到启发,甚至使用他们的建模方法,绝不提交其他人的工作作为我的解决方案。
在接触新事物时,我养成了查找所有我不理解的东西的习惯,直到我可以自信地向其他人解释这个主题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。