median_absolute_error(y_true, y_pred, horizon_weight=None, multioutput='uniform_average', **kwargs)[source]#

Median absolute error (MdAE).

MdAE output is non-negative floating point. The best value is 0.0.

Like MAE, MdAE is on the same scale as the data. Because MAE takes the absolute value of the forecast error rather than squaring it, MAE penalizes large errors to a lesser degree than MdSE or RdMSE.

Taking the median instead of the mean of the absolute errors also makes this metric more robust to error outliers 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.


MdAE loss. If multioutput is ‘raw_values’, then MdAE is returned for each output separately. If multioutput is ‘uniform_average’ or an ndarray of weights, then the weighted average MdAE 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 sktime.performance_metrics.forecasting import median_absolute_error
>>> y_true = np.array([3, -0.5, 2, 7, 2])
>>> y_pred = np.array([2.5, 0.0, 2, 8, 1.25])
>>> median_absolute_error(y_true, y_pred)
>>> y_true = np.array([[0.5, 1], [-1, 1], [7, -6]])
>>> y_pred = np.array([[0, 2], [-1, 2], [8, -5]])
>>> median_absolute_error(y_true, y_pred)
>>> median_absolute_error(y_true, y_pred, multioutput='raw_values')
array([0.5, 1. ])
>>> median_absolute_error(y_true, y_pred, multioutput=[0.3, 0.7])