Code import - branch release/SIENTIAPDE-1645

This commit is contained in:
2026-08-05 13:53:37 +00:00
commit d481e0acff
116 changed files with 92848 additions and 0 deletions

View File

@@ -0,0 +1,227 @@
# Changelog de Parâmetros do Pipeline de Treinamento
Este documento descreve as alterações nos parâmetros de entrada do pipeline Temporal para treinamento de modelos.
## Resumo das Alterações
### Parâmetros ALTERADOS (Breaking Changes)
| Parâmetro | Tipo Anterior | Tipo Novo | Descrição |
|-----------|---------------|-----------|-----------|
| `lag_train` | `int` | `dict[str, int]` | Agora é um dicionário com lag por variável. Ex: `{"var1": 2, "var2": 3}` |
| `lag_val` | `int` | `dict[str, int]` | Agora é um dicionário com lag por variável. Ex: `{"var1": 1, "var2": 1}` |
### Parâmetros NOVOS (Obrigatórios)
| Parâmetro | Tipo | Descrição | Valores Válidos |
|-----------|------|-----------|-----------------|
| `model_name` | `str` | Nome do tipo de modelo | `"Linear Regression"`, `"Polynomial Regression"` |
| `degree` | `int` | Grau do polinômio (1 = linear) | `>= 1` |
| `interaction_only` | `bool` | Apenas termos de interação para polinomial | `true`, `false` |
| `nan_treatment` | `str` | Tratamento de valores NaN | `"drop"`, `"linear interpolation"`, `"fill linear"` |
| `scaler_name` | `str` | Nome do scaler a usar | `"Standard Scaler"`, `"None"` |
### Parâmetros NOVOS (Opcionais)
| Parâmetro | Tipo | Descrição | Default |
|-----------|------|-----------|---------|
| `start_date` | `str \| null` | Data inicial para filtrar dados (formato: `"YYYY-MM-DD HH:MM:SS"`) | `null` |
| `end_date` | `str \| null` | Data final para filtrar dados (formato: `"YYYY-MM-DD HH:MM:SS"`) | `null` |
| `support_filters` | `dict \| null` | Filtros customizados por variável | `{}` |
| `static_threshold` | `int \| null` | Threshold para remoção de janelas estáticas (1-1000). Só usado quando `rem_static_win` é `true`. | `1` |
---
## Exemplo de Input Completo
### Formato ANTERIOR (não funciona mais):
```json
{
"experiment_run_id": 123,
"target_variable": "temperatura",
"variable_columns": ["pressao", "umidade", "velocidade"],
"lag_train": 2,
"lag_val": 1,
"rem_static_win": true,
"low_lim": {"pressao": 0, "umidade": 0, "velocidade": 0},
"upp_lim": {"pressao": 100, "umidade": 100, "velocidade": 50},
"window": 0,
"use_scaler": true,
"include_ar": false,
"bucket_name": "training-data",
"file_name": "dataset.csv",
"line_separator": ";",
"decimal_separator": ",",
"train_size": 80,
"shuffle": false,
"experiment_name": "modelo-temperatura",
"removed_intervals": []
}
```
### Formato NOVO (obrigatório):
```json
{
"experiment_run_id": 123,
"target_variable": "temperatura",
"variable_columns": ["pressao", "umidade", "velocidade"],
"lag_train": {
"pressao": 2,
"umidade": 2,
"velocidade": 2
},
"lag_val": {
"pressao": 1,
"umidade": 1,
"velocidade": 1
},
"rem_static_win": true,
"static_threshold": null,
"low_lim": {"pressao": 0, "umidade": 0, "velocidade": 0},
"upp_lim": {"pressao": 100, "umidade": 100, "velocidade": 50},
"window": 0,
"use_scaler": true,
"include_ar": false,
"bucket_name": "training-data",
"file_name": "dataset.csv",
"line_separator": ";",
"decimal_separator": ",",
"train_size": 80,
"shuffle": false,
"experiment_name": "modelo-temperatura",
"removed_intervals": [],
"model_name": "Linear Regression",
"degree": 1,
"interaction_only": false,
"nan_treatment": "drop",
"scaler_name": "Standard Scaler",
"start_date": null,
"end_date": null,
"support_filters": {}
}
```
---
## Exemplo para Polynomial Regression
```json
{
"experiment_run_id": 124,
"target_variable": "temperatura",
"variable_columns": ["pressao", "umidade"],
"lag_train": {
"pressao": 0,
"umidade": 0
},
"lag_val": {
"pressao": 0,
"umidade": 0
},
"rem_static_win": false,
"low_lim": {"pressao": 0, "umidade": 0},
"upp_lim": {"pressao": 100, "umidade": 100},
"window": 0,
"use_scaler": true,
"include_ar": false,
"bucket_name": "training-data",
"file_name": "dataset.csv",
"line_separator": ";",
"decimal_separator": ",",
"train_size": 80,
"shuffle": false,
"experiment_name": "modelo-polinomial",
"removed_intervals": [],
"model_name": "Polynomial Regression",
"degree": 2,
"interaction_only": false,
"nan_treatment": "linear interpolation",
"scaler_name": "Standard Scaler",
"start_date": "2024-01-01 00:00:00",
"end_date": "2024-12-31 23:59:59",
"support_filters": {}
}
```
---
## Exemplo com Intervalos Removidos
```json
{
"removed_intervals": [
["2024-03-01 00:00:00", "2024-03-15 23:59:59"],
["2024-06-01 00:00:00", "2024-06-30 23:59:59"]
]
}
```
---
## Parâmetros Logados no MLflow
Os seguintes parâmetros são agora logados no MLflow:
| Parâmetro MLflow | Descrição |
|------------------|-----------|
| `model_name` | Nome do modelo (`Linear Regression` ou `Polynomial Regression`) |
| `models_params` | `{"degree": int, "interaction_only": bool}` |
| `target_variable` | Variável alvo |
| `input_variables` | Lista de variáveis de entrada |
| `nan_treatment` | Tratamento de NaN |
| `lag_train` | Dicionário de lags para treino |
| `lag_transform` | Dicionário de lags para transformação |
| `static_threshold` | Threshold para janelas estáticas (1 ou null) |
| `lower_limits` | Limites inferiores por variável |
| `upper_limits` | Limites superiores por variável |
| `scaler_name` | Nome do scaler |
| `scaler_params` | Parâmetros do scaler (mean, variance) |
| `include_ar` | Se inclui variável autoregressiva |
| `train_size` | Proporção de treino (0.0 - 1.0) |
| `test_size` | Proporção de teste (0.0 - 1.0) |
| `start_date` | Data inicial (ou null) |
| `end_date` | Data final (ou null) |
| `removed_intervals` | Lista de intervalos removidos |
| `retrain` | Sempre `false` para novos modelos |
| `support_filters` | Filtros customizados |
---
## Validações de Negócio
O sistema valida automaticamente:
1. **`train_size`**: Deve estar entre 10 e 100
2. **`variable_columns`**: Não pode estar vazio
3. **`lag_train` / `lag_val`**: Todos os valores devem ser >= 0
4. **`window`**: Deve ser >= 0
5. **`degree`**: Deve ser >= 1
6. **`nan_treatment`**: Deve ser `"drop"`, `"linear interpolation"` ou `"fill linear"`
7. **`scaler_name`**: Deve ser `"Standard Scaler"` ou `"None"`
8. **`model_name`**: Deve ser `"Linear Regression"` ou `"Polynomial Regression"`
9. **`low_lim` / `upp_lim`**: Devem ter as mesmas chaves, e `low_lim[var] < upp_lim[var]`
10. **`bucket_name` / `file_name` / `experiment_name`**: Não podem estar vazios
11. **`degree` vs `model_name`**: Se `model_name` = "Polynomial Regression", `degree` deve ser >= 2; se "Linear Regression", `degree` deve ser = 1
12. **`removed_intervals`**: Cada elemento deve ser lista/tupla com pelo menos 2 elementos (start, end)
13. **`target_variable`**: Não pode estar vazio
14. **`static_threshold`**: Se `rem_static_win` = `true` e `static_threshold` tiver valor, deve estar entre 1 e 1000 (inclusive). Se `null`, assume valor `1`.
---
## Arquivos Modificados
- `model_manager/sientia/models.py` - `DataPreprocessor` e `LinearRegressionModel`
- `model_manager/sientia/metrics.py` - Funções RCE adicionadas
- `model_manager/utils/models/train_model_params.py` - Novos parâmetros
- `model_manager/utils/repository/training_repository.py` - Uso dos novos parâmetros
- `model_manager/utils/repository/model_repository.py` - Logging no MLflow