Author: Hugo Pierloot
Supervisor: Stefan Creemers
University: Louvain School of Management - UCLouvain
Academic year: 2025–2026
Degree: Master [120] in Business Engineering
This project builds and interprets machine learning classification models to predict whether a rocket launch will succeed or fail, using historical launch data from 1957 to 2021.
The main value of this project is interpretability: identifying which features (rocket experience, organisation track record, launch site maturity, physical specs) drive failure risk, and quantifying their relative importance. This is achieved through SHAP (SHapley Additive exPlanations) analysis applied to the best-performing models.
The core challenge is class imbalance: 91.2% of launches in the dataset are successes, creating a 10.4:1 imbalance ratio. This necessitates specialised techniques (SMOTE, cost-sensitive learning, ensemble methods) and metrics (F1, F2, AUC-PR, MCC) rather than plain accuracy.
What are the main failure factors of rocket launches? What are their impacts on the probability of a flight succeeding?
root/
data/
inputs/
raw/ <= Original CSV files (never modified)
Companies.csv
Configs.csv
Families.csv
Launches.csv
Locations.csv
Missions.csv
clean/ <= Generated by the pipeline
final_data.csv <= Joined + cleaned dataset (all 6 tables)
model_data.csv <= Feature-engineered + correlation-pruned
outputs/
evaluation_reports/ <= CSV reports per model run
sensitivity_grid_*.csv <= Full grid results (one row per run × model)
sensitivity_best_configs_*.csv <= Best params per model
best_configs_*.csv <= Best configs from one-shot runs
shap_report.csv <= Mean |SHAP| per feature per model
ermutation_importance_*.csv <= Permutation importance with 95% CI
figures/
analytics/ <= EDA charts (distributions, correlations, KPIs)
01_correlation_matrix.png
02_success_failure_over_time.png
...
sensitivity/ <= One subfolder per training run
run{N}/
cm_{model}.png <= Confusion matrices
roc_curves_all_models.png
pr_curves_all_models.png
metrics_comparison_all_models.png
shap/
shap_beeswarm_{model}.png
shap_importance_{model}.png
shap_waterfall_{model}_failure_{N}.png
shap_dependence_{model}_{feature}.png
shap_importance_comparison_all_models.png
permutation_importance_{model}.png
raw/ <= Raw data distribution plots
{table}_distributions_raw.png
summaries/ <= Descriptive statistics text files
raw_descriptive_statistics.txt
clean_descriptive_statistics.txt│
main/ <= All source code
constants.py <= All paths and column name constants
loaders.py <= Raw and clean data loaders
cleaning.py <= ETL pipeline (cleaning + joining all tables)
feature_engineering.py <= Feature creation + correlation pruning
splitter.py <= Temporal train/test split + SMOTE
sensitivity_analysis.py <= One-shot and grid sweep runner
analytics.ipynb <= EDA (cleaning, correlations, KPI charts, feature engineering)
main.ipynb <= Model training entry point (one-shot / grid)
models/
baseline.py <= MajorityClassifier, PriorRateClassifier
tree_models.py <= RandomForest, XGBoost, AdaBoost, RUSBoost
evaluation.py <= Metrics computation + all evaluation charts
train.py <= Master training runner (called by sensitivity_analysis)
explainability.py <= SHAP analysis + permutation importance
The dataset is the Rocket Launch Industry dataset published on Kaggle by Maciej Krzysik (2022):
https://www.kaggle.com/datasets/maccaroo/rocket-launch-industry
Launches.csv: One row per launch event.Configs.csv: Rocket configuration technical specs.Families.csv: Rocket family aggregated stats.Companies.csv: Organisations and ownership.Locations.csv: Launch site geospatial data.Missions.csv: Payload missions per launch.
Raw CSVs
=> cleaning.py (by using analytics.ipynb) => final_data.csv
=> feature_engineering.py (by using analytics.ipynb) => model_data.csv
=> splitter.py (train/test + SMOTE by using main.ipynb)
=> models/ (training + evaluation + SHAP by using main.ipynb)
The pipeline is designed to be fully reproducible from the originals CSV.
launch_success_binary is derived from Launch Status:
1= Success0= Failure, Partial Failure, or Prelaunch Failure
Python 3.13.2 is required. All dependencies are pinned in requirements.txt.
# Create and activate a virtual environment
python -m venv venv
venv\Scripts\activate # Windows
source venv/bin/activate # macOS / Linux
# Install all dependencies
pip install -r requirements.txtAll scripts use relative paths anchored to constants.py. Always run notebooks.
Run the steps in this exact order. Each step depends on the outputs of the previous one.
Step 1 => Step 2 => Step 3 => Step 4
- Step 1 - analytics.ipynb - raw data sections
- Step 2 - analytics.ipynb - clean data sections
- Step 3 - analytics.ipynb - feature engineering sections
- Step 4.1 - main.ipynb - One-shot configuration, without SHAP
- Step 4.2 - main.ipynb - One-shot configuration, with SHAP
- Step 4.3 - main.ipynb - Sensitivity grid - no SHAP (hyperparameter search)
- Step 4.4 - main.ipynb - Sensitivity grid - with SHAP (final interpretability run with the best configs)