返回列表

9th place solution

360. 2019 Data Science Bowl | data-science-bowl-2019

开始: 2019-10-24 结束: 2020-01-22 学习效果预测 数据算法赛
第9名解决方案

第9名解决方案

作者: keeeeei79 (MASTER) | 排名: 9th | 点赞: 29

首先,我要感谢 Booz Allen Hamilton 和 Kaggle 主办了如此有趣的比赛!在比赛结束前的9天里,我从大约第800名上升到了第50名,而在比赛的最后一天,我又从大约第80名上升到了第23名。所以这一周对我来说非常激动人心。

我的解决方案非常简单。总结如下:

  • 特征工程(主要是聚合特征)
  • 构建多样化的模型并进行堆叠
  • 使用随机搜索进行阈值调整

我简要介绍一下我解决方案的关键点。

如何构建训练集和测试集

许多内核使用了 get_data 函数来顺序处理用户行为数据。但我认为这个函数让我很难制作和管理特征。所以我采用了一种新的方法来制作训练集。让我展示一下。首先,对于每个游戏会话,我分配了一个编号,表示用户在该游戏会话之前尝试过的评估次数。下面是一个例子。

train_gs_assess_dict = {}
for ins_id, user_sample in tqdm(train.groupby('installation_id')):
    assess_count = 0
    for gs, session in user_sample.groupby('game_session', sort=False):
        if session['type'].iloc[0] == 'Assessment':
            assess_count += 1
        train_gs_assess_dict[gs] = assess_count
train['assess_count'] = train['game_session'].map(train_gs_assess_dict)

然后,我计算了评估之前用户活动子集的聚合特征。创建训练集和测试集的持续时间比内核的方法要长,但这使得特征的实现和管理变得非常容易。

模型与堆叠

我在第一层创建了8个模型。

模型 类型 目标 评估指标 与准确率组的相关性 Kendall's Tau
LightGBM gbdt accuracy group rmse 0.621 0.460
LightGBM goss accuracy group rmse 0.568 0.433
LightGBM dart accuracy group rmse 0.619 0.459
LightGBM gbdt accuracy rmse 0.615 0.457
LightGBM gbdt accuracy group>2 auc 0.598 0.452
LightGBM gbdt accuracy group>1 auc 0.615 0.456
LightGBM gbdt accuracy group>0 auc 0.597 0.441
NN - accuracy group rmse 0.600 0.444

我使用了岭回归进行堆叠。

模型 类型 目标 评估指标 与准确率组的相关系数