Predictive-Models

Scikit-learn 中的平均絕對百分比誤差 (MAPE) [關閉]

  • May 7, 2013

我們如何使用 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)

如前所述(例如,在 Wikipedia 中),MAPE 可能存在問題。最明顯的是,它可能導致被零除的錯誤。我的猜測是,這就是為什麼它不包含在 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

引用自:https://stats.stackexchange.com/questions/58391

comments powered by Disqus