import pandas as pd from .types import DirectionalTrainingOutcome, TrainingOutcome from training.train_model import train_model from training.walk_forward import walk_forward_process_transformations from typing import Optional from config.types import Config from models.base import Model from models.model_map import default_feature_selector_classification from transformations.scaler import get_scaler from transformations.rfe import RFETransformation from transformations.pca import PCATransformation def train_directional_model( X: pd.DataFrame, y: pd.Series, forward_returns: pd.Series, config: Config, model: Model, from_index: Optional[pd.Timestamp], preloaded_training_step: Optional[DirectionalTrainingOutcome] = None, ) -> DirectionalTrainingOutcome: if preloaded_training_step is None: print("Preprocess transformations") transformations_over_time = walk_forward_process_transformations( X=X, y=y, forward_returns=forward_returns, expanding_window=config.expanding_window_base, window_size=config.sliding_window_size_base, retrain_every=config.retrain_every, from_index=from_index, transformations=[ get_scaler(config.scaler), PCATransformation( ratio_components_to_keep=0.5, sliding_window_size=config.sliding_window_size_base, ), RFETransformation( n_feature_to_select=40, model=default_feature_selector_classification, ), ], ) else: transformations_over_time = preloaded_training_step.transformations training_outcome = train_model( ticker_to_predict=config.target_asset[1], X=X, y=y, forward_returns=forward_returns, model=model, expanding_window=config.expanding_window_base, sliding_window_size=config.sliding_window_size_base, retrain_every=config.retrain_every, from_index=from_index, no_of_classes=config.no_of_classes, level="primary", output_stats=config.mode == "training", transformations_over_time=transformations_over_time, model_over_time=preloaded_training_step.training.model_over_time if preloaded_training_step else None, ) if config.mode == "training": print(training_outcome.stats) return DirectionalTrainingOutcome(training_outcome, transformations_over_time)