506. Tabular Playground Series - Aug 2022 | tabular-playground-series-aug-2022
这是我 (@nourhadrich) 和我的队友 @medali1992 第一次在比赛中进入前 1%。我们注意到的第一件事是训练集和测试集中的测量模式之间存在差异。这促使我们确保在验证过程中使用这些新的模式(测试集)。AmbrosM 提出的 3 vs 2 交叉验证方案是防止排行榜过拟合的关键。
我们使用了以下代码:
folds_dict = {f'Fold 1': [['C', 'D', 'E'], ['A', 'B']],
'Fold 2': [['B', 'D', 'E'], ['A', 'C']],
'Fold 3': [['B', 'C', 'E'], ['A', 'D']],
'Fold 4': [['B', 'C', 'D'], ['A', 'E']],
'Fold 5': [['A', 'D', 'E'], ['B', 'C']],
'Fold 6': [['A', 'C', 'E'], ['B', 'D']],
'Fold 7': [['A', 'C', 'D'], ['B', 'E']],
'Fold 8': [['A', 'B', 'E'], ['C', 'D']],
'Fold 9': [['A', 'B', 'D'], ['C', 'E']],
'Fold 10': [['A', 'B', 'C'], ['D', 'E']]}
for fold in folds_dict.keys():
print(f'########################## {fold} ##########################')
x_train, y_train = df_train[df_train['product_code'].isin(folds_dict[fold][0])][features].values,
df_train[df_train['product_code'].isin(folds_dict[fold][0])]['failure'].values
x_valid, y_valid = df_train[df_train['product_code'].isin(folds_dict[fold][1])][features].values,
df_train[df_train['product_code'].isin(folds_dict[fold][1])]['failure'].values
如果你想要这段代码更好的实现版本,请查看 ROBERT STOCKTON 的工作,这是用更 Sklearn 的方式编写的相同逻辑代码。
我们最好的单一模型是 Tabnet,但在比赛结束后,我们在其中一个集成模型中发现了一个巨大的错误(在 CatBoost 中使用了 model.predict() 而不是 model.predict_proba()),这影响了整体分数和我们的排名,如下表和图片所示:
| 模型 | 公共分数 | 私有分数 |
|---|---|---|
| Tabnet | 0.58908 | 0.59098 |
| Logistic Regression | 0.58974 | 0.59018 |
| LightGBM | 0.58381 | 0.58831 |
| Neural network | 0.58828 | 0.59064 |
同比赛其他方案 |