指标RSE/CORR/MAE/MSE/RMSE/MAPE/MSPE/SMAPE/WMAPE代码及对比
文章目录
-
-
- 1. RSE (Relative Squared Error)
- 2. CORR (Correlation Coefficient)
- 3. MAE (Mean Absolute Error)
- 4. MSE (Mean Squared Error)
- 5. RMSE (Root Mean Squared Error)
- 6. MAPE (Mean Absolute Percentage Error)
- 7. MSPE (Mean Squared Percentage Error)
- 8. SMAPE (Symmetric Mean Absolute Percentage Error)
- 9. WMAPE (Weighted Mean Absolute Percentage Error)
- 10. 指标对比与选择建议
-
1. RSE (Relative Squared Error)
import numpy as np
def RSE(pred, true):
return np.sqrt(np.sum((true - pred) ** 2)) / np.sqrt(np.sum((true - true.mean()) ** 2))
公式:
RSE = ∑ ( y true − y pred ) 2 ∑ ( y true − y ˉ true ) 2 \text{RSE} = \frac{\sqrt{\sum (y_{\text{true}} - y_{\text{pred}})^2}}{\sqrt{\sum (y_{\text{true}} - \bar{y}_{\text{true}})^2}} RSE=∑(ytrue−yˉtrue)2∑(ytrue−ypred)2
含义:预测误差相对于基线模型(用均值预测)的比例,值越小越好。
优点:
- 归一化指标,不受数据规模影响,便于跨数据集比较。
- 分子为预测误差,分母为基线模型误差,直观反映模型改进程度。
缺点:
- 对异常值敏感(平方运算放大误差)。
- 当真实值接近均值时(分母接近0),可能导致数值不稳定。
适用场景:
- 回归任务中评估模型相对于简单基线的性能。
- 需要跨数据集或不同尺度变量比较的场景。
2. CORR (Correlation Coefficient)
import numpy as np
def CORR(pred, true):
u = ((true - true.mean(0)) * (pred - pred.mean(0))).sum(0)
d = np.sqrt(((true - true.mean(0)) ** 2 * (pred - pred.mean(0)) ** 2).sum(0))
return (u / d).mean(-1)
公式:
CORR = ∑ ( y true − y ˉ true ) ( y pred − y ˉ pred ) ∑ ( y true − y ˉ true ) 2 ∑ ( y pred − y ˉ pred ) 2 \text{CORR} = \frac{\sum (y_{\text{true}} - \bar{y}_{\text{true}})(y_{\text{pred}} - \bar{y}_{\text{pred}})}{\sqrt{\sum (y_{\text{true}} - \bar{y}_{\text{true}})^2 \sum (y_{\text{pred}} - \bar{y}_{\text{pred}})^2}} CORR=∑(ytrue−yˉtrue)2∑(ypred−yˉpred)2∑(ytrue−yˉtrue)(ypred−yˉpred)
含义:预测值与真实值的皮尔逊相关系数,衡量线性相关性,范围[-1, 1],绝对值越接近1越好。
优点:
- 不依赖量纲,适用于比较不同单位的变量。
- 关注预测值与真实值的变化趋势(方向和幅度)。
缺点:
- 仅反映线性关系,无法捕捉非线性关联。
- 对异常值敏感,可能扭曲整体相关性。
适用场景:
- 时序预测(如股票价格、温度变化)中评估趋势一致性。
- 特征选择时衡量特征与目标的相关性。
3. MAE (Mean Absolute Error)
import numpy as np
def MAE(pred, true):
return np.mean(np.abs(pred - true))
公式:
MAE = 1 n ∑ ∣ y true − y pred ∣ \text{MAE} = \frac{1}{n} \sum |y_{\text{true}} - y_{\text{pred}}| MAE=n1∑∣ytrue−ypred∣
含义:预测误差的平均绝对值,直观反映预测偏差的大小。
优点:
- 线性惩罚,对异常值不如MSE敏感。
- 误差单位与原始数据一致,易于解释(如“平均预测误差为3元”)。
缺点:
- 梯度在零点不连续,优化时可能不稳定。
- 同等对待所有误差,忽略大误差的潜在影响。
适用场景:
- 异常值较多的数据(如金融交易、传感器数据)。
- 误差绝对值具有实际业务意义的场景(如预测人数、销售额)。
4. MSE (Mean Squared Error)
import numpy as np
def MSE(pred, true):
return np.mean((pred - true) ** 2)
公式:
MSE = 1 n ∑ ( y true − y pred ) 2 \text{MSE} = \frac{1}{n} \sum (y_{\text{true}} - y_{\text{pred}})^2 MSE=n1∑(ytrue−ypred)2
含义:预测误差的平方平均,强调大误差的影响。
优点:
- 光滑梯度,优化稳定性好(如在梯度下降中)。
- 数学性质优良,常用于理论分析。
缺点:
- 对异常值极度敏感(平方放大误差)。
- 误差单位与原始数据不一致(如原始单位为“米”,MSE单位为“平方米”)。
适用场景:
- 异常值较少且需要强调大误差的场景(如图像重构、回归任务)。
- 基于梯度优化的模型(如神经网络)的损失函数。
5. RMSE (Root Mean Squared Error)
import numpy as np
def MSE(pred, true):
return np.mean((pred - true) ** 2)
def RMSE(pred, true):
return np.sqrt(MSE(pred, true))
公式:
RMSE = MSE = 1 n ∑ ( y true − y pred ) 2 \text{RMSE} = \sqrt{\text{MSE}} = \sqrt{\frac{1}{n} \sum (y_{\text{true}} - y_{\text{pred}})^2} RMSE=MSE=n1∑(ytrue−ypred)2
含义:MSE的平方根,恢复原始数据单位,平衡大误差的影响。
优点:
- 保持MSE对大误差的敏感性,同时单位与原始数据一致。
- 常用于Kaggle等竞赛的评估指标。
缺点:
- 仍对异常值敏感(继承MSE的特性)。
适用场景:
- 需要与原始数据单位保持一致的误差评估。
- 希望平衡大误差和小误差的影响(相比MAE更关注大误差)。
6. MAPE (Mean Absolute Percentage Error)
import numpy as np
def MAPE(pred, true):
return np.mean(np.abs((pred - true) / true))
公式:
MAPE = 1 n ∑ ∣ y true − y pred y true ∣ × 100 % \text{MAPE} = \frac{1}{n} \sum \left| \frac{y_{\text{true}} - y_{\text{pred}}}{y_{\text{true}}} \right| \times 100\% MAPE=n1∑
ytrueytrue−ypred
×100%
含义:预测误差的百分比平均,直观反映相对误差。
优点:
- 无量纲,便于跨不同量级数据比较。
- 百分比形式易于业务理解(如“平均预测误差为10%”)。
缺点:
- 当真实值接近0时,分母趋近于0,导致指标不稳定或无穷大。
- 对低估(预测值<真实值)的惩罚高于高估(因百分比不对称)。
适用场景:
- 真实值远离0且波动较大的数据(如销售额、人口数量)。
- 需要用百分比表达误差的业务场景。
7. MSPE (Mean Squared Percentage Error)
import numpy as np
def MSPE(pred, true):
return np.mean(np.square((pred - true) / true))
公式:
MSPE = 1 n ∑ ( y true − y pred y true ) 2 \text{MSPE} = \frac{1}{n} \sum \left( \frac{y_{\text{true}} - y_{\text{pred}}}{y_{\text{true}}} \right)^2 MSPE=n1∑(ytrueytrue−ypred)2
含义:预测误差的百分比平方平均,进一步放大相对大误差的影响。
优点:
- 强调相对大误差的惩罚,适合需要严格控制大偏差的场景。
缺点:
- 对异常值极其敏感,可能因少数样本导致指标失真。
- 百分比平方后单位难以直观解释。
适用场景:
- 对大误差容忍度极低的场景(如医疗预测、金融风险评估)。
8. SMAPE (Symmetric Mean Absolute Percentage Error)
import numpy as np
def SMAPE(pred, true):
# 避免分母为零(添加极小值 epsilon)
epsilon = 1e-8
denominator = np.abs(true) + np.abs(pred) + epsilon
diff = np.abs(true - pred) / denominator * 200.0 # 乘以200因分母有0.5
return np.mean(diff)
公式:
SMAPE = 1 n ∑ ∣ y true − y pred ∣ ( ∣ y true ∣ + ∣ y pred ∣ ) / 2 × 100 % \text{SMAPE} = \frac{1}{n} \sum \frac{|y_{\text{true}} - y_{\text{pred}}|}{( |y_{\text{true}}| + |y_{\text{pred}}| ) / 2} \times 100\% SMAPE=n1∑(∣ytrue∣+∣ypred∣)/2∣ytrue−ypred∣×100%
含义:对称平均绝对百分比误差,通过对称分母解决MAPE的不对称问题。
优点:
- 分母为真实值与预测值的均值,缓解低估/高估的惩罚差异。
- 当真实值为0时,若预测值也为0则误差为0(需特殊处理真实值为0的情况)。
缺点: - 计算复杂度略高于MAPE。
- 仍可能受接近0的真实值或预测值影响。
适用场景:预测值与真实值量级相近的场景、需要对称惩罚的业务(如库存预测)。
9. WMAPE (Weighted Mean Absolute Percentage Error)
def WMAPE(pred, true):
# 避免分母为零
epsilon = 1e-8
denominator = np.sum(np.abs(true)) + epsilon
return np.sum(np.abs(true - pred)) / denominator * 100.0
公式:
WMAPE = ∑ ∣ y true − y pred ∣ ∑ ∣ y true ∣ × 100 % \text{WMAPE} = \frac{\sum |y_{\text{true}} - y_{\text{pred}}|}{\sum |y_{\text{true}}|} \times 100\% WMAPE=∑∣ytrue∣∑∣ytrue−ypred∣×100%
含义:加权平均绝对百分比误差,以真实值为权重,反映整体相对误差。
优点:
- 避免因个别小值样本导致指标失真(如真实值小但误差比例大的样本权重较低)。
- 计算简单,适合大规模数据快速评估。
缺点: - 对真实值为0的样本敏感(需过滤或特殊处理)。
- 无法反映单个样本的误差比例(聚焦整体)。
适用场景:销售预测(按真实销售额加权)、用户量预测(按历史用户数加权)。
10. 指标对比与选择建议
| 指标 | 核心特性 | 对异常值敏感 | 单位一致性 | 适用场景举例 |
|---|---|---|---|---|
| RSE | 归一化基线对比 | 高 | 是(比例) | 模型跨数据集性能排名 |
| CORR | 线性相关性度量 | 中 | 否(无量纲) | 时序趋势分析、特征筛选 |
| MAE | 绝对误差,稳健 | 低 | 是 | 含噪声的传感器数据、误差绝对值报告 |
| MSE/RMSE | 平方误差,强调大误差 | 高 | MSE否/RMSE是 | 图像重建、神经网络损失函数 |
| MAPE | 相对误差,百分比 | 中(受小值影响) | 否(百分比) | 销售额预测、误差百分比汇报 |
| SMAPE | 对称相对误差,缓解分母问题 | 中 | 否 | 库存预测、预测值与真实值接近的场景 |
| WMAPE | 加权相对误差,整体度量 | 低(加权平均) | 否 | 大规模数据整体误差评估、去极值场景 |
| MSPE | 平方相对误差,强惩罚大误差 | 极高 | 否 | 高风险场景(如医疗、金融) |
使用建议:
- 业务解释优先:选MAE、RMSE(绝对误差)或MAPE、SMAPE(相对误差)。
- 异常值处理:含异常值时用MAE/SMAPE,否则用MSE/RMSE/MSPE。
- 对称惩罚需求:选SMAPE而非MAPE(如预测值与真实值可能双向偏离时)。
- 大规模数据整体评估:用WMAPE(加权平均降低极值影响)。
- 评估模型趋势预测能力:结合CORR。
更多推荐

所有评论(0)