Last Updated on 2021-11-17 by Clay
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
- https://en.wikipedia.org/wiki/Symmetric_mean_absolute_percentage_error
- https://www.statology.org/smape-python/