docs: def best_model_fit(self):
          """ Fit data to optimal model and return its metrics.
  
          Returns
          -------
          dict
              Best model's metrics
  
          """
  
          self.best_model.fit(self.baseline_in, self.baseline_out)
  
          self.y_true = self.baseline_out                             # Pandas Series
          self.y_pred = self.best_model.predict(self.baseline_in)     # numpy.ndarray
  
          # Set all negative values to zero since energy > 0
          self.y_pred[self.y_pred < 0] = 0
  
          # n and k values for adj r2 score
          self.n_test = self.baseline_in.shape[0]   # Number of points in data sample
          self.k_test = self.baseline_in.shape[1]   # Number of variables in model, excluding the constant
  
          # Store best model's metrics
          self.best_metrics['name']   = self.best_model_name
          self.best_metrics['r2']     = r2_score(self.y_true, self.y_pred)
          self.best_metrics['mse']    = mean_squared_error(self.y_true, self.y_pred)
          self.best_metrics['rmse']   = math.sqrt(self.best_metrics['mse'])
          self.best_metrics['adj_r2'] = self.adj_r2(self.best_metrics['r2'], self.n_test, self.k_test)
  
          # Normalized Mean Bias Error
          numerator = sum(self.y_true - self.y_pred)
          denominator = (self.n_test - self.k_test) * (sum(self.y_true) / len(self.y_true))
          self.best_metrics['nmbe']   = numerator / denominator
  
          # MAPE can't have 0 values in baseline_out -> divide by zero error
          self.baseline_out_copy  = self.baseline_out[self.baseline_out != 0]
          self.baseline_in_copy   = self.baseline_in[self.baseline_in.index.isin(self.baseline_out_copy.index)]
          self.y_true_copy = self.baseline_out_copy                             # Pandas Series
          self.y_pred_copy = self.best_model.predict(self.baseline_in_copy)     # numpy.ndarray
          self.best_metrics['mape']   = np.mean(np.abs((self.y_true_copy - self.y_pred_copy) / self.y_true_copy)) * 100
  
          return self.best_metrics