592. Linking Writing Processes to Writing Quality | linking-writing-processes-to-writing-quality
大家好,
感谢Kaggle和主办方举办这场精彩的比赛!同时也感谢我出色的队友 @ihebch 和 @aliibrahimali。没有他们,这将是不可能完成的任务!
我们使用了与公开笔记本几乎相同的特征(我认为这导致我们在私有榜中排名下滑,可能是因为我们过于依赖那个"银弹"笔记本,但无论如何,那是一个非常棒的笔记本,感谢 @awqatak),将这些特征输入到3个分类器(TabPFN、MLPClassifier、MultinomialNB)中,然后将它们的概率作为特征。接着我们将所有特征输入到由XGBoost和6个线性模型组成的回归集成中,最后使用线性回归找到最佳的集成权重。
我们的交叉验证(CV)与排行榜(LB)之间有很好的相关性。许多在CV上的改进都转化到了LB上。我们在CV上的最佳成绩同时也是公开榜和私有榜的最佳成绩。
我们的最佳CV分数约为0.592,公开LB分数为0.570(第三名),私有LB分数为0.566。
我们的CV方法: 基本上就是使用以下代码:
StratifiedKFold(n_splits=5/10/.., shuffle=True, random_state=42)
不使用任何bagging(我们尝试过不同的n_splits,但最终使用5,因为分数"0.5"的类别在数据集中只有5个样本)。
我们将公开LB视为一个额外的折。因此,我们只保留那些同时改进CV和LB的改动。
起初,我们从公开笔记本开始使用特征。我们尝试添加更多的聚合/交互特征,但这并没有帮助。我们发现有用的方法有:
上述工程特征大约有1400个。我们对所有模型多次使用了LOFO(Leave One Feature Out)方法。最终模型只包含约350个特征。这给了我们额外的提升(+0.001)。
XGBoost是我们最佳的单模型。添加线性模型有助于增加多样性。

我们没有使用早停,因为这会导致过拟合,特别是对于这个小型数据集。
preds[preds < a] = b
preds[preds > c] = d因此,我们在CV内部应用了内部StratifiedKFold来找到最佳值(对于外部CV,我们选择n_splits=5以确保"0.5"类别的样本不重复。对于内部CV,我们使用n_splits=4出于同样的原因)。但最终这并没有帮助。我认为边缘样本数量少是这里的挑战。这里是我们的代码(虽然有点乱):
[代码链接已删除]
我们只是差一点就能获得金牌,从而晋升到Master段位,但让我们下次继续努力。
感谢阅读!