返回列表

15th palce solution

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

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

第15名方案

作者: Y.Nakama, currypurin, Hidehisa Arai
比赛: Data Science Bowl 2019

我们(@yasufuminakama, @currypurin, @hidehisaarai1213)感谢 Booz Allen Hamilton 举办了这场非常有趣的比赛,也感谢所有参赛者给了我们很多启发。

特征工程

Nakama 的特征

  • ['event_id', 'game_session', ...] 等特征的 Nunique(唯一值计数)。
  • ['title_event_code', 'title', ...] 等特征的衰减计数特征和比率特征。
    计数特征根据距离上一次评估的时间进行衰减,以及它们的比率特征。比率特征比计数特征效果更好。
    下面是衰减函数的一个例子:
    def decaying_counter(x, days):
        return max(0.xx, 1-days/30) * x
  • 误点击特征
    正如这里提到的,事件代码 4070 是点击屏幕上无效位置的操作。我们通过对 4070 的坐标 进行 KMeans 聚类,将聚类中心视为屏幕上的物体,然后计算点击位置到其所属聚类中心的距离。这个距离可以代表“操作是否粗糙或生疏,距离越大越生疏?”。
  • 过往评估特征
    全时间段及过去7天的过往评估统计特征,包括整体和针对每个评估标题的统计。
  • 不起作用的方法
    在评估前的标题序列上使用 TfIdf 和 w2v 特征。我应该多尝试一下的...

アライさん (Arai-san) 的特征

特征生成代码已公开在 GitHub

  • 基于公共 Kernel 的特征
    虽然效果不错,但由于基于计数的特征在训练集和测试集之间的分布不同,这可能导致过拟合。因此,我也应用了衰减因子来计数或计算平均值,这在 Y.Nakama 的实验中已被证明能有效避免过拟合。Y.Nakama 和我的计数特征衰减略有不同,Y.Nakama 对每次评估应用衰减,而我对每个会话应用衰减。注意,基于 LightGBM 重要性判断或与其他特征高度相关的特征已从特征生成代码中删除。
  • 过往评估特征
    • 过去同类评估的 {success_ratio, n_failure, accuracy_group} 的 {mean, var, last}
    • 获得成功的时间
    • 动作间隔的 {mean, var} (事件代码 4020, 4025)
  • 过往游戏特征
    • 每个游戏的 {correct, incorrect} (衰减后) 计数的 {mean, var, last}
    • 每个游戏成功率的 {mean, var, last}
    • 每个游戏内动作间隔的 {mean, var}
  • 过往活动特征
    针对部分活动的一些手工特征。

数据增强思路

由于我们对计数特征应用了衰减函数,我们可以通过使用不同的衰减函数来增强数据。其目的是模拟不同年龄或个体的人拥有不同的遗忘曲线。

特征选择

在训练之前,应用了基于 LightGBM / CatBoost 重要性的特征选择。大约 80-90% 的特征在这一步被删除,最终特征数量约为 400 个。特征选择对 NN 模型特别有效(可能是因为 NN 模型中的高 dropout 率),使 GBDT 模型的 oof 分数提高了约 0.005,NN 模型提高了约 0.01。

模型

对多分类的输出应用特定变换比回归能获得更好的结果。变换如下:

prediction @ np.arange(4)  # prediction 的格式应为 (n_samples, 4)

树模型

我的团队尝试了几种目标函数。交叉熵和多分类有效,用于最终模型。

  • 最终模型使用了三个模型:
    • Lightgbm: cross entropy
    • Lightgbm: mult
同比赛其他方案