推荐系统从零到一

能够说是全拜谷歌吹起了「大数据」这阵春风,近几年业界对于数据挖掘人才的需求持续高涨,而推荐系统一直是数据挖掘岗位的必修课。一联系到数据挖掘,总会给人高深莫测的错觉,觉得推荐系统也是数学神童的专属领域。万万没想到,本身并非数据挖掘科班出身,也谈不上数学功底有多好(本科考高数也就在生死边缘),居然也操刀了三个业务场景不一样、用户规模千差万别、甚至连地域和文化也跨度很大的推荐系统,并且评价指标和用户反馈还颇为正面。可见推荐系统没有那么曲高和寡(至少不须要去进修个数学博士,笑),我相信若是一个出色的程序员理解了推荐系统的方法论,那么他就能在短期内作出一个有实效的能提高平台活跃的推荐系统。程序员

推荐系统的本质是行为的关联

推荐系统的核心是为用户提供个性化的内容。而实现的方式不外乎根据用户的历史行为去预测将来的潜在点击。一个成功的推荐系统,通常要从两个维度体现它的价值:一是帮助用户发现没接触过但会喜欢的有新鲜感的内容;二是提高平台的点击活跃程度,让长尾内容获得更充分的曝光算法

若是把推荐系统比作一桌丰盛的菜肴,食材未来自于全平台用户的历史行为,历史行为所表达的是用户对于内容的一种喜爱程度,有多是点击、收藏、下载、评论、点赞等。无论算法选型如何,推荐系统的工做流程是一致的:经过单一用户的历史行为揣摩该用户的喜爱,而后搜索全平台的用户行为,根据用户喜爱的相关程度对内容进行排序。而排序的标准取决于算法:基于内容(以Item为特征)、基于用户(以User为特征)仍是矩阵分解(以矩阵分解后的隐含变量为特征)。因此,推荐系统的本质是关联单一用户与全平台用户的行为,为其找到「臭味相投」的人所喜爱的内容,这样就是「协同过滤」中「协同」二字的含义。微信

并非全部场景都须要个性化

这是最关键但却最容易被忽视的问题。大数据风一来,推荐系统就成了许多Boss眼中包治百病的仙丹妙药,无论三七二十一,必定要在产品前期上线推荐系统。但以个人经验,推荐系统要取得成功,至少要具有如下3个先决条件:网络

  1. 要有足够大的数据。一个常见的误区是,社区不够活跃,上了推荐系统没准会增长活跃吧?而实际上缺少数据就很难有精准的推荐(用户关联过于稀疏),天然也不会带来多少可观的点击。机器学习

  2. 要有丰富的内容。数据大并不表明内容就足够丰富,点击都集中在少数的内容也是有可能的。推荐系统的鼻祖是亚马逊的图书推荐,有没有人细想过,为何亚马逊是第一个吃螃蟹的人?当时贝佐斯把书店搬到网上后,发现亚马逊拥有了全世界最多的图书,在一家库存数百万种图书的线上书店里,你根本没法依赖编辑去为顾客推荐新书,因此才有了推荐系统诞生的土壤。事实上,只有内容极大丰富的时候,才可能有被无用户差异排行榜埋没的优质内容,个性化的需求才能出现需求到商业价值的跨越。若是内容的量级在一万如下,单一的热门排行榜足以知足大部分用户发现内容的需求;一万以上十万如下,分类的热门排行榜足以知足不一样喜爱用户发现内容的需求,十万以上,推荐系统的必要性才开始凸显学习

  3. 要有用户分众。数据充分了、内容丰富了,并不表明推荐系统就水到渠成,还得掂量下用户喜爱能不能造成产生足够的分众。推荐系统之因此在电商、音乐和社区等领域有成功的应用,主要因素就是这类产品的用户有足够的分众。目标用户越是大而全,分众越明显,推荐的满意度越高。不用看数据,也能猜到淘宝的推荐会比惟品会的效果好太多,由于上淘宝的用户喜爱差别度会远大于惟品会。测试

推荐系统的步骤

1. 定义目标

凡事要有成效都必须坚持目标导向,若是一个项目的成果不能被准确衡量,那么前景注定是危险的。推荐系统长期都是为提高平台的活跃度而生的,与团队的商业价值目标是一致的,但短时间内二者或许会有冲突:平台的展现位置有限,推荐系统上马后会分流掉热门内容的点击量,而商业价值每每要创建于热门内容之上。因此上马以前必定要与负责肯定商业价值的人协商(也许你的CEO、也许是市场团队的头儿),在推荐系统的设计中兼顾到一部分的商业价值目标。关于推荐的评价指标,我的建议可包括下列选项:推荐系统覆盖的内容数量、推荐内容的点击率(A/B测试)、推荐系统上线先后的内容产生量(对于UGC平台)、推荐系统上线先后TOP100内容的变化,同时也要留意推荐内容区域的浏览行为数据(推荐系统原本就是个离产品很近的事),好比停留时间、点击的频次、翻页的频次。大数据

有的平台会在推荐结果的下方提供用户的反馈按钮,可是我建议这种反馈听听就好,没必要当真,主要仍是看实际的数据表现。用户反馈老是会过度的积极,容易让人得意忘形。spa

2. 深刻业务

作数据的若是不了解业务,基本就废掉了。个人习惯是作推荐系统以前必定要把产品玩熟用坏,尽可能获取更多的用户、内容和行为的数据。打个比方,用QQ邮箱的和用Gmail邮箱注册的用户确定有些不同,对不?除了收集数据,熟悉推荐的业务场景(行话叫「推荐的上下文」)也很重要,事实上推荐算法的选型也会受业务场景的影响,好比以物推物的场景就更适合内容特征的算法,一个一个接连展示的能够考虑加入点随机性,首页推荐列表应该多放新内容。设计

3. 算法选型

既然推荐系统的本质是行为的关联,那么协同过滤(这里把矩阵分解也算协同过滤的一种)都是在利用关联的信息,一般都会比基于内容的推荐效果要好。不过现实中单一的算法都很难得到很高的准确率,适当结合内容自身的属性有助于提高推荐的满意度,举个例子,服饰电商平台中Item的品牌信息对购买者就很关键(全部女人都懂的,对不?),若是能创建起一个User的品牌偏好,或者进一步讲,品牌与品牌之间的关联度,那么爆表的推荐质量简直是手到擒来。若是平台原有的行为数据就是关联很稀疏的,协同过滤就很难发挥所长,这时基于内容的推荐就有用武之地了。

4. 冷启动与负样本

冷启动可分为User的冷启动和Item的冷启动,若是是要对一个新内容推荐相关的其余内容,那么能够多多利用内容特征的类似度;若是是对一个新用户推荐,能够利用起社交网络的信息(好比该用户的QQ好友的喜爱);或者推随机的热门内容,再评估用户的点击快速调整(实时推荐的好处出来了);最后的办法也只有给新用户一个表达本身喜爱的界面了。

协同过滤是基于统计的算法,并不须要负样本的信息,但若是采起了机器学习的算法,训练的过程是须要负样本的。大部分产品设计的时候不会提供用户的负反馈入口,用户没法表达对某个内容的厌恶,也就是现实数据并不存在负样本。可是负样本实际上是可被创造的,我经常使用的一种作法是选择热门的但没有产生用户喜爱的样本,由于平台的热门内容每每有更高的曝光率,用户反复看到但没产生点击,那就潜在的表达了一种厌恶。

一直以为推荐系统是个业界十分特殊的场景,站在了通往技术、数据、产品和商业四条岔路的交叉口。因此作推荐系统是一个锻炼程序员综合能力的好活,而事实上高深算法是推荐系统中最次要的部分,对于数据和产品敏感的技术人更容易取得成功。

更多精彩内容,欢迎关注微信公众号「码农咖啡馆」

相关文章
相关标签/搜索