Predicting 10-year CHD risk: when logistic regression beats the ensemble
On Framingham data, a soft-voting ensemble beat tree and neural models — but still lost to logistic regression (AUC 0.6959). Simpler models win when the signal is linear.

Arnold Muzarurwi
Data Analyst candidate
A 15% positive rate changes everything
The Framingham Heart Study Teaching Dataset asks a deceptively simple question: can demographic, behavioral, and clinical features predict 10-year coronary heart disease risk? With only ~15% positive cases, accuracy is a trap metric. AUC-ROC is the right primary score.
Pipeline before models
- KNN imputation (k=5) for missingness
- Standard scaling
- SMOTE to a balanced training set (null baseline = 50%)
- Clinical interactions such as age×sysBP and age×diaBP
EDA already pointed at age, systolic blood pressure, hypertension, and diabetes. Extreme rarity in BPMeds, prevalentStroke, and diabetes limited those features' standalone power.
Seven models later
I compared XGBoost, Random Forest, MLP, Logistic Regression, KNN, SVM, a decision tree, and a soft-voting ensemble of the weaker learners.
- Logistic Regression — AUC 0.6959 (preferred)
- Soft-voting ensemble — AUC 0.6692
- Random Forest — AUC 0.6553 (best tree/neural model)
Ensembles help when models make different mistakes. They hurt when one learner is clearly stronger and you dilute it with weaker votes.
What this means clinically
The preferred model beats the 50% null baseline and shows that Framingham features contain real signal for 10-year CHD risk. Logistic Regression also stays interpretable — important when predictions may inform clinical triage.
Next steps that matter: probability calibration, SHAP explanations for individual patients, and external validation on cohorts beyond Framingham's demographic slice.
Want to discuss this work? Get in touch.
