AutoML Adaptive Hyperparameter Optimization + Full Data Pipeline for Arbovirus Forecasting
O Arboseer é um pipeline científico completo, modular e reprodutível para:
- Download e ingestão de dados brutos (SINAN, CNES, ERA5)
- Pré-processamento e limpeza de dados
- Construção de datasets prontos para modelagem
- Treinamento tradicional de modelos
- Otimização adaptativa de hiperparâmetros (AutoML)
- Registro completo de métricas de desempenho
.
├── config/
│ ├── config.yaml
│ ├── environment.yml
│ └── experiments.yaml
│
├── data/
│ ├── raw/
│ ├── processed/
│ └── datasets/
│
├── ingestion/
│ ├── download/
│ │ ├── download_cnes.py
│ │ └── download_sinan.py
│ └── preprocess/
│ ├── preprocess_cnes.py
│ └── preprocess_sinan.py
│
├── models/
├── notebooks/
├── runs/
├── src/
│ ├── data/
│ ├── evaluation/
│ ├── models/
│ ├── optimization/
│ ├── utils/
│ └── train_xgb_poisson.py, train_xgb_zip.py, train_rf.py
│
├── tests/
├── README.md
└── environment.yml
Os dados são baixados diretamente pelos scripts em ingestion/download/
:
python src/ingestion/download/download_sinan.py DENG 2023 data/raw/sinan/
python src/ingestion/download/download_cnes.py ST RJ 2311 data/raw/cnes/STRJ2311.dbc
Nota: os parâmetros devem ser ajustados conforme o período e o UF desejados.
Após o download, os dados são padronizados e limpos via:
python src/ingestion/preprocess/preprocess_sinan.py data/raw/sinan/ data/processed/sinan/
python src/ingestion/preprocess/preprocess_cnes.py data/raw/cnes/STRJ2311.parquet data/processed/cnes/STRJ2401.parquet
O ERA5 já vem pré-processado.
A construção final dos datasets de modelagem ocorre via:
python src/data/build_dataset.py
FULL
data/processed/sinan/DENG.parquet
data/processed/cnes/STRJ2401.parquet
data/raw/era5/RJ_1997_2024.nc
data/datasets/RJ_WEEKLY.pickle
config/config.yaml
True True
- Integra dados temporais e espaciais
- Constrói janelas deslizantes
- Exporta o dataset no formato pickle
Treinamento manual (sem otimização adaptativa):
python src/train_xgb_poisson.py
--dataset data/datasets/RJ_WEEKLY.pickle
--outdir runs/teste_poisson
--seed 42
--dict feature_dictionary.csv
python src/train_xgb_zip.py
--dataset data/datasets/RJ_WEEKLY.pickle
--outdir runs/teste_zip
--seed 42
--dict feature_dictionary.csv
python src/train_rf.py
--dataset data/datasets/RJ_WEEKLY.pickle
--outdir runs/teste_rf
--seed 42
--dict feature_dictionary.csv
Cada execução:
- Treina o modelo
- Calcula métricas de treino, validação e teste
- Gera curvas de aprendizado, distribuição de predições e feature importance
Arquivo config/experiments.yaml
:
global: trials_per_round: [50, 100, 150] seed: 42
experiments:
-
dataset: data/datasets/RJ.pickle models: [poisson, zip, rf]
-
dataset: data/datasets/RJ_WEEKLY.pickle models: [poisson, zip]
python src/optimization/experiment_runner.py
O pipeline irá:
- Rodar múltiplos datasets e modelos automaticamente
- Aplicar o Adaptive Search Space Refinement
- Registrar resultados de cada experimento
Todos os resultados são organizados em runs/
, contendo:
- best_params.json → melhores hiperparâmetros
- trials.csv → histórico completo de trials
- opt_history.html → curva de otimização
- opt_importance.html → importância dos hiperparâmetros
- MSE (Mean Squared Error)
- RMSE
- MAE
- R²
- MAPE (ignorando zeros)
- SMAPE
- Poisson Deviance
- Pearson Correlation (ρ)
Pré-requisito: Conda
Clone o projeto:
git clone <REPO_URL> cd <REPO_DIR>
Crie o ambiente:
conda env create -f config/environment.yml
Ative o ambiente:
conda activate arboseer
(Recomendado) Exportar novamente o ambiente:
conda env export --from-history > config/environment.yml
- numpy
- pandas
- scikit-learn
- xgboost
- optuna
- pyyaml
- matplotlib
- joblib
- torch
- tqdm