2016-CCF农产品价格预测大赛总结

2017-02-02

2016-CCF农产品价格预测大赛已经结束近三个月了。

本来一直要写个总结的,奈何要疲于应对考试以及其他各种杂事,所以一直拖到春节期间才有动力写。

参加这次比赛的原因是因为数据挖掘任课老师的要求。从初赛到复赛一直持续了两个月,虽说最后并没有取得挺好的成绩,但是也算积累了一点经验,于是便想记录下来待日后留作它用。

先讲讲比赛本身,比赛的详细描述可以在这里找到。总的来说,此次比赛的数据中,能直接使用的属性并不多,大概只有省份、市场映射值,农产品映射值,农产品类别,最低价格,最高价格,平均价格和数据发布时间是能直接利用的。除此之外,其他属性都没有给出实际的值。于是根据这一数据特点,我们首先在初赛中使用了时间序列算法,主要是 ARIMA 算法,直接调用了 R 语言的 forecast 包。但是结果并不太理想。后来,偶然发现可以利用规则,在原来最近一天价格的基础上进行加加减减便可以在A榜获得很好的提升了。于是,初赛后面几乎一半时间就用在了调整规则上了。

不过,让人大跌眼镜的是在出了B榜后,我们的成绩跌落的很大。原来是初赛的评价标准中,价格高的农产品产生的误差会更大。我们利用规则,只是针对A榜做了改进,而没有考虑到B榜数据带来的误差。有了这个教训后,我们在复赛中决定还是使用算法,于是采用了 GBDT 算法,调用 sklearn包 。不过因为我们使用此算法的策略问题,导致我们要好几天才能做一次提交,有时时间长的话甚至还需要十多天。所以我们并没有做一些有用的改进。另一个考虑不足的地方是,我们在复赛中认为A榜排名与初赛类似,并不能反映B榜排名,所以我们并没有过多关注A榜。而实际上,复赛的评价标准做了更改,这样的话,价格高的农产品不会产生更大的误差了。换句话说,在复赛中,A榜排名与B榜排名应该很相近。上面几个因素累积起来,大概就是我们比赛失败的原因吧。

总的来说,本次比赛的经验教训有以下几条:

  1. 模型或者算法应该尽可能高效,最好是一天之内就可以得到结果。因为像这种比赛,一般每天都有固定提交次数。如果能做到每天提交,那么就可以便于及时得到反馈,从而做出调整。如调整策略,提取更多的特征。
  2. 榜单排名是评价自己算法有效性的重要标准,所以要根据榜单调整自己的算法或者模型。
  3. 不要局限于单个算法。据自己的了解,像这种大数据比赛,优胜结果往往是几种算法的综合
  4. 打铁还需自身硬啊,如果能对多种算法有足够深入的了解,那么在比赛中才能游刃有余

最后附上复赛代码