MAPE & sMAPE

Eval

MAPE & sMAPE

まとめ
  • MAPE menyatakan galat sebagai persentase terhadap nilai aktual.
  • Bandingkan MAPE dan sMAPE pada contoh ramalan penjualan dan lihat ketidakstabilan dekat nol.
  • Pelajari cara menangani data dengan nol, nilai kecil, atau negatif.

1. Definisi #

$$ \mathrm{MAPE} = \frac{100}{n} \sum_{i=1}^n \left| \frac{y_i - \hat{y}_i}{y_i} \right| $$

  • Rata-rata galat persentase terhadap nilai aktual.
  • Semakin kecil semakin baik.
  • Tidak stabil ketika \(y_i\) bernilai nol atau sangat kecil.

2. Menghitung di Python #

import numpy as np
from sklearn.metrics import mean_absolute_percentage_error

y_true = np.array([120, 150, 80, 200])
y_pred = np.array([110, 160, 75, 210])

mape = mean_absolute_percentage_error(y_true, y_pred)
print(f"MAPE = {mape * 100:.2f}%")

Fungsi mengembalikan nilai dalam fraksi; kalikan 100 untuk bentuk persentase.


3. sMAPE (MAPE simetris) #

Untuk meredam masalah di sekitar nol, sMAPE menyertakan prediksi pada penyebut:

$$ \mathrm{sMAPE} = \frac{100}{n} \sum_{i=1}^n \frac{|y_i - \hat{y}_i|}{(|y_i| + |\hat{y}_i|)/2} $$

import numpy as np

def smape(y_true: np.ndarray, y_pred: np.ndarray) -> float:
    numerator = np.abs(y_true - y_pred)
    denominator = (np.abs(y_true) + np.abs(y_pred)) / 2
    return float(np.mean(numerator / np.maximum(denominator, 1e-8)))

y_true = np.array([120, 150, 80, 200])
y_pred = np.array([110, 160, 75, 210])
print(f"sMAPE = {smape(y_true, y_pred) * 100:.2f}%")

Tambahkan epsilon kecil untuk menghindari pembagian nol.


4. Hal yang perlu diperhatikan #

  • Nilai nol/negatif: MAPE akan meledak; gunakan sMAPE atau batasi perhitungan pada periode dengan permintaan positif.
  • Bias ke nilai kecil: persentase memberi bobot lebih besar pada item volume kecil; jelaskan efek ini kepada pemangku kepentingan.
  • Outlier: metrik relatif mengecilkan dampak volume besar; sertakan metrik absolut.
  • Interpretasi: “rata-rata meleset ±X%” mudah dipahami, namun lengkapi dengan implikasi nilai uang.

5. Metrik pendamping #

  • MAE / RMSE: menunjukkan galat absolut sehingga dampak bisnis terlihat.
  • RMSLE: menekankan penalti terhadap underestimation pada peramalan permintaan/pertumbuhan.
  • Pinball loss: mengevaluasi interval/kantil untuk analisis risiko.

Ringkasan #

  • MAPE memberikan gambaran persentase yang intuitif, tetapi perlu kehati-hatian saat nilai mendekati nol.
  • sMAPE mengatasi ketidakstabilan dengan menormalkan terhadap jumlah nilai aktual dan prediksi.
  • Gabungkan metrik relatif dan absolut untuk memprioritaskan perbaikan serta mengomunikasikan dampak bisnis.