Files
sientia-dataops-model-manager/doc/model_equation_implementation.md
2025-10-24 08:03:27 -03:00

79 lines
3.0 KiB
Markdown

# Implementação da Equação do Modelo como Artefato JSON
## Visão Geral
Esta implementação adiciona a capacidade de extrair e salvar a equação do modelo de regressão linear como um artefato JSON, seguindo a arquitetura existente do projeto.
## Mudanças Implementadas
### 1. TrainModelResult
- **Arquivo**: `model_manager/utils/models/train_model_result.py`
- **Mudanças**:
- Adicionado campo `equation: dict | None = None` para armazenar os metadados da equação
- Adicionado campo `equation_path: str | None = None` para armazenar o caminho do arquivo JSON
### 2. TrainingRepository
- **Arquivo**: `model_manager/utils/repository/training_repository.py`
- **Mudanças**:
- Adicionado método `_extract_model_equation()` para extrair coeficientes e intercept do modelo
- Integrado a extração da equação no método `after_train_calculation()`
### 3. ModelRepository
- **Arquivo**: `model_manager/utils/repository/model_repository.py`
- **Mudanças**:
- Adicionado import do módulo `json`
- Modificado `_generate_report()` para salvar a equação como arquivo JSON
- Modificado `_save_run()` para fazer log do artefato da equação no MLflow
## Estrutura do JSON da Equação
O arquivo `model_equation.json` terá a seguinte estrutura:
```json
{
"target_variable": "target_column_name",
"coefficients": {
"feature1": 0.123456,
"feature2": -0.789012,
"feature3": 0.345678
},
"intercept": 1.234567,
"equation_string": "target_column_name = 1.234567 + 0.123456 * feature1 + -0.789012 * feature2 + 0.345678 * feature3",
"latex_equation": "target_column_name = 1.234567 + 0.123456 \\cdot feature1 + -0.789012 \\cdot feature2 + 0.345678 \\cdot feature3",
"model_type": "Linear Regression"
}
```
## Fluxo de Execução
1. **Treinamento**: O modelo é treinado no `TrainingRepository.train()`
2. **Pós-treinamento**: O método `after_train_calculation()` é chamado, que:
- Calcula as métricas (MSE, MAE, R²)
- Extrai a equação usando `_extract_model_equation()`
3. **Salvamento**: O `ModelRepository.save_model()` é chamado, que:
- Gera os artefatos (relatórios, dados CSV)
- Salva a equação como `model_equation.json`
- Faz log de todos os artefatos no MLflow
## Benefícios
- **Rastreabilidade**: A equação fica disponível como artefato versionado no MLflow
- **Transparência**: Fácil acesso aos coeficientes e estrutura do modelo
- **Compatibilidade**: Formato JSON facilita integração com outras ferramentas
- **Flexibilidade**: Inclui tanto formato legível quanto LaTeX para diferentes usos
## Compatibilidade
Esta implementação é totalmente compatível com:
- A arquitetura existente do projeto
- O fluxo de treinamento atual
- O sistema de logging do MLflow
- Os testes existentes (não quebra funcionalidades)
## Exemplo de Uso
Após o treinamento, a equação estará disponível em:
- **Memória**: `train_result.equation` (dicionário Python)
- **Arquivo**: `train_result.equation_path` (caminho para o JSON)
- **MLflow**: Como artefato `model_equation.json` no run do experimento