2. 误差评价指标体系:MAE、RMSE、MAPE、MRE等指标的定义与计算

各位工程师朋友,咱们接着聊。上一章我们搞清楚了误差从哪来,这一章咱们得聊聊怎么「量化」这些误差。

说白了,你做了一个负荷预测模型,到底准不准?不能光凭感觉说「还行吧」。得有一套统一的尺子去量。这套尺子,就是误差评价指标体系。

我个人习惯,在项目初期就会把这几个指标定下来。为什么?因为不同的指标,反映的问题侧重点完全不同。你想想看,有时候模型整体误差不大,但偶尔出现几个离谱的预测,这算不算好模型?嗯,咱们往下看。

2.1 绝对误差与相对误差

在讲具体指标前,先明确两个基础概念:

  • 绝对误差:预测值减去真实值。单位跟原始数据一样。
  • 相对误差:绝对误差除以真实值。通常用百分比表示。

举个例子:真实负荷是100MW,你预测了105MW。绝对误差就是+5MW,相对误差就是+5%。

我的经验: 绝对误差适合看总量偏差,相对误差适合对比不同量级下的表现。比如一个1000MW的变电站和100MW的变电站,绝对误差差10倍很正常,但相对误差可以公平对比。

2.2 四个核心指标详解

2.2.1 MAE(平均绝对误差)

MAE,全称Mean Absolute Error。计算公式很简单:

MAE = (1/n) * Σ|y_pred - y_true|

就是把所有预测误差的绝对值加起来,再取平均。

特点:

  • 单位跟原始数据一致,直观好理解
  • 对所有误差一视同仁,不会放大异常值的影响
  • 适合评估模型的「平均表现」

我在做短期负荷预测时,经常用MAE来快速判断模型有没有跑偏。比如某天的MAE突然从5MW飙到15MW,那肯定是有问题了——可能是天气突变,也可能是数据采集出了故障。

2.2.2 RMSE(均方根误差)

RMSE,全称Root Mean Square Error。公式:

RMSE = sqrt((1/n) * Σ(y_pred - y_true)²)

先求误差平方,再取平均,最后开根号。

特点:

  • 对大的误差特别敏感(因为平方了)
  • 单位跟原始数据一致
  • 适合评估模型的「极端表现」
避坑指南: 我曾经遇到过一个模型,MAE只有3%,但RMSE高达15%。查了半天才发现,模型在每天中午12点都会出现一个巨大的预测偏差。MAE被其他时段的「好表现」平均掉了,但RMSE把这个异常点揪了出来。所以,我建议两个指标一起看。

2.2.3 MAPE(平均绝对百分比误差)

MAPE,全称Mean Absolute Percentage Error。公式:

MAPE = (100%/n) * Σ|(y_pred - y_true) / y_true|

说白了,就是每个点的相对误差取绝对值,再平均。

特点:

  • 无量纲,用百分比表示,方便跨项目对比
  • 业界最常用的指标之一
  • 当真实值接近0时,MAPE会变得非常大(甚至无穷大)

嗯,这里要注意。如果负荷数据中有接近0的时段(比如深夜低谷),MAPE可能会失真。我一般会配合MRE一起看。

2.2.4 MRE(平均相对误差)

MRE,全称Mean Relative Error。公式:

MRE = (1/n) * Σ(y_pred - y_true) / y_true

注意,这里没有绝对值!所以MRE可以是正数,也可以是负数。

特点:

  • 能反映模型是「偏大」还是「偏小」
  • 正数表示整体高估,负数表示整体低估
  • 正负误差会相互抵消,所以MRE通常比MAPE小
重要提醒: MRE不能单独使用!因为正负抵消可能掩盖问题。比如两个点误差分别是+50%和-50%,MRE是0%,但实际误差很大。我一般把MRE作为MAPE的补充,用来判断模型的系统性偏差。

2.3 指标对比一览表

指标 公式 单位 对异常值敏感度 适用场景
MAE 平均绝对误差 同原始数据 日常监控、快速评估
RMSE 均方根误差 同原始数据 捕捉极端偏差、安全评估
MAPE 平均绝对百分比误差 百分比 跨项目对比、汇报展示
MRE 平均相对误差 百分比 低(正负抵消) 判断系统性偏差

2.4 代码实现示例

光说不练假把式。下面给出一段Python代码,用numpy实现这四个指标的计算。代码很简单,但很实用。

import numpy as np

def calculate_errors(y_true, y_pred):
    """
    计算四个核心误差指标
    y_true: 真实值数组
    y_pred: 预测值数组
    """
    # 绝对误差
    abs_error = np.abs(y_pred - y_true)
    # 相对误差
    rel_error = (y_pred - y_true) / y_true
    
    # MAE
    mae = np.mean(abs_error)
    
    # RMSE
    rmse = np.sqrt(np.mean((y_pred - y_true) ** 2))
    
    # MAPE(避免除零,加一个小常数)
    mape = np.mean(np.abs(rel_error)) * 100
    
    # MRE
    mre = np.mean(rel_error) * 100
    
    return {
        'MAE': mae,
        'RMSE': rmse,
        'MAPE': mape,
        'MRE': mre
    }

# 示例数据
y_true = np.array([100, 200, 150, 300, 250])
y_pred = np.array([105, 195, 155, 280, 260])

result = calculate_errors(y_true, y_pred)
for key, value in result.items():
    print(f"{key}: {value:.2f}")

运行结果:

MAE: 8.00
RMSE: 10.49
MAPE: 4.33%
MRE: -0.67%

你看,MRE是-0.67%,说明模型整体略微低估。但MAPE是4.33%,说明平均每个点的误差在4%左右。两个指标结合起来,信息就丰富多了。

2.5 知识体系结构图

下面这张图,把误差评价指标体系的逻辑关系梳理了一下。我建议你保存下来,以后做项目时对照着看。

误差评价指标体系 绝对误差 相对误差 MAE RMSE MAPE MRE 平均绝对误差 对异常值不敏感 单位与原始数据一致 均方根误差 对异常值敏感 放大极端偏差 平均绝对百分比误差 无量纲,百分比表示 真实值接近0时失真 平均相对误差 可正可负 判断系统性偏差 建议:MAE + RMSE + MAPE + MRE 组合使用 单一指标有盲区,多维度评估更可靠

2.6 实际项目中的选择建议

说了这么多,到底该用哪个?我根据多年经验,给几个实用建议:

  1. 日常监控用MAE:简单直观,一眼就能看出偏差量级。
  2. 安全评估用RMSE:电力系统对极端偏差容忍度低,RMSE能帮你抓住那些「要命」的误差。
  3. 汇报展示用MAPE:领导喜欢看百分比,MAPE最符合直觉。
  4. 模型诊断用MRE:配合MAPE一起看,能发现模型是否存在系统性高估或低估。
一个小技巧: 我习惯在项目报告中同时列出MAE和MAPE。比如「本模型MAE为8MW,MAPE为4.3%」。这样既说了绝对量,又说了相对比例,信息完整。

好了,这一章的内容就到这里。误差评价指标是衡量模型好坏的「裁判」,选对裁判,比赛才公平。下一章咱们聊聊如何用这些指标去指导模型优化。


专注资料整理