模型評估指標:迴歸

Yasmine Cheng
數據領航員
Published in
12 min readMar 24, 2023

主編/鄭雅綿 ;校稿/王常在

目錄

前言
為什麼有那麼多評估指標?
驗證指標介紹
MAE 平均絕對誤差
MAPE 平均絕對百分比誤差
MSE 均方誤差
MSLE 均方對數誤差
RMSE 均方根誤差
RMSLE 均方根對數誤差
R² R平方
SSE 殘差平方和
SSR 迴歸平方和
TSS 總平方和
結語
參考文章

前言

在『任務分類、訓練測試集』的文章中我們有提到機器學習的任務是如何分類的,包含監督及非監督式學習,另外監督式學習又可再分成迴歸及分類的任務 ; 而『模型評估指標:分類』的文章中介紹了監督式學習中分類任務常使用的評估指標。此篇文章主要著重在監督式學習的另一種任務 — 迴歸常使用的評估指標。

為什麼有那麼多評估指標?

在分類任務中時常會使用的指標有Accuracy準確率、Recall召回率及Precision精確率來評斷模型的好壞,但迴歸任務不使用這些指標的原因是預測出的結果為連續型的數值,相對離散型預測並不適用。在分類任務中,只要預測出的結果和真實值相同的比例越高,模型的表現被認為越好 ; 在迴歸模型中,預測出的結果和真實值的差異越低,兩者越接近,模型的表現被認為越好。

迴歸任務中也會因真實使用場域有所不同,可依據定義出的問題決定使用何種驗證指標更為合適。

驗證指標介紹

以下將介紹常用的迴歸模型指標公式及特點。

MAE 平均絕對誤差(Mean Absolute Error)

        1      n
MAE = ----- * Σ |Yi - Ŷi|
n i=1

✑ 說明:預測值和實際值之間的絕對誤差的平均值。與平均誤差相比,平均絕對誤差會因為誤差被絕對值化,不會出現正負相抵消的情況,因此,平均絕對誤差相較平均誤差能更好地反映預測值誤差的實際情況。

✑ 缺點:較易受資料點的值大小分佈所影響,無法直接從指標值判斷預測結果的好壞。

✑ 範圍:>= 0,0表最好狀況。

from sklearn.metrics import mean_absolute_error
y_true = [3, 0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
print("mae:", mean_absolute_error(y_true, y_pred))
>>> 0.5

MAPE 平均絕對百分比誤差(Mean Absolute Percentage Error)

         1      n
MAPE = ----- * Σ |(Yi - Ŷi)/Yi|*100
n i=1

✑ 說明:實際值和預測值間百分比誤差的絕對值,並對值進行平均。指標值越低的值表示預測越精確。因已取過百分比,並不會因為資料點的直大小分佈所影響,判斷預測結果較易(判斷優劣的尺度相同)。

✑ 缺點:

  1. 在誤差的懲罰上是有偏見的,因有絕對值得關係,對負的懲罰會大於對正的懲罰。
  2. 需考慮分母可能為0的狀況,會導致某資料點的懲罰無法納入考量。

✑ 範圍:正常為0~1間,0表最好狀況,但指標也有可能超過1,表示預測狀況極差。

from sklearn.metrics import mean_absolute_percentage_error
y_true = [3, 0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
print("mape:", mean_absolute_percentage_error(y_true, y_pred))
>>> 0.3273809523809524

MSE 均方誤差(Mean Square Error)

       1     n
MSE = --- * Σ (Yi - Ŷi)²
n i=1

✑ 說明:實際值和預測值之間差的平方和取平均。因有平方, 若預測值與真實質誤差太大,懲罰也會相對嚴重(e.g.離群值…), 因此適合梯度計算。也因為是平方的計算,並不會考慮誤差的方向。

※梯度下降法:往局部最小值靠近,透過不斷調整方向求出最佳解。缺點為局部最小值不一定為全局最小值,且求導效能不佳。若想閱讀更詳細的教學文章,可參考模型評估指標:分類

✑ 缺點:

  1. 和MAE有相同的問題,較易受資料點的值大小分佈所影響,無法直接從指標值判斷預測結果的好壞。
  2. 若模型預測時,在少數資料點上的預測表現極差,因平方效果會放大該錯誤,但實際情況我們可能不是這麼在意這些極端值,甚至會直接做排除。

✑ 範圍:>= 0,0表最好狀況。

from sklearn.metrics import mean_squared_error
y_true = [3, 0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
print("mse:", mean_squared_error(y_true, y_pred))
>>> 0.375

MSLE 均方誤差(Mean Square Log Error)

        1  n
MSLE = - Σ (log (yi + 1) − log (ŷi + 1))²
n i=1

✑ 說明:對數轉換後的實際值和預測值之間差的平方和取平均。預測值和實際值都先+1的是為避免0會無法取對數。因將預測值和實際值都取自然對數後,MSLE能夠對預測值和實際值之間的相對誤差進行更為敏感的評估。相較於MSE,MSLE更能夠有效地反映模型對於大錯誤的敏感度。MSLE 只關心對數轉換後的實際值和預測值之間的百分比差異,不易受到資料點的大小分布影響,小的實際值和預測值之間的小差異視為與大的實際值和預測值之間的大差異大致相同。

圖片取自Mean Squared Logarithmic Error Loss

✑ 缺點:

在誤差的懲罰上是有偏見的,指標計算時對預測不足的估計之懲罰會大於預測過高的估計。通常會使用於預測目標呈指數增長的狀況下。

圖片取自Mean Squared Logarithmic Error Loss

✑ 範圍:>= 0,0表最好狀況。

from sklearn.metrics import mean_squared_log_error
y_true = [3, 0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
print("msle:", mean_squared_log_error(y_true, y_pred, squared=True))
>>> 0.0490263575494607

RMSE 均方根誤差(Root Mean Squared Error)

           ______________________
/ 1 n
RMSE = / ----- * Σ (Yi - Ŷi)²)
√ n i=1

✑ 說明:RMSE是透過MSE取平方根獲得,好理解。因為有平方根,不會像MSE懲罰錯誤這麼嚴重。

✑ 缺點:

  1. 因採實際值與預測值之間差的平方,對於離群職的懲罰還是非常大,但實際情況我們可能不是這麼在意這些極端值,甚至會直接做排除。
  2. 和MSE有相同的問題,較易受資料點的值大小分佈所影響,無法直接從指標值判斷預測結果的好壞。

✑ 範圍:>=0,0表最好狀況。

RMSLE 均方根對數誤差(Root Mean Squared Logarithmic Error)

           ____________________________________
/ 1 n
RMSLE = / - Σ (log (yi + 1) − log (ŷi + 1))²
√ n i=1

✑ 說明:RMSLE是MSLE取平方根獲得。

✑ 缺點:(和MSLE大同小異)

  1. 因採實際值與預測值之間差的平方,對於離群職的懲罰還是非常大,但實際情況我們可能不是這麼在意這些極端值,甚至會直接做排除。
  2. 和MSE有相同的問題,較易受資料點的值大小分佈所影響,無法直接從指標值判斷預測結果的好壞。特別的地方是 有多MSLE做了平方根,可以稍微解決這個問題。

✑ 範圍:>= 0,0表最好狀況。

from sklearn.metrics import mean_squared_log_error
y_true = [3, 0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
print("rmsle:", mean_squared_log_error(y_true, y_pred, squared=False))
>>> 0.2214189638433454

R² R平方(R-squared)

     SSR       SSE
R² = --- = 1 - ---
TSS SST

✑ 說明:計算實際值的平均變化與預測值誤差的平方之間差。也可應用於模型上,表示模型中因變數的變異有多少部份可以由自變數的變異來解釋,判斷模型的總變異中可被解釋之百分比, 數值越大表示模型的配適度越好,但若數值太高,需特別注意是否有自變數與因變數相似性過高的問題,這樣的模型在預測上 公用並不大。

✑ 缺點:如果有增加資料點(自變量)的話,判斷係數也會一起增加。資料點的增加也會讓R平方隨之變高,產生模型預測效果好像很好的假象,也因此才出現了Adjusted-R平方。

圖片取自回歸分析(Regression analysis)的R平方(R squared)與調整後R平方(Adjusted R squared)

✑ 範圍:-1<=x<=1,越接近1表預測效果越好,常數模型會得到 0.0。

r_square = ssr / sst
# r_square = 1 - sse / sst
print("r_square:", r_square)
>>> 0.38945888966971187

SSE 和方差、誤差平方和(Error Sum of Squares)

      n    
SSE = Σ (yi - ŷi)²
i=1

✑ 說明:殘差平方和是最佳線性函數並不會經過很多資料點,但此指標可以在所有資料點中表現出無法解釋的方差的平方和。

✑ 範圍:>= 0,0表最好狀況。

import numpy as np
import statistics

sse = np.sum(np.add(y_true, y_pred)**2)
print("sse:", sse)
>>> 271.5

SSR 回歸平方和(SSR)

      n    
SSR = Σ (ŷi- ȳ)²
i=1

✑ 說明:描述每個變量的預測值與均值之間的差異。

✑ 範圍:>= 0,0表最好狀況。

import numpy as np
import statistics

ssr = np.sum(np.add(y_true, statistics.mean(y_pred))**2)
print("ssr:", ssr)
>>> 173.1875

TSS 總平方和(Total Sum of Squares)

TSS = SSR + SSE = (yi - ȳ)²

✑ 說明:計算每個變量與均值之間的平方差。可以得出每變量在平均數附近的變異。總平方和可以輔助評估殘差平方和和迴歸平方和。

✑ 範圍:>= 0,0表最好狀況。

tss = ssr + sse
print("tss:", tss)
>>> 444.6875

結語

本篇文章共介紹了10個常用的迴歸模型評估指標,但還是有少許沒提到的部分,只舉例說明較常見的。指標間很多都是相互改良、攪和而成的(? 可評估使用的場合選用適合的。同系列中也有介紹到分類模型的評估指標,若有興趣也可一起閱讀~~

參考文章

教育部補助大專院校STEM領域及女性研發人才培育計畫目標為建構一個「以智慧物聯技術與實務應用為基礎的教育環境和實作場域」,並規劃出符合此STEM教育領域的創新特色課程,以畢業前進入企業實習的方式,讓學生了解相關產業界所面對的問題,再輔以業界實作場域的教育訓練活動,共同帶領學生發展出動手做、判斷與解決問題的相關技能;本計畫也規劃讓學生以專題實作的組隊方式,跟業界協力領導學生對外參與智慧物聯技術的應用競賽,不僅可以累積學生實務開發的能力,更能激發其潛能來幫助企業解決所面臨的難題。

Data Science Meetup 台灣資料科學社群的使命是「為資料科學人士與企業創建經濟機會」。我們相信大數據蘊藏著巨量的信息和價值,如何處理好大數據並發掘其潛藏的商業價值,就要靠資料科學有效的應用。21世紀是資料科學決勝時代,我們社群將為大家提供與資料科學相關的最新技術和資訊實戰攻略,並透過全球業界人士和學者幫助相關職業規劃與挑戰,社群活動包含

  • 台北實體版聚
  • 線上版聚
  • Mentorship Program

歡迎加入我們社團瞭解更多資訊: https://www.facebook.com/groups/datasciencemeetup/

--

--

Yasmine Cheng
數據領航員

NLP Lab @ SCU | Data Science | to be a nlper 💻 Linkedin:Ya Mian(Yasmine) Cheng Github:Yasmine-Cheng