Downloads · 30 days
0
rsd-06/periodyx-exoplanet-classifier-v1
periodyx-exoplanet-classifier-v1 is a machine learning model from rsd-06. Use it for the machine learning task on the model card, and read the license before you ship it in a product.
ISRO BAH 2026 — Problem Statement 07: AI-enabled Detection of Exoplanets from Noisy Astronomical Light Curves
Downloads · 30 days
0
Access
Public
Updated Jul 2, 2026
Repo size
15.2 MB
Likes
0
Public
Click a slice to open those files.
.joblib1.1 MB · 99%
From the Hugging Face model README
ISRO BAH 2026 — Problem Statement #07: AI-enabled Detection of Exoplanets from Noisy Astronomical Light Curves
Team: PeriodyX
Goal: Build a robust, interpretable, end-to-end machine learning pipeline to detect exoplanets from raw astronomical light curves, strictly avoiding data leakage and prioritizing physical priors over black-box shape matching.
This is an end-to-end pipeline that takes raw stellar brightness measurements (light curves) from NASA's Kepler/TESS missions and automatically:
Design Philosophy: Unlike many published systems (e.g., AstroNet) that rely on NASA proprietary pipelines to do the actual detection and feed cropped signals into black-box CNNs, PeriodyX owns the entire chain end-to-end. It uses physically interpretable features and runs on a single commodity machine without requiring a GPU.
lightkurve (MAST archive access), urllib (Exoplanet Archive TAP API)wotan (Biweight filter)astropy.timeseries.BoxLeastSquares, transitleastsquareslmfit (Non-linear least squares)xgboost, scikit-learnpandas, numpyjoblibhuggingface_hub)Raw Light Curve (Kepler/TESS, via MAST)
|
v
[1] DETRENDING (wotan, biweight filter)
|
v
[2] PERIODIC SEARCH -- tiered
BLS (fast triage, runs on every star)
|
v (only if BLS significance > noise threshold)
TLS (slow, high-sensitivity refinement)
|
v
[3] SHAPE CHARACTERIZATION (lmfit)
-> Fits depth, total duration, ingress duration, etc.
|
v
[4] FEATURE ENGINEERING & PHYSICAL PRIORS (The "v4" architecture)
-> Extracts lightcurve shapes (SNR, secondary eclipses)
-> Merges independent stellar priors (Radius, Temp, Gravity, Mag)
-> Computes Reconstructed Planetary Radius (Rs * sqrt(depth))
-> Merges Centroid Motion (Pixel offset magnitudes)
|
v
[5] CLASSIFICATION (XGBoost)
-> transit / eclipsing_binary / blend / other
Building an astronomical ML pipeline is notoriously susceptible to data leakage—where the model secretly learns human vetting confidence rather than actual physics. Here is how we iteratively debugged and defeated leakage to achieve our final result.
fpflag_*) and the NASA-computed planetary radius (koi_prad).fpflag_* columns were the literal answer key. Even worse, koi_prad was subtly leaky: we ran diagnostic scripts and proved that NASA only computed a tight error bar for koi_prad when they were already confident the candidate was a planet. Optuna (the hyperparameter tuner) built a massive 800-tree forest just to memorize the exact error-bar signatures of the dataset, ignoring the astrophysics entirely.koi_prad. F1 dropped back to the honest 46% baseline.koi_srad), temperature (steff), and surface gravity.sqrt(depth) * koi_srad) to isolate the physics while dodging NASA's vetting proxies.koi_dicco_mra and mdec to measure if the center of light shifted during the dip (the literal definition of a Blend).Optuna hyperparameter tuning on the clean, mathematically honest v4 dataset found a robust, regularized optimum (n_estimators=204, max_depth=8).
Overall Held-Out Test Accuracy: 73%
| Class | Precision | Recall | F1-Score | Improvement over v1/v3 Baseline |
|---|---|---|---|---|
| Transit (Planet) | 0.87 | 0.89 | 0.88 | +0.26 |
| Eclipsing Binary | 0.81 | 0.65 | 0.72 | +0.07 |
| Blend | 0.56 | 0.65 | 0.61 | +0.28 |
| Other | 0.40 | 0.49 | 0.44 | +0.12 |
git clone https://github.com/rsd-06/periodyx-exoplanet-pipeline.git
cd periodyx-exoplanet-pipeline
pip install -r requirements.txt
This downloads the Kepler KOI Cumulative Table, injecting the specific physical columns needed for v4 (koi_srad, centroid motion, etc.).
python -c "import urllib.request; urllib.request.urlretrieve('https://exoplanetarchive.ipac.caltech.edu/TAP/sync?query=select+kepid,kepoi_name,koi_disposition,koi_srad,koi_steff,koi_slogg,koi_kepmag,koi_dicco_mra,koi_dicco_mdec,koi_fpflag_nt,koi_fpflag_ss,koi_fpflag_co,koi_fpflag_ec,koi_period,koi_duration,koi_depth+from+cumulative&format=csv', 'data/koi_cumulative.csv')"
Runs the pipeline entirely on synthetic, locally generated data to ensure your environment (lightkurve, wotan, XGBoost) is functioning.
python3 scripts/validate_fixes.py
Phase-scrambles real Kepler data to establish an empirical noise floor, determining the exact Signal Detection Efficiency (SDE) threshold required to trigger TLS.
python3 scripts/calibrate_threshold.py --koi-csv data/koi_cumulative.csv --sample 150
The heavy lifter. Downloads raw FITS light curves from MAST, detrends, searches, fits trapezoids, and exports the 1D shape features.
python3 scripts/build_training_set.py --koi-csv data/koi_cumulative.csv --bls-threshold 10.77 --workers 8
(Replace 10.77 with your calibrated threshold. Note: This step takes hours for the full 7000+ star dataset).
Merges the extracted 1D shape features with the NASA archival stellar priors, drops NaNs to prevent MNAR leakage, computes reconstructed radii, runs an Ablation Study against the v3 baseline, optimizes hyperparameters using Optuna (50 trials), and saves the final .joblib model.
python3 scripts/train_classifier.py --features data/training_features.csv --optuna-trials 50
Upload the saved .joblib to Hugging Face.
export HF_TOKEN="your_token"
python3 upload_model.py