xskillscore.smape

xskillscore.smape(a, b, dim=None, weights=None, skipna=False, keep_attrs=False)

Symmetric Mean Absolute Percentage Error.

\[\mathrm{SMAPE} = \frac{1}{n} \sum_{i=1}^{n} \frac{ \vert a_{i} - b_{i} \vert } { \vert a_{i} \vert + \vert b_{i} \vert }\]

Note

Percent error is reported as decimal percent. I.e., a value of 1 is 100%.

Parameters:
  • a (xarray.Dataset or xarray.DataArray) – Labeled array(s) over which to apply the function. (Truth which will be divided by)

  • b (xarray.Dataset or xarray.DataArray) – Labeled array(s) over which to apply the function.

  • dim (str, list) – The dimension(s) to apply the smape along. Note that this dimension will be reduced as a result. Defaults to None reducing all dimensions.

  • weights (xarray.Dataset or xarray.DataArray or None) – Weights matching dimensions of dim to apply during the function.

  • skipna (bool) – If True, skip NaNs when computing function.

  • keep_attrs (bool) – If True, the attributes (attrs) will be copied from the first input to the new one. If False (default), the new object will be returned without attributes.

Returns:

Symmetric Mean Absolute Percentage Error.

Return type:

xarray.Dataset or xarray.DataArray

References

https://en.wikipedia.org/wiki/Symmetric_mean_absolute_percentage_error

Examples

>>> a = xr.DataArray(np.random.rand(5, 3, 3), dims=["time", "x", "y"])
>>> b = xr.DataArray(np.random.rand(5, 3, 3), dims=["time", "x", "y"])
>>> xs.smape(a, b, dim="time")
<xarray.DataArray (x: 3, y: 3)> Size: 72B
array([[0.35591619, 0.43662087, 0.55372571],
       [0.1864336 , 0.45831965, 0.38473469],
       [0.58730494, 0.18081757, 0.14960832]])
Dimensions without coordinates: x, y