第05课:融合了用户兴趣的推荐才更具个性(原理)

在第04课中,我们已经成功的从推荐系统的基本知识过渡到了推荐算法,并且进行了最最最简单的推荐算法深入了解,包括进行了代码工程的熟悉。

在上个推荐算法的学习中,我们了解了基于内容的相似或者相关推荐,实际上这种推荐机制只会针对于商品也就是 ITEM 本身的属性进行候选集推荐,而这种推荐机制和用户没有任何的关系,它的候选推荐集不会随着用户的改变而改变,更不会随着用户的行为变更而进行变更。

你会发现,这种推荐机制相对是比较“呆板”的,而我们一般说起推荐系统,往往都会说个性化推荐,那么核心就在于如何让推荐更具有个性化,所谓个性化即跟随用户本身的不同而进行个性化的信息推送。

个性化与用户画像

什么是个性化

在进行算法层面的学习之前,我们进一步来探讨什么是个性化。个性化一定是与人相关的,只有人才有个性,每个人都可能有自己的个性,推送的信息如果能满足用户的个性,才是一个好的推荐系统,才具有足够的智能。

所以,要实现推荐的个性化,那么就需要研究用户,对用户进行分析,分析用户的偏好,然后根据偏好来进行对应的候选推荐。

而对用户的分析,实际上又回到了对用户进行画像构建。

用户画像的构建

对于用户画像的构建,实际上是分多层次的用户信息挖掘,而每个层次都会有对应不同的用户标签,最终我们通过用户的整体描述,从而对用户形成一个完整的认知。

以电商的用户为例,我们一般会从基本属性、购买能力、行为特征、社交网络、心理特征、兴趣爱好等各个维度进行用户的描述。

有一部分属性可能是用户的入口属性,直接可以获取,拿来即用,比如用户的姓名、填写的性别资料、年龄资料等;而有一部分属性则需要我们进一步的获取,通过基于统计的维度进行判断,比如用户喜欢什么颜色、喜欢什么品牌等,这些是可以通过用户的购物行为、浏览行为等进行统计判断的;而有些特征则需要我们进行算法模型的构建来判断,比如用户的购物心理,到底是冲动型购物,还是理性型购物,我们可以通过用户的行为来建模,比如分类模型来通过用户的行为进行分类,而基础的输入信息就是用户的购物行为/浏览行为、优惠券的行为等。

1-2

在实际的操作中,可能我们并不会严格的按照上述的套路来,但我们会尽可能的对用户多维的进行分析,如上图,如果我了解用户的偏好类目、偏好的消费领域以及能承受的价格区间,再结合年龄性别等信息,在我为其推荐的过程中,基本上推送的商品偏差就会小很多,达到真正的个性化推荐,又所谓的千人千面,因为每个人的画像都可能不一样,那么所获取的推荐列表自然就不同了。

在实操中还有很多需要处理的问题

如上,基于用户画像的推荐机制在实际操作中,其实还有很多需要考虑的地方,并没有想象中简单。

用户的行为并没有我们想象中靠谱

所谓没想象中靠谱是说,一方面用户的行为数据,有时候并不是其兴趣特点所表现,这点很显然,比如如果系统把一些信息故意放在很显眼的位置,那么对于一般用户来说,不点也得点了,所以就会造成这种用户数据其实是不那么靠谱的。

另一方面如果用户产生了行为数据,但是行为数据并不足够多,那么这个时候其实这些行为数据是有置信度的考量的,行为数据不够产生的描述是有可能形成偏差的,再根据有偏差的数据去做推荐,那结果只能是更离谱了。

用户兴趣时效性问题

在上面的实验逻辑中,我们知道并没有对用户的行为数据做更多的过滤,而实际的操作中,用户的兴趣是有一定时效性的。举个例子,我在一年前看电影的记录,还适合放到现在做我的画像分析吗?不一定的,因为我的兴趣可能已经随时间偏移了,过去我所喜欢的东西,现在我不一定喜欢了。

所以,在一般实际操作的过程中,一定需要分辨用户的兴趣数据的有效性,一般情况下,我们会进行长期兴趣和短期兴趣的区分,人在一定时间内其兴趣是固定的,并且在一些很短暂的时间段内,比如一两天、甚至是一天内,其关注点是有一定意义的,这个时候其短期兴趣就生效了。

所以,我们在实际操作的时候,长期兴趣、短期兴趣的具体的应用就需要结合实际的场景区分了,需要注意原始数据是否适合做兴趣描述的来源数据,是否已经失效。

冷启动的问题

所有涉及到行为数据的推荐算法,都绕不开冷启动的问题,即一个用户是个新手,没有任何行为记录留下,这意味着我们就无法分析其画像了,这个时候就称之为该用户的冷启动。

在第 03 课中,我们有提到过接近冷启动的一些方式,比如基于内容推荐(见第 02 课),进行热点内容推荐(比如把最热门的一些电影推给该用户),还比如根据整体数据做关联推荐(这个后面再讲),方式很多、效果不一,需要根据具体情况来看了,再不行就想办法在用户注册的时候尽可能的收集用户的静态数据,再根据用户的静态画像数据来推荐,总比乱推的好。

匹配计算的问题

在上面的例子中,我们其实并没有做过多匹配计算逻辑的讲解,只是简单描述同纬度的进行相似计算,然后上层做权重模型,其实就是一种很普通的匹配计算的过程。准不准,难在于外层权重的合理性,具体过程见第01课,这里就不过多阐述。

其实这算是我们有意为之了,如果有些时候没法让不同主体(用户 & 内容)形成同一个维度矩阵的时候,这个时候其实就要有比较合理的映射机制了,能让内容与用户的属性做关联计算。

基于用户画像的推荐的简单示例

针对基于用户画像的推荐,同样,我们结合简单的一些公开的实验数据,来构建基于用户画像的推荐示例,还是基于 Spark 来做练习。

需要注意的是,这里的推荐触发点是不同的,在上个示例中,我们的触发点是当浏览到某个 item 时,根据 item 的属性进行推荐,而这个示例则是当检测到某个用户时,根据用户进行个性化的推荐。

示例的数源

关于数据源,我们依然沿用上个工程示例的数据源,具体对于数据源的介绍,这里就不做重复说明,有需要了解的朋友请参考上两个章节内容。

从上次的数据源情况中我们可以知道,实际上打标的行为数据有 10 万条,评分数据有 100 万条,相对于电影内容数据实体来说已经不少了,所以,不用担心,针对于有行为记录的用户,或多或少都能描述出他们的一些行为偏好的。

用户兴趣标签提取

2-2

基于上面的流程图,在实践中,首先需要做的就是用户兴趣标签的提取,我们核心拥有的就是用户对电影的打标签数据,以及用户对电影的评分数据。

所以,从上面两个行为数据集中,我们可以尝试提取以下几个维度的用户偏好数据:

  • 用户对电影类目偏好数据,即用户对哪些类目偏好。
  • 用户的偏好兴趣标签,即通过用户对电影的偏好标签打标行为,可以进一步提取用户的兴趣标签。
  • 用户的偏好年份,通过打分数据来描述用户偏好哪个年代的电影。

先解决用户的偏好标签问题,我们已有的是用户对电影的打标签行为数据,实际上这是电影层级的标签,所以需要在这个基础上,最终直接为用户映射上这些特征标签。

所以,需要对单个用户的所有打标数据进行合并(标签会做预处理),然后如果用户对刚好打标签的电影有评分的话,还需要带上评分权重,最终合并这些标签,形成用户带权重(本身的频度、对应电影的评分)的标签集,这就是用户的一些兴趣点。

对于类目偏好,说起来就简单了,比如通过评分表,我们把对应所有的电影都取出来,然后分析其类目,将评分作为对应类目的权重,然后将类目进行合并,最终求取用户的类目偏好合集。

对于电影年份,过程与上述取类目的过程类似,最终获取到年份偏好。

电影数据的处理

假设在上面的基础上,我们已经获取了用户层级的画像属性信息,如偏好的电影类别、偏好的特征标签、偏好的某些年份的电影(同个时代电影具有一些相同的电影,比如 10 年前的电影风格与现在的俨然不同,年份在某种程度上说还是有影响的,虽然很弱)。

接下来,需要绘制候选集电影的属性(取之前,做一些初筛过滤操作,减少计算量),对应用户的属性,同样是三个,其中年份、类目都是直接存放于电影表中,唯一需要额外处理的就是特征 Tag 了,由于不同人对不同的电影进行 Tag 标记,上面进行用户画像绘制的时候,是以人为维度的,现在已电影为维度,进行标签合并,最终同样可以形成电影维度的标签集。

关联推荐计算

每个维度分别进行计算相似度或者相关度,然后不同维度进行合并归一计算最终的用户与电影的相关度。最外层我们依然以权重模型去做,以经验来看,类目是最重要的,其次是 Tag,最后才是年份属性,至于最终怎么调整还是需要根据实际反馈数据来做微调,现在就拍脑袋吧。

3-1

最后

下篇我们将结合上面的逻辑过程,来讲讲如何结合实验数据,通过 Spark 进行用户画像的绘制,然后根据画像结果进行示例候选推荐。

(全文完)

(转载本站文章请注明作者和出处 第05课:融合了用户兴趣的推荐才更具个性(原理)