Inspiration

Most student data science projects use toy datasets. This challenge used real data from NASA's Kepler Space Telescope — the same problem professional astronomers face when deciding whether a signal from space is an actual planet or just noise. I wanted to build something that didn't just get a high accuracy number, but actually reasoned like a scientist would.

What it does

ExoVet is a machine learning classifier that looks at Kepler telescope data and predicts whether a detected signal is a real confirmed exoplanet or a false positive — things like eclipsing binary stars that mimic a planet's signature. It also goes further: it deliberately hunts for and removes hidden data leakage in the dataset (columns that would let a model "cheat" by copying an answer instead of learning real physics), then proves the difference with a side-by-side comparison. Finally, it applies the trained model to NASA's ~1,978 still-unresolved candidate signals and ranks them by how likely each is to be a real planet.

How I built it

I used Python with pandas, scikit-learn, and XGBoost. After exploring the data, I noticed several columns were actually outputs of NASA's own vetting pipeline rather than raw telescope measurements — training on those would inflate accuracy without teaching the model anything real, so I removed them. I trained Random Forest and XGBoost classifiers, engineered a few physics-based features (like the ratio between orbital period and transit duration), and evaluated everything with proper cross-validation and a held-out test set.

Challenges I ran into

(Genuinely good material here — pick what actually happened:)

My first CSV upload silently got truncated by the browser, so my model trained on less than a third of the real dataset without me realizing it at first — the class balance looked wrong, which is what tipped me off. Spotting that several "measurement" columns were actually leaking the answer — the challenge organizers had already removed one obvious leak (koi_score), which made me wonder what else might be hiding. After adding engineered features partway through, several downstream cells broke because they still referenced the old feature set — a good lesson in how one upstream change ripples through a whole pipeline.

Accomplishments that I am proud of

Catching the data leakage was the accomplishment I'm most proud of — it would have been easy to just report a 99%+ accuracy number and move on. Instead, ExoVet demonstrates why that number would have been meaningless, and reports an honest ~98% result trained only on real physics.

What I learned

I learned that a high accuracy score means nothing without understanding what the model is actually learning — and that permutation importance and deliberate leakage testing are how you check that. I also learned a lot about the physics of exoplanet transits: why planet radius and eclipsing binaries matter, and how astronomers actually vet these signals.

What's next for ExoVet

I'd like to extend this to a full 3-class model that also classifies the unresolved CANDIDATE signals directly, and explore whether deep learning on the raw light curves (rather than pre-extracted features) could catch patterns the current feature set misses.

Built With

Share this project:

Updates

Submission history