670. NeurIPS - Ariel Data Challenge 2025 | ariel-data-challenge-2025
感谢 Kaggle 及所有参与举办这场有趣比赛的人。有很多东西值得学习,这就是我们参赛的原因。
我们的解决方案是混合使用 transit 光变曲线拟合,要么使用 batman + scipy-optimize,要么使用 pylightcurve-torch + gpytorch。然后我们训练了一个线性神经网络(NN)来校准预测并估计 sigma 值。
我们直到比赛结束前一周才发现 Pylightcurve-torch 和 GPytorch。随后我们冲刺 replicating 并改进了 batman 管道。
交叉验证很简单。我们 simply 将恒星分成 4 折。我们评估了没有交叉验证的曲线拟合步骤,因为没有训练,但对于神经网络后处理,我们进行了适当的交叉验证评估。总体而言,我们的交叉验证与 LB (Leaderboard) 相关性非常好。
我们使用 @ilu000 的预处理作为基础,该预处理已在此分享:https://www.kaggle.com/code/ilu000/ariel25-quick-data-prep-improved
我们添加了一个用于检测宇宙射线的微调,这也分享在 @jeroencottaar 的 notebook 中:https://www.kaggle.com/code/jeroencottaar/demonstrate-apparent-label-issue
我们做了以下额外的更改。当我们实施它们时,它们产生了超过 0.005 的分数改进。
# Step 4: dark current subtraction
if sensor == "FGS1":
dt = torch.ones(len(signal), device="cuda:0") * 0.1
dt[1::2] += 0.3
elif sensor == "AIRS-CH0":
dt = torch.tensor(dt_airs).to("cuda:0")
dt[1::2] += 0.2
这是一个在空间轴上校正 AIRS 中心的例子。橙色是校正后的结果。
我们屏蔽了该平均值的较暗部分,而不是使用中心的正方形裁剪。
我们采用了一种迭代曲线拟合策略,从噪声瞬态光变曲线数据中提取行星与恒星半径比 (Rp/Rs)。该过程包括在不同数据表示上 progressively refining 拟合:
import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self, ):
super().__init__()
self.pred_fc = nn.Linear(18, 283, bias=True)
self.sigma_fc = nn.Linear(5, 1, bias=True)
def forward(self, pred, sigma, s_std, var_l, s_std2, s_std3):
x = torch.log(pred).float()
x = self.pred_fc(x).squeeze(-1)
y = torch.stack([sigma, s_std, var_l, s_std2, s_std3], 2).float()
y = torch.log(y)
y = self.sigma_fc(y).squeeze(-1)
return x, y