Submission to the MICCAI 2026 MultiTab Workshop.
Paper: not yet published — link coming soon
Multi-modal deep learning for post-operative re-intervention risk prediction in EVAR patients, combining CT volumes, clinical tabular data, and AAA geometry metrics from the RADAR database (542 AAA patients with imaging, 4 sites).
Institution: University of Twente
conda activate tabpredict # Python 3.11
export HTTPS_PROXY="http://proxy.utwente.nl:3128" # required on HPC
pip install -r requirements.txtcd /home/ranema/TabPredict
# Train — MLP clinical backbone
python scripts/train.py --config experiments/mlp.yaml
# Train — SAINT clinical backbone
python scripts/train.py --config experiments/saint.yaml
# Train — TabM clinical backbone
python scripts/train.py --config experiments/tabm.yaml
# Train — classical ML backbones (LR | RF | GBM | XGBoost)
python scripts/train.py --config experiments/v1_logistic_regression.yaml
python scripts/train.py --config experiments/v1_random_forest.yaml
python scripts/train.py --config experiments/v1_gradient_boosting.yaml
python scripts/train.py --config experiments/v1_xgboost.yaml
# Evaluate on test split
python scripts/test.py \
--config experiments/mlp.yaml \
--checkpoint /deepstore/datasets/mia/TabPredict/models/no_complications_MLP/best_stage_b.pt \
--output_dir /deepstore/datasets/mia/TabPredict/test_results/no_complications_MLP
# Evaluate on all splits × all stage checkpoints
python scripts/test.py \
--config experiments/mlp.yaml \
--output_dir /deepstore/datasets/mia/TabPredict/test_results/no_complications_MLP \
--split all
# Run tests (421 tests, CPU-only, ~20 s)
~/.conda/envs/tabpredict/bin/python -m pytest tests/ -vOverride any config value at runtime without editing the YAML:
python scripts/train.py \
--config experiments/mlp.yaml \
--set training.batch_size=4 training.stages[0].epochs=2 wandb.mode=disabledTabPredict/
├── experiments/ # YAML experiment configs (one per backbone)
│ ├── mlp.yaml # MLP backbone
│ ├── saint.yaml # SAINT backbone
│ ├── tabm.yaml # TabM backbone
│ ├── tabpfn.yaml # TabPFN backbone
│ ├── v1_logistic_regression.yaml # Logistic Regression backbone
│ ├── v1_random_forest.yaml # Random Forest backbone
│ ├── v1_gradient_boosting.yaml # Gradient Boosting backbone
│ └── v1_xgboost.yaml # XGBoost backbone
├── scripts/ # Entry points
│ ├── train.py # Training
│ ├── test.py # Evaluation / inference
│ └── submit_slurm.sh # SLURM wrapper
├── src/ # Core library
│ ├── models/ # ReinterventionRiskModel + tabular backbones
│ ├── data/ # MONAI pipeline + loaders
│ ├── training/ # Losses, stages, trainer
│ ├── xai/ # Gradient-based explainability
│ └── evaluation/ # Metrics + per-patient output
├── preprocessing/ # Data preparation pipeline (00–07)
├── tests/ # CPU-only pytest suite (421 tests)
└── documentation/ # Technical documentation
| Document | Contents |
|---|---|
| Architecture | Model branches, FiLM fusion, output heads, forward API |
| Models | Tabular backbone comparison, projection inputs, imputation, per-backbone pipeline |
| Training | 2-stage curriculum, loss functions, optimizer, modality dropout |
| Data | Deepstore layout, clinical JSON, MONAI pipeline |
| Preprocessing | Raw DICOM → training-ready data, step-by-step pipeline |
| Configuration | Full YAML reference, all parameters explained |
| XAI | Explainability methods, full_explain() output, GradCAM |
| Evaluation | Inference, per-patient output files, all metrics |
| Testing | Test suite coverage, gaps, how to run |
| W&B Integration | Logged metrics, tables, offline mode |
| HPC / SLURM | Job submission, cluster setup, monitoring |