Inspiration
Astronomers can't see exoplanets directly — they infer them from tiny, repeating dips in starlight. NASA's Kepler mission flagged over 9,500 such signals, but most turn out to be noise or false positives, not planets. We wanted to build the same triage system professional vetting teams use, and see what a model actually learns to look for.
What it does
Given raw transit and stellar measurements for a Kepler Object of Interest (period, transit depth, duration, planet/star radius, signal-to-noise, stellar temperature, etc.), the model predicts whether it's a CONFIRMED planet, a CANDIDATE still under review, or a FALSE POSITIVE — the same three-way call NASA's own vetting pipeline makes.
How we built it
EDA: checked class balance (FALSE POSITIVE dominates ~51%, CONFIRMED ~29%, CANDIDATE ~21%), missingness, and correlations across ~140 raw columns. Cleaning: dropped ID/leakage columns (including any pipeline-derived disposition scores) and columns >60% missing; median imputation for the rest. Feature engineering: added planet_star_radius_ratio, duration_period_ratio, and depth_per_duration — physics-derived ratios rather than raw values alone. Modeling: compared Logistic Regression, Random Forest, and XGBoost, all class-weighted, validated with stratified 5-fold cross-validation on weighted F1. Evaluation: confusion matrix, ROC curves (one-vs-rest), full classification report. Explainability: feature importance ranking + a plain-language walkthrough of what the model is actually keying on.
Results: XGBoost was the best model — 94.2% accuracy, 0.942 weighted F1 (CV: 0.946 ± 0.006). Per class: FALSE POSITIVE 0.99/0.99 precision/recall, CONFIRMED 0.91/0.91, CANDIDATE 0.87/0.86 (hardest — genuinely ambiguous cases even for NASA).
Challenges we ran into
Avoiding leakage was the trickiest part — some columns (like pipeline-computed diagnostic flags) are so close to the label itself that including them naively would make the task trivial rather than a real test of the model. We had to be deliberate about which features reflect genuine transit physics versus which ones just encode NASA's own vetting logic, and we're transparent about that trade-off in our write-up rather than hiding it.
What we learned
The model converges on the same physical consistency checks a human astronomer applies — signal-to-noise, and whether the implied planet size from the transit depth matches physical expectations. That's a meaningful sign it learned real structure, not just dataset artifacts.
What's next for Physics-Aware Exoplanet Classification from NASA Kepler Data
SHAP values for per-prediction explanations, a "physics-only" ablation excluding pipeline diagnostic flags, and testing whether the same engineered features transfer to the newer TESS TOI catalog.
Built With
- jupyter-notebook
- machine-learning
- matplotlib
- numpy
- pandas
- python
- scikit-learn
- seaborn
- xgboost


Log in or sign up for Devpost to join the conversation.