Scikit-learn'deki ortalama mutlak yüzde hatası (MAPE) [kapalı]


24

Python ve scikit-learn kullanarak tahminlerimizin Ortalama mutlak yüzde hatasını (MAPE) nasıl hesaplayabiliriz?

Gönderen dokümanlar , biz bağlanımlar için sadece bu 4 metrik işlevlere sahiptir:

  • 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)

Yanıtlar:


24

Belirtildiği gibi (örneğin Wikipedia'da ), MAPE sorunlu olabilir. En dikkat çekici şekilde, sıfıra bölünme hatalarına neden olabilir. Tahminime göre sklearn ölçütlerine dahil edilmedi.

Ancak, uygulanması basittir.

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

Diğer metrikler gibi kullanın ...:

> 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

(100 ile çarptığımı ve yüzde döndürdüğümü unutmayın.)

... fakat dikkatli olun:

> 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

1
Bu cevapta bir hata var. Olmalı ( payda y_predile değiştirin y_true):return np.mean(np.abs((y_true - y_pred) / y_true)) * 100
404pio

1
check_arraysscipy tarafından kazındı. Orada check_arrayşimdiki sklearn içinde ama aynı şekilde çalışır gibi görünmüyor.
kilojoules

check_arrays yöntemi 0,16'dan kaldırıldı.
Arpit Sisodia


17

İşte güncellenmiş bir versiyon:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.