Downloads · 30 days
0
FatimahEmadEldin/Astro-Hunters-Transit-Detector
Astro-Hunters-Transit-Detector is a tabular classification model from FatimahEmadEldin. Use it for the tabular classification task on the model card, and read the license before you ship it in a product. It is set up for xgboost. The card lists the license as mit.
<h1 align="center"Astro-Hunters — TESS Transit Detector</h1
Downloads · 30 days
0
Access
Public
Updated Aug 17, 2026
Repo size
6.5 MB
Likes
0
Public
Click a slice to open those files.
.npz5.4 MB · 62%
From the Hugging Face model README
The arXiv badge is a placeholder. Replace
XXXX.XXXXXwith the identifier once the preprint is live.
A gradient-boosted tree classifier that labels each individual cadence of a detrended TESS light curve as in-transit or not, from seven local statistics computed over a sliding window of ±32 cadences (130 minutes).
Read the headline numbers with the ceiling in mind. The accompanying paper shows that the median single-cadence signal-to-noise ratio across this corpus is 2.10, which caps the Bayes-optimal per-cadence AUC at 0.932. This model reaches 0.788 — near the information a single cadence contains. Per-cadence classification is not the right tool for general transit search; a periodic box search recovers 8 of 12 orbital periods on the same light curves. See Intended use.
Star-disjoint GroupKFold(4) — no light curve appears on both sides of a split.
Mean ± standard deviation across folds.
| Metric | Value | Random baseline |
|---|---|---|
| ROC-AUC | 0.7880 ± 0.0550 | 0.5 |
| PR-AUC (AUPRC) | 0.2092 ± 0.0289 | 0.0392 |
| Lift over chance | ×5.3 | ×1.0 |
At a 3.9 % positive rate, AUPRC is the metric that matters; accuracy and ROC-AUC are both dominated by the negative class and will flatter any model here.
| File | What it is |
|---|---|
astro_hunters_gold_xgboost.json | The released model. XGBoost native JSON, trained on gold-standard labels across all 12 hosts. |
model_index.json | Machine-readable metrics, hyperparameters and feature spec. |
corpus/astro_hunters_corpus.npz | Feature matrix, all three label sets, times, flux, host IDs. |
corpus/systems.json | NASA Exoplanet Archive records for the 12 systems, 36 planets. |
corpus/label_provenance.json | Per-host labelled rate against predicted duty cycle. |
corpus/results.json | Every number in the paper's tables. |
legacy/legacy_v*_anomaly_labels.json | Superseded models — see the warning below. |
Input — one row per cadence, seven float32 features in this order:
["flux", "local_mean", "deviation", "min", "ratio", "std", "skew"]
computed over W = {j-32, …, j+32} on flux that has been median-normalised and
divided by a 1001-cadence running median. Feeding raw flux will not work.
Output — P(in transit) per cadence. Choose the threshold for your
operating point; the paper tunes it on held-out development hosts rather than
fixing it at 0.5.
import numpy as np, xgboost as xgb
from huggingface_hub import hf_hub_download
path = hf_hub_download("FatimahEmadEldin/Astro-Hunters-Transit-Detector",
"astro_hunters_gold_xgboost.json")
booster = xgb.Booster(); booster.load_model(path)
# X: (n_cadences, 7) float32, features in the order above
proba = booster.inplace_predict(X)
Reproduce the reported metrics from the released corpus:
import numpy as np
from huggingface_hub import hf_hub_download
c = np.load(hf_hub_download("FatimahEmadEldin/Astro-Hunters-Transit-Detector",
"corpus/astro_hunters_corpus.npz",
repo_type="model"), allow_pickle=True)
X, y, hosts = c["X"], c["y_gold_multi"], c["star_ids"] # 189,279 x 7
This is the part that matters most, and the paper's central finding is that it matters more than the choice of model — AUPRC moves by a factor of 29 across label sources against 1.8 across six architectures.
y_gold_multi is derived entirely from orbital solutions, never from the
photometry it annotates. For every confirmed transiting planet i in each
system, a cadence is positive when
| ((t - t0_i + P_i/2) mod P_i) - P_i/2 | ≤ T14_i / 2
with P, t0 and T14 from the NASA Exoplanet Archive pscomppars table.
Two corrections are load-bearing:
pl_tranmid is published in BJD (≈ 2 459 000); TESS
light curves are in BTJD = BJD − 2 457 000 (≈ 1 300–3 500). Omitting the
subtraction displaces the annotation window by a fraction of a period that
depends on the period — 0.703 of an orbit for HD 189733 — so the labelled
window and the real transit do not overlap at all. Performance then falls to
chance, which is easy to misread as a finding about the method.corpus/label_provenance.json records, per host, the labelled positive rate
against the duty cycle Σ T14_i / P_i predicted independently from the
ephemerides. Agreement between those two numbers is the cheapest available
check that labels are in the right place, and it fails loudly when the time
system is wrong.
legacy/legacy_v3_anomaly_labels.json and legacy_v4_anomaly_labels.json are
kept for provenance only. They were trained against labels produced by fitting
IsolationForest to the same feature matrix the classifier then consumes, so
the model recovers a deterministic function of its own inputs. Their stored
holdout_test_auc of 0.9985 measures that circularity, not transit
detection, and should not be quoted.
The original pickles are included alongside the JSON exports because they are what the numbers in the earlier project history refer to. Note that pickle deserialisation executes arbitrary code and these files emit an XGBoost version warning on load; prefer the JSON exports.
Appropriate
Not appropriate
@article{emadeldin2026astrohunters,
title = {Astro-Hunters: An End-to-End Machine Learning Pipeline for
Exoplanet Transit Detection in TESS Photometry},
author = {Emad Eldin, Fatimah},
year = {2026},
note = {arXiv preprint; identifier to be assigned}
}
Built on public TESS SPOC light curves from MAST, retrieved with lightkurve,
and ephemerides from the NASA Exoplanet Archive.