Como se ha señalado (por ejemplo, en Wikipedia ), el MAPE puede ser problemático. Sobre todo, puede causar errores de división por cero. Supongo que por eso no se incluye en las métricas de sklearn.
Sin embargo, es sencillo de aplicar.
from sklearn.utils import check_arrays
def mean_absolute_percentage_error(y_true, y_pred):
y_true, y_pred = check_arrays(y_true, y_pred)
## Note: does not handle mix 1d representation
#if _is_1d(y_true):
# y_true, y_pred = _check_1d_array(y_true, y_pred)
return np.mean(np.abs((y_true - y_pred) / y_true)) * 100
Usar como cualquier otra métrica..:
> y_true = [3, -0.5, 2, 7]; y_pred = [2.5, -0.3, 2, 8]
> mean_absolute_percentage_error(y_true, y_pred)
Out[19]: 17.738095238095237
(Ten en cuenta que estoy multiplicando por 100 y devolviendo un porcentaje).
... pero con precaución:
> y_true = [3, 0.0, 2, 7]; y_pred = [2.5, -0.3, 2, 8]
> #Note the zero in y_pred
> mean_absolute_percentage_error(y_true, y_pred)
-c:8: RuntimeWarning: divide by zero encountered in divide
Out[21]: inf