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
Fit data to optimal model and return its metrics.

        Returns
        -------
        dict
            Best model's metrics