Skip to main content

FTIR-OPTUNA

Framework de AutoML para espectros FTIR: um único estudo Optuna otimiza, a cada trial, tanto o pipeline de pré-processamento (via ftir_prep) quanto a escolha do classificador e seus hiperparâmetros — simultaneamente, não em etapas separadas.

Para o histórico de decisões de design, bugs encontrados/corrigidos e a investigação de integração com o amlb_ainet, ver CLAUDE.md.

Requisitos

  • Python 3.9
  • O pacote ftir_prep (não está no PyPI — instalado a partir de um wheel local, ver abaixo)

Instalação

ftir-optuna-automl está no PyPI, mas depende do ftir-prep — que também está, só que precisa ser instalado sem resolver as dependências dele (o ftir-prep publicado pede PyWavelets>=1.9.0, que não tem wheel para Python 3.9):

# 1. Crie e ative um venv
python3.9 -m venv venv
source venv/bin/activate

# 2. Instale o ftir-prep (PyPI, sem resolver as dependencias dele) + as dependencias
#    reais, com versoes que funcionam em Python 3.9
pip install --no-deps ftir-prep==0.3.1
pip install rampy==0.5.3 PyWavelets==1.6.0 statsmodels openpyxl shap matplotlib

# 3. Instale o ftir-optuna-automl
pip install ftir-optuna-automl

Para desenvolver este repositório em vez de só usar a biblioteca, clone o repositório e instale em modo editável (pip install -e .) no lugar do passo 3 acima, depois instale as dependências de dev:

git clone https://github.com/lucas-mendonca-andrade/ftir-optuna-automl.git
cd ftir-optuna-automl
pip install -e .
pip install -r requirements.txt   # suite de testes, notebook, empacotamento

Configuração

Os caminhos de dataset não ficam hardcoded no código — vêm de variáveis de ambiente, carregadas de um arquivo .env na raiz do projeto (não versionado; cada máquina tem o seu).

cp .env.example .env
# edite .env com os caminhos reais da sua maquina
Variável Obrigatória? Usada por Descrição
TEA_DATA_PATH sim notebook, testes .dat com espectros + rótulos do dataset TEA
TEA_WAVENUMBERS_PATH sim notebook, testes .dat com os números de onda (cm⁻¹)
AMLB_TEA_DATA_DIR não (tem default) script de simulação diretório com os CSVs de fold do benchmark real
AMLB_TEA_WAVENUMBERS_PATH não (tem default) script de simulação números de onda do benchmark real

Se TEA_DATA_PATH/TEA_WAVENUMBERS_PATH estiverem faltando, a importação de config falha imediatamente com uma mensagem clara (não um FileNotFoundError genérico no meio de uma busca).

Uso rápido

from config import settings
from ftir_prep import FTIRDataLoader
from ftir_optuna_automl import AutoMLOptunaOptimizer

# 1. Carregar os dados
loader = FTIRDataLoader(
    data_path=str(settings.tea_data_path),
    wavenumbers_path=str(settings.tea_wavenumbers_path),
)
X, y, wavenumbers = loader.load_data()

# 2. Rodar a busca conjunta (pre-processamento + classificador)
optimizer = AutoMLOptunaOptimizer(X, y, wavenumbers)
optimizer.optimize(
    time_budget_s=600,       # orcamento de tempo (segundos)
    memory_limit_mb=4096,    # teto de memoria (RSS), em MB
)

# 3. Ver o resultado
summary = optimizer.get_optimization_summary()
print(summary["best_classifier"], summary["best_value"])

# 4. Treinar o melhor pipeline no dado completo e salvar (p/ SHAP pos-hoc, ex.)
optimizer.fit_best()
optimizer.save_fitted_pipeline("models/tea")

Notebook interativo

optuna_automl.ipynb cobre o mesmo fluxo com todos os parâmetros expostos (célula por célula, com explicação de cada um). Abra com o kernel "Python (ftir-optuna)":

python -m ipykernel install --user --name=ftir-optuna --display-name="Python (ftir-optuna)"

Parâmetros principais

AutoMLOptunaOptimizer(X, y, wavenumbers, ...):

Parâmetro Padrão Descrição
cv_method "StratifiedKFold" ou "StratifiedGroupKFold"/"GroupKFold" (exigem groups)
cv_n_splits 3 número de folds usados para pontuar cada trial
groups None obrigatório para os dois métodos de CV acima
metric "balanced_accuracy" qualquer métrica de sklearn.metrics.get_scorer_names(), ou um scorer customizado
seed 42 usada no TPESampler do Optuna e em todo classificador estocástico do espaço de busca

optimizer.optimize(...):

Parâmetro Obrigatório Descrição
time_budget_s sim orçamento de tempo total, em segundos
memory_limit_mb sim teto de memória (RSS) — total, dividido entre os workers se n_jobs>1
storage_path não persiste o estudo em SQLite; permite retomar uma busca interrompida
n_jobs não (padrão 1) processos rodando trials em paralelo, compartilhando storage_path
preset não (padrão None) None (busca conjunta normal) ou "structure_then_refine" — ver abaixo

Preset structure_then_refine

Analogamente aos presets de frameworks como AutoGluon/MLJAR, optimize(..., preset="structure_then_refine") divide time_budget_s em duas fases sequenciais, cada uma com metade do orçamento:

  1. Estrutura (50%): busca só quais técnicas de pré-processamento e qual classificador usar, avaliando cada combinação com os hiperparâmetros default de cada técnica/modelo — sem tunar.
  2. Refino (50%): fixa a estrutura vencedora da fase 1 e tuna só os hiperparâmetros dela, no mesmo espaço de busca condicional completo usado no modo sem preset.
optimizer.optimize(
    time_budget_s=600,
    memory_limit_mb=4096,
    preset="structure_then_refine",
)

Depois de rodar, optimizer.structure_study_/optimizer.refine_study_ dão acesso aos dois estudos Optuna internos separadamente; optimizer.best_pipeline_/optimizer.best_classifier_ (e get_optimization_summary()) sempre refletem o resultado final da fase de refino.

Rodando os testes

pytest

37 testes, cobrindo desde o comportamento default até cenários de concorrência real (n_jobs>1), persistência/retomada, validação de orçamento de recursos e o preset structure_then_refine.

Estrutura do projeto

FTIR-OPTUNA/
├── src/ftir_optuna_automl/   # o pacote em si (instalavel via pip)
├── tests/                    # suite pytest
├── config.py                 # carrega .env (caminhos de dataset deste repositorio)
├── optuna_automl.ipynb       # notebook interativo
├── simulate_amlb_ftir_tea_10min_acc.py  # simula o benchmark real do amlb_ainet
├── dist/                     # wheel buildado
└── pyproject.toml

Licença

MIT

Metadata

Release files for ftir-optuna-automl 0.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ftir-optuna-automl 0.2.3
File Size Uploaded
ftir_optuna_automl-0.2.3.tar.gz 34.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ftir-optuna-automl 0.2.3
File Interpreter ABI Platform
ftir_optuna_automl-0.2.3-py3-none-any.whl Python 3 none any Details

Total release size: 59.6 kB

Release files / ftir_optuna_automl-0.2.3.tar.gz

Download URL ftir_optuna_automl-0.2.3.tar.gz
Size 34.2 kB
Tags Source
SHA-256 checksum
How to use checksums
7cc60d8a0d5817189c78e9c0b0d0c8f55858ae32081b37b05d4c8cfb170f184f
BLAKE2b-256 checksum
How to use checksums
143171b11e69a3ac09fdfa55894333b854dbc9fbcf0bbc53b182c1e25c206929
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.21

Release files / ftir_optuna_automl-0.2.3-py3-none-any.whl

Download URL ftir_optuna_automl-0.2.3-py3-none-any.whl
Size 25.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b5b4752d3c67bf9c6e9a7c527e53626cfaa3c42283f381da085147971dce4caf
BLAKE2b-256 checksum
How to use checksums
2eb709e05c0de5413f1122ac874763b12cfeef055f2426fcda3c1a3b68d37609
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.21

Release history Release notifications | RSS feed

0.2.5

2 release files

This release

0.2.3 This release

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page