670. NeurIPS - Ariel Data Challenge 2025 | ariel-data-challenge-2025
训练和提交代码链接
今年我也发布了完整的开发历史:https://github.com/jcottaar/ariel2
首先,我要感谢组织者举办了另一场精彩的比赛。我的开局相当令人沮丧(不知何故弄丢了去年的所有代码),但总体来说非常享受这个过程。如今贝叶斯方法的使用频率远不及应有的水平,我很高兴有机会在这里展示它的价值。
我的解决方案与去年非常相似;我在相关研讨会上的 NeurIPS 演讲 可以作为一个有用的介绍。我将在本帖的回复中简要讨论与去年的差异。
凌日分析是探测和研究系外行星最常用的方法。当行星相对于地球穿过其恒星前方时,就会发生凌日现象,遮挡部分星光。通过观察光线减少的程度(凌日深度)随波长的变化,我们可以了解行星的性质。但是,当一颗微小的行星穿过一颗巨大的恒星前方时,这个问题的信噪比非常低。我们要面临的挑战是:从未来 Ariel 卫星可能看到的合成原始光谱信号中,找到凌日深度及其置信区间(更多概述请参阅 竞赛概述)。

乍一看,这次竞赛像是去年类似竞赛的重演,但这次的数据要现实得多。我想我弄清楚了一些变化,但不是全部——正如我们稍后将看到的那样。
注意这里涉及两个传感器:单波长 FGS 传感器和光谱 AIRS 传感器。在这篇 writeup 中,我将主要关注 AIRS 传感器。
我的总体方法包括三个步骤,如下所示:

在第 2、3 和 4 节中,我将依次讨论这三个步骤。我将在第 5 节以一些结束语收尾——主要讨论为什么我的方法实际上并不完美...
原始数据是每个像素的计数;我们首先需要应用几个步骤来得出每个像素的光子计数。这在 主办方分享的一个 notebook 中有解释。我对 AIRS 使用 5 帧的时间 binning,对 FGS 使用 50 帧(这使它们大致同步)。热像素失效被禁用。我还添加了一个简单的宇宙射线去除。
真正改进的机会在于波长 binning 步骤,即在色散轴上求和。基线是简单求和,但数据中有几种效应使得可以做得更好。最值得注意的是著名的抖动(jitter),我们可以通过对训练数据中的所有 AIRS 帧进行 PCA(以及一些额外的预处理)最清楚地看到这一点:

抖动形状 presumably 对应于指向误差和散焦。
抖动形状在色散轴上的总和近似为零;这就是为什么简单求和效果还可以的原因。这也意味着任何更先进的预处理方案都必须处理抖动,因此入门门槛很高。尽管如此,这种方案可以利用数据中的几种效应:
我花了这次比赛超过一半的时间试图建立一个原则性的预处理流程来优化处理所有这些效应。不幸的是,我还没有成功——你会在代码中发现几个 disjointed 步骤试图处理上述问题。它们也往往只在某些配置和组合中起作用,我还没有完全理解。尽管如此,与简单求和相比,它仍然带来了约 0.01 的改进——我明年会解决这个问题...
现在我们有了作为波长和时间函数的光子计数,准备好使用贝叶斯推断来推断系外行星凌日深度。
贝叶斯推断 (BI) 是一种强大的统计方法,基于定义 先验(对现实的统计信念)和 观测(某种形式的新信息)。然后使用贝叶斯定律,我们将这些结合起来找到 后验(对现实的更新信念)。在我们的案例中,这意味着:
应用 BI 有两个关键要素:定义先验(第 3.1 节),以及应用贝叶斯定律进行推断(第 3.2 节)。
信号被分解为四个关键组成部分,如下所示:

此表显示了所有先验元素的详细描述:
| 先验元素 | 描述 | 调整和超参数 | 自由度 |
|---|---|---|---|
| 噪声 | 每个时间和波长的不相关高斯噪声 | 预处理中发现的标准差 | 1350 (FGS) + 317250 (AIRS) |
| 恒星光谱 | 每个波长的不相关值 | 未正则化(无限 sigma) | 283 |
| 漂移 | 时间和波长上的三阶多项式 | 未正则化(无限 sigma) | 3 (FGS) + 12 (AIRS) |
| 凌日窗口 | 使用 batman 包找到,具有以下自由参数: - 凌日中点时间 t0 (FGS 和 AIRS 分开) - 半长轴 sma - 周期 P - 轨道倾角 i - 二次临边昏暗 u0 和 u1 (包括对波长的线性依赖) - 凌日深度 Rp^2/Rs^2 (见下文) |
使用最大似然估计 (MLE) 在训练集上学习的协方差矩阵 | 11 (6 个临边昏暗,2 个 t0, sma, P, i) |
| 凌日深度:均值 | 单个值 | 轻度正则化 (sigma=0.01) | 1 |
| 凌日深度:变化 | 分解为以下三个组成部分 | 使用 MLE 确定每个行星的缩放因子(这是推断过程中唯一调整的超参数) | N/A |
| 凌日深度:变化 FGS | 单个高斯值 | 在训练集上发现的标准差 | 1 |
| 凌日深度:变化 AIRS | 波长上的高斯过程,两个平方指数核的和 | 使用最大似然估计在训练集上找到的核超参数 | 282 |
| 凌日深度:变化 PCA | 从 PCA 分析获得的固定基函数 | 在训练数据上找到的 PCA 形状和变化幅度(今年凌日深度似乎没有训练 - 测试群体偏移) | 5 |
定义了先验后,找到后验“只是”应用贝叶斯定律的问题。先验完全是高斯的,这意味着推断应该只是一个矩阵运算。但像往常一样,有个陷阱。在我们的案例中,先验参数和观测值之间的关系是非线性的(因为 batman 中的非线性建模,以及因为某些先验元素是相乘而不是相加)。
为了处理这种非线性,我们在后验均值周围线性化模型。这是迭代重复的(即 应用 BI -> 围绕新的后验均值线性化 -> 重复)。每一步我们还使用梯度下降更新单个超参数(凌日深度的缩放)。
这种方法确实意味着我们需要一个不错的起点,处理如下:
scipy.optimize.minimize 中实现的 BFGS。在这一步中,我们只考虑 AIRS 信号在波长上的均值。凌日深度的预测及其不确定性的协方差矩阵可以直接在后验中读出。协方差矩阵基于 200 个样本近似;这主要是去年的遗留问题,当时参数太多无法显式构建它。
如果前两步(网格搜索->BFGS)的残差可疑地高,我会应用两个额外的技巧:
上述获得的预测和不确定性仍然可以通过一些后验校准进一步改进。注意,这对于正确的贝叶斯方法来说是禁忌的——详见下文。
我们基于拟合调整每个传感器的凌日深度均值:
凌日深度随波长的变化在此步骤中不进行修正,即不改变。
我们基于拟合调整每个传感器的凌日深度不确定性:
总的来说,修正共有 12 个参数要拟合。这些是在完整训练集上确定的,基于优化竞赛指标的值。
修正有助于提高分数这一事实非常令人担忧。而且这并不微妙:去年,我没有修正的解决方案本可以获得第一名;今年,我没有修正的解决方案只能排在第 20 名左右。这意味着先验中缺少了一些东西,即它不能准确描述现实(或者更准确地说是合成数据生成过程)。
我花了很多时间试图找到这个差距,但没有取得太大进展。我开始相信问题在于凌日建模,但我尝试的任何变体(例如不同的临边昏暗模型)都没有帮助。我确信找到问题所在可以将我们的分数提高到 0.700 以上。
关于这个问题的更直接证据可以通过比较同一行星的不同凌日来找到;下图显示了凌日剖面的比率(经过一些预处理包括低通滤波)。先验中的任何东西(以及我能想到的其他任何东西)都无法解释这一点。另见 此讨论 和 代码。

我希望组织者愿意透露一些关于此的线索,因为我认为如果没有一些帮助,我们明年也搞不清楚。
最后,我将总结一下我的解决方案的各个元素对分数的贡献:
| 模型变更 | 对私有测试分数的影响 |
|---|---|
| 简化的加载器(主办方的流程 + 宇宙射线去除),无抖动校正或背景去除 | -0.013 |
| 不切除可疑凌日的前几帧或最后几帧 | -0.002 |
| 不对凌日深度使用高斯过程,只使用 PCA 注意:此变体不涉及任何高斯过程 |
-0.007 |
| 不对凌日深度使用 PCA,只使用高斯过程 | -0.011 |
| 禁用所有修正 - 完全依赖贝叶斯预测的结果 | -0.152 (去年:-0.000...) |
| 将所有修正替换为不确定性的单个乘法因子 | -0.017 |
| 禁用基于 AIRS 变化的 sigma 预测修正 | -0.005 |
| 禁用基于临边昏暗参数的均值预测修正 | -0.005 |
| 不正则化先验中的 11 个凌日参数 | -0.003 |