MeanArctangentAbsolutePercentageError
MeanArctangentAbsolutePercentageError
- class MeanArctangentAbsolutePercentageError(multioutput='uniform_average', multilevel='uniform_average', relative_to='y_true', eps=None, by_index=False)[source]
Mean Arctangent Absolute Percentage Error (MAAPE).
MAAPE is a variation of the Mean Absolute Percentage Error (MAPE) that is robust to zero values in the ground truth series. While MAPE is undefined when y_true=0, MAAPE uses the arctangent function to bound the error.
The formula is defined as:
\[\text{MAAPE} = \frac{1}{n} \sum_{t=1}^{n} \arctan \left( \left| \frac{y_t - \hat{y}_t}{y_t} \right| \right)\]where \(y_t\) is the actual value and \(\hat{y}_t\) is the forecast value.
The result is bounded between 0 and \(\pi/2\) (approx 1.57).
- Parameters:
- multioutput{‘raw_values’, ‘uniform_average’}, default=’uniform_average’
Defines aggregating of multiple output values.
- multilevel{‘raw_values’, ‘uniform_average’}, default=’uniform_average’
Defines aggregating of multiple hierarchical levels.
- relative_to{“y_true”, “y_pred”}, default=”y_true”
Determines the denominator of the percentage error.
- epsfloat, default=None
Numerical epsilon used in denominator to avoid division by zero.
- by_indexbool, default=False
If True, return the metric value at each time point. If False, return the aggregate metric value.
References
Kim, S., & Kim, H. (2016). “A new metric of absolute percentage error for intermittent demand forecasts”. International Journal of Systems Science.
Methods
__call__(y_true, y_pred, **kwargs)Calculate metric value using underlying metric function.
- __call__(y_true, y_pred, **kwargs)[source]
Calculate metric value using underlying metric function.
- Parameters:
- y_truetime series in
sktimecompatible data container format. Ground truth (correct) target values.
Individual data formats in
sktimeare so-called mtype specifications, each mtype implements an abstract scitype.Seriesscitype = individual time series, vanilla forecasting.pd.DataFrame,pd.Series, ornp.ndarray(1D or 2D)Panelscitype = collection of time series, global/panel forecasting.pd.DataFramewith 2-level rowMultiIndex(instance, time),3D np.ndarray(instance, variable, time),listofSeriestypedpd.DataFrameHierarchicalscitype = hierarchical collection, for hierarchical forecasting.pd.DataFramewith 3 or more level rowMultiIndex(hierarchy_1, ..., hierarchy_n, time)
For further details on data format, see glossary on mtype. For usage, see forecasting tutorial
examples/01_forecasting.ipynb- y_predtime series in
sktimecompatible data container format Predicted values to evaluate against ground truth. Must be of same format as
y_true, same indices and columns if indexed.- y_pred_benchmarkoptional, time series in
sktimecompatible data container format Benchmark predictions to compare
y_predto, used for relative metrics. Required only if metric requires benchmark predictions, as indicated by tagrequires-y-pred-benchmark. Otherwise, can be passed to ensure interface consistency, but is ignored. Must be of same format asy_true, same indices and columns if indexed.- y_trainoptional, time series in
sktimecompatible data container format Training data used to normalize the error metric. Required only if metric requires training data, as indicated by tag
requires-y-train. Otherwise, can be passed to ensure interface consistency, but is ignored. Must be of same format asy_true, same columns if indexed, but not necessarily same indices.- sample_weightoptional, 1D array-like, or callable, default=None
Sample weights for each time point.
If
None, the time indices are considered equally weighted.If an array, must be 1D. If
y_trueandy_pred``are a single time series, ``sample_weightmust be of the same length asy_true. If the time series are panel or hierarchical, the length of all individual time series must be the same, and equal to the length ofsample_weight, for all instances of time series passed.If a callable, it must follow
SampleWeightGeneratorinterface, or have one of the following signatures:y_true: pd.DataFrame -> 1D array-like, ory_true: pd.DataFrame x y_pred: pd.DataFrame -> 1D array-like.
- y_truetime series in
- Returns:
- lossfloat, np.ndarray, or pd.DataFrame
Calculated metric, averaged or by variable. Weighted by
sample_weightif provided.float if
multioutput="uniform_average" or array-like, and ``multilevel="uniform_average"or “uniform_average_time”``. Value is metric averaged over variables and levels (see class docstring)np.ndarrayof shape(y_true.columns,)if multioutput=”raw_values”` andmultilevel="uniform_average"or"uniform_average_time". i-th entry is the, metric calculated for i-th variablepd.DataFrameifmultilevel="raw_values". of shape(n_levels, ), ifmultioutput="uniform_average"; of shape(n_levels, y_true.columns)ifmultioutput="raw_values". metric is applied per level, row averaging (yes/no) as inmultioutput.

