比赛链接:https://tianchi.aliyun.com/competition/entrance/231768/introduction
队伍名:抗毒救灾,成绩:初赛Rank7,复赛Rank12
题目给定某搜渔船的位置序列,预测该渔船的作业类型,作业类型分为:围网、刺网和拖网三种。
简单来说就是一个序列分类的问题,提取人工序列特征+lightGBM,以及embedding+NN是比较常见的思路。我们的思路也是分别构建人工特征的树模型和embedding特征的神经网络模型,然后进行融合。
序列特征主要包含4类:位置类、状态类、轨迹类和其它类。
位置类主要包含经纬度、极坐标等绝对位置序列的统计量特征(平均值、中位数、最大值、最小值等);
状态类主要包含渔船速度、转速序列的统计量特征;
轨迹类主要包含曲率半径序列、凸包面积等;
其它类主要包含时间方面的统计特征,开始时间,结束时间等;
==这题很容易线上线下不一致,特征需要好好筛选,不能保留过多的相似特征,特征不能做得太细,否则线上很容易崩。==
而后通过lightGBM模型进行训练,最终单模线上为0.8941;
这里主要借助了TextCNN的结构,在Embedding部分进行了改进,我们将经度、纬度、速度、方向、时间这一五元组看成一个状态,对状态进行离散化并分桶,通过word2vec算法对每个桶的特征表达进行预训练。对于每艘船的某一状态,进行桶特征映射后拼接它们以得到该状态的特征编码,以此得到船在每一时刻的状态特征表示,然后送入CNN进行学习。
最终单模线上成绩为0.8554;
很明显单模lgb比单模nn好很多,这里可能是由于nn过拟合、数据分布等因素,我们没有多做研究(初赛时一个0.88的lgb和一个0.82的nn融合出了0.89+的结果,很迷),模型融合时可以适当调大lgb的权重,减小nn的权重以得到更好的融合收益。
我们选择训练10折lgb和5折nn,然后直接平均,由于lgb的折数更多,因此相当于权重更大。
最终A榜线上成绩为0.9000,排名7;B榜线上成绩为0.8859,排名12。
代码等都在项目中,按照run.sh的执顺序就好(如果有数据的话),欢迎一起交流学习以及组我打比赛,QQ:793729558!