Astro-Hunters β TESS Transit Detector
Per-cadence exoplanet transit detection in TESS two-minute photometry,
with gold-standard labels derived from published ephemerides.
The arXiv badge is a placeholder. Replace
XXXX.XXXXXwith the identifier once the preprint is live.
What this is
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.
Performance
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.
Files
| 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. |
Inputs and outputs
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
How the labels were built
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:
- Time system.
pl_tranmidis 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. - System multiplicity. Five of the twelve hosts have more than one transiting planet. Labelling only the innermost marks 1,794 genuine in-transit cadences as negatives and lowers measured AUPRC from 0.209 to 0.136 β a 35 % relative reduction caused purely by annotation.
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 models β do not use for evaluation
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.
Intended use
Appropriate
- Research on label provenance and evaluation protocol in time-series detection.
- Flagging candidate cadences for human review, with the false-positive rate understood β precision at a useful recall is low.
- The single-transit regime: recovering non-repeating events that a periodic search cannot stack, which is the one setting where a per-cadence decision is the correct formulation rather than a compromise.
Not appropriate
- General transit search or survey vetting. Use a periodic box search (BLS/TLS) to detect, then a classifier over the phase-folded candidate, which is what the established literature does.
- Any claim of planet discovery without independent physics-based vetting.
- Extrapolation beyond the training regime: 12 hosts, 2-minute cadence, Tmag 4.6β6.9, transit depths 155β25,555 ppm.
Limitations
- Bounded by the observation. Median single-cadence SNR 2.10 β Bayes-optimal AUC 0.932. A better classifier over these inputs cannot exceed that.
- Window geometry. Seven of twelve hosts have transits longer than the 65-cadence window, so cadences near mid-transit sit in a window with no out-of-transit reference and become indistinguishable from baseline.
- Stellar activity. Flares and spot modulation on active stars produce local statistics resembling a transit. AU Mic, the most active host, scores AUC 0.711 against a corpus mean of 0.799. Distinguishing a flare from a transit needs the sign and the periodicity of the excursion, neither visible in one window.
- Small corpus. Twelve hosts. Fold-to-fold standard deviations are wide and per-host variance is not explained by any single factor we tested.
- Fixed detrending. The 1001-cadence median filter is held constant and interacts with transit duration in ways not explored.
Citation
@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}
}
Acknowledgements
Built on public TESS SPOC light curves from MAST, retrieved with lightkurve,
and ephemerides from the NASA Exoplanet Archive.