India High School Exoplanet Data Challenge
Celesta — Kepler Exoplanet Classifier

Celesta

Leakage-free machine learning on 9,564 NASA Kepler Objects of Interest.
Raw transit photometry and stellar measurements only — no NASA vetting outputs.

0% Accuracy
0% Macro F1
0% CV F1 ±0.7%
0 Eng. Features
0 KOI Records
Open Submission Notebook ★ View on GitHub Run Locally ↓
Python 3.11 XGBoost 2.x scikit-learn 1.9 Flask 3.1 SHAP NASA Kepler Data MIT License

Sorting 9,564 possible planets from noise

NASA's Kepler telescope watched 150,000 stars for 9 years, logging every tiny brightness dip. Most dips are not planets — they are eclipsing binary stars, cosmic rays, or instrument noise. Each candidate needs expensive ground-based follow-up to confirm. Celesta is a first-pass classifier that reads raw photometry and predicts which candidates are worth investigating.

🟢
CONFIRMED
2,747
Follow-up spectroscopy proved it is a real orbiting planet
🟡
CANDIDATE
1,978
Passed automated screening — awaits ground-based confirmation
🔴
FALSE POSITIVE
4,839
Proven to not be a planet — an EB, background star, or instrument artefact
⚠️
Leakage-free constraint
The NASA archive includes koi_pdisposition and koi_score — NASA's own pre-classification and confidence score. Using them gives 99%+ accuracy but is scientifically worthless (we'd be copying NASA's answer). Celesta uses only raw telescope measurements: transit photometry and stellar spectroscopy — no vetting outputs.

81.3% accuracy · 78.8% Macro F1

Evaluated on 1,913 held-out KOIs never seen during training. Validated with 5-fold stratified cross-validation.

Overall Metrics

  • Accuracy 81.3%
  • Macro F1 78.8%
  • 5-Fold CV F1 78.6% ± 0.7%
  • Weighted F1 81.5%
  • Macro Recall 79.6%
  • Macro Precision 78.3%
🟢 CONFIRMED F1: 86.6%
🔴 FALSE POSITIVE F1: 85.7%
🟡 CANDIDATE F1: 64.2% (ambiguous by nature)

Confusion Matrix — Test Set

Predicted →
Actual ↓ CANDCONFFP
CAND 2654883
CONF 4148721
FP 12341804

Green diagonal = correct predictions. CANDIDATE F1 is lowest — and that is scientifically correct: CANDIDATE means "we genuinely don't know yet." Even astronomers cannot classify these without expensive follow-up.

Ensemble vs Individual Models

Model Accuracy Macro F1
XGBoost 79.2% 77.9%
HistGradientBoosting 78.5% 77.3%
Random Forest 77.1% 74.8%
★ Ensemble (all three) 81.3% 78.8%

12 physics-motivated features

Raw measurements tell the model what was recorded. Engineered features tell it what those measurements mean physically. All 12 are derived from Kepler photometry and stellar catalogues — no external data.

All 12 Features

#FeaturePhysical Meaning
1single_multi_ratioOne-off event vs repeating transit — the false positive fingerprint
2duration_period_ratioTransit chord encodes stellar density via Kepler's third law
3log_periodLog-compresses 3-order-of-magnitude range for tree splits
4log_depthSame — transit depth is heavily right-skewed
5log_snrSame
6stellar_density_proxyM★/R★³ ∝ mean stellar density — validates transit geometry
7impact_ror_ratioNear 1 → grazing transit → eclipsing binary signature
8expected_duration_ratioObserved vs Keplerian duration — eccentricity / blended EB flag
9snr_per_transit newPer-transit SNR — consistent for real planets, noisy for artefacts
10odd_even_norm newOdd-even sig / SNR — normalised eclipsing binary flag
11log_srad newStellar radius log-compressed (spans 0.1 – 10 R☉)
12depth_ror_check newGeometric consistency: depth/(ror²×10⁶) should ≈ 1 for clean transit

SHAP — Top 10 Features by Impact

Engineered   Raw Kepler measurement
2 of the top 5 features are engineered — feature engineering added real predictive value.

Soft-voting ensemble of three complementary models

No single algorithm dominates every aspect of this dataset. Averaging probability outputs from three models with different inductive biases cancels individual errors.

📡
NASA Exoplanet Archive
9,564 KOIs · 27 raw features (transit shape, signal statistics, stellar properties) · no leakage columns
↓
⚗️
Feature Engineering
+12 physics-motivated derived features → 39 total · same formulas in notebook and web app
↓
✂️
Stratified 80 / 20 split
Class ratios preserved in both train (7,651) and test (1,913) sets
↓
🤝
Soft-Voting Ensemble
Averages class probabilities from all three models · each trained with balanced class weights to handle 2.4× imbalance
XGBoost · 500 trees · lr=0.04 · depth=6 HistGradBoost · 500 iter · class_weight=balanced RandomForest · 400 trees · balanced_subsample
↓
📊
Evaluation + Explainability
Confusion matrix · ROC/PR curves · 5-fold stratified CV · SHAP beeswarm + waterfall (TreeExplainer on XGBoost)

Four ways to run Celesta

☁️ Google Colab Recommended

Zero setup. Full ML pipeline in 10–15 min on free T4.

Open in Colab
# Runtime → Run all (Ctrl+F9)
# Downloads NASA data automatically
# ~10–15 min on free tier
🐍 Python locally
git clone https://github.com/vvsrinath/Celesta-India-High-School-Exoplanet-Data-Challenge
cd celesta/celesta
pip install -r requirements.txt
python3 train_model.py   # trains model
python3 app.py           # → :5000
🐳 Docker Trains inside build
cd celesta/celesta
docker build -t celesta .
docker run -p 5000:5000 celesta

Multi-stage: trains in stage 1, copies artefacts into lean runtime image.

📓 Jupyter locally
pip install jupyter xgboost shap \
    scikit-learn pandas matplotlib
jupyter notebook \
    colab/Celesta_Submission.ipynb

Built by one person, from scratch

Every line of code, every engineered feature, every visualisation — from data pipeline to web app to this page.

SV
Srinath Vatchavari Venkateshan
India High School Exoplanet Data Challenge · Celesta