原文发表于:数据竞赛:厄尔尼诺预测第5名方案和代码
欢迎关注微信公众号:YueTan
背景
照例先感谢国家,国家提倡就地过年、没让回家,只好找个有意思的事情、才找了这个比赛做的。过年期间就是一边循环播放三体、一拳超人、赌博默示录,另一边就一直做比赛,大概累计出门了两次。年夜饭:
对于下一次认真参加的比赛,想找个能稳定线下验证的。认真参加了两个比赛,都抖,反而靠运气连拿两个奖杯,终究不是长久之计啊。
Roadmap
小故事:大年初一那天,开始第一次尝试提交,当天还在论坛里写了一篇docker提交错误的总结和应对,那篇帖子的最后我说接下来去研究时间序列模型了,给了两个参考链接就有我最终使用的模型,当时的我真的没有想到,其中的一个模型竟然那么有用。
- 方案一:使用24个LightGBM模型来分别预测未来24个月的指数。A榜最高分数: -20
- 方案二:时空预测模型,应用ConvLSTM等时空信息,依据空间和时间信息来预测未来,主要就是在baseline基础上进一步优化。A榜最高分数:32
- 方案三:时间序列模型,利用dynamic decoding的方式分别预测24个月的值。A榜最高分数:39,B榜第一次提交时的分数41.97,最后排行榜可以排第8,优化后的最终方案也就是最终成绩排第5
方案介绍
答辩现场听下来,我的模型是最简单的,用简单模型大概是我做数据挖掘留下的职业病。线上训练加预测只有半小时,应该也是最快的。嘛时候能做到最简单、最快、效果还最好才是最终目标。
数据上主要有效的操作一个是采样,一个是截断。很遗憾的是虽然我很喜欢PPT上说为什么进行这个采样频率,但实际我是先做了采样,后面在写PPT的时候才想起来把这两件事关联起来的,算是一个构造的故事。
特征主要来自气象和时间特征,PPT上很清楚了,也可以看代码。
月份信息对于预测很关键,可以看出每个月指标增加或减小的分布并不相同。dynamic decoding的方式有用的关键一环也可能是可以加入月份信息。
我对于数据的选取其实不够robust,但A榜和B榜本身却很稳定,可能是运气好吧。以前学力学的时候,一个俄国人开创了一门新的分支,关于稳定平衡与不稳定平衡的研究,我觉得自己这里就不稳定。发生在这个比赛里,我是不相信每次我初始选择的几个参数恰好就是局部最优的,但关于数据的选取上,不管增大或减小都会降分。
答辩完,和大家吃了个饭就去玄武湖公园了,划了一个小时船后火车回了。
未解之谜
数据是一个实验学科,还是应该多尝试的。中间我想尝试teacher forcing和sample scheduling的时候,只尝试了teacher forcing后降分了,就没尝试sample scheduling了,从几个队伍的表现来看这个是有用的。另外我对框架从pytorch换成tensorflow这个降分点,一直没弄明白。
最后:
代码开源如下:https://github.com/LongxingTan/Data-competitions/tree/master/tianchi-enso-prediction
后记:
发现了我前面有人作弊,一下损失好多钱:https://www.zhihu.com/question/4357