Classical ML · explainability
Life Expectancy Classification Pipeline
0.94
macro F1 on 882 held-out samples
The point was to build the boring parts properly: preprocessing inside the pipeline, cross-validated model selection and evaluation beyond accuracy.
What I did
- Compared logistic regression, KNN, random forest, extra trees and XGBoost with RandomizedSearchCV, and saved every experiment's outputs.
- Tree ensembles clearly beat linear and distance-based models; scaling mattered for KNN and logistic regression only.
- Chose the decision threshold by F1 instead of defaulting to 0.5, and used SHAP for global and per-prediction explanations.
Stack
scikit-learnXGBoostSHAP