Projects

Side projects, mostly recent.

/01
Does the published model generalize?
Graph Neural Networks Spatial Holdout PyTorch Geometric
Rebuilt my master's thesis regression model as a Graph Attention Network on the full 49K-observation NASA satellite dataset. On a true 20% spatial holdout, the GAT held R² 0.32 while the thesis's best baseline (GWR) collapsed to R² -85, because its original score came from leave-one-out CV that never tested new locations.
GAT R² 0.32 on spatial holdout. GWR R² -85 on the same holdout.
→
/02
Who actually defaults?
CatBoost SHAP AI Governance
CatBoost vs. XGBoost vs. LightGBM on UCI Credit Card Default data, optimized for recall on the minority class. SHAP explainability and EU AI Act compliance documentation built in.
Recent payment status dominates. Demographics contribute almost nothing.
→
/03
Should you call this customer?
Covariate Adjustment Observational Study Power Analysis
Most marketing analytics measures who converted, not whether prior contact made the difference. Prior contact is associated with higher conversion on the UCI Bank Marketing dataset. The association holds after adjusting for measured covariates, with segmentation and SHAP explainability.
Prior contact associated with 2.5x higher conversion; holds after covariate adjustment
→
/04
Should you swing on a 2-0 count?
Markov Chains Sabermetrics MLB
A softball coach told me my whole life not to swing on a 2-0 count. Capstone thesis project using Markov Chains on MLB data to test whether he was right. He was. This is also how I ended up in data science.
He was right. The Markov chains agreed. CLU · 2016–2017
→