【新浪微博互动预测大赛】比赛链接http://tianchi.aliyun.com/competition/introduction.htm?spm=5176.100071.5678.1.7cNsYr&raceId=5
第一季和第二季是有区别的,所以只说说第二季。
因为练车,面试等等占用了大量时间,所以第二季我也没花多少时间做,拿了36名,大概总结下吧。
第二季的题目与其说是预测微博一天后的互动数之和,不如说是分类问题,因为我们只要预测出他所在的那一类就算正确。比如实际是25,你预测11和49都算正确的,因为三个都是属于第三个档位。
由于模型的迭代计算都是以准确率为score的,但是第一类的数目巨大,所以将一条微博预测为第一类的可能性也大些。但是题目给了权重值,一个第二类相当于10个第一类了,所以,要解决这个问题,要么改评价函数,要么就对训练样本采样。
采样率的选择也是有讲究的。我们对二三月的每类个数乘以权重进行统计,计算每类的占比。然后我们确定取300000的样本,计算每类需要的样本数。
每类个数和 | 42659513 | 561360 | 594222 | 123765 | 160248 |
每类权重和 | 42659513 | 5613600 | 29711100 | 12376500 | 32049600 |
权重和比例 | 0.348496 | 0.045859 | 0.242717 | 0.101107 | 0.261821 |
每类实际需要个数 | 104549 | 13758 | 72815 | 30332 | 78546 |
每类采样率 | 0.005 | 0.047 | 0.227 | 0.450 | 0.908 |
微调后的采样率 | 0.003 | 0.03 | 0.17 | 0.4 | 1 |
微调后每类采样个数 | 103584 | 14333 | 78233 | 33759 | 70091 |
由于平台的权重采样得到的个数达不到我们设计的每个类别个数的要求,所以要对采样率进行微调,使得采样得到的每个类别的个数和我们设计的接近,微调后的采样率见上表(空着的还没写,数据在寝室)。事实表明这样可以提升成绩。
确定了样本,接下来就是特征选择了,我提取的特征包括用户特征和博文特征。
用户特征包括用户的月份互动的平均数,中位数,微博个数,粉丝数。博文特征包括时间特征,微博长度,微博中词语的平均出现次数,微博的#个数,@格式,url个数,下面代码可以看到这些特征(uid_avg_xx(_yy) 该用户的xx月(到yy月)的微博转赞评和的平均值,word_avg_times 微博中每个词出现的平均次数,blog_time_week 星期几,blog_time_hour 一天分为8个时间段,每个时间段3个小时,word_length 微博的博文单词的个数,blog_jinghao,blog_at,blog