目前推荐系统中常用的评估方法可以分为两大类:
离线评估基本思想是,将数据集划分为训练集和测试集,利用训练集得到一个较优的模型,用测试集进行模型评估。按照训练集和测试集的划分方式,主要分为3种:
HoldOut 检验
它将样本按照 70% - 30% 的比例进行划分,70% 的样本用于训练,30% 的样本用于评估模型优劣。
缺点:数据集的划分直接影响评估结果,存在较大的随机性。
K-fold 交叉检验
它首先将全部样本等比划分为 k 个互不相关的子集,然后依次遍历这 k 个子集,每次都把当前子集当作测试集,其余 k-1 个子集作为训练集。最后将 k 次的结果的平均值作为最终评估指标。
自助法
当模型规模比较小时,无论是 HoldOut 检验还是 K-fold 交叉检验,都会使得训练集进一步缩小,可能会影响训练效果。自助法可以在一定程度上解决这个问题。
自助法基本思想是,对于总数为 n 的样本集合,进行 n 次有放回的随机抽样,得到大小为 n 的训练集。在 n 次采样过程中,有的样本会被重复采样,有的没有被抽到过,将没有被抽到过的样本作为测试集进行模型评估。
离线评估方法的优点:
离线评估方法的缺点:
在线评估方法
在线评估方法中最常用的就是 A/B 测试,也称为“分流测试”或“分桶测试”。
A/B 测试分层和分流机制
层与层之间的流量“正交”:层与层之间的独立实验的流量是正交的,即实验中每组的流量穿过该层后,都会被再次随机打散,且均匀分布在下层实验的每个实验组中。
同层之间的流量“互斥”:
(1). 如果同层之间进行多组 A/B 测试,那么不同测试之间的流量是不重叠的,即“互斥的”。
(2). 一组 A/B 测试中实验组和对照组的流量是不重叠的,是“互斥”的。
分类准确率(Accuracy)是指分类正确的样本占样本总数的比例:
A c c u r a c y = N c o r r e c t N t o t a l Accuracy=\frac{N_{correct}}{N_{total}} Accuracy=NtotalNcorrect
准确率是比较直观的评价指标,具有较强的可解释性,但当存在样本不均衡问题是,占比大的类别对准确率有较大的影响。
为了帮助我们理解,我们简单回顾以下混淆矩阵:
真实情况 预测为正 预测为负
正样本 TP FN
负样本 FP TN
在推荐系统中,可以表示为:
用户喜好 系统推荐 系统未推荐
喜 欢 TP FN
不喜欢 FP TN
精确率(Precision)表示被预测为正样本的样本中,有多少比例是真的正样本。
P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP
在推荐系统中,通常没有一个固定的阈值把预测结果直接判定为正样本或负样本,而是采用 Top-N 排序结果的精确率(Precision@N)来衡量模型的性能。即它认为模型排序的 Top-N 结果就是模型判定的正样本,然后计算 Precision@N。
召回率(Recall)是预测正确的正样本个数占真正的正样本个数的比例。
R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP
同理,在推荐系统中,我们也经常采用 Recall@N 来评估模型性能。
由 Precision 和 Recall 的定义我们可以看出,精确率和召回率是相互矛盾的指标。为了提高准确率,分类器更加谨慎,从而漏掉一些正样本,导致召回率降低。
为了综合反映 Precision 和 Recall 的结果,我们使用 F1-score,它是精确率和召回率的调和平均值。
F 1 − s c o r e = 2 ⋅ P r e c i s i o n ⋅ R e c a l l P r e c i s i o n + R e c a l l F1-score=\frac{2 \cdot Precision \cdot Recall}{Precision + Recall} F1−score=Precision+Recall2⋅Precision⋅Recall
M A E = 1 m ∑ i = 1 m ∣ y i − y ^ i ∣ MAE=\frac{1}{m} \sum_{i=1}^m \vert y_i-\hat{y}_i \vert MAE=m1i=1∑m∣yi−y^i∣
m m m 是样本个数, y i , y ^ i y_i, \hat{y}_i yi,y^i 分别是真实值和预测值。
M S E = 1 m ∑ i = 1 m ( y i − y ^ i ) 2 MSE=\frac{1}{m} \sum_{i=1}^m (y_i -\hat{y}_i)^2 MSE=m1i=1∑m(yi−y^i)2
R M S E = 1 m ∑ i = 1 m ( y i − y ^ i ) 2 RMSE= \sqrt{\frac{1}{m}\sum_{i=1}^m(y_i -\hat{y}_i)^2} RMSE=m1i=1∑m(yi−y^i)2
一般情况下,RMSE能很好的反映回归模型预测值与真实值的偏离程度。但如果存在个别偏差程度非常大的离群点,会使RMSE指标变得很差。
M A P E = ∑ i = 1 m ∣ y i − y ^ i y i ∣ ⋅ 100 m MAPE=\sum_{i=1}^m\vert \frac{y_i -\hat{y}_i}{y_i} \vert \cdot \frac{100}{m} MAPE=i=1∑m∣yiyi−y^i∣⋅m100
为了综合衡量一个模型的好坏,不仅要看不同 Top-N 情况下的 Precision@N 和 Recall@N,最好绘制出模型的 Precision-Recall 曲线。
P-R 曲线的横轴是召回率,纵轴是精确率。在绘制好 P-R 曲线后,计算曲线下的面积(Aera Under Curve,AUC)能够量化 P-R 曲线的优劣。AUC 越大,排序模型的性能越好。
ROC 曲线的横轴为 FTR(False Positive Rate,假阳性率),纵轴为 TPR(True Positive Rate,真阳性率).
F P R = F P T N + F P FPR=\frac{FP}{TN+FP} FPR=TN+FPFP
T P R = T P T P + F N TPR=\frac{TP}{TP+FN} TPR=TP+FNTP
同理,我们也可以根据 ROC 曲线的 AUC 来评估模型。
mAP(mean Average Precision) 是对 AP(Average Precision)的再次平均。我们给出一个例子。
推荐序列 N=1 N=2 N=3 N=4 N=5 N=6
真实标签 1 0 0 1 1 1
其中,1 表示正样本,0 表示负样本。
AP 的计算只取正样本出的 Precision 进行平均。
A P = ( P r e c i s i o n @ 1 + . . . + P r e c i s i o n @ N ) / N AP= (Precision@1 + ... +Precision@N) / N AP=(Precision@1+...+Precision@N)/N
对于上面的例子,我们可以得到,AP = (1 * 1 / 1 + 0 * 1 / 2 + 0 * 1 / 3 + 1 * 2 / 4 + 1 * 3 / 5 + 1 * 4 / 6)/ 4 = 0.6917
我们对每个用户都计算出一个 AP 值,再对所有的用户的 AP 值进行平均,就得到了 mAP。
覆盖率指标是指算法向用户推荐的商品能覆盖全部商品的比例。覆盖率尤其适用于那些需要为用户找出所有感兴趣的商品的系统。