Giter VIP home page Giter VIP logo

cainiao-demandforecast-storageplaning's Introduction

菜鸟-需求预测与分仓规划

天池大数据竞赛平台上的一道赛题,赛题详情

队伍

  • 队名:左手诗句,右手数据

  • 成员:wepon,Bryan,逝水无痕

解決方案简述

  • 由于原始数据只有1000个item,为了生成更多的训练样本,我们采用了滑窗法,每两周(14天)作为一个窗口,该窗口各个(item,store_ code)的总销量作为label,特征的产生方式如下:统计该窗口前1/2/3/5/7/9/11/14天的各种非类目特征的sum和avg,统计item_id在最近14天的非聚划算支付件数最大值、最小值、标准差,统计其他类目id在最近14天的非聚划算支付件数的sum,avg,std

  • 基于以上构建的训练集,训练了多个回归模型,包括:XGboost、GBDT、RandomForest、SVR(线性核与高斯核),训练时各个分仓是分别建模的,值得一提的是我们将(补少成本+补多成本)作为每个样本的权重(代价敏感学习),在验证集上降低了10多万成本(相比于不设置权重)。此外也训练了时序模型ARIMA。

  • 在得到单模型结果后,再根据补多补少成本进行融合。举例来说,如果某个(item,store_ code)的补少成本大于补多成本,则我们倾向于预测多一点,故取单模型预测结果中的最大值再乘以1.1,反之取单模型预测结果中的最小值再乘以0.9。得到该结果后,与规则进行加权融合,融合系数为0.75model + 0.25rule

  • 规则:预测窗口前两周的销量分别记作week1,week2,对每个(item,store_ code),如果补少成本大于补多成本,则预测为2* max(week1,week2),反之预测为2* min(week1,week2)

  • 单纯规则线上为99万,通过 0.75model + 0.25rule的融合后线上为88万,通过线下验证集计算各个(item,store_ code)的代价,发现全国的一些item产生的代价非常大,Top20个样本产生了大约20万的成本。对其进一步可视化分析,发现大多是上线时间比较短,或者是预测窗口前几周销量波动比较大的item。对这部分item,模型的预测效果非常差,所以我们直接用这些item前两周的销量,结合补多补少成本进行预测(补多>补少,前两周销量乘以0.8,反之乘以1.2)。

代码目录说明

  • data

    存放原始数据,以及预处理后的文件,特征提取后的训练集文件.

  • feature_engineering

    代码包括数据预处理(比如添加字段名、划分补多补少成本)、特征提取(如上所述)。特征提取部分代码是用SQL编写,采用滑窗法提取特征,所以该步骤会比较繁琐。

  • arima

    时序模型ARIMA的相关代码,包括生成数据的Python代码,运行auto.arima的R代码

  • val

    线下验证集的相关代码,包括以上提到的多种回归模型,以及模型融合。采用的是Python的package,包括pandas、xgboost、sklearn、numpy.

  • test

    线上预测集的相关代码,与val一致

  • visualize

    以天为单位,将每个(item,store_ code)的销量可视化,保存为图片,有助于后续分析。

代码运行步骤

  • 预处理和特征提取 feature_engineering文件夹下

    • 先运行preprocess.sql 导入数据并删除双11双12
    • 运行feature_ train_ all.sql提取全国训练数据特征,修改其中滑窗代码,运行10次得到10份数据
    • 运行feature_ train_ fencang.sql提取分仓训练数据特征,修改其中滑窗代码,运行10次得到10份数据
    • 运行combine_ train.sql合并全国和分仓的10份滑窗数据
    • 运行feature_ test_ all.sql提取全国测试数据特征
    • 运行feature_ test_ fencang.sql提取分仓测试数据特征
    • 运行data_ preprocessing.py添加字段名,划分补多补少成本字段
  • 可视化分析 visualize文件夹下

    • 运行visualize.py,生成各个item的销量曲线。
  • 时序预测 arima文件夹下

    • 运行gen_ data.py生成data.csv文件
    • 运行arima.r 对data.csv中的每个(item,store_ code)进行时序预测
  • 线上预测 test文件夹下

    训练多种回归模型,以xgboost为例,分别对分仓1、2、3、4、5以及全国的样本进行训练和预测,运行步骤如下:

    • 运行xgb/xgb_1/xgb.py,对分仓1的样本建立xgboost模型,得到预测结果
    • 运行xgb/xgb_2/xgb.py,对分仓2的样本建立xgboost模型,得到预测结果
    • 运行xgb/xgb_3/xgb.py,对分仓3的样本建立xgboost模型,得到预测结果
    • 运行xgb/xgb_4/xgb.py,对分仓4的样本建立xgboost模型,得到预测结果
    • 运行xgb/xgb_5/xgb.py,对分仓5的样本建立xgboost模型,得到预测结果
    • 运行xgb/xgb_all/xgb.py,对全国的样本建立xgboost模型,得到预测结果
    • 运行xgb/combine.py,将各个分仓的预测结果合并成一个文件

    上面每个分仓的训练时间都非常快,20秒以内训练并预测完成。对于GBDT、RF、SVR这几个回归模型,运行步骤类似,不再赘述。

    • 运行rule/rule.py得到规则预测的结果
    • 运行ensemble.py得到最终融合的结果
  • 线下验证集val文件夹

    线下验证集有两个作用,一个是调节模型参数和融合的系数,另一个是得到线下产生成本比较高的item(运行val/ensemble.py后可以得到该文件)。

    val文件夹下的代码结构与test文件夹下的类似,运行步骤也是一样的。

cainiao-demandforecast-storageplaning's People

Contributors

wepe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cainiao-demandforecast-storageplaning's Issues

请问滑动时间窗口中有特殊节假日如何处理

你好,请教个问题:
你提到: 统计该窗口前1/2/3/5/7/9/11/14天的各种非类目特征的sum和avg,统计item_id在最近14天的非聚划算支付件数最大值、最小值、标准差,统计其他类目id在最近14天的非聚划算支付件数的sum,avg,std

如果在某个窗口中,有特殊节假日,比如国庆,而国庆的销量特别高,比如:
窗口前14天是10月1号,而把10月1号的数据直接拿来做特征,会导致这个特征值很高,
请问如何处理这种情况呢,谢谢。

求数据

大神,我需要一下这个赛题的所有原始数据,比赛报名结束了,无法下载数据,我在其他网站下找的数据都不全,邮箱[email protected]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.