Skip to content

[Machine Learning] SMAPE 指標介紹與程式實作

Symmetric Mean Absolute Percentage Error(SMAPE),中文可以翻譯成『對稱性平均絕對百分比誤差』,是一種經典的『預測值與實際值』的評估指標

基本上可以視為 Mean Absolute Percentage Error(MAPE)的某種改良(因為 MAPE 對於預測值高於實際值的情況沒有預測『上限』,低於的情況卻有),所以錢會被稱為『對稱性』(Symmetric)。

此評估指標多用於迴歸問題而非分類問題


SMAPE 公式

  • n 為序列總數
  • F_t 為預測值
  • A_t 為實際值

程式實作(Python)

以下的程式有使用到 numpy 套件。

# coding: utf-8
import numpy as np


def smape(a, f):
    return 1/len(a) * np.sum(2*np.abs(f-a)/(np.abs(a)+np.abs(f))*100)


def main():
    actual = np.array([12.3, 21.4, 14.0, 1.51, 14.6, 21.5, 83.1])
    forecast = np.array([11.5, 13.0, 14.3, 1.49, 15.3, 16.9, 81.2])

    print("{:.4}%".format(smape(actual, forecast)))


if __name__ == "__main__":
    main()


Output:

12.85%


(補充) PyTorch 版本

PyTorch 是一個非常好用的深度學習框架,所以也在此補上 PyTorch 版本。

def smape(outputs, answers):
    return torch.mean(2*torch.abs(outputs-answers)/(torch.abs(answers)+torch.abs(outputs)))



References


Read More

Leave a Reply