Kaggle[4] - Online Product Sales

来源:互联网 发布:抽象工厂java 编辑:程序博客网 时间:2024/06/02 06:32

比赛链接:https://www.kaggle.com/c/online-sales

比赛内容是这样的:给定一个数据集,每行代表一个商品,前12个属性表示1-12个月该商品的销量,然后后面546个是该商品的一些特征(很稀疏,可能就跟文本分类一样,特征空间很大,商品包含或者不包含这个特征)。比赛提供了training data。最终是要预测新商品的1-12个月的销量。评判标准是12个月的RMSLE的和。


题目差不多说清楚了,首先分析一下,如何预测销量。

首先这很明显是一个回归问题,需要预测的是1-12个月的销量。但是他这里一共有12个月的销量,所以我们可以对每个月的销量,都构建一个回归模型。

能用的回归模型太多了,这里就不细细分析了。比赛中,大部分人用的是GBM,也有一些融合了Cubic spline、RF等。

先看看第一名的做法:

1. 将categorical的特征改成dummy的.(比如1->(1,0,0) 2->(0,1,0) ,3->(0,0,1))。 然后把出现次数很少的特征去掉(因为特征比较稀疏)

2. 用median填充NA的数据

3. 使用一些日期特征,包括预售和正式发售时间差,年月等数据。

下面主要模型用的是GBM。具体建模的时候,作者尝试了2种办法。1. stochastic gradient boosting 2. variable subsampling

因为作者使用的GBM版本其实是以决策树为base learner的,同时,他发现,GBM模型的variance越小,最后的结果也越好。因此他尝试了以上两种算法来试图减小variance。

具体如何做呢?

1. 看到stochastic我们就知道这是随机化, 因此我们每次循环中,建树的时候,可以随机抽取一定比例的样本作为training data。

2. variable sampling 其实跟随机森林中一样,当我们要split的时候,随机选择k个特征进行split。

可以看到,前者是抽取样本,后者是抽取特征。当然也可以两者结合起来。 另外OOB样本也可以帮助我们检验树是否好。

最终是variable sampling的效果最好。


第二名的做法和第一名差不多,不过他没有用variable sampling, 而是用的GAM做一些简单的融合。加入了三次样条拟合还有RF等回归模型。

剩下的人大部分用的是各种各样的blending, 但是效果都不好。

从这个比赛可以看出,直觉很重要。1st把RMSE和variance结合起来,然后找寻减小variance的方法,最终发现改进variable sampling可以做到,拿到第一名,整个思路下来还是很值得我们学习的。


0 0