Wie bereits erwähnt (zum Beispiel in Wikipedia ), kann MAPE problematisch sein. Insbesondere kann es zu Fehlern beim Teilen durch Null kommen. Ich vermute, dass dies der Grund ist, warum es nicht in den sklearn-Metriken enthalten ist.
Es ist jedoch einfach zu implementieren.
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
Verwenden Sie wie jede andere Metrik ...:
> 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
(Beachten Sie, dass ich mit 100 multipliziere und einen Prozentsatz zurückgebe.)
... aber mit Vorsicht:
> 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