Skip to content

Repository files navigation

🏥 Hospital Readmission Prediction — ML with Tidymodels in R

Language Framework Domain Dataset Models IDE Status


📌 Project Overview

This project builds a machine learning pipeline to predict 30-day hospital readmission risk for diabetic patients — a critical healthcare problem costing the U.S. healthcare system over $17 billion annually.

Using the Tidymodels framework in R, the project implements a complete end-to-end ML workflow — from data exploration and preprocessing, through model specification, hyperparameter tuning, and final evaluation — across 6 classification algorithms.

Domain: Healthcare Machine Learning — Clinical Decision Support
Dataset: 69,984 diabetic inpatients, 130 US hospitals (1999–2008)
Target: Predict 30-day readmission (Yes/No)
Language: R / RMarkdown
Author: Leelaissak


📂 Project Structure

Hospital-Readmission-ML-Project/
│
├── Tidymodels_in_R_ML_script.Rmd    # Full R Markdown ML pipeline (14 tasks)
├── readmission_data.csv              # Main dataset — 69,984 patients, 27 vars
├── stroke_data.csv                   # Bonus dataset — Stroke prediction
├── final_readmission_model.rds       # Saved final trained model
├── readmit_grid_results.rar          # Hyperparameter tuning results
└── README.md

🛠️ Tech Stack

Tool / Library Purpose
R + RMarkdown Core language + reproducible report
tidymodels Complete ML framework (recipes, workflows, tuning)
tidyverse Data manipulation + visualization
themis Class imbalance handling (SMOTE)
ggplot2 + ggpubr Data visualization
glmnet Regularized logistic regression (LASSO)
ranger Random Forest
kknn K-Nearest Neighbors
naivebayes Naive Bayes
kernlab Support Vector Machine
xgboost Gradient Boosting
caret + car Correlation + VIF analysis
skimr Data overview
table1 Clinical summary tables

📊 Dataset Description

Feature Description
Source Health Facts database (Cerner Corporation)
Observations 69,984 inpatient visits
Variables 27 (demographics, HbA1c, medications, outcomes)
Hospitals 130 US hospitals
Period 1999–2008
Target readmitted — Yes/No within 30 days

Key Variables

Variable Type Description
race Categorical Patient race
sex Categorical Patient sex
age Categorical Age group (<60 / 60+)
HbA1c Categorical Glycated hemoglobin level
num_medications Numeric Number of medications prescribed
num_diagnosis Numeric Number of diagnoses
patient_visits Numeric Number of prior visits
hospital_stay Numeric Length of hospital stay
insulin_level Categorical Insulin dosage change
diabetesMed Categorical Diabetes medication change
readmitted Target Readmitted within 30 days

🚀 ML Pipeline — 14 Tasks

Task Description
Task 1 Import packages + load dataset (69,984 rows, 27 cols)
Task 2 Summary statistics — skim() + table1() clinical table
Task 3 Categorical EDA — readmission, race, sex, age, HbA1c bar plots
Task 4 Numeric EDA — boxplots + histograms for medications
Task 5 Multicollinearity check — correlation matrix + VIF analysis
Task 6 75/25 train-test split (stratified) + 10-fold CV
Task 7 Recipe — dummy encoding, zero variance, normalization, SMOTE
Task 8 Specify 6 ML models
Task 9 Create workflows (recipe + model)
Task 10 Fit baseline models on training data
Task 11 Compare model performance
Task 12 Hyperparameter tuning (LASSO penalty, RF mtry)
Task 13 Final model evaluation on test set + confusion matrix
Task 14 Fit final model + predict new patients + save as .rds

🤖 Machine Learning Models

Model Engine Tuned Parameter
Decision Tree rpart —
Logistic Regression (LASSO) glmnet penalty (tune)
Naive Bayes naivebayes —
K-Nearest Neighbors kknn —
Support Vector Machine kernlab —
Random Forest ranger mtry (tune: 3,4,5)

🔧 Preprocessing Recipe

readmit_recipe <- recipe(readmitted ~ ., data = readmit_train) %>%
  step_novel(all_nominal_predictors()) %>%    # Handle unseen categories
  step_dummy(all_nominal_predictors()) %>%    # One-hot encode factors
  step_zv(all_predictors()) %>%              # Remove zero-variance features
  step_normalize(all_numeric_predictors()) %>% # Scale + center numerics
  step_smote(readmitted)                      # Balance class imbalance

📈 Evaluation & Results

# Metrics used
rf_metrics <- metric_set(accuracy, roc_auc)

# Final evaluation
readmit_last_fit <- final_readmit_wf %>% last_fit(readmit_split)
collect_metrics(readmit_last_fit)

# Confusion matrix heatmap
readmit_predictions %>%
  conf_mat(truth = readmitted, estimate = .pred_class) %>%
  autoplot(type = "heatmap")

🏆 Bonus — Stroke Prediction Model

Built a complete stroke prediction model as a cumulative activity:

  • Dataset: stroke_data.csv
  • Model: Random Forest (ranger, 500 trees, mtry tuned)
  • Metrics: accuracy, ROC-AUC, F-measure
  • Features: age, avg_glucose_level, BMI + categorical vars
  • Outputs: confusion matrix heatmap + variable importance scores

💾 Saved Model — New Patient Prediction

# Load saved model
final_model <- read_rds("final_readmission_model.rds")

# Predict readmission for new patient
new_patient <- tribble(~race, ~sex, ~age, ~hospital_stay, ~HbA1c,
                       ~diabetesMed, ~admit_source, ~patient_visits,
                       ~num_medications, ~num_diagnosis, ~insulin_level,
                       "Others", "Male", "<60 years", 7, "Normal",
                       "No", "Emerg", 3, 20, 8, "Up")

predict(final_model, new_data = new_patient)

🎓 Skills Demonstrated

  • Tidymodels end-to-end ML pipeline in R
  • Clinical healthcare data analysis (69,984 patients)
  • Exploratory data analysis — skim(), table1(), ggplot2
  • Feature engineering with recipe() steps
  • Class imbalance handling with SMOTE (themis)
  • 6 ML algorithms — Decision Tree, Logistic Regression, Naive Bayes, KNN, SVM, Random Forest
  • Hyperparameter tuning with tune_grid() + cross-validation
  • Model evaluation — accuracy, ROC-AUC, confusion matrix
  • Multicollinearity detection — VIF + correlation matrix
  • Model persistence — write_rds() + read_rds()
  • Clinical prediction for new patients
  • Bonus: Stroke prediction model with variable importance

📜 Certifications

Certification Issuer Platform
IBM Data Science Professional Certificate IBM Coursera
IBM Generative AI Professional Certificate IBM Coursera
IBM RAG and Agentic AI Professional Certificate IBM Coursera

🤝 Connect with Me

LinkedIn Gmail GitHub

About

Hospital readmission prediction ML pipeline in R — 6 algorithms (LASSO, Random Forest, SVM, KNN, Naive Bayes, Decision Tree) on 69,984 diabetic patients using Tidymodels + SMOTE

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors