538. Playground Series - Season 3, Episode 8 | playground-series-s3e8
感谢 Kaggle 在这个精彩的系列赛中举办了又一场有趣且令人愉快的比赛,也感谢所有参与并分享见解(和模型!)的人。这场比赛给了我一个尝试“疯狂”想法的机会,虽然这是本文的重点,但实际上它对最终集成的贡献不到四分之一。
我使用了以下三步预测工作流来设计一些额外的特征并生成更多的模型:
利用模型在训练集和测试集上的预测结果作为特征,是我以前就想做的事情。我做这件事主要是出于兴趣,事后看来,通过交叉验证(CV)获得训练集的预测结果可能会更容易。然而,训练集和测试集的大小比例相对均匀,这表明这可能是一个适合进行反向和回溯方法的比赛。更相关的是,直到反向工程已经花费了数小时成为“沉没成本”之前,我甚至没有考虑过使用 CV 来获取训练预测。
我选择了以下七个公开可用的模型作为我反向模型的“底盘”。选择它们是因为它们得分都很高,而且显然可以在不依赖私有数据集的情况下运行:
既然我要对这些模型进行改编,那么必须先让它们以原始状态运行起来;任何无法“按原样”运行的模型都会被放弃。实际上,所有七个模型都没有太大困难地运行了。这产生的预测结果本应与原始笔记本中的相同,除了我后来发现我错误地复制并编辑了模型 3 的“错误”版本,即 v9 而不是得分更高的 v4。
我现在有了每个模型对测试集的预测,但在将每个模型的输出用作新设计的特征之前,我仍然需要训练集的相应数值。为了获得它们,我需要测试集的价格数值,这显然是比赛的目标,因此只能进行估算。我使用了当时得分最高的公开模型的预测结果作为伪真值,因为该模型独立于我的七个模型(由于明显依赖于私有数据集,我没有尝试改编它):
因此,我将 @sergiosaharovskiy 模型的预测结果作为价格列添加到测试集中(见此处),用它来训练反向模型,这些模型反过来会预测原始训练集的价格(故意掩盖其真值)。
接下来,我调整了这七个模型