Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Heart Disease Classification using Machine Learning

🇧🇷 Português | 🇺🇸 English


🇧🇷 Português

Sobre o Projeto

Este projeto aplica técnicas de Machine Learning para classificar a presença ou ausência de doenças cardíacas utilizando o conjunto de dados Heart Disease do UCI Machine Learning Repository.

O objetivo é prever o diagnóstico de um paciente com base em variáveis clínicas e laboratoriais, demonstrando conceitos fundamentais de classificação supervisionada, análise exploratória, pré-processamento de dados e avaliação comparativa de modelos.


Objetivo

Desenvolver um modelo capaz de identificar a presença de doença cardíaca (estenose coronariana > 50%) a partir de dados clínicos coletados antes do procedimento de angiografia.

As classes presentes no dataset são:

  • 0 — Sem doença cardíaca
  • 1 — Com doença cardíaca

Dataset

O projeto utiliza o Heart Disease Dataset, disponível no UCI Machine Learning Repository (ID 45).

Fonte: https://archive.ics.uci.edu/dataset/45/heart+disease

Variáveis Utilizadas

Variável Descrição Tipo
age Idade do paciente (anos) Numérica contínua
sex Sexo (1 = masculino, 0 = feminino) Categórica binária
cp Tipo de dor torácica (1 a 4) Categórica ordinal
trestbps Pressão arterial em repouso (mmHg) Numérica contínua
chol Colesterol sérico (mg/dL) Numérica contínua
fbs Glicemia em jejum > 120 mg/dL (1 = sim, 0 = não) Categórica binária
restecg Resultado do ECG em repouso (0, 1, 2) Categórica ordinal
thalach Frequência cardíaca máxima atingida (bpm) Numérica contínua
exang Angina induzida por exercício (1 = sim, 0 = não) Categórica binária
oldpeak Depressão do segmento ST (mm) Numérica contínua
slope Inclinação do segmento ST (1, 2, 3) Categórica ordinal
ca Número de vasos principais (0–3) Numérica discreta
thal Talassemia (3 = normal, 6 = fixo, 7 = reversível) Categórica ordinal

Variável Alvo

Variável Descrição
target 0 = sem doença cardíaca / 1 = com doença cardíaca

Análise Exploratória dos Dados

Foram realizadas etapas de exploração dos dados, incluindo:

  • Visualização da distribuição da variável-alvo;
  • Análise descritiva das variáveis numéricas e categóricas;
  • Histogramas comparativos por classe;
  • Boxplots das variáveis numéricas por classe;
  • Gráficos de proporção das variáveis categóricas;
  • Matriz de correlação entre todas as variáveis.

Essas análises ajudam a compreender a estrutura dos dados e identificar as variáveis mais relevantes antes do treinamento dos modelos.


Pré-processamento

Foram realizadas as seguintes etapas de pré-processamento:

  • Imputação de valores ausentes com a mediana, nas colunas ca e thal;
  • Divisão estratificada dos dados em treino (80%) e teste (20%);
  • Padronização com StandardScaler, ajustado exclusivamente no conjunto de treino.

Modelos Utilizados

Foram treinados e comparados 7 algoritmos de classificação:

Modelo Biblioteca
Regressão Logística Scikit-Learn
Árvore de Decisão Scikit-Learn
Random Forest Scikit-Learn
Gradient Boosting Scikit-Learn
SVM (kernel RBF) Scikit-Learn
KNN (k=7) Scikit-Learn
Naive Bayes Scikit-Learn

Divisão dos Dados

Os dados foram divididos em:

  • 80% para treinamento;
  • 20% para teste.

A divisão foi realizada com estratificação pela variável-alvo, utilizando a função train_test_split() do Scikit-Learn.


Avaliação dos Modelos

O desempenho foi avaliado utilizando Validação Cruzada Estratificada de 10 folds no conjunto de treino e as seguintes métricas no conjunto de teste:

Accuracy

Mede a porcentagem de classificações corretas realizadas pelo modelo.

F1-Score

Média harmônica entre Precision e Recall, útil para avaliar o equilíbrio entre falsos positivos e falsos negativos.

ROC AUC

Área sob a Curva ROC. Métrica principal do projeto por medir a capacidade discriminativa do modelo independentemente do limiar de decisão — especialmente relevante em contexto clínico.

Classification Report

Apresenta métricas de Precision, Recall e F1-Score para cada classe.

Confusion Matrix

Permite visualizar os acertos e erros de classificação para cada classe.


Seleção do Melhor Modelo

O melhor modelo foi selecionado com base no maior ROC AUC obtido no conjunto de teste. As curvas ROC de todos os modelos foram plotadas para comparação visual.

A importância das features foi analisada para o modelo vencedor, identificando as variáveis clínicas mais relevantes para o diagnóstico.


Conclusão

O projeto demonstrou que é possível construir classificadores com alto desempenho para diagnóstico de doenças cardíacas utilizando apenas variáveis clínicas não invasivas.

A comparação entre múltiplos algoritmos evidenciou a importância de avaliar modelos com métricas adequadas ao problema, sendo o ROC AUC a métrica mais apropriada para aplicações médicas onde o equilíbrio entre sensibilidade e especificidade é crítico.


🇺🇸 English

About the Project

This project applies Machine Learning techniques to classify the presence or absence of heart disease using the Heart Disease dataset from the UCI Machine Learning Repository.

The objective is to predict a patient's diagnosis based on clinical and laboratory variables, demonstrating supervised classification, exploratory data analysis, preprocessing, and comparative model evaluation.


Objective

Build a model capable of identifying the presence of heart disease (coronary stenosis > 50%) from clinical data collected prior to angiography.

The dataset contains two classes:

  • 0 — No heart disease
  • 1 — Heart disease present

Dataset

The project uses the Heart Disease Dataset, available at the UCI Machine Learning Repository (ID 45).

Source: https://archive.ics.uci.edu/dataset/45/heart+disease

Features

Feature Description Type
age Patient age (years) Continuous
sex Sex (1 = male, 0 = female) Binary categorical
cp Chest pain type (1 to 4) Ordinal categorical
trestbps Resting blood pressure (mmHg) Continuous
chol Serum cholesterol (mg/dL) Continuous
fbs Fasting blood sugar > 120 mg/dL (1 = yes, 0 = no) Binary categorical
restecg Resting ECG results (0, 1, 2) Ordinal categorical
thalach Maximum heart rate achieved (bpm) Continuous
exang Exercise-induced angina (1 = yes, 0 = no) Binary categorical
oldpeak ST depression induced by exercise (mm) Continuous
slope Slope of the peak exercise ST segment (1, 2, 3) Ordinal categorical
ca Number of major vessels colored by fluoroscopy (0–3) Discrete numeric
thal Thalassemia (3 = normal, 6 = fixed, 7 = reversible) Ordinal categorical

Target Variable

Variable Description
target 0 = no heart disease / 1 = heart disease present

Exploratory Data Analysis

The project includes:

  • Target variable distribution analysis;
  • Descriptive statistics for numerical and categorical variables;
  • Comparative histograms by class;
  • Boxplots of numerical variables by class;
  • Categorical variable proportion charts;
  • Correlation matrix heatmap.

Data Preprocessing

The following preprocessing steps were performed:

  • Missing value imputation using the median, applied to columns ca and thal;
  • Stratified train/test split (80% training / 20% testing);
  • Feature scaling with StandardScaler, fitted exclusively on the training set.

Models

Seven classification algorithms were trained and compared:

Model Library
Logistic Regression Scikit-Learn
Decision Tree Scikit-Learn
Random Forest Scikit-Learn
Gradient Boosting Scikit-Learn
SVM (RBF kernel) Scikit-Learn
KNN (k=7) Scikit-Learn
Naive Bayes Scikit-Learn

Data Split

The dataset was divided into:

  • 80% training data;
  • 20% testing data.

The split was stratified by the target variable using Scikit-Learn's train_test_split() function.


Model Evaluation

Models were evaluated using Stratified 10-Fold Cross-Validation on the training set and the following metrics on the test set:

Accuracy

Measures the percentage of correct predictions.

F1-Score

Harmonic mean of Precision and Recall, useful for assessing the balance between false positives and false negatives.

ROC AUC

Area Under the ROC Curve. The primary metric of this project, measuring the model's discriminative ability regardless of the decision threshold — especially relevant in clinical settings.

Classification Report

Provides Precision, Recall, and F1-Score for each class.

Confusion Matrix

Displays classification performance for each class.


Best Model Selection

The best model was selected based on the highest ROC AUC on the test set. ROC curves for all models were plotted for visual comparison.

Feature importance was analyzed for the winning model to identify the most relevant clinical variables for diagnosis.


Conclusion

The project demonstrated that high-performance classifiers for heart disease diagnosis can be built using only non-invasive clinical variables.

The comparison between multiple algorithms highlighted the importance of selecting evaluation metrics appropriate to the problem, with ROC AUC being the most suitable metric for medical applications where the balance between sensitivity and specificity is critical.


Technologies

  • Python
  • Pandas
  • NumPy
  • Scikit-Learn
  • Seaborn
  • Matplotlib
  • ucimlrepo

Author

Flávia Vitória de Queiroz

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages