Mean Relative Error

Mean Relative Error#

MRE(Mean Relative Error,平均相对误差)是评估回归模型性能的指标。它表示预测值与真实值之间差异的平均值,相对于真实值的比例。其数学表达式如下:

\[ \text{MRE} = \frac{1}{n} \sum_{i=1}^{n} \left| \frac{y_i - \hat{y}_i}{y_i} \right| \]

其中:

  • \(n\) 是样本的数量。

  • \(y_i\) 是第 \(i\) 个样本的真实值。

  • \(\hat{y}_i\) 是第 \(i\) 个样本的预测值。

  • \(\frac{y_i - \hat{y}_i}{y_i}\) 是第 \(i\) 个样本的相对误差。

这个公式计算了所有样本的相对误差的绝对值的平均值,从而得到整体的平均相对误差。

import numpy as np

def mean_relative_error(y_true: np.ndarray | list, y_pred: np.ndarray | list) -> float:
    """
    Calculate the Mean Relative Error (MRE) between true values and predicted values.

    Parameters:
    y_true (np.ndarray | list): Array or list of true values.
    y_pred (np.ndarray | list): Array or list of predicted values.

    Returns:
    float: The mean relative error.
    """
    # Convert inputs to numpy arrays if they are not already
    y_true = np.asarray(y_true, dtype=np.float64)
    y_pred = np.asarray(y_pred, dtype=np.float64)
    
    # Calculate the absolute differences
    d = np.abs(y_true - y_pred)
    
    # Avoid division by zero by adding a small epsilon value
    epsilon = np.finfo(float).eps
    denominator = np.abs(y_true) + epsilon
    
    # Calculate the relative errors
    relative_error = d / denominator
    
    # Return the mean of the relative errors
    return np.mean(relative_error)