写在前面
大家好,我是鱼遇雨欲语与余,本次我将带来不一样的分享,这将是我的个人竞赛历程。将从三个部分展开分享,主要竞赛经历、关于我的竞赛和未来竞赛的我。一位竞赛小白是如何一路打怪升级,然后取得不错成绩的,到后来一年获得“两冠四亚一季”的佳绩。这里我尝试记录这两年主要做过的事情和其中的感想,希望对大家有所启发。
首先感谢在这两年竞赛道路上帮助过我的人,@所有人
回想过去的两年,是折腾的两年,也是自我感悟和提升的两年。
主要竞赛经历
2018,[印象盐城]数创未来大数据竞赛 - 乘用车零售量预测,Rank53
2018,IJCAI-18 阿里妈妈搜索广告转化预测,Rank29
2018,腾讯广告算法大赛,Rank11
2018,JDATA-如期而至-用户行为预测,Rank9
2018,科大讯飞营销算法大赛,冠军
2019,消费者人群画像—信用智能评分,Rank5
2019,TIANCHI-OGeek算法挑战赛,亚军
2019,TIANCHI-全球城市AI挑战赛,季军
2019,JDATA-用户对品类下店铺的购买预测,亚军
2019,腾讯广告算法大赛,冠军
2019,KDD Cup: Context-Aware Multi-Modal Transportation Recommendation,亚军
2019,第四届魔镜杯大赛数据应用大赛,亚军
初次接触竞赛
在经历过机器学习的理论学习,然后到Kaggle入门赛Titanic: Machine Learning from Disaster的学习,给我最初的观念是比赛需要各种各样的数据分析和模型的堆叠。带着这样一种观念,我选择在天池进行第一场比赛,“盐城-乘用车零售量预测”。官网论坛中并没有太多的分享,所有只能参照Kaggle那套,便开始了我的数据分析之路。
![640?wx_fmt=png](https://img-blog.csdnimg.cn/img_convert/3ebdac802c54c64a662473629aeda38d.png)
(如果参赛时能看到这样一篇分析文章,可能我能进top20也说不定呢)
数据分析
当时的数据分析还比较局限,因为并不知道对于时间序列相关问题的着重点和解决方案。并且收到大量异常值的影响,导致重心放在了异常值的处理。对于赛题的目标是预测每一车型的销量,再次出现了纠结的问题,同一车型的变速器档位、变速器形式、排量可能不同。我当时的做法就是用最多的替换。然后还分析了每种车型每月的销量情况,每月的总销量情况。
![640?wx_fmt=jpeg](https://img-blog.csdnimg.cn/img_convert/d67a70f0829d0c756e5b4bbb453b2794.png)
规则初探
数据的分析并未给我带来太多的提升,主要还是不明白分析的方向。比如时间序列问题,应该考虑趋势性、周期性、循环性。接下来我就想到了一个点子,我就直接用上一个月*120%,直接到了前排。然后之后再也没有超过那个分数,因为后面都是模型跑出来的分数。
![640?wx_fmt=jpeg](https://img-blog.csdnimg.cn/img_convert/c87fec8810935e33200086a39e7d3093.png)
接下来的目标就是超过规则,只能搞模型了。可以看出来,我在特征工程部分做的是非常少的,所作的预处理也是给数据增加噪音和影响准确性的,帮上的只是帮倒忙。模型最终使用的是XGBoost,下面贴出我的远古代码:
import xgboost as xgb
xgboost_model = xgb.XGBRegressor(colsample_bytree=0.4603, gamma=0.0468,
learning_rate=0.05, max_depth=3,
min_child_weight=1.7817, n_estimators=2200,
reg_alpha=0.4640, reg_lambda=0.8571,
subsample=0.5213, silent=1,
random_state =7, nthread = -1)
xc = ['sale_quantity']+['brand_id']+['sale_month']+['sale_year']
xtrain = merge_train[merge_train['diff_quantity'].notnull()]
xtr = xtrain[:][xc]
xtest = merge_train[merge_train['diff_quantity'].isnull()]
xte = xtest[:][xc]
y_diff_train = merge_train['diff_quantity'][merge_train['diff_quan