返回列表

9th Place Solution

562. Predict Student Performance from Game Play | predict-student-performance-from-game-play

开始: 2023-02-06 结束: 2023-06-28 学习效果预测 数据算法赛
作者:Makotu(GrandMaster)
排名:第9名
发布时间:2023-06-29

第九名解决方案

首先,我要感谢所有为这次比赛投入大量时间和精力的参与者,以及主办方和管理团队。虽然我仍然认为比赛管理方面还有改进空间,但在本文中,我将专注于讨论我的解决方案。

概述

我没有做任何特别的事情。

主要是通过不断增加特征来提高单一模型的准确性。对于每个问题,我分别使用LightGBM和Catboost构建模型,并对两个模型的结果取简单平均值。我选择了交叉验证(CV)分数最高的模型作为最终候选。高CV分数在私有排行榜上也取得了几乎最好的成绩。

模型 CV分数 公开榜 私有榜
LightGBM 0.7018 0.703 0.702
Catboost 0.7011 0.7 0.701
融合(最终提交) 0.7024 0.7 0.702

特征工程

我不会逐一介绍我创建的大量特征,而是分享我的整体思路,并讨论几个对准确性贡献特别大的特征。

正如公开笔记本中已经展示的那样,这次比赛的一个重要因素是"玩家花费的时间"。为了深入研究,我认为"从某一点到另一点所花费的时间"至关重要,因此我创建了许多与此相关的特征。

  • 检查点特征(我命名的)
    在这个游戏中,几乎每个玩家都会经历一些必然事件。例如,每个用户都会找到一本笔记本并看到"找到了!"的消息。我识别了这些"几乎所有用户都会经历的事件",并将这些事件之间的时间(即从事件A到事件B的经过时间)以及点击次数作为特征。这似乎显著提高了准确性。

我创建了各种此类特征,比如从查看文本A到文本B的经过时间、从一个fqid到下一个的经过时间、从一个房间到下一个的经过时间等等。

  • 除此之外,我当然也包含了公开笔记本中介绍的特征,比如每个等级的时间经过和平均坐标等。

特征数量随着等级组的增加而增加。最终特征数量如下:
等级组 0-4:3009个特征
等级组 5-12:9747个特征
等级组 13-22:18610个特征

建模方法

  • 我选择使用10折交叉验证而不是5折,因为它给出了略高的CV分数(约+0.0005)。

  • 我使用分层K折交叉验证,依据是用户18个问题的答对数量。这样模型训练时用户总答对数量的分布基本一致。(不过我认为使用简单的K折也不会有太大差别)

  • 对于特征选择,我简单地使用了基于重要性排名前500的特征。为防止数据泄露,我在每折中单独选择特征重要性,并重新训练每折的模型。例如,训练第1折时,我先用所有特征训练,然后使用该折模型选择特征,最后用前500个特征重新训练第1折模型。

  • 我使用了之前问题的预测概率作为特征。例如,预测第3题时,我使用第1和第2题的预测概率;预测第15题时,使用第1到第14题的预测概率等。(这使CV提高了约+0.001)

  • 推理时间如下:
    LightGBM:90分钟
    Catboost:120分钟
    融合:150分钟
    通过一个名为"lleaves"的库编译模型,LightGBM的推理速度显著加快。
    https://github.com/siboehm/lleaves
    我分享了我的推理代码。这里未提及的特征可以通过查看代码在一定程度上了解。
    https://www.kaggle.com/code/mhyodo/restart-model-merge-v1

未奏效的方法

  • 神经网络模型(我尝试了多种类型,如LSTM和MLP,但都没有提高CV分数)

最后,我看到其他人的帖子中公开榜分数高于CV分数,但在我身上两者基本相同。我预期会有一些变动,但没料到自己会进入前十名。我很好奇那些获得更高公开榜分数的人是如何做到的,因为我无法显著提高我的公开榜分数。
无论如何,谢谢大家!如果排名确认,我可以成为新的GrandMaster!

同比赛其他方案