第16名方案 (Association x UserCF x NN-based x Matrix Factorization x Covisit x LightGBM)
作者:A.Sato (Grandmaster) | 比赛排名:第14名
第16名方案 (Association x UserCF x NN-based x Matrix Factorization x Covisit x LightGBM)
感谢 Otto 和 Kaggle 团队举办了如此具有挑战性的比赛。我尝试了几乎所有我能想到的方法,看着分数一步步提升非常激动人心,尤其是在比赛结束时。
令人遗憾的是,据说有 Grandmaster/Master 涉嫌作弊,许多参与者因此受到伤害/打击,这种不可原谅的行为损害了 Kaggle 的诚信和声誉。
我想分享我的解决方案,目前距离金牌区仅差 0.01% lol。
希望这能有所帮助,我很乐意回答问题。
候选集选择 (Candidate Selection)
- 重访
- Top20 共现矩阵 (两种不同的矩阵)
- 来自共现矩阵的 Top3 3-hop 图
- 假设会话的最后一个 aid 是 X,X 的 top 3 共现 aid 是 A,B,C。我称它们为来自 X 的 '1-hop'。A 的 top3 共现 aid 是 D,E,F。我称它们为 '2-hop from X'。我做了三个 hop,所以你有 3^3 个候选对应 1 个 aid)
- 来自 3D-共现矩阵的 Top10
- 来自简单 itemcf/usercf 的 Top20 (similaripy)
- 来自 gru4rec 的 Top20 (recbole)
每个会话的平均候选数几乎为 100,验证集的召回率为 0.6396
特征工程
- aid 和 session 之间的简单交互(例如:从会话最后一次操作到候选 aid 的时间间隔)
- 仅基于会话(例如:该会话的点击次数)
- 仅基于 aid(例如:该 aid 的点击次数)
- 来自四个不同共现矩阵的共现矩阵得分
- 关联规则得分 (jaccard/dice/lift---)
- 简单 user/item cf 得分 (使用 'similaripy')
- item2vec 余弦相似度 (使用 'gensim')
- 矩阵分解类型相似度 (使用 'implicit')
- 基于神经网络的得分 (使用 'recbole')
- lightGCN
- GRU4Rec
- BERT4Rec
- RecVAE
- SasREC
- SRGNN
特征总数为 291。
根据我的观察,没有所谓的“银弹”特征。所有类型的特征都对模型略有贡献。
NN 特征相对昂贵,因为获取它们需要时间和计算资源,但仍然只能获得边际提升。
关联规则和简单的 userCF 易于处理,因为它们的计算量并不大。
单模型最佳 CV 为 .5808,Public .60206 / Private .6017
建模
LightGBM Ranker 配合自定义指标 (Recall at 20)
LightGBM binary / Catboost binary / Catboost Yetirank 都比 LightGBM Ranker 差。
最终提交是来自五个稍微不同的候选集/模型规格的集成。集成对我有一点帮助 (+0.03%)。
为了获得单人金牌我本该做的事
- Catboost Pairwise (有报告称它效果很好)
- 更多候选 (可能每个候选 150-200 个)