664. Playground Series - Season 5, Episode 8 | playground-series-s5e8
我的解决方案非常标准:制作了许多模型和许多集成。在某个时刻,添加更多模型带来了略微更好的交叉验证(CV)分数,但没有提高公共排行榜(Public LB)分数。
以下是基于私有排行榜(Private LB)分数最好的 5 种单独模型:
| 模型 | CV | 公共 LB | 私有 LB |
|---|---|---|---|
| CatBoost Optuna | 0.976787 | 0.97772 | 0.97732 |
| xLearn FFM | 0.976567 | 0.97740 | 0.97708 |
| XGBoost Optuna | 0.976501 | 0.97736 | 0.97701 |
| Keras FM | 0.976795 | 0.97740 | 0.97701 |
| LAMA DenseLight | 0.975058 | 0.97629 | 0.97589 |
我使用了不同的集成器,LAMA DenseLight 效果最好。
我写这篇文章的主要原因是为了引起大家对遗传编程创建的 13 个特征的关注 - 见笔记本 这里。特征有点疯狂,很难理解。这里有两个简单的:
train['GP_07'] = np.exp(np.cos(np.exp(train['duration'] - np.exp(np.exp(np.cos(np.exp(train['pdays'])))))))
train['GP_08'] = np.cos(np.exp(train['duration'] - np.exp(train['pdays']) - np.exp(np.exp(-0.240221))))
一个复杂的特征:
train['GP_12'] = (train['balance'] - train['duration'] + np.exp(np.sqrt(np.abs(np.exp(2.136486*np.where(np.abs(np.where(np.abs(4.411698) < 1.0e-6, 0, np.log(4.411698))) < 1.0e-6, 0, np.log(np.where(np.abs(4.411698) < 1.0e-6, 0, np.log(4.411698))))**(-1))))))*np.sqrt(np.abs(np.where(train['duration'] <= 2.641809 - np.sqrt(np.abs(np.where(train['age'] <= 2.641809, np.where(np.abs(3.880161) < 1.0e-6, 0, np.log(3.880161)), np.exp(3.17722)))), train['duration'] + np.where(np.abs(3.880161) < 1.0e-6, 0, np.log(3.880161)), np.sin(3.17722))))**(-1)
如果将它们添加到原始数据集中,分数将提高 0.0025-0.003。在通过计数和目标编码生成其他特征后,这种提升就不那么明显了,但它仍然帮助分数提高了约 0.0001。如果你尝试它们,请让我知道它们是否对你有效。