推荐系统所需要的核心数据是用户的反馈。
因为没有反馈就:
没有持续优化的标注数据
没有评价效果的真实数据
总之一句话:没有反馈数据,没有数据循环,不通透,产品的新陈代谢就有问题。
注意,我们说的用户反馈可不是用户打电话给客服说的“意见反馈”,而是对Item的喜好。
反馈数据的形式有多种:点击查看,收藏,看(听)完,加入购物车,付钱,评分,给评价……
这些反馈形式分为两种:隐式反馈和显式反馈。
上面列举的反馈方式中,评分是显式反馈,因为用户知道自己在表达态度, 并且用一种较量化的方式给出很明确的态度。其他的反馈则是用户使用产品时所留下的自然行为, 用户留下这些数据,目的并不是要告诉他的喜好,但是我们却可以从中“揣摩”到用户的喜好,这就是隐式反馈。
隐式反馈相对于显式反馈有以下特点:
1、数量会比显式反馈大很多,矩阵更稠密,更稳定;
2、用户自然发生,通常会更加真实全面地反应其态度;
3、更接近产品指标,如人均播放时长(视频),点击率(新闻);
Xavier Amatriain(Quora工程副总裁)在ACM Resys2016 上也分享过要重视隐式反馈的观点。见推荐系统老司机的十条经验。
隐式反馈面临的问题:
1、隐式反馈的负样本不明显
隐式反馈数据通常是 0-1 二值数据,理想情况 下应当把它当做“预测用户是否会对 Item 产生某种隐式反馈”的分类问题,分类问题则需要负样本,显然通常隐式反馈的负样本不那么明显。这是问题之一。
2、用RMSE去评价隐式反馈推荐模型
推荐的场景更多是推荐列表,关心的是排序,不论是“猜你喜欢”的综合列表推荐,还是Item-2-Item的相关推荐, 亦或是 feed 流推荐,关心排序胜过关心单个Item预测误差,而RMSE关心的是单个Item预测误差,因此用RMSE去评价隐式反馈推荐模型,就显得有些差强人意,这是问题之二。 ( HR 和 NDCG )
针对隐式反馈的矩阵分解主流有以下两种做法:
(1) Point Wise类:还是预测User对单个Item的偏好,最后根据偏好排序。
(2) Pair Wise类:对同一个User,直接考虑任意两个Item的顺序谁在前谁在后。
Point Wise类,以Collaborative Filtering for Implicit Feedback Datasets这篇论文为代表[1], 对此,优秀的实现有: implicit.als.AlternatingLeastSquares
AlternatingLeastSquares (Python实现)