# 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