Back to models
Forecaster

HierarchyEnsembleForecaster

Categorical in XInsamplePred int insampleExogenousMultivariate

Aggregates hierarchical data, fit forecasters and make predictions.

Quickstart

python
from sktime.forecasting.compose import HierarchyEnsembleForecaster

estimator = HierarchyEnsembleForecaster(forecasters, by='level', default=None, backend=None, backend_params=None)

Parameters(5)

forecasterssktime forecaster, or list of tuples

(str, estimator, int or list of tuple/s) if forecaster, clones of forecaster are applied to all aggregated levels. if list of tuples, with name = str, estimator is forecaster, level/node as int/tuples respectively. all levels/nodes must be present in forecasters attribute if default attribute is None

by{‘node’, ‘level’, default=’level’}

if 'level', applies a univariate forecaster on all the hierarchical nodes within a level of aggregation if 'node', applies separate univariate forecaster for each hierarchical node.

defaultsktime forecaster {default = None}

if passed, applies default forecaster on the nodes/levels not mentioned in the forecaster argument.

backendstring, by default “None”.

Parallelization backend to use for runs. Runs parallel evaluate if specified and strategy="refit".

  • “None”: executes loop sequentially, simple list comprehension

  • “loky”, “multiprocessing” and “threading”: uses joblib.Parallel loops

  • “joblib”: custom and 3rd party joblib backends, e.g., spark

  • “dask”: uses dask, requires dask package in environment

  • “dask_lazy”: same as “dask”, but changes the return to (lazy) dask.dataframe.DataFrame.

  • “ray”: uses ray, requires ray package in environment

Recommendation: Use “dask” or “loky” for parallel evaluate. “threading” is unlikely to see speed ups due to the GIL and the serialization backend (cloudpickle) for “dask” and “loky” is generally more robust than the standard pickle library used in “multiprocessing”.

backend_paramsdict, optional

additional parameters passed to the backend as config. Directly passed to utils.parallel.parallelize. Valid keys depend on the value of backend:

  • “None”: no additional parameters, backend_params is ignored

  • “loky”, “multiprocessing” and “threading”: default joblib backends any valid keys for joblib.Parallel can be passed here, e.g., n_jobs, with the exception of backend which is directly controlled by backend. If n_jobs is not passed, it will default to -1, other parameters will default to joblib defaults.

  • “joblib”: custom and 3rd party joblib backends, e.g., spark. any valid keys for joblib.Parallel can be passed here, e.g., n_jobs, backend must be passed as a key of backend_params in this case. If n_jobs is not passed, it will default to -1, other parameters will default to joblib defaults.

  • “dask”: any valid keys for dask.compute can be passed, e.g., scheduler

  • “ray”: The following keys can be passed:

    • “ray_remote_args”: dictionary of valid keys for ray.init

    • “shutdown_ray”: bool, default=True; False prevents ray from shutting

      down after parallelization.

Examples

>>> from sktime.forecasting.compose import HierarchyEnsembleForecaster
>>> from sktime.forecasting.naive import NaiveForecaster
>>> from sktime.forecasting.trend import PolynomialTrendForecaster, TrendForecaster
>>> from sktime.utils._testing.hierarchical import _bottom_hier_datagen
>>> y = _bottom_hier_datagen (
... no_bottom_nodes = 7,
... no_levels = 2,
... random_seed = 123,
... )
>>> # Example of by = 'level'
>>> forecasters = [
... ('naive', NaiveForecaster (), 0),
... ('trend', TrendForecaster (), 1),
... ]
>>> forecaster = HierarchyEnsembleForecaster (
... forecasters = forecasters,
... by = 'level',
... default = PolynomialTrendForecaster (degree = 2),
... )
>>> forecaster. fit (y, fh = [1, 2, 3 ]) HierarchyEnsembleForecaster(
... )
>>> y_pred = forecaster. predict ()
>>> # Example of by = 'node'
>>> forecasters = [
... ('trend', TrendForecaster (), [("__total", "__total")]),
... ('poly', PolynomialTrendForecaster (degree = 2), [('l2_node01', 'l1_node01')]),
... ]
>>> forecaster = HierarchyEnsembleForecaster (
... forecasters = forecasters,
... by = 'node', default = NaiveForecaster ()
... )
>>> forecaster. fit (y, fh = [1, 2, 3 ]) HierarchyEnsembleForecaster(
... )
>>> y_pred = forecaster. predict ()