sklearn.metrics.mean_absolute_percentage_error
mean_absolute_percentage_error
(MAPE,平均绝对百分比误差)是 sklearn.metrics
提供的一个 回归模型评估指标,用于计算 预测值相对于真实值的平均绝对百分比误差。
1. mean_absolute_percentage_error
计算公式
M
A
P
E
=
1
n
∑
i
=
1
n
∣
y
i
−
y
^
i
y
i
∣
×
100
%
MAPE = \frac{1}{n} \sum_{i=1}^{n} \left| \frac{y_i - \hat{y}_i}{y_i} \right| \times 100\%
MAPE=n1i=1∑n
yiyi−y^i
×100%
其中:
- n n n 是样本数
- y i y_i yi 是真实值
- y ^ i \hat{y}_i y^i 是预测值
- ∣ y i − y ^ i y i ∣ \left| \frac{y_i - \hat{y}_i}{y_i} \right| yiyi−y^i 是预测误差的相对百分比
解释
- MAPE 衡量误差相对于真实值的比例,以百分比形式表示。
- MAPE 越小,表示模型预测误差越小。
- 如果某个 y i y_i yi 真实值为 0,则 MAPE 无法计算,因此适用于所有 y i ≠ 0 y_i \neq 0 yi=0 的情况。
2. mean_absolute_percentage_error
代码示例
from sklearn.metrics import mean_absolute_percentage_error
# 真实值和预测值
y_true = [100, 200, 300, 400]
y_pred = [90, 210, 310, 390]
# 计算 MAPE
mape = mean_absolute_percentage_error(y_true, y_pred)
print(f"MAPE: {mape:.2%}")
输出
MAPE: 3.75%
解释
- 计算每个样本的误差:
- ∣ 100 − 90 100 ∣ = 0.10 \left| \frac{100 - 90}{100} \right| = 0.10 100100−90 =0.10(10%)
- ∣ 200 − 210 200 ∣ = 0.05 \left| \frac{200 - 210}{200} \right| = 0.05 200200−210 =0.05(5%)
- ∣ 300 − 310 300 ∣ = 0.0333 \left| \frac{300 - 310}{300} \right| = 0.0333 300300−310 =0.0333(3.33%)
- ∣ 400 − 390 400 ∣ = 0.025 \left| \frac{400 - 390}{400} \right| = 0.025 400400−390 =0.025(2.5%)
- 计算平均值:
M A P E = 10 % + 5 % + 3.33 % + 2.5 % 4 = 3.75 % MAPE = \frac{10\% + 5\% + 3.33\% + 2.5\%}{4} = 3.75\% MAPE=410%+5%+3.33%+2.5%=3.75%
3. mean_absolute_percentage_error
的参数
mean_absolute_percentage_error(y_true, y_pred, sample_weight=None)
参数 | 说明 |
---|---|
y_true | 真实值 |
y_pred | 预测值 |
sample_weight | 样本权重 |
4. mean_absolute_percentage_error
适用场景
- 回归任务(如销售预测、市场趋势预测)
- 衡量预测误差的相对大小(适用于不同尺度的变量)
- 适用于所有真实值 y i ≠ 0 y_i \neq 0 yi=0,否则可能会导致计算问题
5. mean_absolute_percentage_error
vs. 其他误差指标
指标 | 计算公式 | 适用场景 |
---|---|---|
mean_absolute_error (MAE) | 1 n ∑ ∣ y i − y ^ i ∣ \frac{1}{n} \sum |y_i - \hat{y}_i| n1∑∣yi−y^i∣ | 衡量误差的绝对大小,对离群值不敏感 |
mean_squared_error (MSE) | 1 n ∑ ( y i − y ^ i ) 2 \frac{1}{n} \sum (y_i - \hat{y}_i)^2 n1∑(yi−y^i)2 | 强调较大误差,对离群值敏感 |
root_mean_squared_error (RMSE) | M S E \sqrt{MSE} MSE | 与 MSE 相似,但单位与目标变量相同 |
r2_score | 解释方差比例 | 衡量模型的拟合程度 |
mean_absolute_percentage_error (MAPE) | 1 n ∑ ∣ y i − y ^ i y i ∣ \frac{1}{n} \sum \left| \frac{y_i - \hat{y}_i}{y_i} \right| n1∑ yiyi−y^i | 衡量误差相对于真实值的比例,不适用于真实值接近 0 的情况 |
示例:
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
mae = mean_absolute_error(y_true, y_pred)
mse = mean_squared_error(y_true, y_pred)
rmse = mean_squared_error(y_true, y_pred, squared=False)
r2 = r2_score(y_true, y_pred)
print(f"MAE: {mae:.2f}")
print(f"MSE: {mse:.2f}")
print(f"RMSE: {rmse:.2f}")
print(f"R²: {r2:.2f}")
6. 结论
mean_absolute_percentage_error
计算 预测值相对于真实值的平均绝对百分比误差,适用于 回归任务。- 适用于 衡量误差的相对大小,但 不适用于真实值可能为 0 的情况。
- 可与 MAE、MSE、RMSE、R² 结合使用,以更全面评估模型。