返回列表

33rd place solution - Polynomials, CNN and Ridge regression

626. NeurIPS - Ariel Data Challenge 2024 | ariel-data-challenge-2024

开始: 2024-08-01 结束: 2024-10-31 物理与天文 数据算法赛
第 33 名解决方案 - 多项式、CNN 和 Ridge 回归

第 33 名解决方案 - 多项式、CNN 和 Ridge 回归

作者:Andrei Zamfir

发布时间:2024 年 11 月 1 日

竞赛排名:第 33 名

首先,我要感谢主办方和 Kaggle 社区举办了这次比赛,这绝对是一次充实的经历,问题的领域是我特别感兴趣的,这使得整个过程非常有趣。

预处理

最初,除了公共 Notebook 中 available 的内容外,我没有做任何改变,稍微尝试了一下时间分箱(time binning),但没有尝试使用显著更大的数据集,继续使用典型的 187 个时间点。注意到去除读出噪声略微降低了平均光谱预测的 RMSE(大约 1 PPM),但我没有继续这样做。

我包含了除了本次挑战预测之外的额外波长,在我们分析的频带左右各大约 20 个。我想到我们可以利用这些来通过分箱额外波长来提高信噪比,本质上是跨频率的移动窗口,我注意到我们许多人独立地想到了这一点。

方法

我将这个挑战视为 3 个 distinct 问题,平均凌日深度 的估计,大气特征 的分布,最后,估计不确定性

平均凌日深度

为了计算平均凌日深度,我首先应用了 Savitzky-Golay 滤波器,使用 3 阶多项式拟合。为了提高信噪比,我平均了所有波长的信号。在绘制了一些 resulting 光变曲线后,我注意到了整体趋势的存在。

在使用导数计算凌日时间后,我对凌日外时期进行了多项式拟合并对光变曲线进行了去趋势处理。

光变曲线去趋势

在此校正之后,我在新的、去趋势的光变曲线上又拟合了 2 个多项式。一个用于凌日外时期(在校正应用后本质上变成了一条线),一个用于凌日内时期。凌日深度由 1 - in_transit/out_of_transit 给出。物理上,这代表行星半径与恒星半径的平方比。

凌日深度

对 283 个波长重复推导出的均值并计算与 ground truth 的 RMSE 结果为 97 PPM。仅看平均深度与平均 ground truth 的结果为 43 PPM。

大气特征

我使用了一个非常简单、 heavily regularized 的 CNN 架构,有 17k 参数:

KERNEL = 11
POOL = 2

input = Input((a-1,1))
x = Conv1D(8, KERNEL, activation='relu', kernel_regularizer=l2(0.001), padding='same')(input_wc)
x = BatchNormalization() (x)
x = MaxPooling1D(pool_size=POOL)(x)
x = Dropout(0.5)(x, training = True)
x = Conv1D(16, KERNEL, activation='relu', kernel_regularizer=l2(0.001), padding='same')(x)
x = BatchNormalization() (x)
x = MaxPooling1D(pool_size=POOL)(x)
x = Dropout(0.5)(x, training = True)
x = Flatten()(x)

x = Dense(32, activation='relu', kernel_regularizer=l2(0.001))(x)
x = Dropout(0.5)(x, training = True)
output = Dense(283, activation='linear')(x)

model = Model(inputs=input, outputs=output)
model.summary()

对于每个行星,我有一个 30 个频率的移动窗口被平均并计算凌日深度。这提高了信噪比,对于某些行星,将结果与 ground truth 分布 plotted 显示出相似性。我的 bet 是有一些信号可以被 picked upon,即使是对平均深度的轻微 reshaping 也可以显著改善误差,granted 我们不过度拟合 heavy noise 和 niches。

我使用 resulting 深度除以平均深度,生成一个 centered around 1 的系数数组,乘以之前计算的平均深度。所以对于 targets,我将每个 y 除以 y 均值以获得相同的系数。

CNN resulting 系数在与平均深度相乘后将我的 RMSE 降低到了 64 PPM。

我大约在一周前实现了 CNN 架构,我确信它可以被改进,30 个频率的移动窗口也可以被优化,我处理问题的许多方式纯粹是 heuristic。

采用新结果,我使用了简单的 Ridge 回归试图 squeeze 一点更多并进一步降低 RMSE,然而我非常害怕 overfitting 并且没有太多时间 play around submissions 来找到 RMSE 和 generalization 之间的 optimal tradeoff。

我继续使用一个 alpha 使我的新 RMSE 达到 58 PPM,即使对于较低的值,我可以看到接近 50 的下降,尽管我的 intuition 告诉我那是 overfitting。

不确定性

对于 sigma 估计和 play around with the GLL,我知道为了 maximize 分数,我们需要预测 residuals。在某种意义上,如果你能预测 residuals 的形状,你 sort of 找出 y_true。

我也相信 uncertainty 应该根据 Rp/Rs 的大小进行 scaled,有些行星在那里有 dramatic shifts (+- 50%),所以 accuracy 和 overshooting/undershooting 之间的 tradeoff 是这次比赛较难的部分之一。

我尝试了多种方法,包括让另一个 linear model 预测 residuals,导致 CV 分数高达 0.66,但 nothing translated to the LB。我没有 play around 仅对已知恒星这样做,我相信这 could somehow translate more to the LB,同时对未知恒星使用更 conservative 的 sigma。

最后,通过 trial and error,我发现了三种对 local score 工作非常好的方法:预测的标准差、residuals 的中位数和 residuals 的标准差。

我得分最高的结果是使用每个行星预测的简单、conservative 的 2 个标准差。

我相信 fiddling around with the distribution of sigma across the 283 波长 definitely 可以是一个 approachable 的方式来 improve 分数(against 预测行星所有点相同的 uncertainty),但我缺乏时间 dive deep into 这个问题的这一特定部分。当查看一些 particular plots 时,这是 obvious 的,其中 static sigma 显然不是 optimal 的。

Planet 66 Sigma

结语

这是我在 Kaggle 上的第二次 live 比赛,另一次伟大的 learning 经历。我 continuously awe 阅读讨论板和人们正在做的 knowledge sharing。我想感谢你们所有人给我这个机会来做这个并 improve 我对 Machine Learning 的理解。

我 definitely 期待 2025 年的 Ariel Data Challenge 并计划再次参加。

同比赛其他方案