45 votos

Porcentaje medio de error (MAPE) en Scikit-learn

¿Cómo podemos calcular el error porcentual absoluto medio (MAPE) de nuestras predicciones utilizando Python y scikit-learn?

Desde los documentos , sólo tenemos estas 4 funciones métricas para las Regresiones:

  • metrics.explained_variance_score(y_true, y_pred)
  • metrics.mean_absolute_error(y_true, y_pred)
  • metrics.mean_squared_error(y_true, y_pred)
  • metrics.r2_score(y_true, y_pred)

47voto

Vi0 Puntos 656

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

37voto

Subhnish meena Puntos 21

Aquí hay una versión actualizada:

import numpy as np

def mean_absolute_percentage_error(y_true, y_pred): 
    y_true, y_pred = np.array(y_true), np.array(y_pred)
    return np.mean(np.abs((y_true - y_pred) / y_true)) * 100

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X