@@ -288,12 +288,25 @@ def _get_group_predictive_data(
288288 f"Make sure the model has been fitted and the { group } has been sampled!"
289289 ) from e
290290
291- if original_scale :
291+ has_been_scaled = (
292+ hasattr (self , "_posterior_predictive_samples_original_scale" )
293+ and self ._posterior_predictive_samples_original_scale
294+ )
295+
296+ if original_scale and not has_been_scaled :
292297 group_data = apply_sklearn_transformer_across_dim (
293298 data = group_data ,
294299 func = self .get_target_transformer ().inverse_transform ,
295300 dim_name = "date" ,
296301 )
302+
303+ if not original_scale and has_been_scaled :
304+ group_data = apply_sklearn_transformer_across_dim (
305+ data = group_data ,
306+ func = self .get_target_transformer ().transform ,
307+ dim_name = "date" ,
308+ )
309+
297310 return group_data
298311
299312 def _get_prior_predictive_data (self , original_scale : bool = False ) -> Dataset :
@@ -707,38 +720,44 @@ def get_errors(self, original_scale: bool = False) -> DataArray:
707720 "Make sure the model has been fitted and the posterior_predictive has been sampled!"
708721 ) from e
709722
710- target_array = np .asarray (
711- transform_1d_array (self .get_target_transformer ().transform , self .y )
712- )
713-
714- if len (target_array ) != len (posterior_predictive_data .date ):
715- raise ValueError (
716- "The length of the target variable doesn't match the length of the date column. "
717- "If you are computing out-of-sample errors, please overwrite `self.y` with the "
718- "corresponding (non-transformed) target variable."
723+ target_array = (
724+ np .asarray (self .y )
725+ if original_scale
726+ else np .asarray (
727+ transform_1d_array (self .get_target_transformer ().transform , self .y )
719728 )
729+ )
720730
721731 target = (
722732 pd .Series (target_array , index = self .posterior_predictive .date )
723733 .rename_axis ("date" )
724734 .to_xarray ()
725735 )
726736
727- errors = (
737+ if original_scale :
738+ # If posterior predictive data is not in original scale, transform it:
739+ if not hasattr (self , "_posterior_predictive_samples_original_scale" ):
740+ posterior_predictive_data = apply_sklearn_transformer_across_dim (
741+ data = posterior_predictive_data ,
742+ func = self .get_target_transformer ().inverse_transform ,
743+ dim_name = "date" ,
744+ )
745+ else :
746+ # If posterior predictive data is in original scale, transform it back
747+ # to the scaled space:
748+ if hasattr (self , "_posterior_predictive_samples_original_scale" ):
749+ posterior_predictive_data = apply_sklearn_transformer_across_dim (
750+ data = posterior_predictive_data ,
751+ func = self .get_target_transformer ().transform ,
752+ dim_name = "date" ,
753+ )
754+
755+ return (
728756 (target - posterior_predictive_data )[self .output_var ]
729757 .rename ("errors" )
730758 .transpose (..., "date" )
731759 )
732760
733- if original_scale :
734- return apply_sklearn_transformer_across_dim (
735- data = errors ,
736- func = self .get_target_transformer ().inverse_transform ,
737- dim_name = "date" ,
738- )
739-
740- return errors
741-
742761 def plot_errors (
743762 self , original_scale : bool = False , ax : plt .Axes = None , ** plt_kwargs : Any
744763 ) -> plt .Figure :
0 commit comments