返回列表

2nd Place - GBDT + NN + SVR + Original Data

646. Playground Series - Season 5, Episode 3 | playground-series-s5e3

开始: 2025-03-01 结束: 2025-03-31 气象预报 数据算法赛
2nd Place - GBDT + NN + SVR + Original Data

第二名 - GBDT + NN + SVR + 原始数据

作者: Chris Deotte (Grandmaster)
发布时间: 2025-04-03
竞赛排名: 第 2 名

哇,真是大变局!我从第一天就担心会有大变局,所以我保持解决方案简单。

表格数据 (Tabular Data)

一般来说,对于表格数据,我喜欢融合 GBDT 和神经网络 (NN)。然后我尝试添加一些机器学习模型,如 SVR, LR, KNN 等。此外,在 Kaggle Playground 比赛中,我们必须决定如何使用创建合成数据所用的原始数据集。

特征工程 (Feature Engineering)

当训练数据较小(行数少)时,我很少或不做特征工程,因为容易过拟合训练数据。当数据较大(行数多,如 12 月和 2 月的 Playground 比赛)时,我会做大量特征工程。

在这次比赛中,我选择不做特征工程。我的解决方案只是多个模型的简单平均,每个模型都在“原样”数据上训练, without 特征工程。所以在这次比赛中,我把时间花在训练不同的多样化模型上(以不同方式使用原始数据)。并使用分组 K 折交叉验证 (Group K Fold) 评估本地集成袋外 (OOF) CV 分数。(并且每个集成使用等权平均以避免集成过拟合)。

分组 K 折交叉验证 (Group K Fold)

在这次比赛中,我使用了 6 折的 Group K Fold。我将训练数据分为 6 年,每年作为一个折。因为测试数据是两年的新数据。

train['group'] = train['id']//365

原始数据作为新行 (Original Data as New Rows)

train.csv 数据是 6 年共 2190 行。原始数据集是 1 年共 366 行。一种添加原始数据的方式是使用 pd.concat() 添加新行。(此时它变为 group=7 用于训练,并在验证分数计算中被忽略)。

train = pd.concat([train,orig],axis=0)

=> XGBoost - CV 0.893, 公共 LB 0.848, 私有 LB 0.90317

单模型使用 max_depth=3, colsample_bytree=0.9, subsample=0.9,类似于我的 XGB starter notebook 版本 1 [1]。我们使用“原样”数据 without 特征工程。(使用将原始数据作为新行的训练数据)。

=> TabPFN - CV 0.894, 公共 LB 0.867, 私有 LB 0.90193

单模型使用“原样”数据 without 特征工程。(使用将原始数据作为新行的训练数据)。

=> [两模型融合] - CV 0.897, 公共 0.859, 私有 LB 0.90474 - [第 11 名]

上述两个模型的等权集成获得了第 11 名!

原始数据作为新列 (Original Data as New Columns)

train.csv 数据有 11 个特征列。原始数据也有 11 个特征列。一种添加原始数据的方式是使用 pd.merge() 添加新列。(我们在上一次 Playground 比赛中分享了这个想法 [3])。

m = train.rainfall.mean()
for c in COLS:
    n = f"{c}2"
    train[n] = train[c].map( orig.groupby(c).rainfall.mean() )
    train[n] = train[n].fillna(m)

=> RAPIDS SVC - CV 0.896, 公共 0.852, 私有 0.90610 - [第 2 名]

单模型使用 RAPIDS SVC,参数 C=0.1, kernel='poly', degree=1,类似于我的 starter notebook [2]。我们使用“原样”数据 without 特征工程。(使用将原始数据作为新列的训练数据)。这个单模型获得了第 2 名!

=> [三模型融合] - CV 0.898, 公共 0.855, 私有 LB 0.90728 - [第 1 名]

上述三个模型的等权集成获得了第 1 名!

我的最后 2 次提交 (My Final 2 Submissions)

对于我的最后 2 次提交,我训练了一些其他模型(CatBoost, LogisticRegression, XGBoost, SVR)并提交了两个不同的 6 模型等权融合。上述三个模型是最强的。额外的模型将集成 CV 分数提高到了 0.9000.901,但没有将私有 LB 分数提高到超过 0.906。我的最后 2 次提交的 6 模型集成如下:

=> [六模型融合] - [第 2 名]

  • CV = 0.900, 公共 LB = 0.857, 私有 = 0.90604
  • CV = 0.901, 公共 LB = 0.867, 私有 = 0.90599
同比赛其他方案