ค่าเฉลี่ยเปอร์เซ็นต์ความผิดพลาด (MAPE) ใน Scikit-Learn [ปิด]


23

เราจะคำนวณค่าเฉลี่ยเปอร์เซ็นต์ความผิดพลาด (MAPE) ของการคาดคะเนของเราโดยใช้ Python และ scikit-Learn ได้อย่างไร

จากเอกสารเรามีเพียง 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 อาจเป็นปัญหาได้ ส่วนใหญ่แล้วมันสามารถทำให้เกิดข้อผิดพลาดการหารโดยศูนย์ ฉันเดาว่านี่คือเหตุผลที่ไม่รวมอยู่ในเมตริก 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_predด้วยy_trueตัวส่วน):return np.mean(np.abs((y_true - y_pred) / y_true)) * 100
404pio

1
check_arraysถูกทิ้งโดยสกิปปี้ มีcheck_arrayอยู่ในความสับสนวุ่นวายในปัจจุบัน แต่ดูเหมือนว่ามันจะทำงานไม่เหมือนกัน
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.