“离线评估”就是将模型部署于线上环境之前,在离线环境下进行的评估。由于不用部署到生产环境,“离线评估”没有线上部署的工程风险,也不会浪费宝贵的线上流量资源,而且具有测试时间短,可多组并行,以及能够利用丰富的线下计算资源等诸多优点。
离线评估的基本原理是在离线环境下,将数据集分为“训练集”和“测试集”两部分,“训练集”用来训练模型,“测试集”用于评估模型。但是如何划分测试集和训练集,其实这里面有很多学问。常用的离线评估方法主要有五种,分别是:
为了比较模型效果的好坏,还得用一些指标进行衡量
准确率是分类任务中非常直观的评价指标,可解释性也很强,但也存在明显的缺陷,就是当不同类别的样本比例非常不均衡的时候,占比大的类别往往成为影响准确率的最主要因素。比如,负样本占 99%,那么分类器把所有样本都预测为负样本也可以获得 99% 的准确率。
精确率与召回率
精确率和召回率其实是矛盾统一的一对指标。
F1-score 的定义是精确率和召回率的调和平均值。F1-score 的值越高,就证明模型在精确率和召回率的整体表现上越好。
F 1 = 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={2 \cdot Precision \cdot Recall \over { Precision+ Recall}} F1=Precision+Recall2⋅Precision⋅Recall
对数损失
在一个二分类问题中,对数损失函数的定义:
L o g l o s s = − 1 N ∑ i = 1 N ( y i l o g P i + ( 1 − y i ) l o g ( 1 − P i ) ) Logloss = -{1 \over N} \sum_{i=1}^N(y_ilogP_i+(1-y_i)log(1-P_i)) Logloss=−N1i=1∑N(yilogPi+(1−yi)log(1−Pi))
二分类和多分类模型的 Logloss 其实就是逻辑回归和 Softmax 模型的损失函数,而大量深度学习模型的输出层正是逻辑回归或 Softmax,因此,采用 Logloss 作为评估指标能够非常直观地反映模型损失函数的变化。所以在训练模型的过程中,在每一轮训练中都会输出 Logloss,来观察模型的收敛情况。
均方根误差
准确率、精确率、召回率、LogLoss 都是针对分类模型指定的指标。分类模型就是指预测某个样本属于哪个类别的模型,最典型的就是点击率预估模型。除了分类模型以外,还有回归模型,是用来预测一个连续值。
对于回归模型来说,最常用的评估指标就是均方根误差(RMSE,Root Mean Square Error)。它的公式是求预测值跟真实值之间差值的均方根:
R M S E = ∑ i = 1 n ( y i − y ^ i ) 2 n RMSE =\sqrt {\sum_{i=1}^n(y_i-\hat{y}_i)^2 \over n} RMSE=n∑i=1n(yi−y^i)2
为了综合评价一个推荐模型的好坏,不仅要看模型在一个 Top n 值下的精确率和召回率,还要看到模型在不同 N 取值下的表现,甚至最好能绘制出一条 n 从 1 到 N,准确率和召回率变化的曲线。这条曲线就是 P-R 曲线。
P-R 曲线的横轴是召回率,纵轴是精确率。对于一个推荐模型来说,它的 P-R 曲线上的一个点代表“在某一阈值下,模型将大于该阈值的结果判定为正样本,将小于该阈值的结果判定为负样本时,整体结果对应的召回率和精确率”。整条 P-R 曲线是通过从高到低移动正样本阈值生成的。如图 1 所示,它画了两个测试模型,模型 A 和模型 B 的对比曲线。其中,实线代表模型 A 的 P-R 曲线,虚线代表模型 B 的 P-R 曲线。
AUC 指的是 P-R 曲线下的面积大小,因此计算 AUC 值只需要沿着 P-R 曲线横轴做积分。AUC 越大,就证明推荐模型的性能越好。
ROC 曲线是一个非常常用的衡量模型综合性能的指标。ROC 曲线的全称是 the Receiver Operating Characteristic 曲线。
ROC 曲线的横坐标是 False Positive Rate(FPR,假阳性率),纵坐标是 True Positive Rate (TPR,真阳性率)。
F P R = F P N , T P R = T P P FPR = {FP \over N},TPR={TP \over P} FPR=NFP,TPR=PTP
P 指的是真实的正样本数量,N 是真实的负样本数量;TP 指的是 P 个正样本中被分类器预测为正样本的个数,FP 指的是 N 个负样本中被分类器预测为正样本的个数。
在绘制完 ROC 曲线后,也可以像 P-R 曲线一样,计算出 ROC 曲线的 AUC,AUC 越高,推荐模型的效果就越好。
假设,推荐系统对某一用户测试集的排序结果是 1, 0, 0, 1, 1, 1。其中,1 代表正样本,0 代表负样本。按照之前的方法,计算这个序列中每个位置上的 precision@N。
计算平均精度 AP 的时候,我们只取正样本处的 precision 进行平均,根据得到的表格 AP =(1/1 + 2/4 + 3/5 + 4/6)/4 = 0.6917。
如果推荐系统对测试集中的每个用户都进行样本排序,那么每个用户都会计算出一个 AP 值,再对所有用户的 AP 值进行平均,就得到了 mAP。也就是说,mAP 是对精确度平均的平均。
需要注意的是,mAP 的计算方法和 P-R 曲线、ROC 曲线的计算方法是完全不同的,因为 mAP 需要对每个用户的样本进行分用户排序,而 P-R 曲线和 ROC 曲线均是对全量测试样本进行排序。
除了这些评估指标,还有很多其他的推荐系统指标,比如归一化折扣累计收益(Normalized Discounted Cumulative Gain,NDCG)、覆盖率(Coverage)、多样性(Diversity)等等。
离线评估的目的在于快速定位问题,快速排除不可行的思路,为线上评估找到“靠谱”的候选者。因此,需要根据业务场景选择 2~4 个有代表性的离线指标,进行高效率的离线实验才是离线评估正确的“打开方式”。
离线 Replay 通过动态的改变测试时间点,来模拟模型的在线更新过程,让测试过程更接近真实线上环境。
A/B 测试又被称为“分流测试”或“分桶测试”,它通过把被测对象随机分成 A、B 两组,分别对它们进行对照测试的方法得出实验结论。具体到推荐模型测试的场景下,它的流程是这样的:先将用户随机分成实验组和对照组,然后给实验组的用户施以新模型,给对照组的用户施以旧模型,再经过一定时间的测试后,计算出实验组和对照组各项线上评估指标,来比较新旧模型的效果差异,最后挑选出效果更好的推荐模型。
在 A/B 测试分桶的过程中,需要注意的是**样本的独立性和分桶过程的无偏性**。这里的“独立性”指的是同一个用户在测试的全程只能被分到同一个桶中。“无偏性”指的是在分桶过程中用户被分到哪个实验桶中应该是一个纯随机的过程。
在实际的 A/B 测试场景下,同一个网站或应用往往要同时进行多组不同类型的 A/B 测试。
Google 在一篇关于实验测试平台的论文《Overlapping Experiment Infrastructure: More, Better, Faster Experimentation》中,详细介绍了 A/B 测试分层以及层内分桶的原则。一句话概括为 层与层之间的流量“正交”,同层之间的流量“互斥”。
层与层之间的流量“正交”,它指的是层与层之间的独立实验的流量是正交的,一批实验用的流量穿越每层实验时,都会再次随机打散,然后再用于下一层的实验。
同层之间的流量“互斥”,具体有 2 层含义:
A/B 测试是模型上线前的最后一道测试,通过 A/B 测试检验的模型会直接服务于线上用户,来完成公司的商业目标。因此,A/B 测试的指标应该与线上业务的核心指标保持一致。
下表中列出了电商类推荐模型、新闻类推荐模型、视频类推荐模型的主要线上 A/B 测试评估指标。
线上 A/B 测试的指标和离线评估的指标(诸如 AUC、F1- score 等),它们之间的差异非常大。这主要是因为,离线评估不具备直接计算业务核心指标的条件,因此退而求其次,选择了偏向于技术评估的模型相关指标,但公司更关心的是能够驱动业务发展的核心指标,这也是 A/B 测试评估指标的选取原则。
Interleaving 评估方法提出的意义主要有两方面:首先,和 A/B 测试一样的在线评估方法,能够得到在线评估指标;其次,它提出的目的是为了比传统的 A/B 测试用更少的资源,更快的速度得到在线评估的结果。
在传统的 A/B 测试中,把用户随机分成两组。一组接受当前的推荐模型 A 的推荐结果,这一组被称为对照组 。另一组接受新的推荐模型 B 的推荐结果,这组被成为实验组。
而在 Interleaving 方法中,不再需要两个不同组的用户,只需要一组用户,这些用户会收到模型 A 和模型 B 的混合结果。也就是说,用户会在一个推荐列表里同时看到模型 A 和模型 B 的推荐结果。在评估的过程中,Interleaving 方法通过 分别累加模型 A 和模型 B 推荐物品的效果,来得到模型 A 和 B 最终的评估结果。
参考:深度学习推荐系统,王喆