678. Playground Series - Season 5, Episode 11 | playground-series-s5e11
这是一场不错的比赛,尽管第一周后冠军似乎就已明朗。恭喜 @mahoganybuttstrings 和其他高分选手。令我印象深刻的是 @angelosmar1 和 @pirhosseinlou 仅凭几次提交就取得了如此高的排名。
感谢 @yekenot 和 @masayakawamata 提供的优秀神经网络笔记本。他们都产生了具有良好 CV 分数的非常多样的模型,但它们无法与我其余的模型集成。我相当确定,由于未能找到将它们纳入集成的方法,我错失了很多机会,但有时就是这样。
我们总是谈论模型多样性带来良好的集成,在我的案例中,这是通过将所有特征视为分类变量来实现的。我们有几个特征的基数 > 100,000,但我通过将 loan_amount 四舍五入到最接近的 10,将 annual_income 四舍五入到最接近的 100,将其转换为可管理的数量。修改后的类别数量如下,它与 Keras 因子分解机 (FM) 配合得很好:
annual_income 1778
debt_to_income_ratio 572
credit_score 406
loan_amount 3683
interest_rate 1498
gender 3
marital_status 4
education_level 5
employment_status 5
loan_purpose 8
grade_subgrade 30
这得分约为 0.926,添加双 gram 交互后推升至 0.9265。单独来看,这些并不是我最好的模型,但它们与 GBM 模型融合得非常好。你可以从附带的爬山 plot 中看到,这些 FM 预测在经过一轮爬山后将 CV 分数从 0.9275 推升至约 0.928。Keras 和 CatBoost 堆叠在这些大型集成上都过拟合了,尽管在之前的 AUC 比赛中它们是最好的。最终经过大量正则化后我让 Keras 工作了,但那时它的分数略低于爬山法。
以下是进入最终集成的一些代表性模型列表。
| 模型 | CV | 公共榜单 | 私有榜单 |
|---|---|---|---|
| XGBoost num | 0.927548 | 0.92742 | 0.92862 |
| CatBoost cat | 0.927551 | 0.92743 | 0.92862 |
| XGBoost cat | 0.927516 | 0.92738 | 0.92854 |
| LightGBM num | 0.927171 | 0.92714 | 0.92839 |
| CatBoost num | 0.927202 | 0.92725 | 0.92837 |
| LAMA AutoInt | 0.926842 | 0.92702 | 0.92829 |
| LAMA DenseLight | 0.926779 | 0.92705 | 0.92824 |
| RealMLP | 0.926831 | 0.92709 | 0.92823 |
| Keras FM | 0.926564 | 0.92653 | 0.92778 |
| PyT-trompt | 0.926300 | 0.92605 | 0.92755 |
| TabM | 0.926061 | 0.92636 | 0.92751 |
| TabR | 0.925350 | 0.92528 | 0.92645 |
如表所示,我尝试了几乎 10 种不同的 NN 架构,因为我确信需要这样做来弥补模型中特征工程的不足。不幸的是,我无法让 RealMLP 或 PyT-trompt 模型在集成中工作。它们有助于提高 CV 分数,但当它们添加到组中时,公共 LB 分数(以及后来的私有 LB)下降了。
我无法让 AutoGluon 产生任何有用的东西,可能是因为我开始得相对较晚,并且只使用了原始数据而没有进行任何特征工程。
我很好奇是否其他人也在集成阶段遇到过拟合问题。通常对于这种大小的数据集和 folds 分割一致的模型来说,这不是问题,但在这里我经常得到 0.9289 的 CV 分数,而在公共 LB 上得分却低得多。
最后我选择了我的最佳和第 4 佳提交,这总是感觉很好。