设为首页 加入收藏

TOP

天池比赛 菜鸟-需求预测与分仓规划 赛后总结
2017-09-30 17:16:28 】 浏览:5860
Tags:天池 比赛 菜鸟 需求预测 规划 赛后 总结

比赛结束差不多快2个月了,懒癌发作一直没写总结,正好队友丰哥要参加一个面试,想把当时的思路神马的总结一下,顺手治好了我多年的拖延症呐~

由于是第一次参加这种大型的比赛,也知道牛人遍地走,所以当时并没有太大的信心,目标是能混进前100就谢天谢地了,结果第一赛季85,第二赛季82,高兴之余也看到了第一页那些大神们是多么厉害。

 

大体思路基本上是这样:

1、最初先对数据进行观察,抽样查看各种商品每个特征的变化规律,先肉眼观测一下各种特征和最终销量之间的粗略关系,并发现不是所有商品都拥有完整数据,即有些商品很晚才开始销售,另外有些商品中间没有数据,我们采用了填0处理,以保证数据连续性。

 

2、由于最终要预测的是2周(2015.12.28周一-2016.1.10周日)的总需求量(qty_alipay_njhs),我们将数据按照没2周(周一-周日)为一个周期划分开,并且跳过了双11(11.10,11.11,11.12)和双12(12.11,12.12,12.13)以避免这两个活动产生的异常数据对销量结果的影响。由于这两个周期各少了三天,所以所有特征采用取每个周期的平均值,最终预测也是预测2周的平均值,只要再×14就是总需求量(qty_alipay_njhs)。数据采样基本从2015.6开始,过早的数据过于久远,我们认为没有参考的价值。另外,全国和分仓分开预测。【一点反思:是否采用滑窗采样增加一些数据会更好?】

 

3、既然是预测数值,那应该是用回归,最先考虑是使用SVR(支持向量机),但效果并不好,而且SVR加入惩罚参数C之后训练变得很慢,所以考虑改变算法。

 

4、考虑改用GBRT算法(可拟合非线性,且由于是ensemble方法,泛化性较好),成绩有所提高,且训练和预测速度都较快,过程中发现输入特征由最初的25个减少到5个时效果会有所提高(且有些被删去的特征的feature_importances_并不为0,可能是剪枝的问题?),另外考察各个参数,其中损失函数为lad时结果最优,其余不表,当时调参没有采用Grid Search,基本靠手动试值。【一点反思:其实调参还是很有讲究的,当时的结果可能陷入了局部最优解,后来发现了知乎上的一篇大神文https://www.zhihu.com/question/34470160只能感慨自己毕竟too young啊!】

 

5、由于调参后算法的结果已经很难再提高,此时发现有些商品直接用前两周的均值预测效果更好,于是考虑采用GBRT结果和前两周均值加权平均,效果提高明显(优于GBRT也优于取平均),另外考虑加入一些修正规则,比如补少成本低于补多成本的,可以将预测值向下修正(乘上一个小于1的系数),补多成本较低的则将预测值向上修正。

 

6、由于在回归上已经无法提高,经由其他高手交流经验,尝试时间序列分析方法(主要是ARIMA),时间序列分析之前,对除双11、双12以外的部分异常值进行了异常值过滤。此外,我们还将商品分为数据量<21天的和数据量≥21天的两种,前者直接采用均值预测,后者采用时间序列方法预测,之后在python中使用rpy2库,调用R中的auto.arima,自动预测结果。然而效果跟GBRT半斤八两。

 

7、再次考虑融合方法,并加入另一种时间序列分析方法ETS,此外将GBRT换成了xgboost,最终结果由XGBR、前两周均值、ARIMA、ETS四者加权平均而成,这就是第一赛季的思路了。

 

第二赛季基本上是沿袭了第一赛季的思路,由于阿里的平台没有提供时间序列类的方法,所以我们只能考虑xgboost和均值的加权平均,可能由于平台比较蛋疼,第二赛季参加的人少,所以前进了那么一丢丢。

其实回头来看,这次在实战中真是现学了很多东西,比如ARIMA这种,但欠缺的地方还是太多太多,尤其是特征工程这一块,几乎等于是没有做(包括完全没有想过要归一化或者标准化之类的处理……),而调参上则是根本没有理解参数的意义,完全靠瞎猫碰死耗子,诸如此类的还有很多,真的是还有很长的路要走。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇利用Python进行数据分析(2) 尝试.. 下一篇hw-text1

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目