Skip to content

SMAPE — Symmetric Mean Absolute Percentage Error

\[ \text{SMAPE} = \frac{100}{n} \sum_{i=1}^{n} \frac{|y_{\text{true},i} - y_{\text{pred},i}|} {\bigl(|y_{\text{true},i}| + |y_{\text{pred},i}|\bigr) / 2} \]

Implementation: custom — not from sklearn.

Running example:

  1. Denominators: \((|y_{\text{true},i}| + |y_{\text{pred},i}|) / 2 = [(5+6)/2,\; \ldots] = [5.5, 19.0, 52.5, 95.0, 210.0]\)
  2. Ratios: \(|e_i| / \text{denom}_i = [1/5.5,\; 2/19,\; 5/52.5,\; 10/95,\; 20/210] \approx [0.182, 0.105, 0.095, 0.105, 0.095]\)
  3. Mean: \(0.582 / 5 \approx 0.117\)
  4. Result: \(\text{SMAPE} = 0.117 \times 100 \approx 11.7\%\)

Interpretation

SMAPE normalises errors by the average of the true and predicted value, which bounds it above (unlike MAPE). It is symmetric only under swapping \(y_{\text{true}}\) and \(y_{\text{pred}}\) — not between an over-prediction and its mirror under-prediction: at \(y_{\text{true}} = 100\), predicting 150 contributes \(50/125 = 0.40\), predicting 50 contributes \(50/75 \approx 0.667\). The theoretical range is 0 – 200 %.

When to use

  • When a bounded percentage error is wanted: unlike MAPE, an over-prediction cannot push a single row's contribution above 200 %.
  • For time-series forecasting or demand-planning KPIs where symmetry is important.

Disadvantages

  • Still problematic when both \(y_{\text{true}}\) and \(y_{\text{pred}}\) are near zero (denominator approaches zero).
  • The 0–200 % range and the combined-denominator normalisation are less intuitive than MAPE for non-technical audiences.
  • Despite "symmetric" in the name, it is not truly symmetric in the sense of classical statistics.

Compute cost

Low — single pass over predictions.


← Back to Metrics index