推荐系统是由一个或者多个算法和策略组成的这样一个系统,其商业价值在于实现产品提供者、产品用户以及推荐平三者的利益共赢。无论从算法的角度还是从商业的角度,效果好不好都是我们所关心的问题,所以实践者们对推荐系统系统提出了各种各样的评测指标来衡量其优劣性和适用性。
在介绍这些评测指标之前,我们先要知道一般会用什么样的方式获得评测指标。在推荐系统中,主要有三种实验方式,用以获得不同的指标,分别是离线实验(offline experiment)、用户调查(user study)和在线实验(online experiment)。
离线实验
就是通过已经获得的数据(如日志系统中的日志数据)建立各种算法和模型,然后评估这些算法。这个过程中数据一般会分为训练集和测试集,训练集用于训练算法模型,测试集用于评估。整个过程在线下进行,优点是简单易操作,可在一个数据集上进行反复试验,直到效果满意为止。缺点是没法获得在线反馈,比喻商业上关注的指标如点击率转化率等。
用户调查
顾名思义。离线实验的算法并不一定等于真实的效果,整个系统的效果好坏依赖于各个环节,比如UI展示,比如响应速度,这些都不是推荐算法所能控制的,但是带来的影响不一定少于算法。既然推荐系统最终面向的是真实的用户,且用户的很多主观感受难以量化,那么就有必要进行用户调查。用户调查需要注意的是要考虑用户的真实分布情况和样本大小,这样才能获得具有统计意义的结论。同时也要考虑调查的成本。
AB测试
当线下系统效果达到一定程度之后就可以上线进行AB测试。AB测试时一种很常用的在线评测的实验方法,它通过一定的规则将用户分成不同的组,分别采用不同的算法,然后通过用户行为的各种指标,如点击率,来衡量各个算法的性能。AB测试是公平的,并且是直观的,它可以直接观察各个算法的性能,包括商业上的指标。但是它也同样面临一些问题,一个复杂的系统的各个组件往往是由不同的团队来负责的,当后端的在进行算法的AB测试的时候,前端的关于推荐列表的UI展示也在进行AB测试,那用户所带来的效果变化算谁的呢?因此,切分流量是AB测试中的关键,不同的层以及控制这些曾的团队需要从一个统一的地方获得自己AB测试的流量,而不同层之间的流量应该是正交的。
介绍完获得评测指标用到的三种试验方法,现在正式介绍推荐系统常用的实验指标。
1.用户满意度
我们之前说到,推荐系统最终面向的是用户,就像所有的产品一样,好不好用户说了才算。所以用户满意度是系统最重要的指标。但是这个指标不能通过离线算法计算得到,只能通过用户调查和在线实验获得。比如发放调查问卷,比如引导用户进行一些指定的操作。统计用户产生的一些行为也能量化用户满意度,比如点击率,购买率,停留时间等等。
2.预测准确率
上面说到,整个系统最重要的评测指标是用户满意度,那么在离线实验的时候最重要的指标是什么呢?答案就是预测准确率。在应用中,按场景可以将推荐系统分为TopN推荐和评分推荐两种(这两种的介绍见另一篇文章),评分推荐一般用RMSE( 均方根误差)和MAE(绝对平均)误差计算。其中RMSE加大了对预测不准的项的惩罚,评测更加严格。而对于另一种TopN推荐的预测准确率,一般用Recall(召回率)和Precision(准确率)来评测,需要的时候还可以计算多对准确率和召回率,然后画出PR曲线进行评测。
3.覆盖率
覆盖率用于描述系统对于长尾物品的发掘能力(长尾现象见另一篇文章),简单说就是对所有用户推荐的物品能够包括的物品种类越多,覆盖率越大,这样就引出了覆盖率最简单的一种定义方式:系统能够推荐的物品占总物品集合的比例。但是这样的计算方法没有考虑推荐列表中每种物品出现的频率,如果列表中不但出现的比例大,而且每种物品出现的频率也相近,那么对长尾的挖掘能力越好。通过物品在推荐列表中出现次数定义覆盖率的方式有信息熵和基尼系数两种。这两个指标的计算又会涉及到流行度的计算,一种商品的流行度就是它和多少用户发生了用户行为。
还有一些更多的评测指标,都可以用于不同的需求之中提高推荐系统的性能。
4.多样性:推荐列表中物品的两两不相似性,可以用相似度来定义,相似度越高,多样性就越低。
- 用户兴趣是广泛的,我们希望覆盖用户的绝大部分兴趣
- 和相似性是对应的,多样性在于提高推荐列表中物品的两两不相似性
- 分为针对某个用户推荐列表的多样性和整个系统的多样性
5.新颖性:可以用物品的平均流行度来简单评价新颖性,推荐结果中物品的平均流行度越低新颖性就越高。但是这种方法比较粗略,要准确的知道新颖性需要做用户调查
- 推荐用户以前没有听说过的物品,把用户之前有过行为的物品过滤掉
- 推荐平均热门程度较低的物品可能产生较高的新颖性
- 准确的新颖性需要作用户调查
6.惊喜度(serendipity):推荐和用户历史兴趣不相似但又让用户满意的(定性描述)
7.信任度:
- 一个推荐系统具有更高的信任度就会让用户跟推荐系统产生更多的交互
- 信任度只有通过问卷调查的方式进行度量
- 提高信任度的方法:1、增加透明度,对推荐结果进行解释;2、利用用户好友信息做推荐
8.实时性:
- 产生了新的用户行为之后能不能实时更新推荐里列表
- 加入了新的物品能不能立即推荐给用户(物品的冷启动问题)
9.健壮性:
- 又称鲁棒性,抗击作弊的能力,如淘宝刷单和豆瓣刷分
- 可以通过模拟攻击进行评测
- 提高健壮性的方法:1、设计推荐系统是使用代价高的用户行为
- 使用数据训练模型前进行攻击检测,对数据进行清理
10.商业目标
在真实的业务场景中评估推荐系统的好坏,推荐系统有没有为平台带来具体的商业指标,比如点击率、转化率、成交金额等等