@@ -159,6 +159,7 @@ def _build_model(self) -> pd.DataFrame:
159
159
self .models [s_id ] = {}
160
160
self .models [s_id ]["model" ] = model
161
161
self .models [s_id ]["le" ] = self .le [s_id ]
162
+ self .models [s_id ]["score" ] = self .get_validation_score_and_metric (model )
162
163
163
164
# In case of Naive model, model.forecast function call does not return confidence intervals.
164
165
if f"{ target } _ci_upper" not in summary_frame :
@@ -511,3 +512,31 @@ def explain_model(self):
511
512
f"Failed to generate explanations for series { s_id } with error: { e } ."
512
513
)
513
514
logger .debug (f"Full Traceback: { traceback .format_exc ()} " )
515
+
516
+ def get_validation_score_and_metric (self , model ):
517
+ trials = model .completed_trials_summary_
518
+ model_params = model .selected_model_params_
519
+ if len (trials ) > 0 :
520
+ score_col = [col for col in trials .columns if "Score" in col ][0 ]
521
+ validation_score = trials [trials .Hyperparameters == model_params ][score_col ].iloc [0 ]
522
+ else :
523
+ validation_score = 0
524
+ return - 1 * validation_score
525
+
526
+ def generate_train_metrics (self ) -> pd .DataFrame :
527
+ """
528
+ Generate Training Metrics when fitted data is not available.
529
+ """
530
+ total_metrics = pd .DataFrame ()
531
+ for s_id in self .forecast_output .list_series_ids ():
532
+ try :
533
+ metrics = {self .spec .metric .upper (): self .models [s_id ]["score" ]}
534
+ metrics_df = pd .DataFrame .from_dict (metrics , orient = "index" , columns = [s_id ])
535
+ logger .warning ("AutoMLX failed to generate training metrics. Recovering validation loss instead" )
536
+ total_metrics = pd .concat ([total_metrics , metrics_df ], axis = 1 )
537
+ except Exception as e :
538
+ logger .debug (
539
+ f"Failed to generate training metrics for target_series: { s_id } "
540
+ )
541
+ logger .debug (f"Error: { e } " )
542
+ return total_metrics
0 commit comments