返回列表

[1st place solution] Single model (RAPIDS XGBoost)

533. Playground Series - Season 3, Episode 5 | playground-series-s3e5

开始: 2023-01-31 结束: 2023-02-13 数据算法赛
[第1名方案] 单模型 (RAPIDS XGBoost)

[第1名方案] 单模型 (RAPIDS XGBoost)

作者: Heitor Rapela Medeiros | 发布时间: 2023-02-15

大家好!
首先,我要感谢 Kaggle 团队举办了这次比赛。我在这些比赛中学到了很多,这有助于磨练我的技能!
与我在本次比赛的讨论区看到的其他方案不同,我没有使用集成。我的方案非常简单但有效(单个 xgboost 模型)。我在比赛的前两天努力工作,建立了一个具有良好交叉验证(CV)的良好基线。

笔记本链接 🔥🔥

  • 请享用 :)

额外数据 ❌

是使用原始 Wine 数据集还是仅使用比赛数据集?
对我来说,这一点很难决定。在比赛期间,我看到自己在公共排行榜上的排名下降,但最终,我决定不使用额外数据集,因为它在我的本地 CV 上过拟合得很严重。

训练和验证 (CV) ✔️

对于 CV,由于数据不平衡,我使用了 StratifiedKFold(分层K折),并根据一些提交调整了 K 值,以获取公共分数并与我的本地 CV 进行核对。我一开始用 K=5,但最后我发现 K=10 在我的实验中更可靠,于是 K=10 成了我最终的超参数。

特征工程 (FE) ❌

我尝试了不同的特征工程方法以及一些公开笔记本中可用的方法,但我的本地 CV 表现变差了,所以我移除了它们。最终,我的最终模型没有进行特殊的特征工程。

模型 (RAPIDS XGBoost - GPU) 🔥🔥🔥

我总是从一些标准模型开始,比如 lgbm、xgboost 或 catboost。对于这次比赛,我想尽快找到最好的模型,因为我想快速迭代,所以我从 RAPIDS XGBoost 开始。为了训练,我使用了 Kaggle GPU(感谢!)。(xgb 参数包括 'objective': 'reg:squarederror', 'tree_method': 'gpu_hist', early_stopping_rounds=50, 'num_boost_round': 1000)。对于测试集,我使用了 ntree_limit=model.best_iteration。其他的超参数等我有时​​间清理代码并发布笔记本时会提供! :)

回归优化类别截断 💯

我要感谢讨论区和公开代码,我利用它们构建了我的方案。我记得的一个是来自 @paddykbRegression_OptimiseClassCutoff 以及来自 @abhishek讨论(讨论者:@carlmcbrideellis)(我在超参数调整时使用了 OptimizedRounder 类)。由于在我的研究中训练/测试之间的数据分布偏移不是很大,我在每个折的验证预测上拟合 optimizerRound 以获取测试集的截断值。在除以折数后,预测值是浮点数,所以我在提交前使用了 .round().astype(int)。

超参数调整 ✔️

为了调整模型,我使用了 Optuna(我在超参数范围和试验次数上花了很多功夫)。我优化的指标是截断后训练 OOF 上的 cohen_kappa_score(weights='quadratic')。

致谢 🙏🙌

我想感谢其他在比赛中非常努力的参赛者,以及那些在笔记本和讨论区分享大量内容的人。如果我忘记感谢某人,我很抱歉,但我已经不再关注比赛了,因为我对那些使用外部数据并在公共 LB 上表现更好的人感到有些沮丧 😆

代码发布 ✨

我计划在我有时间清理并准备笔记本时发布代码。目前就是这些。

总结 💥

- RAPIDS:XGBOOST + SKFold10 + Optuna + 回归类截断(我信任我的本地 CV 来选择最终的两个模型)。

同比赛其他方案