How to calculate SMAPE in Python

SMAPE (Symmetric Mean Absolute Percentage Error) is a measure of the accuracy of forecasts and can be calculated in Python by taking the average of the absolute percentage errors of the forecast and the actual value. This is done by dividing the sum of the absolute differences between forecast and actual values by the sum of the absolute values of the actual values, multiplied by 200. The result is then expressed as a percentage.


The symmetric mean absolute percentage error (SMAPE) is used to measure the predictive accuracy of models. It is calculated as:

SMAPE = (1/n) * Σ(|forecast – actual| / ((|actual| + |forecast|)/2) * 100

where:

  • Σ – a symbol that means “sum”
  • n – sample size
  • actual – the actual data value
  • forecast – the forecasted data value

This tutorial explains how to calculate SMAPE in Python.

How to Calculate SMAPE in Python

There is no built-in Python function to calculate SMAPE, but we can create a simple function to do so:

import numpy as np

def smape(a, f):
    return 1/len(a) * np.sum(2 * np.abs(f-a) / (np.abs(a) + np.abs(f))*100)

We can then use this function to calculate the SMAPE for two arrays: one that contains the actual data values and one that contains the forecasted data values.

#define arrays of actual and forecasted data values
actual = np.array([12, 13, 14, 15, 15,22, 27])
forecast = np.array([11, 13, 14, 14, 15, 16, 18])

#calculate SMAPE
smape(actual, forecast)

12.45302

From the results we can see that the symmetric mean absolute percentage error for this model is 12.45302%.

Wikipedia Entry for SMAPE
Rob J. Hyndman’s thoughts on SMAPE
How to Calculate MAPE in Python
How to Calculate MAPE in R
How to Calculate MAPE in Excel

x