第一章 好的推荐系统
什么是推荐系统?
和搜索引擎一样,推荐系统也是一种帮助用户快速发现有用信息的工具。和搜索引擎不同的是,推荐系统不需要用户提供明确的需求,而是通过分析用户的历史行为给用户的行为建模,从而主动给用户推荐能够满足他们兴趣和需求的信息。因此从某种意义上来说,推荐系统和搜索引擎对用户来说是两个互补的工具。搜索引擎满足了用户有明确目的时的主动查找需求,而推荐系统能够在用户没有明确目的的时候帮助他们发现感兴趣的新内容。
从物品角度出发,推荐系统可以更好地发掘物品的长尾,传统的80/20原则(80%的销售额来自于20%的热门品牌)会受到挑战。主流商品代表了绝大多数用户的需求,而长尾商品往往代表了一小部分用户的个性化需求。因此,如果要通过发掘长尾提高销售额,就必须充分研究用户的兴趣,而这正是个性化推荐系统主要解决的问题。推荐系统通过发掘用户的行为,找到用户的个性化需求,从而将长尾商品准确地推荐给需要的用户,帮助用户发现那些他们感兴趣但很难发现的商品。
推荐算法的本质是通过一定的方式将用户和物品联系起来,而不同的推荐系统利用了不同的方式,如利用好友、用户的历史兴趣记录以及用户的注册信息为推荐系统常用的3种联系用户和物品的方式。
个性化推荐系统的应用
通过分析大量的用户行为日志,给不同用户提供不同的个性化页面展示,来提高网站的点击率和转化率。总的来说,几乎所有的推荐系统应用都是由前台的展示页面、后台的日志系统以及推荐算法系统3部分构成的。
1、亚马逊个性化商品推荐列表:采用基于物品的推荐算法,该算法给用户推荐那些和他们之前喜欢的物品相似的物品。列表包括推荐的是什么,推荐物品的总体质量-评分,推荐理由,修正推荐,用户反馈方式(加入购物车、加入心愿单、给书打分、我已经有这本书、对这本书没兴趣),同时,亚马逊允许用户禁用推荐理由,这主要是出于隐私的考虑。有些用户可能不喜欢他对某些物品的行为被系统用来生成腿甲结果,这个时候就可以禁用这些行为。
亚马逊还有一种个性化推荐列表,即按用户在Facebook的好友关系,给用户推荐他们的好友在亚马逊上喜欢的物品。
亚马逊的相关推荐列表:一种是包含购买了这个商品的用户也经常购买的其他商品,另一种是包含浏览过这个商品的用户经常购买的其他商品,区别在于使用了不同用户行为计算物品的相关性。此外,相关推荐列表最重要的应用就是打包销售。当你在购买某物品时,亚马逊会告诉你其他用户在购买这个商品时也会购买的其他几个商品,并提供一定折扣。这种销售手段被很多电商网站作为标准。
亚马逊有20%至30%的销售来自于推荐系统。
2、视频网站如Netflix、YouTube、Hulu,都采用基于物品的推荐算法,其中,N有60%的用户是通过其推荐系统找到自己感兴趣的电影和视频的,Y的个性化推荐点击率是热门视频点击率的2倍。
3、个性化推荐的成功应用需要两个条件,一是存在信息过载,二是用户大部分时候没有特别明确的需求。音乐推荐的特点:
物品空间大:数量多,相对于书和电影;
消费每首歌的代价很小:免费;
种类丰富:流派多;
听一首歌耗时少:实践成本低;
重用率高:会反复听;
用户充满激情:一个用户会听很多首歌;
上下文相关:与用户当时的心情和所处情景相关;
次序很重要:用户听音乐一般是按照一定次序一首首听;
很多播放列表资源:用户会创建自己的播放列表;
不需要用户全神贯注:可作为背景音乐;
高度社会化:和好友分享。
4、社交网络中个性化推荐技术主要应用在3个方面:利用用户的社交网络信息对用户进行个性化的物品推荐;信息流的会话推荐;给用户推荐好友。Facebook最宝贵的数据有两个,一是用户之间的社交网络关系,二是用户的偏好信息。
5、个性化阅读的两个要素:首先,用户面临信息过载的问题;其次,用户很多时候并没有必须看某篇文章的需求,只是想通过阅读特定领域的文章了解这些领域的最新动态。
6、基于位置的服务:位置是一种很重要的上下文信息;基于位置的服务往往与社交网络结合在一起。
7、个性化广告:与狭义个性化推荐的区别是,个性化推荐着重于帮助用户找到可能令他们感兴趣的物品,而广告推荐着重于帮助广告找到可能对它们感兴趣的用户,即一个是以用户为核心,而另一个是以广告为核心。目前个性化广告投放技术主要分为3种:
上下文广告:通过用户正在浏览的网页内容,投放和网页内容相关的广告。代表系统是谷歌的Adsense。
搜索广告:通过分析用户在当前会话中的搜索记录,判断用户的搜索目的,投放和用户目的相关的广告。
个性化展示广告:大的横幅展示广告,根据用户的兴趣,对不同用户投放不同的展示广告。
推荐系统测评
一个完整的推荐系统一般存在3个参与方:用户、物品提供者和提供推荐系统的网站。因此在评测一个推荐算法时,需要同时考虑三方的利益,一个好的推荐系统是能够令三方共赢的系统。
好的推荐系统不仅仅能够准确预测用户的行为,而且能够扩展用户的视野,帮助用户发现那些他们可能会感兴趣,但却不那么容易发现的东西。同时,推荐系统还要能够帮助商家将那些埋没在长尾中的好东西介绍给可能会对它们感兴趣的用户。
推荐系统实验方法
1、离线实验:一般由以下几个步骤构成:
* 通过日志系统获得用户行为数据,并按照一定格式生成一个准确的数据集;
* 将数据集按照一定规则分成训练集和测试集;
* 在训练集上训练用户兴趣模型,在测试集上进行预测;
* 通过事先定义的离线指标评测算法在测试集上的预测结果。
优点:不需要有对实际系统的控制权;不需要用户参与实验;速度快,可以测试大量算法;
缺点:无法计算商业上关心的指标,离线实验的指标和商业指标存在差距;
2、用户调查
最好的方法就是将算法直接上线,但在对算法会不会降低用户满意度不太有把握的情况下,上线测试具有较高的风险,所以在上线测试前一般需要做一次称为用户调查的测试。
用户调查需要有一些真实用户,让他们在需要测试的推荐系统上完成一些任务。在他们完成任务时,我们需要观察和记录他们的行为,并让他们回答一些问题。最后,分析他们的行为和答案了解测试系统的性能。
优点是可以获得很多体现用户主观感受的指标,相对在线实验风险很低,出现错误后容易弥补。缺点是招募测试用户代缴较大,很难组织大规模的测试用户,因此会使测试结果的统计意义不足。
3、在线实验
在完成离线实验和必要的用户调查之后,可以将推荐系统上线做AB测试,将它和旧的算法进行比较。AB测试的优点在于可以公平获得不同算法实际在线时的性能指标,包括商业上关注的指标,缺点主要是周期较长,必须进行长期的实验才能得到可靠的结果。因此一般不会用AB测试测试所有的算法,而只是用它测试那些在离线实验和用户调查中表现很好的算法。其次,一个大型网站的AB测试系统的设计也是一项复杂的工程。一个大型网站架构分前端和后端,从前端展示给用户的界面到后端的算法,中间往往经过了很多层,这些层往往由不同的团队控制,而且都可能做AB测试。如果为不同的层分别设计AB测试系统,那么不同的AB测试之间往往会互相干扰。比如,当我们进行一个后台推荐算法的AB测试,同时网页团队在做推荐页面的界面AB测试,最终的结果是你不知道测试结果是自己算法的改变,还是推荐界面的改变造成的。因此,切分流量是AB测试的关键,不同的层以及控制这些层的团队,需要从一个统一的地方获得自己AB测试的流量,而不同层之间的流量应该是正交的。
一般来说,一个推荐算法最终上线,需要完成上面所说的3个实验。
首先,需要通过离线实验证明它在很多离线指标上优于现有的算法。
然后,需要通过用户调查确定它的用户满意度不低于现有算法。
最后,通过在线的AB测试确定它在我们关心的指标上优于现有的算法。