def mape()

in src/entrypoint/gluonts_example/metrics.py [0:0]


def mape(y_true, y_pred, version=0) -> float:
    r"""
    .. math::
        mape = mean(|Y - Y_hat| / |Y|))

    Args:
        y_true (np.array): Ground truths
        y_pred (np.array): Forecasts
        version (int, optional): Version 0 is as-is implementation of formula. Version 1 & 2 deal with div-by-0, but
            version=1 ignores those with y=0 from calculation. Defaults to 0.

    Returns:
        array of floats: mape values
    """

    if version == 0:
        return np.mean(np.abs((y_true - y_pred) / y_true))
    elif version == 1:
        # This version takes care of div-by-0, and ignore 0-y in nominator.
        # See: https://github.com/awslabs/gluon-ts/pull/725
        denominator = np.abs(y_true)
        flag = denominator == 0
        return np.mean((np.abs(y_true - y_pred) * (1 - flag)) / (denominator + flag))
    elif version == 2:
        # This version takes care of div-by-0, and include 0-y in nominator.
        denominator = np.abs(y_true)
        flag = denominator == 0
        return np.mean(np.abs(y_true - y_pred) / (denominator + flag))

    raise ValueError(f"Unknown mape version: {version}")