2. 误差评价指标体系:MAE、RMSE、MAPE、MRE等指标的定义与计算
各位工程师朋友,咱们接着聊。上一章我们搞清楚了误差从哪来,这一章咱们得聊聊怎么「量化」这些误差。
说白了,你做了一个负荷预测模型,到底准不准?不能光凭感觉说「还行吧」。得有一套统一的尺子去量。这套尺子,就是误差评价指标体系。
我个人习惯,在项目初期就会把这几个指标定下来。为什么?因为不同的指标,反映的问题侧重点完全不同。你想想看,有时候模型整体误差不大,但偶尔出现几个离谱的预测,这算不算好模型?嗯,咱们往下看。
2.1 绝对误差与相对误差
在讲具体指标前,先明确两个基础概念:
- 绝对误差:预测值减去真实值。单位跟原始数据一样。
- 相对误差:绝对误差除以真实值。通常用百分比表示。
举个例子:真实负荷是100MW,你预测了105MW。绝对误差就是+5MW,相对误差就是+5%。
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)²)
先求误差平方,再取平均,最后开根号。
特点:
- 对大的误差特别敏感(因为平方了)
- 单位跟原始数据一致
- 适合评估模型的「极端表现」
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小
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 知识体系结构图
下面这张图,把误差评价指标体系的逻辑关系梳理了一下。我建议你保存下来,以后做项目时对照着看。
2.6 实际项目中的选择建议
说了这么多,到底该用哪个?我根据多年经验,给几个实用建议:
- 日常监控用MAE:简单直观,一眼就能看出偏差量级。
- 安全评估用RMSE:电力系统对极端偏差容忍度低,RMSE能帮你抓住那些「要命」的误差。
- 汇报展示用MAPE:领导喜欢看百分比,MAPE最符合直觉。
- 模型诊断用MRE:配合MAPE一起看,能发现模型是否存在系统性高估或低估。
好了,这一章的内容就到这里。误差评价指标是衡量模型好坏的「裁判」,选对裁判,比赛才公平。下一章咱们聊聊如何用这些指标去指导模型优化。