深入浅出推荐系统之简单推荐模型

先来回答一个最关键的问题:到底什么是推荐系统?

下面从3个角度来回答:

  • 它能做什么
  • 它需要什么
  • 它怎么做

先来第一个问题推荐系统能做啥?

推荐系统可以把那些最终会在用户(User)和物品(Item)之间产生的连接提前找出来。

此处关键就在于提前二字,推荐系统要从一个巨大的网络中,去提前发现人和物品之间的连接,并帮助这条连接尽可能早的建立起来。

第二个问题它需要什么? 发现人和物品之间连接的前提是,已经有足够多的连接存在了,推荐系统才可能去预测未来的连接。

第三个问题,怎么做? 有很多方式,本系列主要讲通过机器学习的方式。

我们现在知道了什么是推荐系统后,再来看下一个问题:我们什么时候需要推荐系统?

前面从3个方面介绍了什么是推荐系统,我们如果需要去预测连接,并且已经有足够多的连接了,那这个时候推荐系统就是必须的了。

上面有一个不好量化的点是:怎么去定义连接是否足够多?首先我们得知道影响人和物品连接的因素有哪些?

1. 第一自然是物品数本身,如果产品中物品很少,少到用人工就可以应付过来,那么用户产生的连接肯定不多,因为连接数量的瓶颈在于物品的数量,这时候不适合搭建推荐系统。

2. 第二是用户和物品数量在某些手段下也变得很多,但是用户和物品之间的连接很少,表现就是用户的留存回访很低,这时候也不是很需要一个推荐系统,此时应该想办法找到用户流失的原因,直到他们能贡献第一批连接才行

我们有一个简单的公式来判断是否需要推荐系统:

分子是增加的连接数,分母是增加的活跃用户数和增加的有效物品数。

  • 如果增加的连接数主要靠增加的活跃用户数和增加的物品数贡献,则该值会较小,不适合加入推荐系统;
  • 如果增加的连接数和新增活跃用户和物品关系不大,那说明连接数已经有自发生长的趋势了,适合加入推荐系统加速这一过程。

下面我们开始介绍最简单的推荐系统:基于流行度的推荐模型。

流行度模型

推荐系统中最基本的推荐模型:基于流行度的推荐模型,通俗讲就是什么内容吸引用户就推荐用户什么内容。

这边一个衡量内容的标准是流行度,而影响物品流行度的因素有两个:

  • 时间:上下班时间,大家打开头条的可能性会大于其他时间段,自然文章的关注度就高,但是这并不能表明文章的质量就高。
  • 位置:这个“位置”并不是真正的地理位置,而是在一个服务或者网站的什么位置显示你的物品。比如说,在绝大多数的搜索引擎服务中,排名第一的物品所受到的关注度很可能大大高于排名第二和之后的物品。

因此,我们在衡量流行度上就不能使用绝对值,而应该使用的是一个“比值”(Ratio),或者是计算某种“可能性”(Probability)。

一个可行的方式就是计算点击率。如果从数学上对点击率建模,其实可以把一个物品在显示之后是否被点击看成是一个“伯努利随机变量”,于是对点击率的估计,就变成了对一个伯努利分布参数估计的过程。

对于伯努利参数估计,我们可以采用最大似然估计,假设点击的概率为p,则总共N次展现,其中有n次点击,则出现的概率为:

P = p^n * (1-p)^(N-n)

对上面的概率两边取log,得到

log(P) = nlog(p) + (N-n)log(1-p)

求导,得到p=n/N的时候得到极值。

但是当物品的N或者n为0的时候,此时通过最大似然得到的p其实都不是很准确。

于是现在我们遇到的问题是:N或者n为0 的时候,此时最大似然估计并不能很好地反应这些物品的真实属性。

一种解决方法是采用先验分布,这就引出了共轭先验分布的概念。

伯努利分布的共轭分布是beta分布,其用到了贝叶斯公式,其核心公式是:

后验分布 = 似然函数* 先验分布/ P(X)

关于共轭先验这部分可以查看之前的文章主题模型:LDA 数学基础(https://www.zybuluo.com/zhuanxu/note/1016850),此处我们知道Beta分布给出了p的先验分布即可。

另外一种解决方案是基于不同的时间段来预估点击率,我们可以使用上一时间段的点击率作为先验知识来更加准确地估计现在这个时段的点击率。

相似度模型

介绍完基于流行度的推荐模型后,我们接着看基于相似信息的推荐模型,这类模型又叫做协同过滤,其总结起来就是:

相似的用户可能会有相似的喜好,相似的物品可能会被相似的人所偏好。

于是我们就要去寻找相似的用户或者相似的物品。

协同过滤的核心思想是借用数据,具体理解就是在用户 A 数据不足的情况下,我们挖掘到可以借鉴的用户 B,从而利用用户B的数据来完善A。

其原理是我们把用户 A 和用户 B“聚类”到了一起,认为他们代表了一个类型的用户。我们把对单个用户的建模抽象到了某个类型的用户,从而能够获得更多的数据。

协同主要有两类:

  • 基于记忆的协同
    • 用户协同
    • 物品协同
  • 基于模型的协同

基于记忆的协同,其重点在于记忆,记住每个人消费过的物品,然后给他推荐,此时又可细分为

  • 用户协同:跟你相似的人都消费过什么
  • 物品协同:跟你消费过物品相似的物品有哪些

因此基于记忆的协同,重点就在于去找相似的用户或者相似的物品,我们先来看相似的用户。

用户协同

用户协同背后的思想是:根据用户的历史行为,对用户进行聚类,然后基于同一类用户的共同喜好,给用户推荐物品。

用户协同的核心公式:

我们来解读下上面的公式:

公式左边的

表示用户u对物品i的预测,公式右边是一个关于用户u和用户j的一个相似度加权,

表示用户u和用户j的相似度,

表示用户j对物品i的评分。

有了上面的公式后,我们就来看实际生产中要运用的话,需要注意的几个地方:

1. 用户向量我们通过物品来表示,如果物品个数很多,则用户向量维度很高,计算向量相似度耗时

2. 因为要计算任意两个用户的相似度,所有复杂度为

3. 要计算每个用户和物品之间的相互关系,复杂度是

针对上面的问题,可以看我github上的代码(https://github.com/zhuanxuhit/kaggle/blob/master/tencentAd/2-协同过滤版本.ipynb)是如何解决的,欢迎大家star。

物品协同

物品协同的关键公式如下:

有了前面用户协同的基础后,可以很容易的看懂。此处我们需要记住的关键点是:

  • 用户协同由于用户基数远大于物品数,所有计算成本高
  • 用户协同中,用户和用户之间有共同的消费行为实际上是比较少的,即使有一般也都是热门物品,对用户相似度计算帮助不大
  • 用户的喜好相比于物品的特征变化快

总结来说:物品协同就是根据用户已有记录的物品,去找跟这些物品最相似的物品。

slope one 算法

slope one 算法是面对物品协同中模型无法在线更新的问题而提出的。

其主要创新点在于引入了:

1. 通过引入两个物品的共同用户数量来代表两个物品差距的置信程度

2. 模型可以在线实时更新

总结

本文介绍了两种推荐模型:

  • 基于流行度的推荐模型
  • 基于相似信息的推荐模型和基于内容特征的推荐模型

其中基于流行度的模型简单有效,可以通过一些先验知识,解决部分冷启动问题,而基于相似信息的推荐模型则是充分利用群里智慧,通过聚类的方式来解决用户、物品稀疏的问题。

出处:https://www.zybuluo.com/zhuanxu/note/1104086

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

原文发布于微信公众号 - Spark学习技巧(bigdatatip)

原文发表时间:2018-04-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏量子位

视频干货 | Goodfellow讲解GANs(NIPS 2016)

这是Ian Goodfellow在NIPS 2016讲解生成对抗网络GANs的完整视频。Goodfellow被称作“GANs”之父,目前是OpenAI的研究科学...

1889
来自专栏AI科技大本营的专栏

Yann LeCun:距离“真正的” AI,我们还缺什么?

【AI科技大本营导读】今天是 GMIC Beijing 2018 大会第一天,首个演讲者是 Facebook 首席 AI 科学家 Yann LeCun。他讲述...

1012
来自专栏谭学仕的专栏

【SPA大赛】菜鸟在数据挖掘中的体验

本文从四个方面分享了参加腾讯社交广告比赛的一些想法以及从中吸取的经验和教训。

3740
来自专栏新智元

Keras之父:大多数深度学习论文都是垃圾,炒作AI危害很大

编辑: 常佩琦 【新智元导读】 Keras之父、谷歌大脑人工智能和深度学习研究员François Chollet 近日接受采访,对自己的新书《Python深度...

3928
来自专栏PPV课数据科学社区

深度 | 地平线罗恒:应用深度学习的门槛是在降低吗?

导读: 地平线机器人资深算法研究员罗恒参加了钛坦白第33期,与百度资深工程师、Paddle API重构设计负责人于洋及第四范式联合创始人、首席研究科学家陈雨强一...

2966
来自专栏人工智能头条

AI 迟早灭了程序员

就目前的 AI 来看,判断某项工作是不是会被机器替代,有俩前提,大前提:可以获得足够的有效数据(能自动生成数据则无敌),也就是说机器有快速进化的基础;小前提:人...

392
来自专栏软件成本造价评估

如何对一个软件项目的成本进行评估或估算?

  在对一个软件项目进行成本估算或评估时,应该包括从项目立项直至项目研发活动结束所花费的资源总和,并且可以按阶段进行估算或测量。 软件成本估算的基本过程...

1592
来自专栏Python中文社区

数据挖掘入门与提升,从点数据到网络数据

提到社交网络分析,推荐系统、风控模型这些名词,相信你并不陌生,社交网络分析无非是 Pandas+Matplotlib,推荐系统大概率是余弦相似性、协同过滤,风控...

662
来自专栏新智元

TensorFlow 工程总监 Quora 问答:深度学习系统瓶颈及用户痛点

【新智元导读】TensorFlow 工程总监Rajat Monga9月29日在Quora 上答疑,就深度学习效率瓶颈、TensorFlow 用户的痛点、如何用T...

38911
来自专栏QQ会员技术团队的专栏

个性推荐理论与实践(上篇)

为什么要做个性推荐这个事情,比较常见的答案就是要做精细化运营。对于个性装扮业务也是一样,因为个性装扮的物品越来越多,表情就有1600多套,加上原创开放平台的上线...

3230

扫码关注云+社区