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=(ytrueyˉtrue)2 (ytrueypred)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=(ytrueyˉtrue)2(ypredyˉpred)2 (ytrueyˉtrue)(ypredyˉ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=n1ytrueypred
含义:预测误差的平均绝对值,直观反映预测偏差的大小。
优点

  • 线性惩罚,对异常值不如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(ytrueypred)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(ytrueypred)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 ytrueytrueypred ×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(ytrueytrueypred)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)/2ytrueypred×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=ytrueytrueypred×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。
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐