mean_asymmetric_error#
- mean_asymmetric_error(y_true, y_pred, asymmetric_threshold=0.0, left_error_function='squared', right_error_function='absolute', left_error_penalty=1.0, right_error_penalty=1.0, horizon_weight=None, multioutput='uniform_average', **kwargs)[source]#
Calculate mean of asymmetric loss function.
Output is non-negative floating point. The best value is 0.0.
Error values that are less than the asymmetric threshold have
left_error_functionapplied. Error values greater than or equal to asymmetric threshold haveright_error_functionapplied.Many forecasting loss functions (like those discussed in [1]) assume that over- and under- predictions should receive an equal penalty. However, this may not align with the actual cost faced by users’ of the forecasts. Asymmetric loss functions are useful when the cost of under- and over- prediction are not the same.
Setting
asymmetric_thresholdto zero,left_error_functionto ‘squared’ andright_error_functionto ‘absolute` results in a greater penalty applied to over-predictions (y_true - y_pred < 0). The opposite is true forleft_error_functionset to ‘absolute’ andright_error_functionset to ‘squared`.The left_error_penalty and right_error_penalty can be used to add differing multiplicative penalties to over-predictions and under-predictions.
- 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.
- asymmetric_thresholdfloat, default = 0.0
The value used to threshold the asymmetric loss function. Error values that are less than the asymmetric threshold have
left_error_functionapplied. Error values greater than or equal to asymmetric threshold haveright_error_functionapplied.- left_error_function{‘squared’, ‘absolute’}, default=’squared’
Loss penalty to apply to error values less than the asymmetric threshold.
- right_error_function{‘squared’, ‘absolute’}, default=’absolute’
Loss penalty to apply to error values greater than or equal to the asymmetric threshold.
- left_error_penaltyint or float, default=1.0
An additional multiplicative penalty to apply to error values less than the asymmetric threshold.
- right_error_penaltyint or float, default=1.0
An additional multiplicative penalty to apply to error values greater than the asymmetric threshold.
- 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.
- Returns:
- asymmetric_lossfloat
Loss using asymmetric penalty of on errors. If multioutput is ‘raw_values’, then asymmetric loss is returned for each output separately. If multioutput is ‘uniform_average’ or an ndarray of weights, then the weighted average asymmetric loss of all output errors is returned.
See also
Notes
Setting
left_error_functionandright_error_functionto “absolute”, but choosing different values forleft_error_penaltyandright_error_penaltyresults in the “lin-lin” error function discussed in [2].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.
[2]Diebold, Francis X. (2007). “Elements of Forecasting (4th ed.)”, Thomson, South-Western: Ohio, US.
Examples
>>> import numpy as np >>> from sktime.performance_metrics.forecasting import mean_asymmetric_error >>> y_true = np.array([3, -0.5, 2, 7, 2]) >>> y_pred = np.array([2.5, 0.0, 2, 8, 1.25]) >>> mean_asymmetric_error(y_true, y_pred) np.float64(0.5) >>> mean_asymmetric_error(y_true, y_pred, left_error_function='absolute', right_error_function='squared') np.float64(0.4625) >>> y_true = np.array([[0.5, 1], [-1, 1], [7, -6]]) >>> y_pred = np.array([[0, 2], [-1, 2], [8, -5]]) >>> mean_asymmetric_error(y_true, y_pred) np.float64(0.75) >>> mean_asymmetric_error(y_true, y_pred, left_error_function='absolute', right_error_function='squared') np.float64(0.7083333333333334) >>> mean_asymmetric_error(y_true, y_pred, multioutput='raw_values') array([0.5, 1. ]) >>> mean_asymmetric_error(y_true, y_pred, multioutput=[0.3, 0.7]) np.float64(0.85)