推荐算法小结

推荐系统的必然

互联网发展到现阶段,信息已经不是匮乏,而是爆炸。所以良好的用户体验就是把用户喜欢的,感兴趣的从大量的数据中筛选出来,再呈现给用户,实现千人千面的效果。

所以推荐系统的出现就是必然了,他可以推荐每个用户感兴趣的产品,同时也将每个产品呈现到感兴趣的用户面前。实现用户和产品的双赢。

推荐系统架构

一个常见的推荐系统架构一般如下图:
这里写图片描述
可以看到分为数据来源、推荐引擎和推荐交互三个方面。
数据 60%,产品30%,算法10%,这是一个基本的共识

数据来源

将一个产品推荐给一个用户。设计到的对象有两个,产品和用户。还有两者的交互。所以数据源有三个方面。

  • 产品数据:价格,标签,类别等
  • 用户数据: 性别,年龄,年级等
  • 交互数据:对产品的评价打分(构建评价模型)

评价模型,通过真实的用户行为数据构建,包括对产品是否浏览,浏览时间,是否收藏,是否分享等等。通过这些指标构建评价模型。(相关性分析+回归?)

推荐引擎

推荐引擎主要是推荐系统的算法,主要包括 基于人口统计学的推荐,基于内容的推荐,协同过滤三种。下文详细分析。

另外现在推荐引擎都构建在搜索引擎的基础上,贴一个推荐架构:
这里写图片描述
这是基于Mahout 和 Elasticsearch 实现推荐系统
更多见这里

用户交互

不要将“推荐”理解为“推送”
如果主动推送给用户,很有可能会引起用户反感,虽然在一定程度上会提升用户活跃度。当然这个也可以通过算法去控制要不要主动推送,对于活跃度一直很低的可以主动推荐,甚至是通过发短信来推送,其他用户则可以转为被动。

当下无数的互联网产品都有一个“发现”模块,包括微信,Twiiter等大量产品。用户有需求的时候,会主动的找“推荐”,避免被打搅。而对于推荐系统,也避免对用户形成打扰,引起用户反感。

参考这里

推荐算法

基于人口学的推荐

核心是基于用户数据建模
这里写图片描述
这是最为简单的一种推荐算法,它只是简单的根据系统用户的基本信息发现用户的相关程度,然后将相似用户喜爱的其他物品推荐给当前用户。

系统首先会根据用户的属性建模,比如用户的年龄,性别,兴趣等信息。根据这些特征计算用户间的相似度。比如系统通过计算发现用户A和C比较相似。就会把A喜欢的物品推荐给C。

  • 优势:
    a 不需要历史数据,没有冷启动问题
    b 不依赖于物品的属性,因此其他领域的问题都可无缝接入。
  • 不足:
    算法比较粗糙,效果很难令人满意,只适合简单的推荐

推荐系统的「冷启动」包含两个层面:

  1. 用户的冷启动,应该是80%的「冷启动」所描述的问题,新的用户因为没有在产品上留下行为数据,你自然无法得知他/她的喜好,从而做出靠谱的推荐。这时一般需要借助用户的背景资料,或者引导性地让用户选择,或者暂时用热门启动替代个性化推荐来解决,在线推荐系统可以做到在用户产生行为数据后立马更新推荐列表。
  2. 物品的冷启动,主要适用于ItemBased的场景,即对一个物品推类似的物品,因为新物品还没有用户行为数据,自然也就没有办法通过协同过滤的方式进行推荐,这时一般会利用物品属性的相关程度来解决。
    作者:ershou
    链接:https://www.zhihu.com/question/19668164/answer/39133343
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

基于内容的推荐

核心是基于内容数据建模
这里写图片描述
与上面的方法相类似,只不过这次的中心转到了物品本身。使用物品本身的相似度而不是用户的相似度。
系统首先对物品(图中举电影的例子)的属性进行建模,图中用类型作为属性。在实际应用中,只根据类型显然过于粗糙,还需要考虑演员,导演等更多信息。通过相似度计算,发现电影A和C相似度较高,因为他们都属于爱情类。系统还会发现用户A喜欢电影A,由此得出结论,用户A很可能对电影C也感兴趣。于是将电影C推荐给A。

  • 优势:
    对用户兴趣可以很好的建模,并通过对物品属性维度的增加,获得更好的推荐精度
  • 不足:
     a 物品的属性有限,很难有效的得到更多数据
     b 物品相似度的衡量标准只考虑到了物品本身,有一定的片面性
     c 需要用户的物品的历史数据,有冷启动的问题

协同过滤

核心是用户交互数据建模
基于协同过滤的推荐可以分为三个子类:基于用户的推荐(User-based Recommendation),基于项目的推荐(Item-based Recommendation)和基于模型的推荐(Model-based Recommendation)。

基于用户的协同过滤推荐

它的基本假设是,喜欢类似物品的用户可能有相同或者相似的口味和偏好。根据所有用户对物品或者信息的偏好,发现与当前用户口味和偏好相似的“邻居”用户群,在一般的应用中是采用计算“K- 邻居”的算法;然后,基于这 K 个邻居的历史偏好信息,为当前用户进行推荐。
这里写图片描述
假设用户 A 喜欢物品 A,物品 C,
用户 B 喜欢物品 B,
用户 C 喜欢物品 A ,物品 C 和物品 D;
从这些用户的历史喜好信息中,我们可以发现用户 A 和用户 C 的口味和偏好是比较类似的,同时用户 C 还喜欢物品 D,那么我们可以推断用户 A 可能也喜欢物品 D,因此可以将物品 D 推荐给用户 A。

基于用户的协同过滤推荐机制和基于人口统计学的推荐机制都是计算用户的相似度,并基于“邻居”用户群计算推荐,但它们所不同的是如何计算用户的相似度,基于人口统计学的机制只考虑用户本身的特征,而基于用户的协同过滤机制是在用户的历史偏好的数据上计算用户的相似度

基于项目的协同过滤推荐

基于项目的协同过滤推荐的基本原理也是类似的,只是说它使用所有用户对物品或者信息的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户。
这里写图片描述
假设用户 A 喜欢物品 A 和物品 C,
用户 B 喜欢物品 A,物品 B 和物品 C,
用户 C 喜欢物品 A,
从这些用户的历史喜好可以分析出物品 A 和物品 C 时比较类似的,喜欢物品 A 的人都喜欢物品 C,基于这个数据可以推断用户 C 很有可能也喜欢物品 C,所以系统会将物品 C 推荐给用户 C。

与上面讲的类似,基于项目的协同过滤推荐和基于内容的推荐其实都是基于物品相似度预测推荐,只是相似度计算的方法不一样,前者是从用户历史的偏好推断,而后者是基于物品本身的属性特征信息

基于模型的协同过滤推荐

基于模型的协同过滤推荐就是基于样本的用户喜好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测,计算推荐。

协同过滤小结

  • 优点:
    a. 它不需要对物品或者用户进行严格的建模,而且不要求物品的描述是机器可理解的,所以这种方法也是领域无关的。
    b. 这种方法计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好
  • 缺点:
    a. 方法的核心是基于历史数据,所以对新物品和新用户都有“冷启动”的问题。
    b. 推荐的效果依赖于用户历史偏好数据的多少和准确性。
    c. 在大部分的实现中,用户历史偏好是用稀疏矩阵进行存储的,而稀疏矩阵上的计算有些明显的问题,包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等等。
    d. 对于一些特殊品味的用户不能给予很好的推荐。
    e. 由于以历史数据为基础,抓取和建模用户的偏好后,很难修改或者根据用户的使用演变,从而导致这个方法不够灵活。

推荐算法小结

  • 基于人口统计学或者内容的推荐
    仅仅考虑用户或者内容本身的特征,并相相同特征形成一个集合。这样,如果你选择了集合中的一个,就像你推荐集合中的另一个。
  • 基于协同过滤的推荐
    充分利用集体的智慧,即在大量的人群的行为和数据中收集答案,以帮助我们对整个人群得到统计意义上的结论。对象客观上不一定一样,但是主观的行为相似,就可以产生推荐。
    完全基于用户的行为习惯,即
    1)相似消费习惯的用户,很可能消费相同的东西 (可能两个消费习惯相同的用户,年龄,性别都不一样)
    2)相似消费习惯的产品,很可能同时被消费。(可能两个相似消费习惯的产品种类,大小都不一样)

推荐算法发展方向

1 需要考虑在保证推荐准确性的同时增加推荐的多样性,使特殊喜好的用户得到推荐
2 需要考虑用户对系统的实时反馈,更好的利用反馈数据强化推荐算法
3 考虑时间,空间,任务等因素,来更好的完成推荐
4冷启动问题的解决思路这里