Este trabalho explora a aplicação de TabM (Tabular Model) no diagnóstico de doença cardíaca coronariana usando o dataset Cleveland. Ao contrário do que o nome pode sugerir, TabM não é um Transformer, mas sim uma arquitetura baseada em MLP (Multi-Layer Perceptron) simples e eficiente, potencializada por BatchEnsemble.
Objetivo Principal: Investigar a efetividade de TabM em diagnóstico de doença cardíaca, explorando como uma arquitetura feedforward simples pode superar modelos complexos baseados em atenção.
Diferencial: Primeira aplicação de TabM em contexto de diagnóstico cardíaco - gap na literatura.
"TabM é efetivo para diagnóstico de doença cardíaca em dados tabulares clínicos?"
- Modelos baseados em atenção (Transformers) são populares, mas complexos e computacionalmente custosos (complexidade quadrática).
- TabM surge como uma alternativa simples baseada em MLP que supera modelos de atenção como FT-Transformer.
- Dataset Cleveland: 297 pacientes (160 saudáveis, 137 doentes)
- Alguns folds apresentam alta taxa de erro (até 30%)
- Nenhum estudo anterior aplicou TabM em diagnóstico de doença cardíaca
- Falta de benchmarks de arquiteturas modernas de MLP em dados médicos tabulares
- Necessidade de validação em contextos clínicos reais
- Dataset pequeno (297 amostras)
- Desbalanceamento de classes (54% vs 46%)
- Variabilidade entre folds - alguns com distribuição atípica
- Necessidade de capturar relações complexas entre features clínicas de forma eficiente
H1 (Hipótese Alternativa): TabM é viável para diagnóstico de doença cardíaca no dataset Cleveland, demonstrando desempenho competitivo com o estado da arte reportado na literatura, alcançando:
- Acurácia dentro da faixa esperada
- F1-Score competitivo
- AUC-ROC comparável
- Precision adequada para contexto clínico
- Recall elevado para minimizar falsos negativos
H0 (Hipótese Nula): TabM não alcança desempenho competitivo com o estado da arte em diagnóstico de doença cardíaca, apresentando resultados significativamente inferiores em múltiplas métricas.
Seleção cuidadosa de features clínicas relevantes:
- 1 Feature Numérica:
oldpeak(ST depression induzida por exercício) - 5 Features Categóricas:
cp,exang,slope,ca,thal - Redução: De 13 para 6 features (54% redução)
- Benefício: Reduz ruído, melhora interpretabilidade, acelera treinamento
TabM é descrita pelos autores como "a simple feed-forward MLP-based model" que combina a simplicidade de MLPs com a eficiência de ensembles.
Principais Características:
- MLP Simples: Baseado em redes neurais feedforward tradicionais, evitando a complexidade quadrática dos Transformers.
- BatchEnsemble: Técnica que permite treinar múltiplos "membros" do ensemble simultaneamente de forma eficiente.
- PiecewiseLinearEmbeddings: Técnica de embedding para features numéricas.
Por que TabM?
- Supera modelos com atenção: "MLP coupled with BatchEnsemble [...] right away outperforms popular attention-based models, such as FT-Transformer".
- Eficiência Computacional: "Compared to attention-based models, TabM does not suffer from quadratic computational complexity".
- Simplicidade: Arquitetura feedforward direta, fácil de implementar e ajustar.
Hiperparâmetros Chave:
n_blocks: Número de camadas/blocos residuais.d_block: Largura da camada (neurônios).d_embedding: Dimensionalidade dos embeddings.dropout: Regularização.
Implementação que trata dados numéricos e categóricos para balanceamento:
Features Numéricas: Interpolação linear entre vizinhos próximos Features Categóricas: Seleção aleatória
Parâmetro Otimizado: smote_sampling_strategy (0.86-1.0)
- 100 trials para encontrar melhores hiperparâmetros
- Validação cruzada interna (3 folds)
- Critério: Maximizar AUC-ROC
- 10-Fold Stratified Cross-Validation
- SMOTE aplicado apenas no conjunto de treinamento
- Validação em dados originais (sem SMOTE)
- Threshold otimizado por fold (Youden's J)
- Fonte: UCI Machine Learning Repository
- Instâncias: 303 originais → 297 após limpeza
- Features: 13 atributos clínicos
- Target: Diagnóstico de doença coronariana (binário)
| Tipo | Features |
|---|---|
| Numéricas | oldpeak (ST depression induzida por exercício) |
| Categóricas | cp (tipo de dor), exang (angina induzida), slope (inclinação ST), ca (vasos), thal (talassemia) |
Classe 0 (Saudáveis): 160 (54%)
Classe 1 (Doentes): 137 (46%)
Razão: 1.17:1
Input (1 numérica + 5 categóricas)
↓
PiecewiseLinearEmbeddings (features numéricas)
↓
TabM Blocks (MLP + BatchEnsemble)
↓
Camadas Densas (Feed-Forward)
↓
Dropout (regularização)
↓
Output (probabilidade de doença - Ensemble Mean)
{
"n_blocks": 2,
"d_block": 384,
"lr": 0.00401,
"weight_decay": 0.00309,
"dropout": 0.0698,
"d_embedding": 28,
"n_bins": 17,
"smote_sampling_strategy": 0.906,
"use_embeddings": true,
"use_smote": true
}- Optuna: 100 trials com 3-fold CV interna
- Critério: Maximizar AUC-ROC
- Pruning: Early stopping se performance não melhora
- Tempo: ~30-60 minutos
- 10-Fold Stratified Cross-Validation
- SMOTE aplicado em cada fold (balanceamento)
- Threshold otimizado por fold (Youden's J)
- Métricas: AUC-ROC, Accuracy, Precision, Recall, F1-score
>>> TESTE DE SMOTE <<<
Usando sampling_strategy=1.0 (balanceamento perfeito)
SMOTE: Gerando 23 amostras sintéticas
Classe minoritária: 1 (137 amostras)
Classe majoritária: 0 (160 amostras)
Dataset original: 297 amostras
Dataset com SMOTE: 320 amostras
Nova distribuição: [160 160]
- Melhor AUC-ROC: ~0.85 (validação interna)
- Trials completados: 100
- Melhor sampling_strategy: 0.894
| Fold | Antes | Depois | Melhoria |
|---|---|---|---|
| 6 | 30.0% erro | ~12-15% erro | -50-60% |
| 4 | 16.7% erro | ~8-10% erro | -40-50% |
| 5 | 16.7% erro | ~8-10% erro | -40-50% |
| 7 | 16.7% erro | ~8-10% erro | -40-50% |
"Qual é o desempenho de TabM em diagnóstico de doença cardíaca no dataset Cleveland e como se compara com o estado da arte reportado na literatura?"
-
"TabM alcança métricas competitivas com a literatura?"
- Métricas: Acurácia, F1-Score, AUC-ROC, Precision, Recall
- Análise: Comparação com benchmarks da literatura
-
"TabM generaliza bem em folds com diferentes distribuições de dados?"
- Métrica: Desvio padrão e variância de performance entre folds
- Análise: Robustez em folds problemáticos vs normais
-
"Qual é o impacto de SMOTE na performance de TabM em dados desbalanceados?"
- Análise: Performance com/sem SMOTE
- Métricas: Recall (minimizar falsos negativos), Precision
-
"O TabM com BatchEnsemble supera modelos de árvore de decisão (XGBoost/RandomForest)?"
- Análise: Comparação de métricas
- Métrica: Acurácia e AUC-ROC comparativa
Este projeto inclui uma interface web interativa para realizar diagnósticos em tempo real usando o modelo treinado.
-
Instale as dependências:
pip install streamlit
-
Execute o aplicativo:
streamlit run app.py
-
Acesse no navegador:
- Local:
http://localhost:8501 - Network: Endereço IP mostrado no terminal
- Local:
- Input Interativo: Formulário para inserir dados do paciente (Oldpeak, Dor no peito, etc.)
- Diagnóstico em Tempo Real: Cálculo de probabilidade de doença cardíaca
- Interpretação: Níveis de risco (Baixo, Moderado, Alto) e recomendações
- Visualização: Barra de progresso de risco
pip install tabm rtdl_num_embeddings optuna scikit-learn torch pandas numpy matplotlib# Instalação, imports, carregamento de dados, seleção de features
# Tempo: ~30 segundos# Verifica funcionamento de SMOTE com sampling_strategy=1.0
# Tempo: ~5 segundos
# Esperado: 23 amostras sintéticas geradas# Busca melhores hiperparâmetros (100 trials)
# Tempo: 30-60 minutos
# Salva em: best_params_tabm.json# 10-fold CV com melhores parâmetros
# Tempo: 20-40 minutos
# Gera gráfico ROC com intervalo de confiança# Incerteza e importância de features
# Tempo: ~5 minutosTabM/
├── tabm.ipynb # Notebook principal
├── best_params_tabm.json # Hiperparâmetros otimizados
├── README.md # Este arquivo
├── SMOTE_IMPLEMENTATION.md # Detalhes técnicos de SMOTE
├── SMOTE_LITERATURE_REVIEW.md # Revisão de literatura
└── CHANGES_SUMMARY.md # Resumo de mudanças
Tamanho: 30 amostras
Classe 0: 16 (53.3%)
Classe 1: 14 (46.7%)
Erros: 9/30 (30.0%)
Padrão: 6 Falsos Negativos, 3 Falsos Positivos
Características de erro:
- oldpeak: média=-0.073 (ligeiramente abaixo da média)
- cp: distribuição desbalanceada (2 tipo 0, 14 tipo 3)
- thal: distribuição desbalanceada (15 tipo 0, 14 tipo 2)
Tamanho: 30 amostras
Classe 0: 16 (53.3%)
Classe 1: 14 (46.7%)
Erros: 5/30 (16.7%)
Padrão: 2 Falsos Negativos, 3 Falsos Positivos
Características:
- ca: distribuição muito concentrada (23 tipo 0)
- slope: distribuição desbalanceada (18 tipo 0)
- Gap na Literatura: Nenhum estudo anterior aplicou TabM em contexto de doença cardíaca
- Benchmarking de TabM contra estado da arte reportado na literatura
- Validação rigorosa com 10-fold stratified cross-validation
- Mapeamento de desempenho para futuros pesquisadores
- Análise abrangente: Acurácia, F1-Score, AUC-ROC, Precision, Recall
- Foco em Recall para minimizar falsos negativos (crítico em diagnóstico médico)
- Comparação com estado da arte usando múltiplas métricas
- Implementação que trata numéricos e categóricos simultaneamente
- KNN para encontrar vizinhos representativos
- Interpolação inteligente para features numéricas
- Otimização conjunta de hiperparâmetros via Optuna
- SMOTE aplicado em cada fold (não apenas no dataset completo)
- Melhora robustez em datasets pequenos e desbalanceados
- Identificação e análise detalhada de folds com alta taxa de erro
- Avaliação de robustez em diferentes distribuições de dados
- Insights sobre comportamento de TabM em dados heterogêneos
-
Chawla et al., 2002 - "SMOTE: Synthetic Minority Over-sampling Technique"
- Técnica original de oversampling
-
Sowjanya & Mrudula, 2021 - "Effective treatment of imbalanced datasets in health care using modified SMOTE"
- D-SMOTE e BP-SMOTE para dados médicos
- Resultado: +3% em acurácia
-
El-Sofany et al., 2024 - "A proposed technique for predicting heart disease using machine learning algorithms"
- SMOTE + SHAP para diagnóstico de doença cardíaca
- Dataset: Cleveland Heart Disease
- Gorishniy et al., 2024 - "TabM: Advancing Tabular Deep Learning With Parameter-Efficient Ensembling" (ICLR 2025)
- https://arxiv.org/abs/2410.24210
- Transformer para dados tabulares com ensemble parameter-efficient
- Embeddings numéricos (PiecewiseLinearEmbeddings)
- Multi-head attention para capturar relações entre features
- Ensemble de k modelos independentes para robustez
- Detrano et al., 1989 - "International application of a new probability algorithm for the diagnosis of coronary artery disease"
- Dataset original Cleveland
- 303 pacientes, 76 atributos
Tamanho: 30 amostras
Classe 0: 16 (53.3%)
Classe 1: 14 (46.7%)
Erros: 9/30 (30.0%)
Padrão: 6 Falsos Negativos, 3 Falsos Positivos
Características de erro:
- oldpeak: média=-0.073 (ligeiramente abaixo da média)
- cp: distribuição desbalanceada (2 tipo 0, 14 tipo 3)
- thal: distribuição desbalanceada (15 tipo 0, 14 tipo 2)
Tamanho: 30 amostras
Classe 0: 16 (53.3%)
Classe 1: 14 (46.7%)
Erros: 5/30 (16.7%)
Padrão: 2 Falsos Negativos, 3 Falsos Positivos
Características:
- ca: distribuição muito concentrada (23 tipo 0)
- slope: distribuição desbalanceada (18 tipo 0)
- Variantes de SMOTE: Implementar D-SMOTE e BP-SMOTE
- Ensemble: Combinar TabM com XGBoost e Random Forest
- Feature Engineering: Adicionar interações entre features
- Explicabilidade: Integrar SHAP para interpretabilidade
- Validação Externa: Testar em datasets adicionais (Framingham, Hungarian)
- Analisar impacto de diferentes
k_neighborsem SMOTE - Comparar com undersampling e hybrid sampling
- Estudar efeito de SMOTE em diferentes tamanhos de dataset
- Investigar borderline-SMOTE para casos ambíguos
- Dataset pequeno (297 amostras)
- Features limitadas (1 numérica, 5 categóricas)
- Validação apenas em dados Cleveland
- Sem validação externa em outros datasets
- Falso Negativo é mais crítico que Falso Positivo
- SMOTE melhora recall (reduz FN)
- Threshold otimizado por fold pode variar clinicamente
- Necessário validação clínica antes de deployment
- Seed fixo:
RANDOM_STATE = 42 - Seed diferente por fold:
RANDOM_STATE + fold - Todos os hiperparâmetros salvos em
best_params_tabm.json - Código totalmente determinístico
Para dúvidas sobre implementação, resultados ou metodologia, consulte:
- Documentação técnica:
SMOTE_IMPLEMENTATION.md - Revisão de literatura:
SMOTE_LITERATURE_REVIEW.md - Resumo de mudanças:
CHANGES_SUMMARY.md
Última atualização: Dezembro 2025 Status: Experimento em progresso Versão: 1.0