Source code for pmdarima.metrics

# -*- coding: utf-8 -*-

from .utils import check_endog
import numpy as np

__all__ = ['smape']


[docs]def smape(y_true, y_pred): r"""Compute the Symmetric Mean Absolute Percentage Error. The symmetric mean absolute percentage error (SMAPE) is an accuracy measure based on percentage (or relative) errors. Defined as follows: :math:`\frac{100\%}{n}\sum_{t=1}^{n}{\frac{|F_{t}-A_{t}|}{ (|A_{t}|+|F_{t}|)/2}}` Where a perfect SMAPE score is 0.0, and a higher score indicates a higher error rate. Parameters ---------- y_true : array-like, shape=(n_samples,) The true test values of y. y_pred : array-like, shape=(n_samples,) The forecasted values of y. Examples -------- A typical case: >>> import numpy as np >>> y_true = np.array([0.07533, 0.07533, 0.07533, 0.07533, ... 0.07533, 0.07533, 0.0672, 0.0672]) >>> y_pred = np.array([0.102, 0.107, 0.047, 0.1, ... 0.032, 0.047, 0.108, 0.089]) >>> smape(y_true, y_pred) 42.60306631890196 A perfect score: >>> smape(y_true, y_true) 0.0 References ---------- .. [1] https://en.wikipedia.org/wiki/Symmetric_mean_absolute_percentage_error """ # noqa: E501 y_true = check_endog( y_true, copy=False, preserve_series=False, ) y_pred = check_endog( y_pred, copy=False, preserve_series=False, ) abs_diff = np.abs(y_pred - y_true) return np.mean((abs_diff * 200 / (np.abs(y_pred) + np.abs(y_true))))