个性化推荐系统-简介及常用名词

在互联网的大浪潮中,了解下推荐系统和相关算法还是大有必要的,本文首先从应用场景入手,并介绍一些专业术语和常见算法。

个性化推荐

我们要知道个性化推荐一般会有两种通用的方法,包括基于内容的个性化推荐,和基于用户行为的个性化推荐。基于用户行为的推荐,会有基于物品的协同过滤(Item-CF)与基于用户的协同过滤(User-CF)两种。
而协同过滤往往都是要建立在大量的用户行为数据的基础上,在产品发布之初,没有那么大量的数据。所以这个时候就要依靠基于内容的推荐或者热度算法。

基于内容的推荐

一般来说,基于内容的推荐的意思是,会在产品初期打造阶段引入专家的知识来建立起商品的信息知识库,建立商品之间的相关度。
比如,汽车之家的所有的车型,包括了汽车的各种性能参数;电商网站中的女装也包括了各种规格。
在内容的推荐过程中,只需要利用用户当时的上下文情况:例如用户正在看一个20万左右的大众轿车,系统就会根据这辆车的性能参数,来找到另外几辆与这辆车相似的车来推荐给用户。
另外一种情况是纯文本的内容没有明确的参数特征,在这种情况下,需要通过文本分析技术来自动提取文本的关键词(通过自然语言技术的进行分词),通过数据挖掘来找到文本与文本之间的联系和相似性。

帮用户找到想要的东西,谈何容易。商品茫茫多,甚至是我们自己,也经常点开淘宝,面对眼花缭乱的打折活动不知道要买啥。在经济学中,有一个著名理论叫长尾理论(The Long Tail),套用在互联网领域中,指的就是最热的那一小部分资源将得到绝大部分的关注,而剩下的很大一部分资源却鲜少有人问津。这不仅造成了资源利用上的浪费,也让很多口味偏小众的用户无法找到自己感兴趣的内容。

另外,由于各种社会热点话题普遍是人们关注较高的,以及由于在产品发展初期,没有收集到大量用户数据的情况下,“热度算法”也是一种惯常使用的方式,例如微博热搜,新闻客户端的热点新闻;热点不会永远是热点,而是具有时效性的。而热度算法在使用时也需要考虑到如何避免马太效应:毋庸置疑的是,在滚雪球的效应之下,互联网民的消费&观点
行为会趋同,就像前一阵《战狼2》的热映一样,史无前例的票房成绩完全取决于铺天盖地式的宣传,而群体将会成为乌合之众。

协同过滤包括两种类型:

1.Item-CF(基于物品的协同过滤):

小明在网站上看了《超人归来》的电影,系统就会推荐与这部电影的相似的电影,比如《蜘蛛侠2》给小明。这是基于电影之间的相似性做出的推荐。(注意:两部电影时间的是否相似是由大量用户是否同时都看了这两部电影得到的。如果大量用户看了A电影,同时也看了B电影,即可认为这两部的电影是相似的,所以Item-CF仍然是基于用户行为的。)

2.User-CF(基于用户的协同过滤):

小明在购物网站上买了一副耳机,系统中会找出与小明相似的“近邻好友”他们除了买耳机之外,还买了什么。如果与小明相似的“近邻”小华还买过音箱,而这件东西小明还没买过,系统就会给小明推荐音箱。这是基于用户之间的相似性做出的推荐。

注:这里的CF=collaborative filtering

而这两种类型的协同过滤都是要基于用户行为来进行。

而除了协同过滤之外,还有基于内容的推荐、基于知识的推荐、混合推荐等方式。

冷启动问题

数据来源

众所周知,对推荐系统的个性化推荐算法需要运用来自用户的数据,那么这些数据都是来自于哪里,为我们所用呢?
基于用户行为数据:
举个好玩的例子:通过GPS信号,可以测得手机速度以及位置,当用户的手机在早上8点由高速变成低速,可以判断是从地铁出来,就可以向他推荐附近的麦当劳早餐优惠券了。
另外,运营商是可以得到用户手机访问过的网页数据的,通过文本挖掘,可以了解用户的偏好,如看过很多足球类的文章,可以了解用户为喜欢足球的用户,而喜欢足球的用户很大的可能性是男性,则可以多推送一些相关的体育新闻内容,甚至男性用品(比如剃须刀)广告给他。
基于社交网络数据:
通过用户的社交网络数据可以基于好友关系,推荐朋友给用户。当小红和小明同时有10个朋友,那就说明他们在一个朋友圈子。他们共同好友越多,就更有可能在两个人之间做相互推荐。
基于上下文的数据:
上下文的数据又可以分为两种,时间上下文与地点上下文。
举一个栗子,在时间上下文的情况下,某外卖app需要根据早中晚人们的用餐习惯来给用户推送不一样的食物或者优惠券,这样推荐不同的食物更符合用户的习惯。
另外根据地点的上下文说的是,如果你在办公室用某外卖app点一份外卖,那么推荐给你的外卖餐厅是要离你较近的,而不是推送十公里以外的餐厅。

评价指标

精确率与召回率(Precision & Recall)

精确率和召回率是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量。其中精度是检索出相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率;召回率是指检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率。

精确率 = 提取出的正确信息条数 / 提取出的信息条数
召回率 = 提取出的正确信息条数 / 样本中正确的信息条数

两者取值在0和1之间,数值越接近1,查准率或查全率就越高。
F值 = 精确率 召回率 2 / (精确率 + 召回率) (F 值即为正确率和召回率的调和平均值)

举个例子:
某池塘有1400条鲤鱼,300只虾,300只鳖。现在以捕鲤鱼为目的。撒一大网,逮着了700条鲤鱼,200只虾,100只鳖。那么,这些指标分别如下:
精确率 = 700 / (700 + 200 + 100) = 70%
召回率 = 700 / 1400 = 50%
F值 = 70% 50% 2 / (70% + 50%) = 58.3%

不妨看看如果把池子里的所有的鲤鱼、虾和鳖都一网打尽,撒一大网,逮着了1400条鲤鱼,300只虾,300只鳖,这些指标又有何变化:
精确率 = 1400 / (1400 + 300 + 300) = 70%
召回率 = 1400 / 1400 = 100%
F值 = 70% 100% 2 / (70% + 100%) = 82.35%
由此可见,正确率是评估捕获的成果中目标成果所占得比例;召回率,顾名思义,就是从关注领域中,召回目标类别的比例;而F值,则是综合这二者指标的评估指标,用于综合反映整体的指标。

当然希望检索结果Precision越高越好,同时Recall也越高越好,但事实上这两者在某些情况下有矛盾的。比如极端情况下,我们只搜索出了一个结果,且是准确的,那么Precision就是100%,但是Recall就很低;而如果我们把所有结果都返回,那么比如Recall是100%,但是Precision就会很低。因此在不同的场合中需要自己判断希望Precision比较高或是Recall比较高。如果是做实验研究,可以绘制Precision-Recall曲线来帮助分析。