Scikit-learn의 평균 절대 백분율 오차 (MAPE) [닫기]


23

Python과 scikit-learn을 사용하여 예측의 평균 절대 백분율 오차 (MAPE)를 어떻게 계산할 수 있습니까?

에서 워드 프로세서 , 우리는 회귀 만이 4 개 미터 기능을 가지고 있습니다 :

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

stackOverflow-의에이 대답을 참조하십시오 stackoverflow.com/questions/42250958/...
Arpit Sisodia

답변:


23

언급 한대로 (예 : Wikipedia에서 ) MAPE는 문제가 될 수 있습니다. 가장 중요한 것은 0으로 나누기 오류가 발생할 수 있습니다. 내 생각에 이것이 sklearn 메트릭에 포함되지 않은 이유입니다.

그러나 구현이 간단합니다.

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

다른 메트릭과 마찬가지로 사용하십시오.

> 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을 곱하고 백분율을 반환합니다.)

...하지만주의해서 :

> 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
이 답변에 오류가 있습니다. 수 (교체해야 y_predy_true분모에) :return np.mean(np.abs((y_true - y_pred) / y_true)) * 100
404pio

1
check_arraysscipy에 의해 버려졌습니다. 거기에 check_array현재 sklearn에 있지만 같은 방식으로 작동처럼은 보이지 않는다.
kilojoules

check_arrays 메소드가 .16에서 제거되었습니다.
Arpit Sisodia


16

다음은 업데이트 된 버전입니다.

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.