4. 回归模型评估:MSE、RMSE、MAE、R-squared、调整R-squared详解

回归任务是监督学习中最常见的任务之一,其核心目标是预测连续型数值。评估一个回归模型的好坏,不能仅凭直觉,必须依赖一套严谨的量化指标。本章将深入剖析回归模型评估中最核心的五个指标:MSE、RMSE、MAE、R-squared 和 调整 R-squared,帮助你理解它们的数学原理、适用场景以及如何在实际 A/B 测试中正确使用。

4.1 核心概念:残差与误差

在深入指标之前,我们需要明确一个基础概念:残差。对于第 \( i \) 个样本,其真实值为 \( y_i \),模型预测值为 \( \hat{y}_i \),则残差 \( e_i = y_i - \hat{y}_i \)。所有评估指标本质上都是对残差的不同数学变换与聚合。

💡 关键区别: 误差(Error)通常指模型在未知数据上的泛化误差,而残差是训练集或测试集上计算出的具体差值。在评估阶段,我们通常使用测试集上的残差来计算指标。

4.2 五大核心指标详解

下表从数学公式、量纲、对异常值的敏感度以及核心应用场景四个维度,对五个指标进行横向对比。

指标 公式 量纲 异常值敏感度 核心应用场景
MSE \( \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2 \) 目标变量的平方 极高(平方放大) 梯度下降优化、理论分析
RMSE \( \sqrt{\frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2} \) 与目标变量一致 高 业务可解释性、默认首选
MAE \( \frac{1}{n}\sum_{i=1}^{n}|y_i - \hat{y}_i| \) 与目标变量一致 低(线性惩罚) 异常值较多、稳健评估
R-squared \( 1 - \frac{SS_{res}}{SS_{tot}} \) 无量纲(0~1) 受异常值影响 模型解释力、相对比较
调整 R-squared \( 1 - \frac{SS_{res}/(n-p-1)}{SS_{tot}/(n-1)} \) 无量纲(0~1) 受异常值影响 特征选择、防止过拟合

4.3 指标深度解读

4.3.1 MSE(均方误差)与 RMSE(均方根误差)

MSE 是回归任务中最常用的损失函数。由于对误差进行了平方,它会对较大的误差给予不成比例的惩罚。这使得 MSE 在优化过程中非常有效,但也导致它对异常值极其敏感。

RMSE 是 MSE 的平方根,它将量纲还原到与原始目标变量相同的单位,因此具有更好的业务可解释性。例如,预测房价时,RMSE 的单位是“元”,而 MSE 的单位是“元的平方”,后者难以直观理解。

📌 实战建议: 在 A/B 测试中,如果业务指标(如用户时长、收入)存在明显的长尾分布或异常值,建议同时报告 RMSE 和 MAE。若 RMSE 远大于 MAE,说明数据中存在较大的离群点,需要进一步排查。

4.3.2 MAE(平均绝对误差)

MAE 计算的是预测值与真实值之间绝对差值的平均值。由于没有平方操作,它对异常值的惩罚是线性的,因此比 RMSE 更加稳健。当数据中存在较多噪声或异常值时,MAE 能更真实地反映模型的“典型”表现。

然而,MAE 的导数不连续(在 0 点不可导),这导致它在基于梯度的优化算法中不如 MSE 方便。

4.3.3 R-squared(决定系数)

R-squared 衡量的是模型对目标变量方差的解释比例。其核心思想是比较“模型预测的残差平方和(\( SS_{res} \))”与“使用均值预测的残差平方和(\( SS_{tot} \))”。

  • \( R^2 = 1 \):完美拟合,模型解释了所有方差。
  • \( R^2 = 0 \):模型效果等同于直接使用均值预测。
  • \( R^2 < 0 \):模型比使用均值预测更差,通常意味着模型严重欠拟合或数据变换错误。
⚠️ 常见误区: R-squared 会随着特征数量的增加而单调递增(或保持不变),即使加入的是完全无用的随机噪声特征。因此,仅凭 R-squared 选择特征会导致严重的过拟合。

4.3.4 调整 R-squared(修正决定系数)

为了解决 R-squared 的上述缺陷,调整 R-squared 引入了对特征数量的惩罚项。公式中的 \( p \) 是特征数量,\( n \) 是样本数量。当加入一个无用的特征时,\( SS_{res} \) 的减少幅度不足以抵消惩罚项,调整 R-squared 会下降。

这使得调整 R-squared 成为特征选择和模型比较中更可靠的指标,尤其是在多元线性回归中。

4.4 指标选择与关系图谱

下面的 SVG 图展示了五个指标之间的逻辑关系与选择路径,帮助你根据实际场景快速决策。

回归评估指标关系与选择图谱 回归评估指标关系与选择图谱 残差 e_i = y_i - ŷ_i 平方聚合 (e_i²) 绝对值聚合 (|e_i|) 方差分解 (SS_res/SS_tot) MSE RMSE MAE R-squared 调整 R-squared 选择路径 优化/理论分析 → MSE | 业务可解释 → RMSE | 稳健评估 → MAE | 模型解释力 → R-squared | 特征选择 → 调整 R-squared

4.5 实战代码示例

以下 Python 代码展示了如何使用 scikit-learn 计算上述五个指标,并对比不同模型的表现。

import numpy as np
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

# 生成示例数据
np.random.seed(42)
X = np.random.rand(100, 3)
y = 2 * X[:, 0] + 3 * X[:, 1] - 1.5 * X[:, 2] + np.random.randn(100) * 0.5

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

# 计算指标
n = len(y_test)
p = X_test.shape[1]

mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

# 手动计算调整 R-squared
adj_r2 = 1 - ( (1 - r2) * (n - 1) ) / (n - p - 1)

print(f"MSE:  {mse:.4f}")
print(f"RMSE: {rmse:.4f}")
print(f"MAE:  {mae:.4f}")
print(f"R-squared: {r2:.4f}")
print(f"Adjusted R-squared: {adj_r2:.4f}")

4.6 在 A/B 测试中的实践要点

在 A/B 测试中,回归模型通常用于预测用户行为(如转化率、收入)或作为 CUPED(方差缩减)的辅助模型。评估这些模型时,需注意以下几点:

  • 业务对齐: 优先选择与业务指标量纲一致的指标(RMSE 或 MAE),便于向非技术团队解释。
  • 异常值处理: 如果业务指标存在极端值(如高额消费用户),建议以 MAE 为主要评估指标,避免单个异常值主导模型效果判断。
  • 模型复杂度控制: 在比较不同特征数量的模型时,必须使用调整 R-squared,而非普通 R-squared,以防止过拟合。
  • 多指标综合判断: 不要依赖单一指标。例如,一个模型可能有很高的 R-squared,但 RMSE 仍然很大,说明模型虽然解释了大部分方差,但绝对误差仍然不可接受。
📊 综合评估框架: 在实际项目中,建议采用“RMSE + MAE + 调整 R-squared”的组合。RMSE 和 MAE 的差值反映异常值影响程度,调整 R-squared 反映模型的泛化解释能力。