2. 回归问题评价:MSE、MAE、R²、RMSE

回归模型训练完了,怎么知道它好不好?

这个问题,我刚开始做机器学习时也困惑过。看着 loss 曲线往下走,心里没底。后来带我的老工程师说了一句话,我一直记着:「评价指标就是模型的照妖镜,选错了,你连模型在撒谎都看不出来。」

这一章,我们就来聊聊回归任务里最常用的四个评价函数。我会把每个指标的数学含义、直觉理解、适用场景,以及我在项目中踩过的坑,一次性讲清楚。

核心观点: 没有绝对「最好」的指标,只有「最合适」的指标。选指标之前,先问自己三个问题——你的数据有异常值吗?你的业务更关心大误差还是小误差?你需要一个无量纲的分数来对比不同模型吗?

2.1 均方误差(MSE)——最常用的「大误差惩罚者」

MSE 的定义很简单:

MSE = (1/n) * Σ(y_i - ŷ_i)²

说白了,就是每个样本的真实值和预测值之差,先平方,再求平均。

为什么用平方?

因为平方放大了大误差。一个误差为 10 的样本,平方后贡献 100;而一个误差为 1 的样本,只贡献 1。这意味着 MSE 会「盯着」那些预测得很离谱的样本。

我的经验: 在房价预测项目中,我一开始用 MSE 做损失函数,模型训练得很稳。但后来发现,模型对几套豪宅的预测误差特别大,MSE 被这几个 outlier 拉高了很多。这其实是 MSE 的特性——它天然对异常值敏感。如果你的业务场景里,大误差是不可接受的(比如医疗诊断、金融风控),MSE 是个好选择。

MSE 的缺点也很明显:

  • 量纲是平方单位,比如房价预测中,MSE 的单位是「万元²」,解释性差。
  • 对异常值过于敏感,一个坏点就能把指标拉崩。

2.2 均方根误差(RMSE)——MSE 的「可解释版本」

RMSE 就是给 MSE 开个根号:

RMSE = sqrt(MSE) = sqrt((1/n) * Σ(y_i - ŷ_i)²)

为什么要开根号?

为了让量纲回到原始单位。如果房价的单位是「万元」,MSE 是「万元²」,RMSE 就是「万元」。这样你就能直接说:「模型的平均预测误差大约是 5 万元。」

我曾经踩过的坑: 有一次做销量预测,RMSE 算出来是 1200 件。我心想,平均误差 1200 件,还行吧。后来业务方告诉我,他们的日均销量才 3000 件,1200 件的误差意味着 40% 的相对误差,完全不可接受。所以记住:RMSE 一定要结合业务量级来看,不能只看绝对值。

RMSE vs MSE:

对比维度 MSE RMSE
量纲 原始单位的平方 与原始单位一致
可解释性 较差 较好
数学性质 处处可导,优化方便 处处可导,优化方便
推荐场景 作为损失函数 作为汇报指标

2.3 平均绝对误差(MAE)——对异常值「免疫」的稳健指标

MAE 的计算更直观:

MAE = (1/n) * Σ|y_i - ŷ_i|

就是所有误差的绝对值,求平均。

MAE 和 MSE 最大的区别是什么?

MAE 对每个样本的误差「一视同仁」。一个误差为 10 的样本,贡献 10;一个误差为 1 的样本,贡献 1。它不会像 MSE 那样放大异常值的影响。

什么时候用 MAE?
  • 你的数据里有很多异常值,你不想让它们主导评价结果。
  • 你更关心「典型误差」的大小,而不是「极端误差」。
  • 你希望指标的单位和原始数据一致,方便向业务方解释。

但 MAE 也有自己的问题:

  • 在 y=0 处不可导,梯度下降时需要注意处理。
  • 对同样的数据,MAE 通常比 RMSE 小(因为平方放大了大误差),所以不要拿 MAE 和 RMSE 直接比大小。
我个人的习惯: 在模型调参阶段,我用 MSE 做损失函数(因为它可导性好,优化稳定);在最终评估阶段,我同时看 RMSE 和 MAE。如果 RMSE 远大于 MAE,说明数据里存在明显的异常值,我会回去检查数据质量。

2.4 R² 决定系数——模型「解释了多少方差」

前面三个指标都是有量纲的,R² 不一样,它是一个无量纲的分数,范围通常在 0 到 1 之间。

R² = 1 - (SS_res / SS_tot)

其中:
SS_res = Σ(y_i - ŷ_i)²  (残差平方和)
SS_tot = Σ(y_i - ȳ)²    (总平方和,ȳ 是 y 的均值)

怎么理解 R²?

想象一下,如果你没有任何特征,只能用平均值 ȳ 来预测所有样本,那你的误差就是 SS_tot。现在你用了模型,误差降到了 SS_res。R² 衡量的是:你的模型比「瞎猜平均值」好了多少?

  • R² = 1: 完美拟合,模型解释了全部方差。
  • R² = 0: 模型和猜平均值一样差。
  • R² < 0: 模型比猜平均值还差,说明模型有问题(过拟合、特征选择错误等)。
注意: R² 会随着特征数量的增加而单调递增(即使加入的是无用特征)。所以不要盲目追求高 R²。我见过有人往模型里塞了 50 个特征,R² 到了 0.99,结果在测试集上一塌糊涂。这就是典型的过拟合。建议使用调整后的 R²(Adjusted R²),它会惩罚多余的特征。

R² 的适用场景:

  • 你想比较不同量纲的模型(比如一个预测房价,一个预测温度)。
  • 你想向非技术人员解释模型效果(「我们的模型能解释 85% 的波动」)。
  • 你需要在不同数据集之间对比模型(但要注意,R² 对数据方差敏感,方差大的数据更容易得到高 R²)。

2.5 一张图看懂四个指标的关系

下面这张 SVG 图,把四个指标的核心逻辑和适用场景串在了一起。我建议你多看几遍,面试时经常被问到。

回归评价指标全景图 回归评价指标 MSE 均方误差 RMSE 均方根误差 MAE 平均绝对误差 R² 决定系数 特性 平方放大误差 对异常值敏感 量纲为平方单位 特性 量纲与原始数据一致 可解释性好 适合汇报场景 特性 对异常值鲁棒 反映典型误差 在0处不可导 特性 无量纲,范围[0,1] 解释方差比例 随特征数递增 如何选择? 有异常值 → 优先考虑 MAE 需要可解释的单位 → RMSE 需要无量纲对比 → R²

2.6 实战建议:如何组合使用这四个指标

在实际项目中,我从来不会只看一个指标。我的标准流程是这样的:

  1. 训练阶段: 用 MSE 作为损失函数,因为它处处可导,梯度下降稳定。
  2. 验证阶段: 同时监控 RMSE 和 MAE。如果 RMSE / MAE 的比值大于 1.5,说明存在异常值,需要检查数据。
  3. 最终评估: 汇报 R² 给业务方,同时给出 RMSE 的具体数值,让他们有直观感受。
  4. 模型对比: 用 R² 比较不同量纲的模型,用 RMSE 比较同量纲的模型。
一个真实案例: 我在做供应链需求预测时,一开始只用 RMSE 评估模型。结果模型在 95% 的样本上表现很好,但剩下 5% 的样本(促销日、节假日)预测误差极大。后来加上 MAE 一起看,才发现 RMSE 被那 5% 的样本拉高了 30%。最终我们改用 MAE 作为主要指标,并针对促销日单独训练了一个模型。

2.7 小结

这一章我们聊了四个回归评价指标:

  • MSE: 平方误差,放大异常值,适合做损失函数。
  • RMSE: MSE 开根号,量纲可解释,适合汇报。
  • MAE: 绝对误差,对异常值鲁棒,反映典型误差。
  • R²: 无量纲,解释方差比例,适合跨模型对比。