90

推02,就算是非技术人员也都有必要了解的一些推荐系统常识

 6 years ago
source link: http://mp.weixin.qq.com/s/PXpb9ebpGg5wr_K4KnpNiw
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

推02,就算是非技术人员也都有必要了解的一些推荐系统常识

Original HCY崇远 数据虫巢 2017-12-11 00:35 Posted on

收录于合集 #推荐广告系列 45个
Image

文·HCY崇远

接上一篇《推01,你们是不是都感觉自己少了个推荐系统?》,上一篇解决的什么是推荐系统以及为什么要有推荐系统的问题。这一篇我们关注的是,更细节的一些东西,把推荐系统的一些基础常识分享给大家。

01 推荐系统概述

在上个章节,我们也大致的提到过,需要先明确的一点就是推荐算法或者推荐机制并不严格等同推荐系统,推荐系统是一个相对复杂的业务系统,里头涉及到数据的处理、架构的构成、推荐的逻辑机制,反馈数据的回收、效果的跟踪、AB测试等等。

并且,很多我们耳熟能详的推荐算法,他只是解决的某种特定情况下的推荐机制问题,而整个系统很多时候是复合了多种算法结果,综合呈现的一种结果。但可以肯定的是,各种理论逻辑、算法机制是构建推荐系统的核心支撑,所以,学习推荐系统,首先学习各种推荐算法并没有毛病。

推荐算法概述-基于内容属性相似的推荐

从原始数据依赖的层面来说,常见的有基于内容属性的推荐机制,这种推荐逻辑很简单,只是单纯的依赖物品之间的属性相似来构建推荐关系,容易理解,有时间还是有一定效果的,但实际上很多时候会存在这几种情况,导致了这种原始推荐失效。

  • 如果用户浏览当前的物品本身就不是用户的菜,甚至是一个非优质信息(当前主体不可控),再基于当前物品进行推荐就是个伪命题。

  • 基于上面这条,即使当前主体是用户的目标,但再推类似主体会造成信息冗余,即当前主体信息已经解决了用户的问题。

所以,由于用户行为的不可控,基于内容属性相似的推荐,风险还是挺高的,这是导致了这种原始直接的机制并不会得到广泛的推广。但与乱推荐相比,还是有一定正向作用的,毕竟用户浏览的主体是自身选择的结果,本身用户对于其选择的信息主体是有一定偏好性的。

推荐算法概述-基于用户画像的推荐

基于物品本身属性的推荐,其实与个性化是没有半毛钱的关系的,毕竟推荐候选集只跟物品主体有关,与用户无关,就谈不上什么个性化了。

而基于用户画像(更多人喜欢用基于用户标签)的推荐,则更大程度上依赖于用户的画像属性来推荐,这就体现了用户偏好信息,根据偏好信息来选择候选集。

这是一种很通用的做法,并且在大规模数据集情况下,很多实际的产生过程中喜欢使用这种机制。而用户的画像,或者更具体点用户的兴趣标签如何构建呢?其实就是依赖用户累积的行为数据了,通过行为数据生成用户的兴趣标签。

这看似是一种相对靠谱的做法,毕竟如果把用户的爱好都分析清楚了,主动给用户做推荐不就显得很个性化了吗?在实际的场景中,首先,并不是所有用户的行为都足够用来表征其兴趣偏好的,即我们会高估用户的行为集合,从而产生有偏差的画像属性,更甚者,如果用户完全没有行为怎么办呢?

其次,通常来说,用户的兴趣爱好是会随时间迁移而改变的,所以,把我用户的兴趣程度以及其变化并不是一个容易的事情,更何况用户实际的选择还会受很多因素影响,比如,我当前查找的一个信息并不是我之前掌握的信息,那意味着这些信息偏好在我的历史轨迹中都体现不出来,那单纯的通过我的兴趣去推荐就显得不靠谱了。

但不管怎么说,根据用户的偏好来做推荐,大方向肯定是没有问题的。

推荐算法概述-基于协同过滤的推荐

协同过滤,或许了解过推荐系统的的朋友,多多少少都能听过一些,并且协同推荐可是作为推荐领域典型案例的存在。

协同过滤同样不会去研究物品的本身属性,甚至也没有空去构建用户的画像标签,正如他的名字描述的一样,他严重依靠于用户的行为以及其周边用户的协同行为。举个例子,为一个用户推荐信息,那么我只需要参考其周边用户在看什么信息,就给他推荐什么信息就好了。

重点在于,如何限定周边这个范围,比如根据两个用户的行为,去构建相关关系,从而判断用户之间的相似程度,把相似用户的行为推荐给当前用户,这就是协同中典型的基于用户推荐。

而如果以物品为维度,以用户的购买或者观看记录为向量,则可以构建物品的相似度量,针对于每一个待推荐选项,用户的历史轨迹就是其向量构成,就可以判断该用户历史的轨迹信息与当前的待选物品的向量相关度了,从而判断是否要推荐,这就是基于物品的协同逻辑。

与基于用户画像的推荐对比,这种推荐有一定几率可以发现新物品,即并不严格依赖用户的兴趣。举个例子,假设几个信息的层级是ABC,并且ABC是层级递进关系,并不是同一个东西,对于一个用户来说,他掌握的是A,则意味着他的兴趣偏好大多偏向于A,根据兴趣标签,其实是很难推荐这种递进相关的信息。

但是,如果其他用户的学习轨迹都是A->B->C这种轨迹,这意味着ABC三者之间本身就有前后潜在逻辑关系存在的,基于协同,即可为该用户在掌握A的基础上,推荐BC的内容,这也是基于兴趣所做不到的地方。

当前,基于协同行为的推荐,除了基于物品还有基于用户,还有其他诸如基于模型的协同,典型如最近邻模型、基于矩阵分解、以及基于图关系模型的构建的推荐机制。

推荐算法概述-其他

其实在我们实际的操作过程中,并不会严格的依赖于这种条条框框、只要合理即可行,比如我们完全可以把推荐问题转化为分类问题,针对于每个待选项,他都是YES OR NO的问题,即一个二值分类。

又比如在上一篇我们学习的一个场景,即阅文网站的小说推荐,还记得他的推荐标题吗?“喜欢这本书的人还喜欢”,这就是典型的“啤酒与尿布”的解法,即货架思维,关联销售,也是可以作为一种推荐机制而存在的。

在比如微信朋友圈,微信一定是会研究用户的朋友圈关系的,比如你对哪类朋友点赞、互动行为最多,它是不是会考虑推荐你欣赏的朋友偏好内容给你?毕竟微信是一个典型的熟人社交模型。

所以,推荐算法看似重要,但其实想想又没有这么重要,很多时候并不是一成不变的,都要我们根据场景去考虑,最最最重要的是,需要我们用实际效果来选择机制,也或许是多种机制共同生效的结果。

02 相似度量

在我们上面的推荐算法机制中,有个不得不提的操作处理就是各种相似相关度的计算,我们来简单分享一下几种相似或者相关度量的方式。

欧几里得距离(Euclidean Distance)

最常见的距离度量方式,衡量多维空间中两点之间的绝对距离,要求维度的统一。

明可夫斯基距离(Minkowski Distance)

明氏距离是欧氏距离的扩展,是对多个距离度量公式的概括性的表述(可以看到,当p=2时,其实就是欧式距离)。

曼哈顿距离(Manhattan Distance)

曼哈顿距离来源于城市区块距离,是将多个维度上的距离进行求和后的结果,即当上面的明氏距离中p=1时得到的距离度量。

//还有其他的一些距离度量,但是都不太常用,最常用的依然是欧式距离度量。

向量空间余弦相似度(Cosine Similarity)

余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。

皮尔森相关系数(Pearson Correlation Coefficient)

即相关分析中的相关系数r,分别对X和Y基于自身总体标准化后计算空间向量的余弦夹角。基于内容的推荐,还有一点需要注意的就是,对于物品自身属性,如果属性值过少,我们需要适当进行扩大维度,如果维度过多,则需要进行降维。

关于降维和升维,都是一个很大的研究方向,大体上可以说一下几种常见的方式。例如降维,我们可以进行维度聚类、主题抽取,进一步把相关维度进行合并,进一步减少维度;而对于升维,我们可以把维度进行矩阵化,例如假设物品X有A和B两个维度属性,那么我们通过生成A*B矩阵的方式,把维度扩充到A*B个维度。

03 冷启动问题的解决

所谓冷启动,即在推荐系统初期时,没有任何用户与物品的交集信息,即无用户的行为轨迹,无法通过类似协同或者用户偏好等方式进行推荐,这种时候,我们就称推荐系统处于冷启动状态。

这种情况,我们需要尽快的累积起第一批用户行为轨迹。我们可以通过基于内容的推荐,或者做一些其他类似的操作,快速有效的进行物品推荐。一段时间后,累积到一定的用户行为时,整个系统就能够正常使用协同过滤等方式进行推荐了。

但是,针对于新加入的用户,或者新加入的物品,同样也是出于冷启动状态的,这个时候,我们通过需要对这种物品或者用户做特殊的处理。

除了基于内容属性的推荐,我们还有其他的一些策略用于弥补这种行为数据不足的情况,比如典型的热度模型,推荐热点信息这种行为虽然low,但是从整体的反馈来看,还是有一定效果的,此外,还可以根据一些统计学上的结论,进行基于统计分析结论的推荐。

除此之外,我们也可以通过其他渠道收集用户的数据,比如用户注册的时候所填写的个人资料,这些都是可以作为推荐的原始依赖数据。

04 马太效应

马太效应或者说长尾效应,即热者愈热,实际举例来说就是,在实际的购买场景中,由于你推荐的次数越多,部分优质的商品购买或者点击的次数就越多,形成的用户购买轨迹就越多,所以得到的推荐机会就越多,进而产生的推荐也越多,变得越热。

随着不断迭代,子子孙孙无穷尽也,这样得到推荐的商品就会集中在少部分商品中,而大部分长尾商品是沉寂的,一个推荐系统如果长时间处于长尾效应中,造成推荐疲劳,其推荐效果就会减弱。

所以,一个好的推荐系统,要考虑到适当的挖掘长尾商品,通过真的个性化,把适当的长尾商品送到真正需要他们的人手里,在实际的操作过程中,我们可以适当的进行热度降权,从而让一些中下层的商品得到更多的曝光机会,当然前提是保证点击率的情况下。

另外一个场景会形成马太效应的是热度模型,即我们的热度榜单,长时间的高居榜首,一定会获得更多的点击,而点击越多其热度越高,但我们的信息是需要保持新鲜度的,不然点击率迟早会下架的。

所以,我们使用一些机制让处于头部的商品或者信息降权,时间衰减是一个比较通用的做法,即随着时间的迁移,其整体热度会不断的下降,至于说下降的方式,速率就看模型的设计了。

05 AB测试

关于推荐的效果,之前我们说过其核心的考核标准就是点击率,点击的越多说明推荐的越准确,用户的停留时长也会越长,只要把用户留在平台中,机会总是会有的。其实就是一层漏斗嘛?这一层的基数越大,下一层转换的量就会越高,这也是推荐系统的核心存在意义。

并且之前也说到过,一个不好的推荐系统有时间反而会形成反向作用,所以,一个推荐系统的迭代更新至关重要。离线的效果评估一定是要做的,最起码在离线实验的阶段需要保证当前的效果优于线上效果,才能进行迭代。

但是,实际情况是复杂的,对于推荐的模型来说,离线的实验其实并没有想象中靠谱,那么,就丢到线上去真多真枪的实验一把,就知道效果了。但是,实际的生产环境中,任何一点转化波动的影响都是极其严重的,谁也不敢拿实际生产开玩笑。

于是,就有了AB测试机制的产生,所谓AB测试机制,即将流量分为AB两类,A流量走原始的旧模型,B流量走新模型,同步测试同步对比,效果一目了然。

当然,在实际的AB测试流程中,首先流量是可以自由分配的,一般情况下新模型在最终确认之前流量一定是少量的,随着模型逐渐被验证,流量比重会逐渐加大,最终确认后流量全部导向新模型,完成新模型的正式上线。

并且,通常,在实际的环境中,或许我们会同时有十多个甚至是几十个新模型在同时实验,每个模型调整的因子都不一样,最终选择最适合的因素进行调整,达到效果最优,这也就是AB测试机制的魅力所在。

所以,打造一个好的AB测试系统,首先流量是需要可控的,其次模型的迭代上线是需要高度灵活的,最后,肯定是需要有完整的数据回收、数据分析对比机制存在的。

这篇大概就这些了,核心还是一些推荐系统相关知识点,哪怕是非技术人员也是比较容易理解的,并且对于推荐场景,个人认为只要是从业者都应该或多或少了解一些相关的机制。

在下一篇,我们将正式进入到实操层,并且结合实际的推荐案例来学习推荐算法的流程。

06 相关阅读

《推01,你们是不是都感觉自己少了个推荐系统?》

关于我:

大数据行业半个老鸟,我家梓尘兄的超级小弟,会敲代码、会写文章,还会泡奶粉哄小屁孩。

想和我交流的,可以加我个人微信mute88,可以拉你入交流群,但请注明身份and来意~

如果觉得文章用些用,欢迎分享给你的朋友。

Image

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK