Code import - branch release/SIENTIAPDE-1645
This commit is contained in:
227
PIPELINE_PARAMS_CHANGELOG.md
Normal file
227
PIPELINE_PARAMS_CHANGELOG.md
Normal 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
|
||||
Reference in New Issue
Block a user