返回列表

2nd place solution

631. UM - Game-Playing Strength of MCTS Variants | um-game-playing-strength-of-mcts-variants

开始: 2024-09-05 结束: 2024-12-02 游戏AI 数据算法赛
第二名解决方案 - Richard_U
标题: 第二名解决方案
作者: Richard_U
发布日期: 2024-12-03
竞赛排名: 第 2 名

首先,我想感谢本次竞赛的主办方马斯特里赫特大学 (Maastricht University) 和 Kaggle 举办了这次竞赛。

我也要感谢 Kaggle 社区提供的讨论和慷慨的想法分享。特别要感谢 yunsuxiaozi 提供的 MCTS 入门 notebook,我从中采纳了从 'LudRules' 列计算 ARI、McAlpine EFLAW 和 CLRI 得分的想法。谢谢!

和许多人一样,我原本预期会有很大的变动,真的没想到我的解决方案能跻身前列。因此,今天早上发现公共排行榜和私有排行榜的前三名位置没有变化时,我感到很惊讶。

概述

总之,我认为我的解决方案可以形容为简单直白:

  • 传统的 5 折交叉验证 (CV) 训练
  • 没有额外的离线生成的训练数据
  • 没有花哨的特征工程(除了上述提到的来自 LudRules 的文本得分)
  • 没有特征选择(除了删除非信息/重复特征和删除规则集特征)

性能的重大突破显然来自于数据增强。我使用了与 第三名解决方案 完全相同的数据增强。考虑到训练数据,我认为这是一个非常自然的方法,我相信许多其他人也独立地使用了完全相同的增强方法。

与其他人报告的情况相反(例如 第三名解决方案),我在尝试将折外 (OOF) 预测作为第二次训练运行的特征时完全没有运气。(不过,我并没有在这方面花太多时间,也许我只是打错了什么搞砸了!)因此,我的模型 simply 使用了常规的单次训练/预测结构。

我的最终整体模型由 7 个模型的加权集成组成,其中 4 个是 boosting 模型,3 个是神经网络 (NN) 模型。最后,整体提交使用了 6 组结构相同的模型集的等权重混合,唯一的区别是训练时使用的种子。

数据准备和 CV 分割选择

  • 删除了重复和非信息特征。
  • 从 LudRules 列计算了 ARI、McAlpine EFLAW 和 CLRI 得分。
  • 数据根据从 'LudRules' 列创建的组进行排序。组是通过 Tfidf 向量化和 Kmeans 聚类选择的,从最初的 1373 个规则集略微减少到大约 1270 个(不同种子的数字略有不同)。意图是在创建 CV 分割时将非常相似的游戏视为同一个游戏,从而生成希望在训练数据之外泛化更好的 CV 估计。我不确定这是否真的有帮助,但这似乎是有意义的,至少不会对预测性能产生负面影响。
  • 删除了 'LudRules'、'EnglishRules'、'GameRulesetName' 和 'Id'。
  • 数据通过翻转 'agent1' 和 'agent2' 进行增强,将 'AdvantageP1' 改为 1-'AdvantageP1',并通过符号翻转将 'utility_agent1' 改为 'utility_agent1'*-1。我还添加了一个增强数据虚拟特征,让模型知道哪些行数据源自增强。这似乎可能适得其反,但它略微提高了 CV 得分。增强也用于推理,从而从每个模型生成两个预测——增强后的预测通过乘以 -1 翻转回来。
  • 分类代理列值进行了独热虚拟编码(以最常见的值作为基线)。
  • 来自 'LudRules' 的唯一规则集组进行了虚拟编码。这些额外的规则组特征仅在训练某些 boosting 模型时使用。(添加这些“训练外全零”特征似乎对 NN 模型没有益处,因此未在 NN 模型中使用。)
  • 在训练 NN 模型和从 NN 模型推理之前,连续变量被映射到标准正态分布。

除了来自 'LudRules' 列的文本得分(再次感谢 yunsuxiaozi)之外,我没有复制任何公开 notebook 的想法。尽管如此,我肯定从有趣的讨论和 Kaggle 整体社区中受益良多!

模型结构和训练

7 个模型的集成

  1. Boosting: CatBoost without dummy rule-set identifiers (无虚拟规则集标识符)
  2. Boosting: 第 2 个 CatBoost with dummy rule-set identifiers (有虚拟规则集标识符)
  3. Boosting: LightGBM (LGBM) without dummy rule-set identifiers (无虚拟规则集标识符)
  4. Boosting: 第 2 个 LGBM with dummy rule-set identifiers (有虚拟规则集标识符)
  5. NN: 多层感知机 (MLP) without dummy rule-set identifiers (无虚拟规则集标识符)
  6. NN: 第 2 个,更大的 MLP without dummy rule-set identifiers (无虚拟规则集标识符)
  7. NN: 自编码器 (AE) 后接 MLP without dummy rule-set identifiers (无虚拟规则集标识符)

所有模型使用相同的特征,除了 boosting 模型 2 和 4 添加了全套虚拟规则组集标识符特征。

每个模型的预测都被限制在目标范围 (-1 到 1)。然后使用普通最小二乘法 (OLS) 回归将模型组合成 CV 加权集成。在此阶段排除了来自 NN 模型的增强预测,因为它们似乎没有提供明显的好处。此外,出乎意料的是,CV 估计对第 2 个更大的 MLP NN(模型 6)和 AE NN(模型 7)的预测给出了明显的负权重。通常我怀疑在预期为正的地方使用负模型权重。我认为负估计主要表明模型结构/规范有改进潜力,而不是实际包含在模型集成中的东西。然而,我未能在竞赛时间限制内改进我的方法,并且由于负权重似乎对 CV 和公共排行榜得分都有益,我决定采用包括这两个负权重 NN 模型的完整模型结构。此外,一个假设是负权重——对于可能过拟合的模型——可以 somewhat 提高泛化性能,即在训练数据之外,这对我来说似乎并非完全不合理。

然后将完整集成预测限制在目标范围内,并通过 CV OLS 回归对限制后的集成预测进行缩放。我有点担心这可能会过拟合数据,但我还是决定保留缩放,因为它提高了 CV 和公共排行榜得分。

使用上述结构,我训练了 6 组具有不同种子的相同结构模型集。种子是半随机化的,手动挑选了一些 CV 得分太低或太高的种子被丢弃。这是因为更适中的 CV 得分似乎能更好地泛化到公共排行榜。

最后在绝对的最后一步,来自所有 6 组的组合预测再次被限制在目标范围内。

通过直接公共排行榜(过)拟合进行的最终调整

通过上一节描述的方法,我生成了一个主要基于 CV 的提交。

此外,我决定基于我认为更像是完全排行榜过拟合的方法再做另一个提交。可能的“过拟合”方法与第一个方法有两点不同:

  1. 之前排除的来自 NN 模型的增强数据预测现在被包括在内,权重直接拟合到公共排行榜,且为负权重。
  2. 添加了一个对所有模型预测具有相等权重的预测集。然后将这些预测添加进来,再次使用直接从公共排行榜拟合的负权重。

对我来说,这似乎是一个经典的过拟合甚至是绝望的举动,几乎肯定不是私有排行榜得分的获胜选择。

然而,我的基于 CV 与公共排行榜过拟合策略的得分结果如下:

私有分数 公共分数
主要基于 CV 的提交 0.42324 0.41779
完全公共排行榜过拟合提交 0.41996 0.41429

所以,幸运的是,我错了。在这个特定竞赛中,排行榜过拟合方法的可疑选择事实证明是有回报的。至少部分原因可以解释为某些游戏规则集同时出现在公共和私有测试集中,请参阅组织者发布的这篇 竞赛结束帖子。我没想到游戏会同时出现在公共和私有测试集中,但很明显这奖励了与公共排行榜一致的提交。无论如何,我对结果感到谦卑,并诚实地认为我的第二名提交更多的是运气而不是技能。

再次感谢

同比赛其他方案