数据科学

Kaggle 大师级玩家手册:7 种实战验证的表格数据建模技术

在数百场 Kaggle 比赛中,我们不断优化了这套 BLUEPRINT,无论面对的是数百万行数据、缺失值,还是与训练数据截然不同的测试集,它始终帮助我们跻身排行榜前列。这不仅仅是一系列建模技巧的集合,而是一个可重复的系统,能够快速解决现实世界中的表格数据问题。

以下是七项经过验证的技术,每项技术均通过 GPU 加速实现。无论您是希望提升性能排名,还是在生产环境中部署模型,这些策略都将为您带来显著优势。

我们已为每项技术添加了往届比赛的说明或 notebook 示例链接。请注意:Kaggle 和 Google Colab notebook 提供免费的 GPU 及加速插件(如下所示,插件已预安装)。
注意: Kaggle 和 Google Colab notebook 提供免费的 GPU 及加速插件(如下所示,插件已预安装)。

核心原则:致胜工作流程的基础

在深入探讨技术细节之前,不妨稍作停顿,先介绍贯穿本手册的两大核心原则:快速实验与仔细验证。这两项原则并非可选的优化方法,而是我们应对每一个表格建模问题的基石。

快速实验

在任何竞赛或现实项目中,我们最大的优势在于能够运行大量高质量的实验。迭代次数越多,发现的模式就越丰富,当模型出现故障、漂移或过拟合时,我们就能越快地捕捉到问题,从而尽早调整方向并加速优化进程。

在实践中,这意味着我们需要优化整个流程以提升速度,而不仅仅是模型训练这一环节。

我们的工作原理如下:

  • 使用适用于 pandas 或 Polars 的 GPU 插入式替代品加速数据帧操作,以大规模转换和设计功能。
  • 使用 NVIDIA cuML 或 XGBoost、LightGBM 和 CatBoost 的 GPU 后端训练模型。

GPU 加速不仅适用于深度学习,而且通常是实现高级表格技术大规模应用的唯一途径。

本地验证

如果无法信赖自身的验证分数,就如同在黑暗中摸索前行。因此,交叉验证(CV)成为我们工作流程中不可或缺的基石。

我们的方法:

  • 使用 K 折交叉验证,其中模型使用大多数数据进行训练,并对保持不变的部件进行测试。
  • 旋转折叠,以便对数据的每个部分进行一次测试。

这提供了比单一训练/验证划分更可靠的性能评估标准。

专业技巧: 根据测试数据的组织方式调整您的交叉验证策略。

例如:

  • 使用 TimeSeriesSplit 处理与时间相关的数据
  • 对分组数据 (如用户或患者) 使用 GroupKFold

在这些基础准备就绪(快速推进并仔细验证)后,我们现在可以深入研究这些技术。每个模型都建立在这些原则之上,并展示了如何将原始数据转化为世界级的模型。

1. 从更智能的 EDA 开始,而不仅仅是基础知识

大多数从业者都了解基础知识:检查缺失值、异常值、相关性和特征范围。这些步骤固然重要,但仅是基础环节。若要构建在现实世界中稳健可靠的模型,您需要更深入地探索数据——我们发现一些实用的快速检查方法,却常被忽视:

训练与测试分布检查:识别评估数据与训练数据之间的差异,因为分布变化可能导致模型在验证阶段表现良好,但在实际部署时失效。

Train vs test feature distribution plot showing shift in values (train: lower range, test: higher range).
图 1。比较训练 (蓝色) 和测试 (红色) 之间的特征分布可以发现明显的变化,即测试数据集中在更大的范围内,重叠最少。这种分布变化可能会导致模型验证良好,但部署失败。

分析目标变量的时间模式:检查是否存在趋势或季节性,因为忽略这些时间模式可能导致模型在训练阶段表现准确,但在实际应用中失效。

Time series plot of target variable showing upward trend and seasonal cycles across 2023–2024.
图 2。随着时间的推移,分析目标变量会发现季节性波动和加速增长的强劲上升趋势。忽略此类时间模式可能会误导模型,除非使用时间感知验证。

这些技术并非新事物,却常常被忽视,而忽视它们可能导致项目失败。

为何如此重要:跳过这些检查可能会破坏原本稳定的工作流程。

实际效果:在 Amazon KDD Cup 23 的获奖解决方案中,该团队发现了关于训练(测试分布偏移和目标中的时间模式)的关键见解,这些见解塑造了最终方法。 阅读完整报道 >

使用 GPU 实现:现实世界的数据集通常包含数百万行数据,这可能导致 pandas 处理速度显著下降。通过采用 NVIDIA cuDF 实现 GPU 加速,您能够在几秒钟内高效完成大规模的分布比较和相关性分析。 阅读技术博客 >

2. 快速构建多样化基准

许多人会构建一些简单的基准模型(例如预测均值、逻辑回归或快速训练的 XGBoost),然后便继续推进后续工作。然而,问题在于,单一基准模型难以充分反映数据的整体特性。

我们的方法有所不同:我们立即在模型类型中启动一组不同的基准测试。通过并行执行线性模型、GBDT 甚至小型神经网络,我们可以获得更丰富的背景信息,从而更好地指导实验。

为何如此重要:基准是您的直觉检查——它们能够验证模型是否优于随机猜测,确立基本性能标准,并提供快速反馈。在数据发生变化后重新运行基准,不仅可以判断您是否取得了实际进展,还能帮助发现数据泄露等问题。

不同的基准还可以在早期为您揭示最适合您数据的模型系列,从而帮助您深入探索可行的方法,避免在错误的方向上浪费计算资源。

实际应用:在“使用降雨数据集进行二进制预测”竞赛中,我们的任务是基于天气数据预测是否降雨。我们的基准模型表现优异——一组梯度提升树、神经网络和支持向量回归(SVR)模型,在未进行任何特征工程的情况下,便足以获得第二名。在探索其他基准时,我们发现仅使用单个支持向量分类器(SVC)作为基准,其排名也接近榜首。 阅读完整报道 >

使用 GPU 变得可行:在 CPU 上训练各种模型可能非常耗时。借助 GPU 加速,您可以尝试多种方法(用于快速数据处理的 cuDF、用于线性与逻辑回归的 cuML,以及 GPU 加速的 XGBoost、LightGBM、CatBoost 和神经网络),从而在几分钟内(而非几小时)获得更深入的洞察。

3. 生成更多功能,发现更多模式

特征工程依然是提升表格数据准确性的关键方法之一。挑战在于:在 CPU 上使用 pandas 生成并验证数千个特征时,速度过慢,难以高效实现。

为何如此重要:通过将少量手动转换扩展为数百或数千个设计特征,通常能够发现仅凭模型难以捕捉的隐藏信号。

示例:合并类别列

在一次 Kaggle 竞赛中,数据集包含八个分类列。通过组合这些列,我们创建了 28 个新的分类特征,有效捕捉了原始数据中未体现的交互信息。以下是该方法的简化片段:

for i,c1 in enumerate(CATS[:-1]):
     for j,c2 in enumerate(CATS[i+1:]):
        n = f"{c1}_{c2}"
        train[n] = train[c1].astype('str')+"_"+train[c2].astype('str')

实际应用:在 Kaggle 背包和保险竞赛中,大规模特征工程助力夺冠,数千个新功能的引入起到了关键作用。

GPU 助力实现:借助 cuDF,pandas 操作(如分组、聚合和编码)的运行速度可提升几个数量级,从而在数天内(而非数月)生成并测试数千个新功能。

查看下方的技术博客和培训课程,获取实战示例:

梳理不同的模型 (集成) 可提升性能

我们发现,通过结合不同模型的优势,性能往往能够超越单一模型所能达到的水平。其中,两种尤为有效的技术是爬山法和模型堆叠。

4. Hill climbing

Hill climbing 是一种简单但功能强大的模型集成方法。从性能最强的单一模型出发,系统性地逐步添加其他模型,并赋予不同的权重,仅保留能够提升验证表现的组合。该过程不断重复,直至不再出现性能提升为止。

为何如此重要:集成能够实现不同模型之间的优势互补,但难以找到最优的融合方式。爬山法可自动执行搜索,通常能提升准确性,优于单一模型的解决方案。

实际效果:预测热量消耗比赛中,我们采用由 XGBoost、CatBoost、神经网络和线性模型组成的集成模型,成功取得领先成绩。 阅读文章 >

借助 GPU 实现高效:Hill climbing 法本身并不新鲜,它在比赛中是一种常见的集成技术,但通常因速度过慢而难以大规模应用。借助 GPU 上的 CuPy,我们可以对指标计算(如 RMSE 或 AUC)进行向量化,并并行评估数千个权重组合。这种加速使得能够测试比在 CPU 上更为丰富的集成方案,通常能发现更强的模型混合。

以下是用于在 GPU 上评估爬坡集成的简化版代码:

import cupy as cp

def multiple_rmse_scores(actual, predicted):
    if len(actual.shape)==1: 
        actual = actual[:,cp.newaxis]
    rmses = cp.sqrt(cp.mean((actual-predicted)**2.0,axis=0))
    return rmses

def multiple_roc_auc_scores(actual, predicted):
    n_pos = cp.sum(actual)  
    n_neg = len(actual) - n_pos  
    ranked = cp.argsort(cp.argsort(predicted, axis=0), axis=0)+1  
    aucs = (cp.sum(ranked[actual == 1, :], axis=0)- n_pos\
 	*(n_pos + 1)/2) / (n_pos*n_neg)     
    return aucs

5. 堆叠

堆叠通过利用其他模型的输出来训练一个新模型,从而实现模型的进一步整合。与使用权重计算预测平均值(如爬山法)不同,堆叠能够构建一个二级模型,以学习如何更有效地组合各个基模型的输出。

为何如此重要:当数据集包含不同模型以不同方式捕捉的复杂模式(例如线性趋势与非线性交互)时,堆叠尤其有效。

专业技巧:两种堆叠方法详解

  • 残差:训练第 2 阶段模型,了解第 1 阶段出了什么问题 (残差) 。
  • OOF 特征:将阶段 1 预测用作阶段 2 的新输入特征。

这两种方法都能捕捉基础模型未能识别的模式,从而有助于从数据中提取更多信号。

实际效果:在 Podcast Listening Time 比赛中,通过采用由多种模型(线性模型、GBDT、神经网络和 AutoML)构成的三级堆叠(Stacking)方案取得领先成绩。 阅读技术博客 >

A flow diagram showing a three-level model stack. Level 1 includes diverse models such as NVIDIA cuML Lasso, SVR, KNN Regressor, Random Forest, neural networks (MLP, TabPFN), and gradient-boosted trees (XGBoost, LightGBM). Their predictions feed into Level 2 models, including XGBoost and MLP. Finally, Level 3 combines outputs with a weighted average to produce the final prediction.
图 3。Kaggle 2025 年 4 月 Playground 比赛的获奖作品使用了三个模型级别的堆叠,并将每个级别的结果用于后续关卡。

使用 GPU 变得切实可行: 堆叠是一种广为人知的集成技术,但深度堆叠会迅速带来高昂的计算成本,需要将数百个模型跨折叠和层级进行拟合。借助 cuML 和 GPU 加速的 GBDT,我们可以更快速地训练和评估堆叠模型,将探索多层集成的时间从几天缩短至几小时。

6. 使用伪标记将未标记数据转换为训练信号

伪标记可将未标记的数据转化为训练信号。您可以使用性能最优的模型对缺少标签的数据(例如,测试数据或外部数据集)进行推理,然后将这些“伪标签”重新纳入训练过程,以提升模型性能。

A flow diagram of the pseudo-labeling process. Train data is used to build an initial model (Level 0), which is validated and tested. The same model generates predictions on unlabeled data, producing pseudo-labels. These pseudo-labels are combined with the original training data to train a second-level model (Level 1), which is then validated and tested.
图 4。伪标记工作流 – 使用经过训练的模型为未标记的数据生成标签,然后将这些伪标记重新放入训练中,以提高性能。

为何如此重要: 数据越多,信号越丰富。伪标记能够提升模型的鲁棒性,其作用类似于知识蒸馏(学生模型从优秀教师模型的预测中学习),甚至可以通过过滤掉模型预测不一致的样本来辅助标记数据的去噪。使用软标签(即概率输出而非硬性的 0/1 标签)可增强正则化效果,并有效降低噪声影响。

专业技巧:高效实施伪标记

  • 模型越强大,伪标记就越好。集成或多轮伪标记通常优于单遍方法
  • 伪标记还可用于预训练。作为减少先前引入的噪音的最后一步,对初始数据进行微调。
  • 使用软伪标记。它们可以添加更多信号、降低噪点,并可以过滤掉低置信度样本。
  • 伪标记可用于标记数据,这对于去除噪声样本非常有用。
  • 避免信息泄露。使用 k-fold 时,您必须计算 k 个伪标记集,以便验证数据永远不会看到来自自行训练的模型的标签。

实际应用:BirdCLEF 2024 竞赛中,任务是根据鸟类录音进行物种分类。通过在未标记片段上使用伪标记生成软标签来扩展训练集,有助于模型更好地泛化到新物种及不同的录音条件。 阅读完整报道 >

使用 GPU 变得切实可行:伪标记通常需要多次重新训练流程(基准 > 伪标记 > 改进的伪标记)。在 CPU 上,这可能耗时数天,导致迭代难以实现。借助 GPU 加速(通过 cuML、XGBoost 或 CatBoost GPU 后端),您可以在几小时内完成多个伪标记周期。

7. 通过额外的训练来增强您的最终模型

即使在完成模型优化与集成之后,我们仍识别出两个可能带来额外性能开销的调整因素。

  • 使用不同的随机种子进行训练. 更改初始化和训练路径,然后对预测求平均值,通常可以提高性能。
  • 重新训练所有数据. 找到最佳超参数后,对所有训练数据拟合最终模型会增加准确性。

重要原因:这些步骤无需新架构,只需运行更多您已信任的模型。它们共同提升了稳定性,并确保您充分利用数据。

实际应用:“Predicting Optimal Fertilizers”(预测最佳肥料)挑战赛中,集成 100 个不同种子的 XGBoost 模型表现显著优于单种子训练模型。然而,对完整数据集进行重新训练带来了新的挑战。 阅读完整报道 >

A line chart showing the benefit of ensembling 100 XGBoost models with different random seeds. The blue line (ensemble) steadily increases and stabilizes around 0.379 MAP@3, while the orange line (average of single seeds) fluctuates around 0.376, showing that seed ensembling improves performance compared to individual models.
图 5。与单种子平均值 (橙色) 相比,使用不同随机种子集成 XGBoost (蓝色) 可稳步提升 MAP = 3。

注意:MAP = 3 (平均精度均值 3) 用于测量正确标签在模型排名前三的预测中出现的频率。

借助 GPU 实现实际操作:通过在 GPU 上加速训练和推理过程,模型可以被多次重复运行。原本在 CPU 上可能需要数天才能完成的任务,在 GPU 上仅需数小时即可完成,从而使额外的训练成为每个项目中的常规步骤。

总结:Grandmasters 的剧本

这本BLUEPRINT历经多年比赛和无数次实验的检验,始终基于两大原则——快速实验与严谨验证,并将其应用于每一个项目之中。借助GPU加速,这些先进技术得以大规模部署,使其在解决现实世界的表格问题时,能够像应对排行榜挑战一样高效。

如果您希望将这些想法付诸实践,可以参考以下资源,借助已使用的工具开启 GPU 加速:

 

标签