返回列表

#15 solution - Try genetic programming features

664. Playground Series - Season 5, Episode 8 | playground-series-s5e8

开始: 2025-08-01 结束: 2025-08-31 信贷风控 数据算法赛
#15 解决方案 - 尝试遗传编程特征

#15 解决方案 - 尝试遗传编程特征

许多模型和许多集成

作者: Tilii (Grandmaster)
发布时间: 2025-09-01

我的解决方案非常标准:制作了许多模型和许多集成。在某个时刻,添加更多模型带来了略微更好的交叉验证(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。如果你尝试它们,请让我知道它们是否对你有效。

同比赛其他方案