最小化對稱平均絕對百分比誤差 (SMAPE)
我正在開發一個預測應用程序,其中使用對稱平均絕對百分比誤差來測量預測誤差:
在創建我的 ML 模型並對我擁有的數據應用一些貝葉斯推理之後,我最終得到了可能的實際值的概率分佈,即與每個“猜測”相關的概率。如果重要的話,該分佈是具有固定試驗次數的 beta 二項分佈,這意味著可能的結果範圍為對一些.
就像平均值最小化均方誤差和中值最小化平均絕對誤差一樣,什麼點估計最小化 SMAPE?是否有任何有效的算法來計算它(或足夠好的近似值)?
預先感謝您的任何幫助!
我認為這個問題沒有封閉形式的解決方案。(我有興趣被證明是錯誤的。)我假設你需要模擬。並希望您的預測後驗不會被錯誤指定得太糟糕。
萬一有趣,我們寫了一篇小論文(另見此演示文稿),解釋瞭如何通過滾動標準六面骰子來最小化百分比誤差會導致預測偏差。我們還研究了 MAPE 和 wMAPE 的各種風格,但在這裡讓我們專注於 sMAPE。
這是我們通過滾動模擬“銷售”的圖 $ n=8 $ 六面骰子 $ N=1,000 $ 時間並繪製平均 sMAPE 以及逐點分位數:
fcst <- seq(1,6,by=.01) n.sims <- 1000 n.sales <- 10 confidence <- .8 result.smape <- matrix(nrow=n.sims,ncol=length(fcst)) set.seed(2011) for ( jj in 1:n.sims ) { sales <- sample(seq(1,6),size=n.sales,replace=TRUE) for ( ii in 1:length(fcst) ) { result.smape[jj,ii] <- 2*mean(abs(sales-rep(fcst[ii],n.sales))/(sales+rep(fcst[ii],n.sales))) } }
(請注意,我正在使用將分母除以 2 的替代 sMAPE 公式。)
plot(sales,type="o",ylab="",xlab="",pch=21,bg="black",ylim=c(1,6), main=paste("Sales:",n.sales,"throws of a six-sided die")) plot(fcst,fcst,type="n",ylab="sMAPE",xlab="Forecast",ylim=c(0.3,1.1)) polygon(c(fcst,rev(fcst)),c( apply(result.smape,2,quantile,probs=(1-confidence)/2), rev(apply(result.smape,2,quantile,probs=1-(1-confidence)/2))), density=10,angle=45) lines(fcst,apply(result.smape,2,mean)) legend(x="topright",inset=.02,col="black",lwd=1,legend="sMAPE")
這些方面的內容可能對您的情況有所幫助。(同樣,您需要假設您的後驗預測分佈“足夠正確”以進行這種模擬 - 但您也需要假設對於任何其他方法,所以這只是增加了一個一般性的警告,而不是具體的問題。)
在這個滾動標準六面骰子的簡單示例中,我們實際上可以計算並繪製作為預測函數的預期 s(M)APE:
expected.sape <- function ( fcst ) sum(abs(fcst-seq(1,6))/(seq(1,6)+fcst))/3 plot(fcst,mapply(expected.sape,fcst),type="l",xlab="Forecast",ylab="Expected sAPE")
這與上面的模擬平均值相當吻合。它很好地表明,滾動標準六面模具的 EsAPE 最小預測是有偏的 4,而不是 3.5 的無偏期望。
另一個有趣的事實:如果您的預測分佈是具有預測參數的 Poisson $ \hat{\lambda}<1 $ ,則最小化預期 sAPE 的預測為 $ \hat{y}=1 $ - 獨立於特定值 $ \hat{\lambda} $ .
至少這是在Seaman & Bowman 的腳註 1 中聲稱的(印刷中,IJF,對 M5 預測競賽的評論),沒有證據。很容易看出 EsAPE 最小預測滿足 $ \hat{y}\geq 1 $ (你只是表明任何替代預測 $ \hat{y}'<1 $ 將導致更大的 EsAPE)。表明 $ \hat{y}'>1 $ 將導致比 EsAPE 更大 $ \hat{y}=1 $ 似乎有點乏味。然而,模擬看起來讓人放心。