Back to models
Metric

MedianSquaredError

Median squared error (MdSE) or root median squared error (RMdSE).

If square_root is False then calculates MdSE and if square_root is True then RMdSE is calculated. Both MdSE and RMdSE return non-negative floating point. The best value is 0.0.

The Median Squared Error (MdSE) is calculated as:

\[\begin{split}\\text{MdSE} = \text{median}\left((y_{i} - \\widehat{y}_{i})^2\right)_{i=1}^{n}\end{split}\]

where: - \(y_i \) are the true values, - \(\hat{y}_i \) are the predicted values, - \(n \) is the number of observations.

If square_root is set to True, the Root Median Squared Error Percentage (RMdSE) is computed:

\[\begin{split}\\text{RMdSE} = \\sqrt{ \\text{MdSE} }\end{split}\]

Like MSE, MdSE is measured in squared units of the input data. RMdSE is on the same scale as the input data, like RMSE.

Taking the median instead of the mean of the squared errors makes this metric more robust to error outliers relative to a meean based metric since the median tends to be a more robust measure of central tendency in the presence of outliers.

Because the median commutes with monotonic transformations, MdSE and RMdSE do not penalize large errors more than the MdAE.

evaluate_by_index returns, at a time index \(t_i\):

  • if square_root is False, the squared error at that time index,

    \((y_i - \widehat{y}_i)^2\),

  • if square_root is True, the absolute error at that time index, the absolute error at that time index, \(|y_i - \widehat{y}_i|\),

for all time indices \(t_1, \dots, t_n\) in the input.

Quickstart

python
from sktime.performance_metrics.forecasting import MedianSquaredError

estimator = MedianSquaredError(multioutput='uniform_average', multilevel='uniform_average', square_root=False, by_index=False)

Parameters(4)

square_rootbool, default = False
Whether to take the square root of the metric
multioutput‘uniform_average’ (default), 1D array-like, or ‘raw_values’

Whether and how to aggregate metric for multivariate (multioutput) data.

  • If 'uniform_average' (default), errors of all outputs are averaged with uniform weight.

  • If 1D array-like, errors are averaged across variables, with values used as averaging weights (same order).

  • If 'raw_values', does not average across variables (outputs), per-variable errors are returned.

multilevel{‘raw_values’, ‘uniform_average’, ‘uniform_average_time’}

How to aggregate the metric for hierarchical data (with levels).

  • If 'uniform_average' (default), errors are mean-averaged across levels.

  • If 'uniform_average_time', metric is applied to all data, ignoring level index.

  • If 'raw_values', does not average errors across levels, hierarchy is retained.

by_indexbool, default=False

Controls averaging over time points in direct call to metric object.

  • If False (default), direct call to the metric object averages over time points, equivalent to a call of the evaluate method.

  • If True, direct call to the metric object evaluates the metric at each time point, equivalent to a call of the evaluate_by_index method.

Examples

>>> import numpy as np
>>> from sktime.performance_metrics.forecasting import MedianSquaredError
>>> y_true = np. array ([3, - 0.5, 2, 7, 2 ])
>>> y_pred = np. array ([2.5, 0.0, 2, 8, 1.25 ])
>>> mdse = MedianSquaredError ()
>>> mdse (y_true, y_pred) np.float64(0.25)
>>> rmdse = MedianSquaredError (square_root = True)
>>> rmdse (y_true, y_pred) np.float64(0.5)
>>> y_true = np. array ([[0.5, 1 ], [- 1, 1 ], [7, - 6 ]])
>>> y_pred = np. array ([[0, 2 ], [- 1, 2 ], [8, - 5 ]])
>>> mdse (y_true, y_pred) np.float64(0.625)
>>> rmdse (y_true, y_pred) np.float64(0.75)
>>> mdse = MedianSquaredError (multioutput = 'raw_values')
>>> mdse (y_true, y_pred) array([0.25, 1. ])
>>> rmdse = MedianSquaredError (multioutput = 'raw_values', square_root = True)
>>> rmdse (y_true, y_pred) array([0.5, 1. ])
>>> mdse = MedianSquaredError (multioutput = [0.3, 0.7 ])
>>> mdse (y_true, y_pred) np.float64(0.7749999999999999)
>>> rmdse = MedianSquaredError (multioutput = [0.3, 0.7 ], square_root = True)
>>> rmdse (y_true, y_pred) np.float64(0.85)

References

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