634. Playground Series - Season 4, Episode 12 | playground-series-s4e12
这是一场有趣的比赛。在我前两次 Playground 比赛(2024 年 9 月,2024 年 11 月)中,特征工程并没有太多地改善 CV 或 LB,所以在那些比赛中,我花时间构建了一个由多种模型组成的大型集成(GBDT, NN, SVM 等)。
在这次 12 月的 Kaggle 保险 Playground 比赛中,特征工程帮助提高了 CV 分数和 LB 分数,所以在这场比赛中,我能够花时间构建单个模型并进行特征工程。构建一个强大的单模型非常 enjoyable。我的最终提交是一个具有 611 个特征的单个 XGBoost 模型!感谢 Kaggle 提供了一场有趣的比赛,让 Kagglers 能够练习分类特征工程!
我在这里发布了我最终提交的一个简单版本 这里,实现了 CV = 1.019。完整版本模型实现了 CV = 1.016,在 1xA100 GPU 上进行特征工程和训练需要 6 小时。简单版本在 1xT4 GPU 上需要 2 小时。简单版本只使用了 611 个特征中的 229 个。它使用 learning_rate = 0.01 对比 0.001,n_estimators = 2_000 对比 20_000,以及 target_encode(kfold=5) 对比 kfold=10。(这些简化缩短了训练时间但降低了 CV 分数和 LB 分数)。
提高 GBDT(梯度提升决策树,如 XGB, CAT, LGBM)的 CV 分数和 LB 分数的一个常见方法是为分类特征提供各种编码。给定一个分类列,基本编码是 标签编码。更高级的是 目标编码均值(即 TE)和 计数编码(即 CE)。我们甚至可以 TE 中位数,TE 最小值,TE 最大值,TE 唯一值数量。我们将原始列加上原始的 6 种不同表示形式提供给模型。所有这 7 种不同的编码都输入到模型中,使 GBDT 有多种方式来理解分类列,从而提高 CV 分数和 LB 分数。当然,我们甚至可以发明更多的编码。
由于编码分类列可以提高我们的 CV 分数和 LB 分数,我们可以通过组合现有的分类列来创建更多的分类列。然后我们可以从新列中工程化更多的编码,从而进一步提高 CV 分数和 LB 分数。在我发布的代码 这里,我们创建了 20 个新列(通过组合现有列)。我们在 9 月的 Playground 比赛中分享了这一想法 这里。
例如,我们可以将 2 列组合在一起。如果我们有列 Occupation,它是分类的,有 3 个值 ['Self-Employed', 'Employed', 'Unemployed'],我们有列 Gender,它是分类的,有 2 个值 ['Female', 'Male']。然后我们可以通过 train['new'] = train.Occupation +"_" + train.Gender 组合这两列创建一个新列。那么新列是分类的,有 6 个值 ['Self-Employed_Female', 'Self-Employed_Male', 'Employed_Female', 'Employed_Male', 'Unemployed_Female', 'Unemployed_Male']。我们也可以组合 3,4,5,6 等列。
另一种通常有效的技术是将数值列视为分类列。然后我们可以用 TE 均值,TE 中位数,TE 最小值,TE 最大值,TE 唯一值数量 和 CE 对它们进行编码。我们可以将数值列与其他数值和/或分类列组合,并对结果新列应用 TE 和 CE。
在这次比赛中,在分解 Policy Start Date(分为年、月、日、小时等)之后,我们有 23 个原始列。如果我们创建 2,3,4,5 和 6 列的所有组合,我们将有 145_000 个新列!这太多了,因此我们需要找到并使用最好的列。
对于每个组合,我们需要创建新列,计算 TE 和 CE,这需要嵌套的折叠分组聚合,然后训练一个 XGBoost 模型。评估单个组合需要时间。使用 GPU cuDF-Pandas,我们可以比使用 CPU 搜索多 10 倍到 100 倍的组合,哇!
在这次比赛期间,我让我的电脑日夜运行在一个 for 循环中,运行 GPU cuDF-Pandas 评估数千个随机组合。每当使用 TE 和 CE 进行特征工程的组合 improves CV score 时,代码将其保存到列表中。运行多天后,代码找到了 170 个强大的组合。我在我的解决方案代码 这里 中发布了最好的 20 个组合。
如果你想了解更多关于分类列特征工程的信息,NVIDIA KGMON 将在 2025 年 3 月 17 日至 25 日于加利福尼亚州圣何塞举行的 NVIDIA 2025 GTC(即 GPU 技术大会)上举办研讨会 这里。具体来说,我们将展示如何执行 TE(目标编码)和 CE(计数编码)并解释其工作原理。我们将展示如何将这些特征纳入模型以提高 CV 分数和 LB 分数!