趋近智
当推荐系统的目标是预测用户可能给某个物品打出的具体分数时,我们需要能够直接衡量这些预测准确度的指标。这类需求在向用户展示预测评分的系统中非常普遍,例如:“根据您的历史记录,您可能会给这部电影打 4.5 分。”在这种情况下,需要使用预测准确性指标,来评估模型预测评分与用户实际评分之间的接近程度。
在这一任务中,最常用且最基础的两个指标是平均绝对误差 (MAE) 和均方根误差 (RMSE)。它们都能量化 (quantization)一组预测中的平均误差,但计算方式略有不同,因此在解释和敏感度上也有所区别。
平均绝对误差是最直观的误差指标。它衡量一组预测中误差的平均大小,而不考虑误差的方向。它是测试样本中预测值与实际观察值之间绝对差值的平均值,其中每个样本的差值权重 (weight)相同。
MAE 的公式为:
其中:
该指标的含义非常直接。MAE 为 0.5 意味着平均而言,模型的预测偏差为 0.5 分。这使得它成为一个非常容易向业务相关方传达的指标。
让我们看看如何在 Python 中进行计算。假设你有一个包含实际评分和预测评分的 pandas DataFrame:
import pandas as pd
import numpy as np
# 样本数据
data = {
'user_id': [1, 1, 2, 2, 3],
'item_id': [101, 102, 101, 103, 104],
'actual_rating': [4, 3, 5, 2, 4],
'predicted_rating': [3.8, 3.5, 4.5, 2.8, 3.9]
}
df = pd.DataFrame(data)
# 从零开始计算 MAE
df['absolute_error'] = abs(df['actual_rating'] - df['predicted_rating'])
mae = df['absolute_error'].mean()
print(f"计算得出的 MAE: {mae:.4f}")
# 为了方便使用 scikit-learn
from sklearn.metrics import mean_absolute_error
mae_sklearn = mean_absolute_error(df['actual_rating'], df['predicted_rating'])
print(f"Scikit-learn MAE: {mae_sklearn:.4f}")
两种方法的结果是一样的,但通常推荐使用 scikit-learn 等成熟的库,因为它们在处理大型数据集时更不容易出错且效率更高。
均方根误差是另一个广泛用于评估评分预测准确性的指标。MAE 是对绝对误差取平均值,而 RMSE 采取了不同的方法:它先对误差进行平方,然后再取平均值,最后对结果开平方。
RMSE 的公式为:
计算步骤如下:
以下是对应的 Python 实现:
# 继续使用之前的 DataFrame
# 从零开始计算 RMSE
df['squared_error'] = (df['actual_rating'] - df['predicted_rating'])**2
mse = df['squared_error'].mean()
rmse = np.sqrt(mse)
print(f"计算得出的 RMSE: {rmse:.4f}")
# 使用 scikit-learn
from sklearn.metrics import mean_squared_error
# 注意:sklearn 提供的是 mean_squared_error,所以我们需要对其开平方
rmse_sklearn = np.sqrt(mean_squared_error(df['actual_rating'], df['predicted_rating']))
print(f"Scikit-learn RMSE: {rmse_sklearn:.4f}")
MAE 和 RMSE 之间的主要区别在于它们处理不同幅度误差的方式。由于 RMSE 对误差进行了平方处理,它对大预测误差的惩罚比 MAE 更严厉。对于同一组预测,RMSE 的值永远大于或等于 MAE。两者之间的差距越大,说明样本中个体误差的波动越大。如果差距很大,通常表明模型产生了少数非常大的误差。
让我们通过一个例子来说明。考虑模型预测的两种情形。在情形 A 中,误差较小且平稳。在情形 B 中,大多数误差较小,但存在一个明显的异常值。
[4, 5, 3],预测值 [3.5, 4.5, 3.5]。误差为 [-0.5, -0.5, 0.5]。[4, 5, 3],预测值 [3.5, 4.5, 1.0]。误差为 [-0.5, -0.5, -2.0]。对于情形 A:
对于情形 B:
可以注意到,虽然情形 B 中单个大误差使 MAE 翻了一倍(从 0.5 增加到 1.0),但它使 RMSE 增加的幅度更大(从 0.5 增加到 1.22)。下表直观地展示了这种敏感性。
在情形 B 中引入单个较大的预测误差,会导致 RMSE 比起 MAE 出现更剧烈的增长,凸显了其对异常值的敏感性。
MAE 和 RMSE 之间的选择取决于你的应用对大误差的容忍度。
在许多实际场景中,RMSE 是评估评分预测模型的默认指标,因为大误差会严重损害用户体验。不过,同时报告这两个指标通常是更好的做法,因为它们之间的差异能反映出模型误差分布的有用信息。
虽然 MAE 和 RMSE 是评估预测准确性的基石,但请记住它们并不是全部。许多推荐系统并不是根据它们预测评分的能力来衡量的,而是根据它们对物品进行排序的能力。为此,我们需要另一类指标,我们将在接下来的内容中进行讲解。
这部分内容有帮助吗?
sklearn.metrics模块的官方文档,包含mean_absolute_error和mean_squared_error的定义及实现细节。© 2026 ApX Machine LearningAI伦理与透明度•