Comme indiqué (par exemple, dans Wikipedia ), MAPE peut être problématique. Plus précisément, il peut provoquer des erreurs de division par zéro. Je suppose que c'est pourquoi il n'est pas inclus dans les métriques sklearn.
Cependant, il est simple à mettre en œuvre.
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
Utilisez comme toute autre métrique ...:
> 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
(Notez que je multiplie par 100 et que je renvoie un pourcentage.)
... mais avec prudence:
> 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