什么是好的推荐系统

我一直自诩是「菜刀流」的工程师,作为一个数据挖掘的门外汉,竟也操刀过三个推荐系统的项目了。这三个推荐系统,用户群不同,业务场景不同,连地域和文化也有些差别。所以近来总在琢磨,推荐系统的缘起千人千面,纷繁万变的细节当中,能不能汇聚出一些普遍共性?有没有一个普适的标准,回答什么是一个真正出色的推荐系统?我希望迈出这一步,把之前想过的梗、跳过的坑以及卑微的沉思亮出来,等待真正的高人点拨一二。

推荐系统的先决条件

这其实是最容易被忽视的一个问题。尤其在这几年「大数据」的概念炒得火热,推荐系统也就成了某些人眼中的仙丹妙药,不管三七二十一,先上了再说。在我看来,推荐系统至少需要评估下面三个可行性:

  • 要有足够的数据

    一种常见的错误思路是,我的社区不够活跃,上个用户推荐系统加强活跃吧。如果你抱着这样的想法,我只能恭喜你选择了一种艰苦卓绝的逻辑。推荐系统是数据挖掘的一种应用,而没有数据,通常都不会产生什么有价值的挖掘。

  • 要有丰富的内容

    推荐系统起源于亚马逊的图书推荐。但有没有人细想过,为什么亚马逊是第一个吃螃蟹的人?因为贝佐斯把书店搬到网上后,他发现自己拥有了全世界最多的图书,在一家库存数百万种图书的虚拟书店里,你根本无法依赖任何一个店员帮你的顾客推荐新书。而另一种常见的错误思路是,在内容未丰富的前提下就急着上推荐系统。事实上,只有内容极大丰富的时候,才可能有被无用户差别排行榜埋没的优质内容,个性化需求才能体现出商业价值。如果你的内容在一万以下,我会建议你使用单一的热门排行榜;十万以下,我会建议你使用分类的热门排行榜,十万以上,才慢慢有推荐系统的可行性。

  • 用户分众

    数据充分了、内容丰富了,还得掂量下用户的口味能不能产生足够的分众。推荐系统之所以在电商、音乐上有成功的应用,最主要的因素是这类产品的用户有足够的分众。而越是大而全的领域,用户的分众越明显,推荐的效果越好。好比淘宝的推荐颇受赞赏,而唯品会的推荐多被吐槽,道理就在这儿。如果你说你正在做同志社区或情趣电商,我会心里一凉。

推荐系统的问题

先决条件通过了,我们来讨论「术」的问题,你可以把这节的内容当作「跳坑实录」来读。

  • 热门和长尾的矛盾

    第三种错误的思路在于,推荐系统以提升点击率为目标,而往往横向对比之下,个性化推荐的指标往往不如热门排行榜。对此一小部分算法人员铤而走险,希望用热门混杂长尾的方法去得江山抱美人,而在我看来,推荐系统有且仅有一个目标,满足用户的个性化需求。至于你说点击不如推热门?那把排行榜留着呗,那才是赚点击率的地方。

  • 基于内容还是协同过滤

    推荐系统的本质在于加强联结,或者说,给用户源源不绝发现新东西的机会。所以协同过滤(或者往更宽泛的范围,矩阵分解也算)都是在利用联结的信息,从而取得比基于内容更好的推荐效果。但是,了解你所拥有的内容,作为辅助的算法,绝对能使推荐的质量大幅上升。但是算法人员面临的现状往往是,很难得到格式化的内容标签,一个可行的思路是,请用户来为内容打标签,参照豆瓣和淘宝。另一个决定选择的因素是数据特征,如果用户行为集中而稀疏,那么意味着你必须更多依赖内容的信息。

  • 负样本的问题

    协同过滤是基于统计的算法,并不需要负样本的信息,但如果是基于机器学习的算法,训练的过程是需要负样本的。有的产品只有用户的隐反馈(比如播放、购买),即用户无法表达对一个内容的厌恶,那么你只有创造负样本了。在这一块,最好的思路是,选择热门的但用户没有行为的样本,因为热门的内容更有机会让用户看到,用户看到多次但没点击,那就更可能是不喜欢。

  • 冷启动的问题

    应对冷启动的策略要按照业务场景区分,如果是用户看了一个内容,要给他推荐其他的内容,那么可以利用内容特征的相似度;如果是对一个新用户推荐,条件允许的话,可以请用户表达自己的偏好,或者依赖社交网络的信息,实在不行,只能推热门了。

推荐系统的实施

我希望把实施中的一些Keypoint单独罗列,大家都懂的东西,暂时不讲。

  • 借助更多信息

    我的风格是做推荐之前一定要把产品用坏,来确定能获取到哪些用户行为和用户数据,能获取的尽量获取。比如,用QQ邮箱的和用Gmail邮箱的用户肯定有些不一样,对不?

  • 研究数据之间的相关性

    这就是熵的概念。如果两个数据相关性是1,那么肯定有一个没什么用处。用好回归,你会少很多运算量。

  • 弄清你的业务场景

    有的人会把业务场景叫做「推荐的上下文」,事实上推荐算法的许多细节都会被业务场景影响,比如以物推物的场景就会更适合采用ItemBased,一个一个展现的可以考虑加入点随机性,首页推荐应该多放新品,等等。

  • 定义好你的目标

    我习惯了做事之前目标先行,目标错了跑得再快也没用。推荐算法的长期目标应该是提升用户的活跃(注意,不是活跃率),而对于短期指标,应该着重在几点:有没有更多的内容被发现?热门排行榜的更新是否加快?用户对于推荐的点击是否在一个比较活跃的水平(再次,我反对一概而论)?如果是UGC的产品,用户有没有因为更容易被发现而积极地上传内容?当然,这些指标都必须被量化。

  • 良好的引导

    记得之前去听百分点科技的演讲时,他们提到会有人专门去研究推荐系统的引导,甚至有时候引导比推荐的内容更重要,深有同感。这也是社交推荐为什么不需要什么模型却效果很好的原因。记住一点,如果推荐的区域有任何的图片或数字时,想办法让它们更有诱惑力。

  • 收集更多反馈

    推荐系统一前一后的数据流都不容轻视,我同样倾向于收集一切与推荐系统有关的数据,比如推荐区域的停留与点击、推荐内容的消费、连续点击推荐内容的链条等等。如果可能的话,请用户对你的推荐给予评价,这也能让你的推荐更有温度。

  • 离线实验

    不要迷信离线实验的结果,通常和线上都会差很远。如果之前不存在推荐系统,那么用户很可能根本就没有机会接触到你推荐的内容,也就无从证实。

  • 耐心

    推荐系统并不是一个立竿见影的产品,上线之后多花点时间收集数据、调整参数、做更多的分组测试,更重要的是,让你的老板也有耐心。

来自:建造者说

    原文作者:2shou
    原文地址: https://segmentfault.com/a/1190000002522928
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞