HierarchyEnsembleForecaster
Aggregates hierarchical data, fit forecasters and make predictions.
Quickstart
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
forecasterare 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 inforecastersattribute ifdefaultattribute 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
defaultforecaster on the nodes/levels not mentioned in theforecasterargument.- 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.Parallelloops“joblib”: custom and 3rd party
joblibbackends, e.g.,spark“dask”: uses
dask, requiresdaskpackage in environment“dask_lazy”: same as “dask”, but changes the return to (lazy)
dask.dataframe.DataFrame.“ray”: uses
ray, requiresraypackage 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 standardpicklelibrary 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 ofbackend:“None”: no additional parameters,
backend_paramsis ignored“loky”, “multiprocessing” and “threading”: default
joblibbackends any valid keys forjoblib.Parallelcan be passed here, e.g.,n_jobs, with the exception ofbackendwhich is directly controlled bybackend. Ifn_jobsis not passed, it will default to-1, other parameters will default tojoblibdefaults.“joblib”: custom and 3rd party
joblibbackends, e.g.,spark. any valid keys forjoblib.Parallelcan be passed here, e.g.,n_jobs,backendmust be passed as a key ofbackend_paramsin this case. Ifn_jobsis not passed, it will default to-1, other parameters will default tojoblibdefaults.“dask”: any valid keys for
dask.computecan 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
rayfrom shuttingdown 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 ()