分類任務有混淆矩陣作為指標的核心基礎,迴歸任務則建立在誤差分佈 (Error Distribution) 之上。所有迴歸指標,都是在真實值與預測值的差異上進行數學運算。迴歸的評估相對分類簡單,沒有多種 TP、FP 的組合,但每個指標關注的面向、對異常值的敏感度、在商業決策上的意義卻各有不同。
回歸任務中,誤差 (Error) 定義為:
$$
e_i = y_i - \hat{y}_i
$$
其中:
所有回歸評估指標,都是將 $e_i$ 做數學運算後的結果。
將每個誤差平方後取平均。平方的動作會讓大誤差的影響成倍放大,因此 MSE 對異常值 (outlier) 非常敏感。
$$
MSE = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2
$$
特性分析
優點
缺點
商業案例
MSE 的開平方版本,將誤差單位轉回與原資料一致,方便直接比較預測誤差與實際業務數值。
$$
RMSE = \sqrt{MSE}
$$
特性分析
優點
缺點
商業案例
計算每個誤差的絕對值後取平均,所有誤差等權對待,不會放大大誤差的影響。
$$
MAE = \frac{1}{n} \sum_{i=1}^n |y_i - \hat{y}_i|
$$
特性分析
優點
缺點
商業案例
衡量模型解釋資料變異的比例。
$$
R^2 = 1 - \frac{\sum_{i=1}^n (y_i - \hat{y}i)^2}{\sum{i=1}^n (y_i - \bar{y})^2}
$$
其中:
特性分析
優點
缺點
商業案例
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression
from sklearn.metrics import (
mean_absolute_error, mean_squared_error, r2_score
)
import numpy as np
# 載入 California Housing 資料(回歸任務)
X, y = fetch_california_housing(return_X_y=True)
# 訓練/測試分割
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# 建立模型(Linear Regression)
pipe = Pipeline([
("scaler", StandardScaler()),
("lr", LinearRegression())
])
pipe.fit(X_train, y_train)
# 預測
y_pred = pipe.predict(X_test)
# 指標計算
mae = mean_absolute_error(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
mape = np.mean(np.abs((y_test - y_pred) / y_test)) * 100
r2 = r2_score(y_test, y_pred)
print(f"MAE: {mae:.4f}")
print(f"MSE: {mse:.4f}")
print(f"RMSE: {rmse:.4f}")
print(f"MAPE: {mape:.2f}%")
print(f"R²: {r2:.4f}")
回歸任務的驗證指標,看似只是數學公式,但實際上反映的是模型在不同業務情境下的行為特性:
選擇指標時,不應只看「哪個分數高」,而是要先明確業務目標與成本結構:
指標本身不是目的,而是模型優化與決策的工具。理解每個指標背後的數學意義與業務含義,才能讓回歸模型的評估與優化真正服務於應用場景,而不只是停留在數字遊戲。