mean_squared_scaled_error

mean_squared_scaled_error(y_true, y_pred, sp=1, horizon_weight=None, multioutput='uniform_average', square_root=False, **kwargs)[source]

Mean squared scaled error (MSSE) or root mean squared scaled error (RMSSE).

If square_root is False then calculates MSSE, otherwise calculates RMSSE if square_root is True. Both MSSE and RMSSE output is non-negative floating point. The best value is 0.0.

This is a squared varient of the MASE loss metric. Like MASE and other scaled performance metrics this scale-free metric can be used to compare forecast methods on a single series or between series.

This metric is also suited for intermittent-demand series because it will not give infinite or undefined values unless the training data is a flat timeseries. In this case the function returns a large value instead of inf.

Works with multioutput (multivariate) timeseries data with homogeneous seasonal periodicity.

Parameters:
y_truepd.Series, pd.DataFrame or np.array of shape (fh,) or (fh, n_outputs) where fh is the forecasting horizon

Ground truth (correct) target values.

y_predpd.Series, pd.DataFrame or np.array of shape (fh,) or (fh, n_outputs) where fh is the forecasting horizon

Forecasted values.

y_trainpd.Series, pd.DataFrame or np.array of shape (n_timepoints,) or (n_timepoints, n_outputs), default = None

Observed training values.

spint

Seasonal periodicity of training data.

horizon_weightarray-like of shape (fh,), default=None

Forecast horizon weights.

multioutput{‘raw_values’, ‘uniform_average’} or array-like of shape (n_outputs,), default=’uniform_average’

Defines how to aggregate metric for multivariate (multioutput) data. If array-like, values used as weights to average the errors. If ‘raw_values’, returns a full set of errors in case of multioutput input. If ‘uniform_average’, errors of all outputs are averaged with uniform weight.

square_rootbool, default=False

Whether to take the square root of the mean squared scaled error. If True, returns root mean squared scaled error (RMSSE) If False, returns mean squared scaled error (MSSE)

Returns:
lossfloat

RMSSE loss. If multioutput is ‘raw_values’, then MSSE or RMSSE is returned for each output separately. If multioutput is ‘uniform_average’ or an ndarray of weights, then the weighted average MSSE or RMSSE of all output errors is returned.

References

M5 Competition Guidelines. https://mofc.unic.ac.cy/wp-content/uploads/2020/03/M5-Competitors-Guide-Final-10-March-2020.docx

Hyndman, R. J and Koehler, A. B. (2006). “Another look at measures of forecast accuracy”, International Journal of Forecasting, Volume 22, Issue 4.

Examples

>>> from aeon.performance_metrics.forecasting import mean_squared_scaled_error
>>> y_train = np.array([5, 0.5, 4, 6, 3, 5, 2])
>>> y_true = np.array([3, -0.5, 2, 7, 2])
>>> y_pred = np.array([2.5, 0.0, 2, 8, 1.25])
>>> mean_squared_scaled_error(y_true, y_pred, y_train=y_train, square_root=True)
0.20568833780186058
>>> y_train = np.array([[0.5, 1], [-1, 1], [7, -6]])
>>> y_true = np.array([[0.5, 1], [-1, 1], [7, -6]])
>>> y_pred = np.array([[0, 2], [-1, 2], [8, -5]])
>>> mean_squared_scaled_error(y_true, y_pred, y_train=y_train,  square_root=True)
0.15679361328058636
>>> mean_squared_scaled_error(y_true, y_pred, y_train=y_train,     multioutput='raw_values', square_root=True)
array([0.11215443, 0.20203051])
>>> mean_squared_scaled_error(y_true, y_pred, y_train=y_train,     multioutput=[0.3, 0.7], square_root=True)
0.17451891814894502