SIENTIAPDE-1430: Implement advanced model training capabilities and enhanced data preprocessing. This includes support for Polynomial Regression with configurable degree and interaction terms, flexible per-variable lag configurations, and new data filtering options by date range and removed intervals. Comprehensive business validations are now enforced for all parameters, and MLflow logging has been extended to capture these detailed configurations. Additionally, Reduced Coulomb Energy (RCE) metrics are added for drift detection, with a new changelog documenting all pipeline parameter updates.
This commit is contained in:
@@ -33,8 +33,8 @@ def sample_params():
|
||||
experiment_name='test_experiment',
|
||||
target_variable='target',
|
||||
variable_columns=['var1', 'var2', 'var3'],
|
||||
lag_train=0,
|
||||
lag_val=0,
|
||||
lag_train={'var1': 0, 'var2': 0, 'var3': 0},
|
||||
lag_val={'var1': 0, 'var2': 0, 'var3': 0},
|
||||
rem_static_win=False,
|
||||
low_lim={},
|
||||
upp_lim={},
|
||||
@@ -48,6 +48,14 @@ def sample_params():
|
||||
line_separator=',',
|
||||
decimal_separator='.',
|
||||
removed_intervals=[],
|
||||
model_name='Linear Regression',
|
||||
degree=1,
|
||||
interaction_only=False,
|
||||
nan_treatment='drop',
|
||||
start_date=None,
|
||||
end_date=None,
|
||||
scaler_name='None',
|
||||
support_filters={},
|
||||
)
|
||||
|
||||
|
||||
@@ -106,8 +114,8 @@ class TestExtractModelEquation:
|
||||
experiment_name='test',
|
||||
target_variable='y',
|
||||
variable_columns=['x'],
|
||||
lag_train=0,
|
||||
lag_val=0,
|
||||
lag_train={'x': 0},
|
||||
lag_val={'x': 0},
|
||||
rem_static_win=False,
|
||||
low_lim={},
|
||||
upp_lim={},
|
||||
@@ -121,6 +129,14 @@ class TestExtractModelEquation:
|
||||
line_separator=',',
|
||||
decimal_separator='.',
|
||||
removed_intervals=[],
|
||||
model_name='Linear Regression',
|
||||
degree=1,
|
||||
interaction_only=False,
|
||||
nan_treatment='drop',
|
||||
start_date=None,
|
||||
end_date=None,
|
||||
scaler_name='None',
|
||||
support_filters={},
|
||||
)
|
||||
|
||||
# Mock model with single coefficient
|
||||
@@ -177,6 +193,7 @@ class TestInitDataPreprocessor:
|
||||
def test_init_preprocessor_with_scaler(self, training_repo, sample_params):
|
||||
"""Test preprocessor initialization with scaler enabled."""
|
||||
sample_params.use_scaler = True
|
||||
sample_params.scaler_name = 'Standard Scaler'
|
||||
preprocessor = training_repo._init_data_preprocessor(sample_params)
|
||||
|
||||
assert preprocessor.scaler_name == 'Standard Scaler'
|
||||
@@ -184,6 +201,7 @@ class TestInitDataPreprocessor:
|
||||
def test_init_preprocessor_without_scaler(self, training_repo, sample_params):
|
||||
"""Test preprocessor initialization without scaler."""
|
||||
sample_params.use_scaler = False
|
||||
sample_params.scaler_name = 'None'
|
||||
preprocessor = training_repo._init_data_preprocessor(sample_params)
|
||||
|
||||
assert preprocessor.scaler_name == 'None'
|
||||
@@ -211,14 +229,13 @@ class TestInitDataPreprocessor:
|
||||
|
||||
def test_init_preprocessor_lag_configuration(self, training_repo, sample_params):
|
||||
"""Test preprocessor lag configuration."""
|
||||
sample_params.lag_train = 5
|
||||
sample_params.lag_val = 3
|
||||
sample_params.lag_train = {'var1': 5, 'var2': 5, 'var3': 5}
|
||||
sample_params.lag_val = {'var1': 3, 'var2': 3, 'var3': 3}
|
||||
preprocessor = training_repo._init_data_preprocessor(sample_params)
|
||||
|
||||
# Check that lag dictionaries are created correctly
|
||||
for col in sample_params.variable_columns:
|
||||
assert preprocessor.lag_train[col] == 5
|
||||
assert preprocessor.lag_transform[col] == 3
|
||||
# Check that lag dictionaries are passed correctly
|
||||
assert preprocessor.lag_train == {'var1': 5, 'var2': 5, 'var3': 5}
|
||||
assert preprocessor.lag_transform == {'var1': 3, 'var2': 3, 'var3': 3}
|
||||
|
||||
|
||||
class TestInitScalerDict:
|
||||
|
||||
Reference in New Issue
Block a user