Jak wspomniano (na przykład w Wikipedii ), MAPE może powodować problemy. Przede wszystkim może powodować błędy dzielenia przez zero. Domyślam się, że właśnie dlatego nie jest uwzględniony w metrykach sklearn.
Jest jednak prosty do wdrożenia.
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
Używaj jak każdej innej metryki ...:
> 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
(Pamiętaj, że mnożę przez 100 i zwracam wartość procentową).
... ale ostrożnie:
> 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