Source code for pmdarima.metrics

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

from sklearn.utils.validation import check_array, column_or_1d as c1d
import numpy as np

from .compat.numpy import DTYPE

__all__ = ['smape']


def _check_array(y):
    return c1d(
        check_array(y, ensure_2d=False, force_all_finite=False,
                    copy=True, dtype=DTYPE))


[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_array(y_true) # type: np.ndarray y_pred = _check_array(y_pred) # type: np.ndarray abs_diff = np.abs(y_pred - y_true) return np.mean((abs_diff * 200 / (np.abs(y_pred) + np.abs(y_true))))