Back to models
Forecaster

SquaringResiduals

Compute the prediction variance based on a separate forecaster.

Wraps a forecaster with another residual_forecaster object that allows for quantile and interval estimation by fitting the residual_forecaster to the rolling residuals.

Fitting proceeds as follows: Let \(t_1, \dots, t_N\) be the train set. Let steps_ahead be a positive integer indicating the steps ahead we want to forecast the residuals. Let initial_window be the minimal number of observations to which the forecaster is fitted.

  1. For \(i = initial\_window, \dots, N - steps\_ahead\)

    1. Train/Update forecaster A on \(y(t_1), \dots, y(t_i)\)

    2. Make point prediction for \(t_{i+steps\_ahead}\) to get \(\hat{y}(t_{i+steps\_ahead})\)

    3. Compute the residual for \(t_{i+steps\_ahead}\) as \(r(t_{i+steps\_ahead}):= y(t_{i+steps\_ahead}) - \hat{y}(t_{i+steps\_ahead})\)

    4. Compute \(e(t_{i+steps\_ahead}):= h(r(t_{i+steps\_ahead}))\) where \(h(x)\) is given by \(strategy\)

  2. Train residual_forecaster on \(e(t_{initial\_window+steps\_ahead}), \dots, e(t_{N})\)

Prediction for \(t_{N+steps\_ahead}\) is done as follows:

  1. Use forecaster to predict location param \(\hat{y}(t_{N+steps\_ahead})\)

  2. Use residual_forecaster to predict scale param \(e(t_{N+steps\_ahead})\)

  3. Calculate prediction intervals based on e.g. normal assumption \(N(\hat{y}(t_{N+steps\_ahead}), e(t_{N+steps\_ahead}))\)

Quickstart

python
from sktime.forecasting.squaring_residuals import SquaringResiduals

estimator = SquaringResiduals(forecaster=None, residual_forecaster=None, initial_window=5, strategy='square', distr='norm', distr_kwargs=None)

Parameters(7)

forecastersktime forecaster, BaseForecaster descendant, optional
Estimator to which probabilistic forecasts are being added Default = NaiveForecaster()
residual_forecastersktime forecaster, BaseForecaster descendant, optional
Estimator which is fitted to the residuals of forecaster Default = NaiveForecaster()
initial_windowint, optional, default=2
Size of initial_window to which forecaster is fitted
steps_aheadint, optional, default=1
Steps ahead for which we predict the residuals
strategystr, optional, default=’square’
Function applied to the residuals
distrstr, optional, default=’norm’
Distributional assumption ([“norm”, “laplace”, “t”, “cauchy”])
distr_kwargsdict, optional
Additional arguments required by the distribution

Examples

>>> from sktime.datasets import load_macroeconomic
>>> from sktime.forecasting.base import ForecastingHorizon
>>> from sktime.forecasting.naive import NaiveForecaster
>>> from sktime.forecasting.theta import ThetaForecaster
>>> from sktime.forecasting.squaring_residuals import SquaringResiduals
>>> fc = NaiveForecaster ()
>>> var_fc = ThetaForecaster ()
>>> y = load_macroeconomic (). realgdp
>>> sqr = SquaringResiduals (forecaster = fc, residual_forecaster = var_fc)
... >>> fh = ForecastingHorizon (values = [1, 2, 3 ])
>>> sqr = sqr. fit (y, fh = fh)
>>> pred_interval = sqr. predict_interval (coverage = 0.95)