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

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.

Like MSE, MdSE is measured in squared units of the input data. RMdSE is on the same scale as the input data like RMSE. Because MdSE and RMdSE square the forecast error rather than taking the absolute value, they penalize large errors more than MAE or MdAE.

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.

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.

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 error. If True, returns root mean squared error (RMSE) If False, returns mean squared error (MSE)


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


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


>>> from aeon.performance_metrics.forecasting import median_squared_error
>>> y_true = np.array([3, -0.5, 2, 7, 2])
>>> y_pred = np.array([2.5, 0.0, 2, 8, 1.25])
>>> median_squared_error(y_true, y_pred)
>>> median_squared_error(y_true, y_pred, square_root=True)
>>> y_true = np.array([[0.5, 1], [-1, 1], [7, -6]])
>>> y_pred = np.array([[0, 2], [-1, 2], [8, -5]])
>>> median_squared_error(y_true, y_pred)
>>> median_squared_error(y_true, y_pred, square_root=True)
>>> median_squared_error(y_true, y_pred, multioutput='raw_values')
array([0.25, 1.  ])
>>> median_squared_error(y_true, y_pred, multioutput='raw_values', square_root=True)
array([0.5, 1. ])
>>> median_squared_error(y_true, y_pred, multioutput=[0.3, 0.7])
>>> median_squared_error(y_true, y_pred, multioutput=[0.3, 0.7], square_root=True)