这个比赛我是快结束的时候参加了,想顺手捞一波名次
他对我最大的挑战就是试错成本太高太高了
树模型交叉验证五折要5-7天 = =
图片70G
各种特征生成也有几十个G = =
我总共打了15天
写代码占4天,接下来搞别的事情去了,代码挂着跑了11天
最终拿了top6%的成绩,这种情况下拿到这个成绩个人还是很满意的
因为时间短不说,调试周期还长(占我打的时间的1/3~1/2了)
不过现在看下来他们的大部分trick我都做到了,就是没时间搞细
特征工程
文本特征
自己的做法
- tfidf+char/word(稀疏矩阵存下来,几万维全部丢给树,svd效果会变差,大部分分数靠的是他)
- 地理位置信息用google api获取经纬度(没啥效果)
其他有价值的做法
- 用fastText的词向量替代tfidf矩阵
- 文本的一些统计特征,词数,字数等等
图像特征
自己的做法
- 图片的一些属性特征(写了没跑,因为具言效果不佳)
- vgg的卷积结束后global pool成向量svd分解(效果不佳),其实这里可能丢失语义信息了,或许从全连接那里抽比较好(没时间了)
其他有价值的做法
- 和我的2差不多类似换了基础网络resnet152,resnet34
- 还有一些图像的传统统计量亮度暗度(效果都不是很明显)
- 冠军用out-of-preditcion来微调resnet34 效果比较显著
- 预训练模型对图像进行分类作为特征(其实这个特征已经有了,所以比较冗余,不是很明显)
categorical & numerical
user_id和item_id 几乎一个样本一个id了,表示学习都没法了
而且user_id训练集测试集交集只有6%,item_id只有0%
自己的做法
1 用user_type和city的组合编码近似代表user
用category,image_top_1等近似代表item
获取邻接矩阵进行svd分解(分数提升)
2 category批量生成共现概率,条件概率
3 category与连续组合计算条件统计量
4 连续连续组合+-*/
5 target encode(用category和label组合计算label的统计量)
其他有价值的做法
- 冠军把user_id用起来了,虽然user_id在训练集测试集中交集只有6%,但他交叉验证时将user_id分的和测试集差不多比例
category之间计算共现概率,条件概率(条件熵,信息熵等没算)
数值和类别之间计算条件统计量(mean,min,max,std)等
交叉组合四五个特征
虽说我的特征大都是批量生成
但还是选择性的批量生成,否则维度太高了
其中起主要效果的是price的条件统计量,以及price条件统计量的标准化
模型细节
- spatialDropout1D放embedding后超级棒,我最近发现先bn再sdp效果极佳
- 图像部分迁移学习固定权重
- 树模型与nn都使用交叉熵效果极佳,树模型是xentropy
值得一提的是好多文本比赛感觉attention很不work,我猜可能大部分都是短文本的缘故吧
集成
没做 = =
跑出了俩模型,第一个太烂丢掉了
实际有效的模型只跑出了一个,只能随便拉个kerne的平均一下
其他人的做法
几组较优超参集成
疯狂stacking…
最后感受
大家做的方法其实都大差不差
都是一些细节拉大了分数
我感觉我吃的最大的亏是时间
在细节上我用的是回归,别人用的是交叉熵
和鹏哥感受一样比赛真的是一件投入产出比很低 = =
从头打到尾套路基本都会了的话
不出意外个人感觉top3%,top2%不是意见特别难的事情
但是很耗精力,比赛周期一般也太长了。。。