Timmy_Juicehouse
预计阅读时间:1分钟29秒

Kaggle NeurIPS Ariel Data Challenge 2024 第22名银牌方案

比赛链接:https://www.kaggle.com/competitions/ariel-data-challenge-2024

0
0

比赛难点


  • 天文学背景,学科领域太冷门,基本工作和生活中就接触不到;


  • 信号处理,个人觉得是个难点但是没有那么难;


  • 和常规单日5次提交不同,这个比赛单日的提交只有2次,容错率非常低;


  • sigma的计算,这个比赛最变态的地方,因为误差分布是不可能针对数据的波动预测的,但是拿高分必然数据的变化是有规律的,这可咋弄?


信号预处理


信号预处理的方式和大多数的public notebook区别不大:我们采用每10个时间步长进行分箱,并且仅考虑信号中的12个中心像素(而非32个)。我们尽可能尝试了不同的分箱方式,但分箱粒度较小的时候会得到更多噪声。


特征工程


我们根据不同的波长(wavelengths)数据组构造了不同的“深度(depth)”,我们选择了15和30个波长为一组的分组,只考虑the ingress(信号左边)和the egress(信号右边)来计算横行光线变化的“深度”。这些特征在大多数的样本中是连续的,但有一小部分样本不适用于这个特征工程。我们还尝试了一些使用最小化(minimize)方法来优化,但在处理波长时效果没那么好。


建模


我们通过消除特征组的方式进行了特征选择。最终选择模型为岭回归模型(ridge)。对于交叉验证(cv),我们只进行了两折:


  • 第一折:星体1作为训练集,星体0作为验证集;


  • 第二折: 星体0作为训练集,星体1作为验证集;


我们这样做是因为希望使用的特征在数据漂移(因为测试数据包含不同的星体,且其分布不同)的情况下也能很好地泛化。


SIGMA的近似计算


这是这个比赛最难的地方,也是我们这场比赛花费时间最多的地方,至今我们也没有想出一个很好计算sigma的方式。


为了计算西格玛(sigma),我们尝试了分位数回归(quantile regressions)、贝叶斯岭回归(bayesian ridge )等方法。但到目前为止,效果最好的是根据我们给出的输出值的幅度来缩放西格玛(sigma)。例如,如果我们给出的输出是10,那么误差应约为预测值的10%(即10±1);但如果输出是1,那么西格玛就是1的10%,即0.1。我们最后确定的计算公式是:


                                               sigmas = preds * 0.004 + (np.sqrt(np.std(preds, axis=1)) * 0.0095)[:, np.newaxis]


这是最简单粗暴的方法,我个人尝试过2D的深度学习densenet+resnet的模型,但是最终效果没有简单的回归模型有效,但是能帮到队友的是,2d深度学习的模型可以监控每个batch的误差,最终我们找到了这个看起来还算能拟合数据分布的sigma,就是没有那么完美。


我们最终选择了10个lb最高的模型进行融合,最终是22名。如果是10个cv最好的模型来融合私榜的成绩会更好,目前看榜单极限我们能到第9名。


data/5a2c9e73-ca12-4c1d-a8de-2f3fe11ed67e/d3937402-8a46-41ac-b25e-5a0fab802c3a/645eZF0025_uJnNFXCMqjQudWcAWOXkiea.jpg


这是我们为了寻找sigma规律尝试做的努力。

评论
Copyright Created by DataER | 沪ICP备2024052789号-5 | 沪公网安备31010402336337号