第20名解决方案 😂
第20名解决方案 😂
作者: e-mon, Akira Sasaki, konbuiyon, hatry
比赛排名: 第20名
恭喜所有的获胜者!
这是我们解决方案的简要总结。
特征工程
- 有效的特征
- 是否为第一次评估
- 归一化计数特征:每个事件代码和ID的计数 / 游戏会话时长
- 评估是否按照游戏设计的顺序解决
- 聚合统计
- 每种类型的持续时间(均值、标准差、最小值)
- 每种类型的记录数量(均值、标准差、最小值)
- 无效的特征
- 最后的活动、最后的游戏统计
- 最后的类型、标题历史序列
模型
使用QWK(二次加权Kappa)来调整模型太困难了,所以我们决定仅使用RMSE来评估模型性能。
使用Group 5折交叉验证作为验证方法。我们对验证集应用了截断处理。
- 第一层模型
- lgbm: CV 1.0395 +/- 0.031
- xgb: CV 1.0457 +/- 0.028
- catboost: CV 1.0430 +/- 0.028
- NN (神经网络): CV 1.0423 +/- 0.029
- 损失函数:rmse + smooth l1 loss
- RNN层:GRU + Attention
- Dense层
- 3个随机种子融合
- NN模型的性能与提升树模型几乎相同,但相关性较低。
- 第二层模型:PublicLB 0.538 PrivateLB 0.556
- ElasticNet: CV 1.0361 +/- 0.028
此外,虽然我们没能将其包含在内,但在我们的实验中,使用准确率分类目标的lgbm是效果最好的模型。
阈值确定
我们花费了最多的时间在如何确定阈值上。我们准备了一些想法并进行了实验。
我们对每个installation_id的每折OOF(袋外预测)进行了10次有放回采样(我们称之为OTV)。
然后,我们对OOF进行了5折交叉验证,应用了以下阈值方法:
- 1. 确认验证集的标签分布与OOF、OTV真实标签分布的一致性(许多内核这样做)
- 2. 对OOF、OTV应用优化取整器并获得阈值,然后确认验证集标签分布与优化后的OOF、OTV标签分布的一致性。
- 3. 对OOF、OTV应用优化取整器并获得阈值,然后将阈值应用于验证集。
在我们的实验中,使用OTV的第2种方法几乎获得了最高分,但有时使用OOF的第3种方法效果更好。
所以我们选择了两种阈值方法作为最终提交。
实验结果接近PrivateLB。
上述实验的结果与PrivateLB的结果几乎相同。
训练数据集增强
通过测试集扩展训练集的方法仅用于训练每折模型,并未用于确定阈值或作为验证集。