This class turns statistical model into a Forecaster compatible with the skforecast API.
Supported statistical models are: skforecast.stats.Sarimax, skforecast.stats.ARAR,
aeon.forecasting.stats.ARIMA and aeon.forecasting.stats.ETS.
A statistical model instance. Supported models are:
skforecast.stats.Sarimax
skforecast.stats.ARAR
aeon.forecasting.stats.ARIMA
aeon.forecasting.stats.ETS
None
transformer_y
object transformer (preprocessor)
An instance of a transformer (preprocessor) compatible with the scikit-learn
preprocessing API with methods: fit, transform, fit_transform and inverse_transform.
ColumnTransformers are not allowed since they do not have inverse_transform method.
The transformation is applied to y before training the forecaster.
None
transformer_exog
object transformer (preprocessor)
An instance of a transformer (preprocessor) compatible with the scikit-learn
preprocessing API. The transformation is applied to exog before training the
forecaster. inverse_transform is not available when using ColumnTransformers.
Additional arguments to be passed to the fit method of the estimator.
When using the skforecast Sarimax model, the fit kwargs should be passed
using the model parameter sm_fit_kwargs and not this one.
An instance of a transformer (preprocessor) compatible with the scikit-learn
preprocessing API with methods: fit, transform, fit_transform and inverse_transform.
ColumnTransformers are not allowed since they do not have inverse_transform method.
The transformation is applied to y before training the forecaster.
An instance of a transformer (preprocessor) compatible with the scikit-learn
preprocessing API. The transformation is applied to exog before training the
forecaster. inverse_transform is not available when using ColumnTransformers.
Last window the forecaster has seen during training. It stores the
values needed to predict the next step immediately after the training data. In the
statistical models it stores all the training data.
Type of each exogenous variable/s used in training before the transformation
applied by transformer_exog. If transformer_exog is not used, it
is equal to exog_dtypes_out_.
Type of each exogenous variable/s used in training after the transformation
applied by transformer_exog. If transformer_exog is not used, it
is equal to exog_dtypes_in_.
Names of the exogenous variables included in the matrix X_train created
internally for training. It can be different from exog_names_in_ if
some exogenous variables are transformed during the training process.
def__init__(self,estimator:object=None,transformer_y:object|None=None,transformer_exog:object|None=None,fit_kwargs:dict[str,object]|None=None,forecaster_id:str|int|None=None,regressor:object=None)->None:self.estimator=copy(initialize_estimator(estimator,regressor))self.estimator_type=Noneself.transformer_y=transformer_yself.transformer_exog=transformer_exogself.window_size=1self.last_window_=Noneself.extended_index_=Noneself.index_type_=Noneself.index_freq_=Noneself.training_range_=Noneself.series_name_in_=Noneself.exog_in_=Falseself.exog_names_in_=Noneself.exog_type_in_=Noneself.exog_dtypes_in_=Noneself.exog_dtypes_out_=Noneself.X_train_exog_names_out_=Noneself.creation_date=pd.Timestamp.today().strftime('%Y-%m-%d %H:%M:%S')self.is_fitted=Falseself.fit_date=Noneself.skforecast_version=__version__self.python_version=sys.version.split(" ")[0]self.forecaster_id=forecaster_idself.valid_estimator_types=['skforecast.stats._sarimax.Sarimax','skforecast.stats._arar.Arar','aeon.forecasting.stats._arima.ARIMA','aeon.forecasting.stats._ets.ETS']self.estimators_support_exog=['skforecast.stats._sarimax.Sarimax',]estimator_type=f"{type(estimator).__module__}.{type(estimator).__name__}"ifestimator_typenotinself.valid_estimator_types:raiseTypeError(f"`estimator` must be an instance of type {self.valid_estimator_types}. "f"Got '{type(estimator)}'.")self.estimator_type=estimator_typeself.params=self.estimator.get_params(deep=True)iffit_kwargs:warnings.warn("When using the skforecast Sarimax model, the fit kwargs should ""be passed using the model parameter `sm_fit_kwargs`.",IgnoredArgumentWarning)self.fit_kwargs={}self.__skforecast_tags__={"library":"skforecast","forecaster_name":"ForecasterStats","forecaster_task":"regression","forecasting_scope":"single-series",# single-series | global"forecasting_strategy":"recursive",# recursive | direct | deep_learning"index_types_supported":["pandas.RangeIndex","pandas.DatetimeIndex"],"requires_index_frequency":True,"allowed_input_types_series":["pandas.Series"],"supports_exog":True,"allowed_input_types_exog":["pandas.Series","pandas.DataFrame"],"handles_missing_values_series":False,"handles_missing_values_exog":False,"supports_lags":False,"supports_window_features":False,"supports_transformer_series":True,"supports_transformer_exog":True,"supports_weight_func":False,"supports_differentiation":False,"prediction_types":["point","interval"],"supports_probabilistic":True,"probabilistic_methods":["distribution"],"handles_binned_residuals":False}
def_preprocess_repr(self)->tuple[str,str]:""" Format text for __repr__ method. Returns ------- text : str Formatted text. """params=str(self.params)iflen(params)>58:params="\n "+textwrap.fill(params,width=80,subsequent_indent=" ")exog_names_in_=Noneifself.exog_names_in_isnotNone:exog_names_in_=copy(self.exog_names_in_)iflen(exog_names_in_)>50:exog_names_in_=exog_names_in_[:50]+["..."]exog_names_in_=", ".join(exog_names_in_)iflen(exog_names_in_)>58:exog_names_in_="\n "+textwrap.fill(exog_names_in_,width=80,subsequent_indent=" ")returnparams,exog_names_in_
Additional arguments to be passed to the fit method of the estimator
can be added with the fit_kwargs argument when initializing the forecaster.
Parameters:
Name
Type
Description
Default
y
pandas Series
Training time series.
required
exog
pandas Series, pandas DataFrame
Exogenous variable/s included as predictor/s. Must have the same
number of observations as y and their indexes must be aligned so
that y[i] is regressed on exog[i].
deffit(self,y:pd.Series,exog:pd.Series|pd.DataFrame|None=None,store_last_window:bool=True,suppress_warnings:bool=False)->None:""" Training Forecaster. Additional arguments to be passed to the `fit` method of the estimator can be added with the `fit_kwargs` argument when initializing the forecaster. Parameters ---------- y : pandas Series Training time series. exog : pandas Series, pandas DataFrame, default None Exogenous variable/s included as predictor/s. Must have the same number of observations as `y` and their indexes must be aligned so that y[i] is regressed on exog[i]. store_last_window : bool, default True Whether or not to store the last window (`last_window_`) of training data. suppress_warnings : bool, default False If `True`, warnings generated during fitting will be ignored. Returns ------- None """check_y(y=y)ifexogisnotNone:ifself.estimator_typenotinself.estimators_support_exog:warnings.warn(f"The estimator {self.estimator_type} does not support exogenous variables, "f"they will be ignored during fit.",IgnoredArgumentWarning)iflen(exog)!=len(y):raiseValueError(f"`exog` must have same number of samples as `y`. "f"length `exog`: ({len(exog)}), length `y`: ({len(y)})")check_exog(exog=exog)# Reset values in case the forecaster has already been fitted.self.last_window_=Noneself.extended_index_=Noneself.index_type_=Noneself.index_freq_=Noneself.training_range_=Noneself.series_name_in_=Noneself.exog_in_=Falseself.exog_names_in_=Noneself.exog_type_in_=Noneself.exog_dtypes_in_=Noneself.exog_dtypes_out_=Noneself.X_train_exog_names_out_=Noneself.in_sample_residuals_=Noneself.is_fitted=Falseself.fit_date=NoneifexogisnotNone:self.exog_in_=Trueself.exog_type_in_=type(exog)self.exog_dtypes_in_=get_exog_dtypes(exog=exog)self.exog_names_in_= \
exog.columns.to_list()ifisinstance(exog,pd.DataFrame)else[exog.name]y=transform_series(series=y,transformer=self.transformer_y,fit=True,inverse_transform=False)ifexogisnotNone:ifisinstance(exog,pd.Series):exog=exog.to_frame()exog=transform_dataframe(df=exog,transformer=self.transformer_exog,fit=True,inverse_transform=False)check_exog_dtypes(exog,call_check_exog=True)self.exog_dtypes_out_=get_exog_dtypes(exog=exog)self.X_train_exog_names_out_=exog.columns.to_list()ifsuppress_warnings:withwarnings.catch_warnings():warnings.simplefilter("ignore")self.estimator.fit(y=y,exog=exog)else:self.estimator.fit(y=y,exog=exog)self.is_fitted=Trueself.series_name_in_=y.nameify.nameisnotNoneelse'y'self.fit_date=pd.Timestamp.today().strftime('%Y-%m-%d %H:%M:%S')self.training_range_=y.index[[0,-1]]self.index_type_=type(y.index)ifisinstance(y.index,pd.DatetimeIndex):self.index_freq_=y.index.freqstrelse:self.index_freq_=y.index.stepifstore_last_window:self.last_window_=y.copy()ifself.estimator_type=='skforecast.stats._sarimax.Sarimax':self.extended_index_=self.estimator.sarimax_res.fittedvalues.index.copy()else:self.extended_index_=y.indexself.params=self.estimator.get_params(deep=True)
Create inputs needed for the first iteration of the prediction process.
Since it is a recursive process, last window is updated at each
iteration of the prediction process.
Series values used to create the predictors (lags) needed in the
first iteration of the prediction (t + 1).
If last_window = None, the values stored in self.last_window_ are
used to calculate the initial predictors, and the predictions start
right after training data.
None
last_window_exog
pandas Series, pandas DataFrame
Values of the exogenous variables aligned with last_window. Only
needed when last_window is not None and the forecaster has been
trained including exogenous variables. Used to make predictions
unrelated to the original data. Values have to start at the end
of the training data.
None
exog
pandas Series, pandas DataFrame
Exogenous variable/s included as predictor/s.
None
Returns:
Name
Type
Description
last_window
pandas Series
Series predictors.
last_window_exog
pandas DataFrame, None
Values of the exogenous variables aligned with last_window.
exog
pandas DataFrame, None
Exogenous variable/s included as predictor/s.
Source code in skforecast/recursive/_forecaster_stats.py
def_create_predict_inputs(self,steps:int,last_window:pd.Series|None=None,last_window_exog:pd.Series|pd.DataFrame|None=None,exog:pd.Series|pd.DataFrame|None=None)->tuple[pd.Series,pd.DataFrame|None,pd.DataFrame|None]:""" Create inputs needed for the first iteration of the prediction process. Since it is a recursive process, last window is updated at each iteration of the prediction process. Parameters ---------- steps : int Number of steps to predict. last_window : pandas Series, default None Series values used to create the predictors (lags) needed in the first iteration of the prediction (t + 1). If `last_window = None`, the values stored in `self.last_window_` are used to calculate the initial predictors, and the predictions start right after training data. last_window_exog : pandas Series, pandas DataFrame, default None Values of the exogenous variables aligned with `last_window`. Only needed when `last_window` is not None and the forecaster has been trained including exogenous variables. Used to make predictions unrelated to the original data. Values have to start at the end of the training data. exog : pandas Series, pandas DataFrame, default None Exogenous variable/s included as predictor/s. Returns ------- last_window : pandas Series Series predictors. last_window_exog : pandas DataFrame, None Values of the exogenous variables aligned with `last_window`. exog : pandas DataFrame, None Exogenous variable/s included as predictor/s. """# Needs to be a new variable to avoid arima_res_.append when using # self.last_window. It already has it stored.last_window_check=last_windowiflast_windowisnotNoneelseself.last_window_check_predict_input(forecaster_name=type(self).__name__,steps=steps,is_fitted=self.is_fitted,exog_in_=self.exog_in_,index_type_=self.index_type_,index_freq_=self.index_freq_,window_size=self.window_size,last_window=last_window_check,last_window_exog=last_window_exog,exog=exog,exog_names_in_=self.exog_names_in_,interval=None,alpha=None)# If not last_window is provided, last_window needs to be Noneiflast_windowisnotNone:last_window=last_window.copy()# When last_window_exog is provided but no last_windowiflast_windowisNoneandlast_window_exogisnotNone:raiseValueError("To make predictions unrelated to the original data, both ""`last_window` and `last_window_exog` must be provided.")# Check if forecaster needs exogiflast_windowisnotNoneandlast_window_exogisNoneandself.exog_in_:raiseValueError("Forecaster trained with exogenous variable/s. To make predictions ""unrelated to the original data, same variable/s must be provided ""using `last_window_exog`.")iflast_windowisnotNone:# If predictions do not follow directly from the end of the training # data. The internal statsmodels SARIMAX model needs to be updated # using its append method. The data needs to start at the end of the # training series.# Check index append valuesexpected_index=expand_index(index=self.extended_index_,steps=1)[0]ifexpected_index!=last_window.index[0]:raiseValueError(f"To make predictions unrelated to the original data, `last_window` "f"has to start at the end of the index seen by the forecaster.\n"f" Series last index : {self.extended_index_[-1]}.\n"f" Expected index : {expected_index}.\n"f" `last_window` index start : {last_window.index[0]}.")last_window=transform_series(series=last_window,transformer=self.transformer_y,fit=False,inverse_transform=False)# Transform last_window_exogiflast_window_exogisnotNone:# check index last_window_exogifexpected_index!=last_window_exog.index[0]:raiseValueError(f"To make predictions unrelated to the original data, `last_window_exog` "f"has to start at the end of the index seen by the forecaster.\n"f" Series last index : {self.extended_index_[-1]}.\n"f" Expected index : {expected_index}.\n"f" `last_window_exog` index start : {last_window_exog.index[0]}.")ifisinstance(last_window_exog,pd.Series):last_window_exog=last_window_exog.to_frame()last_window_exog=transform_dataframe(df=last_window_exog,transformer=self.transformer_exog,fit=False,inverse_transform=False)# ExogifexogisnotNone:ifisinstance(exog,pd.Series):exog=exog.to_frame()exog=transform_dataframe(df=exog,transformer=self.transformer_exog,fit=False,inverse_transform=False)exog=exog.iloc[:steps,]returnlast_window,last_window_exog,exog
Generate predictions (forecasts) n steps in the future. Note that if
exogenous variables were used in the model fit, they will be expected
for the predict procedure and will fail otherwise.
When predicting using last_window and last_window_exog, they must
start right after the end of the index seen by the forecaster during
training.
Series values used to create the predictors needed in the
predictions. Used to make predictions unrelated to the original data.
Values have to start at the end of the training data.
None
last_window_exog
pandas Series, pandas DataFrame
Values of the exogenous variables aligned with last_window. Only
needed when last_window is not None and the forecaster has been
trained including exogenous variables. Used to make predictions
unrelated to the original data. Values have to start at the end
of the training data.
None
exog
pandas Series, pandas DataFrame
Exogenous variable/s included as predictor/s.
None
Returns:
Name
Type
Description
predictions
pandas Series
Predicted values.
Source code in skforecast/recursive/_forecaster_stats.py
defpredict(self,steps:int,last_window:pd.Series|None=None,last_window_exog:pd.Series|pd.DataFrame|None=None,exog:pd.Series|pd.DataFrame|None=None)->pd.Series:""" Forecast future values. Generate predictions (forecasts) n steps in the future. Note that if exogenous variables were used in the model fit, they will be expected for the predict procedure and will fail otherwise. When predicting using `last_window` and `last_window_exog`, they must start right after the end of the index seen by the forecaster during training. Parameters ---------- steps : int Number of steps to predict. last_window : pandas Series, default None Series values used to create the predictors needed in the predictions. Used to make predictions unrelated to the original data. Values have to start at the end of the training data. last_window_exog : pandas Series, pandas DataFrame, default None Values of the exogenous variables aligned with `last_window`. Only needed when `last_window` is not None and the forecaster has been trained including exogenous variables. Used to make predictions unrelated to the original data. Values have to start at the end of the training data. exog : pandas Series, pandas DataFrame, default None Exogenous variable/s included as predictor/s. Returns ------- predictions : pandas Series Predicted values. """last_window,last_window_exog,exog=self._create_predict_inputs(steps=steps,last_window=last_window,last_window_exog=last_window_exog,exog=exog,)iflast_windowisnotNone:ifself.estimator_type=='skforecast.stats._sarimax.Sarimax':self.estimator.append(y=last_window,exog=last_window_exog,refit=False)self.extended_index_=self.estimator.sarimax_res.fittedvalues.indexelse:raiseValueError("`last_window` is only supported for the skforecast.Sarimax estimator (statsmodels).""For other models, predictions must follow directly after the end of the ""training data.")ifself.estimator_type=='skforecast.stats._sarimax.Sarimax':predictions=self.estimator.predict(steps=steps,exog=exog).iloc[:,0]predictions=transform_series(series=predictions,transformer=self.transformer_y,fit=False,inverse_transform=True)predictions.name='pred'elifself.estimator_type=='skforecast.stats._arar.Arar':predictions=self.estimator.predict(steps=steps,exog=exog)predictions=transform_numpy(array=predictions,transformer=self.transformer_y,fit=False,inverse_transform=True)predictions_index=expand_index(index=self.extended_index_,steps=steps)predictions=pd.Series(predictions,index=predictions_index,name='pred')elifself.estimator_typein['aeon.forecasting.stats._arima.ARIMA','aeon.forecasting.stats._ets.ETS']:predictions=self.estimator.iterative_forecast(y=self.last_window_.to_numpy(),prediction_horizon=steps,)predictions=transform_numpy(array=predictions,transformer=self.transformer_y,fit=False,inverse_transform=True)predictions_index=expand_index(index=self.extended_index_,steps=steps)predictions=pd.Series(predictions,index=predictions_index,name='pred')returnpredictions
Forecast future values and their confidence intervals.
Generate predictions (forecasts) n steps in the future with confidence
intervals. Note that if exogenous variables were used in the model fit,
they will be expected for the predict procedure and will fail otherwise.
When predicting using last_window and last_window_exog, the internal
statsmodels SARIMAX will be updated using its append method. To do this,
last_window data must start at the end of the index seen by the
forecaster, this is stored in forecaster.extended_index_.
Series values used to create the predictors needed in the
predictions. Used to make predictions unrelated to the original data.
Values have to start at the end of the training data.
None
last_window_exog
pandas Series, pandas DataFrame
Values of the exogenous variables aligned with last_window. Only
need when last_window is not None and the forecaster has been
trained including exogenous variables.
Confidence of the prediction interval estimated. The values must be
symmetric. Sequence of percentiles to compute, which must be between
0 and 100 inclusive. For example, interval of 95% should be as
interval = [2.5, 97.5]. If both, alpha and interval are
provided, alpha will be used.
None
Returns:
Name
Type
Description
predictions
pandas DataFrame
Values predicted by the forecaster and their estimated interval.
pred: predictions.
lower_bound: lower bound of the interval.
upper_bound: upper bound of the interval.
Source code in skforecast/recursive/_forecaster_stats.py
defpredict_interval(self,steps:int,last_window:pd.Series|None=None,last_window_exog:pd.Series|pd.DataFrame|None=None,exog:pd.Series|pd.DataFrame|None=None,alpha:float=0.05,interval:list[float]|tuple[float]|None=None,)->pd.DataFrame:""" Forecast future values and their confidence intervals. Generate predictions (forecasts) n steps in the future with confidence intervals. Note that if exogenous variables were used in the model fit, they will be expected for the predict procedure and will fail otherwise. When predicting using `last_window` and `last_window_exog`, the internal statsmodels SARIMAX will be updated using its append method. To do this, `last_window` data must start at the end of the index seen by the forecaster, this is stored in forecaster.extended_index_. Check https://www.statsmodels.org/dev/generated/statsmodels.tsa.arima.model.ARIMAResults.append.html to know more about statsmodels append method. Parameters ---------- steps : int Number of steps to predict. last_window : pandas Series, default None Series values used to create the predictors needed in the predictions. Used to make predictions unrelated to the original data. Values have to start at the end of the training data. last_window_exog : pandas Series, pandas DataFrame, default None Values of the exogenous variables aligned with `last_window`. Only need when `last_window` is not None and the forecaster has been trained including exogenous variables. exog : pandas Series, pandas DataFrame, default None Exogenous variable/s included as predictor/s. alpha : float, default 0.05 The confidence intervals for the forecasts are (1 - alpha) %. If both, `alpha` and `interval` are provided, `alpha` will be used. interval : list, tuple, default None Confidence of the prediction interval estimated. The values must be symmetric. Sequence of percentiles to compute, which must be between 0 and 100 inclusive. For example, interval of 95% should be as `interval = [2.5, 97.5]`. If both, `alpha` and `interval` are provided, `alpha` will be used. Returns ------- predictions : pandas DataFrame Values predicted by the forecaster and their estimated interval. - pred: predictions. - lower_bound: lower bound of the interval. - upper_bound: upper bound of the interval. """# If interval and alpha take alpha, if interval transform to alphaifalphaisNone:if100-interval[1]!=interval[0]:raiseValueError(f"When using `interval` in ForecasterStats, it must be symmetrical. "f"For example, interval of 95% should be as `interval = [2.5, 97.5]`. "f"Got {interval}.")alpha=2*(100-interval[1])/100last_window,last_window_exog,exog=self._create_predict_inputs(steps=steps,last_window=last_window,last_window_exog=last_window_exog,exog=exog,)iflast_windowisnotNone:self.estimator.append(y=last_window,exog=last_window_exog,refit=False)self.extended_index_=self.estimator.sarimax_res.fittedvalues.index# Get following n steps predictions with intervalsifself.estimator_type=='skforecast.stats._sarimax.Sarimax':predictions=self.estimator.predict(steps=steps,exog=exog,return_conf_int=True,alpha=alpha)elifself.estimator_type=='skforecast.stats._arar.Arar':predictions=self.estimator.predict_interval(steps=steps,exog=exog,level=[100*(1-alpha)],as_frame=True)predictions_index=expand_index(index=self.extended_index_,steps=steps)predictions.index=predictions_indexpredictions.columns=['pred','lower_bound','upper_bound']elifself.estimator_typein['aeon.forecasting.stats._arima.ARIMA','aeon.forecasting.stats._ets.ETS']:raiseNotImplementedError("Prediction intervals is not implemented for AEON ARIMA and ETS models yet.")ifself.transformer_y:predictions=predictions.apply(lambdacol:transform_series(series=col,transformer=self.transformer_y,fit=False,inverse_transform=True))returnpredictions
defset_params(self,params:dict[str,object])->None:""" Set new values to the parameters of the model stored in the forecaster. Parameters ---------- params : dict Parameters values. Returns ------- None """self.estimator=clone(self.estimator)self.estimator.set_params(**params)self.params=self.estimator.get_params(deep=True)
defset_fit_kwargs(self,fit_kwargs:dict[str,object])->None:""" Set new values for the additional keyword arguments passed to the `fit` method of the estimator. Parameters ---------- fit_kwargs : dict Dict of the form {"argument": new_value}. Returns ------- None """warnings.warn("When using the skforecast Sarimax model, the fit kwargs should ""be passed using the model parameter `sm_fit_kwargs`.",IgnoredArgumentWarning)self.fit_kwargs={}
defget_feature_importances(self,sort_importance:bool=True)->pd.DataFrame:""" Return feature importances of the estimator stored in the forecaster. Parameters ---------- sort_importance: bool, default True If `True`, sorts the feature importances in descending order. Returns ------- feature_importances : pandas DataFrame Feature importances associated with each predictor. """ifnotself.is_fitted:raiseNotFittedError("This forecaster is not fitted yet. Call `fit` with appropriate ""arguments before using `get_feature_importances()`.")ifself.estimator_type=='skforecast.stats._sarimax.Sarimax':feature_importances=self.estimator.params().to_frame().reset_index()feature_importances.columns=['feature','importance']elifself.estimator_type=='skforecast.stats._arar.Arar':feature_importances=pd.DataFrame({'feature':[f'lag_{lag}'forlaginself.estimator.lags_],'importance':self.estimator.coef_})elifself.estimator_type=='aeon.forecasting.stats._arima.ARIMA':feature_importances=pd.DataFrame({'feature':[f'lag_{lag}'forlaginrange(1,self.estimator.p+1)]+["ma","intercept"],'importance':np.concatenate([self.estimator.phi_,self.estimator.theta_,[self.estimator.c_]])})elifself.estimator_type=='aeon.forecasting.stats._ets.ETS':warnings.warn("Feature importances is not available for the AEON ETS model.")feature_importances=pd.DataFrame(columns=['feature','importance'])ifsort_importance:feature_importances=feature_importances.sort_values(by='importance',ascending=False).reset_index(drop=True)returnfeature_importances
defget_info_criteria(self,criteria:str='aic',method:str='standard')->float:""" Get the selected information criteria. Check https://www.statsmodels.org/dev/generated/statsmodels.tsa.statespace.sarimax.SARIMAXResults.info_criteria.html to know more about statsmodels info_criteria method. Parameters ---------- criteria : str, default 'aic' The information criteria to compute. Valid options are {'aic', 'bic', 'hqic'}. method : str, default 'standard' The method for information criteria computation. Default is 'standard' method; 'lutkepohl' computes the information criteria as in Lütkepohl (2007). Returns ------- metric : float The value of the selected information criteria. """ifself.estimator_type=='skforecast.stats._sarimax.Sarimax':ifcriterianotin['aic','bic','hqic']:raiseValueError("Invalid value for `criteria`. Valid options are 'aic', 'bic', ""and 'hqic'.")ifmethodnotin['standard','lutkepohl']:raiseValueError("Invalid value for `method`. Valid options are 'standard' and ""'lutkepohl'.")metric=self.estimator.get_info_criteria(criteria=criteria,method=method)elifself.estimator_type=='skforecast.stats._arar.Arar':raiseNotImplementedError("Information criteria is not implemented for ARAR model yet.")elifself.estimator_typein['aeon.forecasting.stats._arima.ARIMA','aeon.forecasting.stats._ets.ETS']:ifcriteria!='aic':raiseValueError("Invalid value for `criteria`. Only 'aic' is supported for ""AEON models.")metric=self.estimator.aic_returnmetric