返回列表

Public/Private 13th solution (team takoi + kurupical)

416. Riiid Answer Correctness Prediction | riiid-test-answer-prediction

开始: 2020-10-05 结束: 2021-01-07 学习效果预测 数据算法赛
Public/Private 第13名方案 (团队 takoi + kurupical)

Public/Private 第13名方案 (团队 takoi + kurupical)

首先,感谢 Hoon Pyo (Tim) Jeon 和 Kaggle 团队举办了如此有趣的比赛。
同时也祝贺所有获胜的团队!

以下是团队 takoi + kurupical 的解决方案。

团队 takoi + kurupical 概览

Overview Image

验证策略

采用了 @tito 的验证策略。https://www.kaggle.com/its7171/cv-strategy

kurupical 部分

我想感谢三位 Kaggler:
@takoi 邀请我组队。如果没有你,我不可能达到这个排名!
@limerobot 分享了 DSB 第三名的解决方案。我是时间序列 Transformer 的初学者,从你的解决方案中学到了很多!
@wangsg 分享了笔记本 https://www.kaggle.com/wangsg/a-self-attentive-model-for-knowledge-tracing
我使用这个笔记本作为基线,最终单个 Transformer 模型达到了 0.809 的 CV 分数。

模型

Model Image

超参数

  • 20 轮
  • AdamW (学习率=1e-3, 权重衰减=0.1)
  • 线性预热学习率 (学习率=1e-3, 预热轮数=2)

对我有效的尝试

  • 基线 (SAKT, https://www.kaggle.com/wangsg/a-self-attentive-model-for-knowledge-tracing)
  • 使用所有数据(该笔记本仅使用每个用户最后 100 条历史记录)
  • 嵌入拼接(而非相加)以及在类别嵌入后接线性层 (@limerobot DSB2019 第3名方案) (+0.03)
  • 添加 min(timestamp_delta//1000, 300) (+0.02)
  • 添加“用户上次回答相同 content_id 的索引” (+0.005)
  • Transformer Encoder 层数 2 -> 4 (+0.002)
  • 权重衰减 0.01 -> 0.1 (+0.002)
  • EncoderLayer 中的 LIT 结构 (+0.002)

对我无效的尝试

我做了超过 300 次实验,但只有大约 20 次是成功的。

  • SAINT 结构
  • 位置编码
  • 考虑时间序列
    • timedelta.cumsum() / timedelta.sum()
    • np.log10(timedelta.cumsum()).astype(int) 作为类别特征并进行嵌入 等...
  • 优化器 AdaBelief, LookAhead(Adam), RAdam
  • 更多层数 (4 => 6), 更大嵌入维度 (256 => 512)
  • 仅输出序列的末尾
  • 对 elapsed_time/timedelta 进行大分箱 (500, 1000 等...)
  • 将 elapsed_time 和 timedelta 视为连续值

takoi 部分

我制作了 1 个 LightGBM 和 8 个神经网络模型。结合 Transformer 和 LSTM 的模型 CV 分数最高。以下是架构和简要描述。

Transformer + LSTM

同比赛其他方案