《推荐系统实战》第一章 好的推荐系统

1.1 什么是推荐系统

个性化推荐系统:一个自动化的工具,它可以分析你的历史兴趣,从庞大的信息中找到符合你兴趣的物品供你选择。

充分研究用户的兴趣正是个性化推荐系统主要解决的问题。推荐系统通过发掘用户的行为,找到用户的个性化需求,从而将长尾商品准确地推荐给需要它的用户,帮助用户发现那些他们感兴趣但很难发现的商品。

几种方式:
(1)社会化推荐
让好友给自己推荐物品
(2)基于内容的推荐
通过分析用户曾经看过的电影找到用户喜欢的演员和导演,然后给用户推荐这些演员或者导演的其他电影
(3)基于系统过滤的推荐
如果能找到和自己历史兴趣相似的一群用户,看看他们最近在看什么电影,那么结果可能比宽泛的热门排行榜更能符合自己的兴趣。

推荐算法的本质是通过一定的方式将用户和物品联系起来,而不同的推荐系统利用了不同的方式。

1.2 个性化推荐系统的应用

个性化推荐系统在这些网站中的主要作用是通过分析大量用户行为日志,给不同用户提供不同的个性化页面展示,来提高网站的点击率和转化率。广泛利用推荐系统的领域包括电子商务、电影和视频、音乐、社交网络、阅读、基于位置的服务、个性化邮件和广告等。

1.3 推荐系统评测

准确的预测并不代表好的推荐。好的推荐系统不仅仅能够准确预测用户的行为,而且能够扩展用户的视野,帮助用户发现那些他们可能会感兴趣,但却不那么容易发现的东西。同时,推荐系统还要能够帮助商家将那些被埋没在长尾中的好商品介绍给可能会对它们感兴趣的用户。

常用指标:准确度、覆盖度、新颖度、惊喜度、信任度、透明度等。

1.3.1 推荐系统实验方法

主要有3种评测推荐效果的实验方法,即离线实验(offline experiment)、用户调查(user study)和在线实验(online experiment)。

(1)离线实验

优点:
不需要有对实际系统的控制权 
不需要用户参与实验 
速度快,可以测试大量算法
缺点:
无法计算商业上关心的指标
离线实验的指标和商业指标存在差距

(2)用户调查

扫描二维码关注公众号,回复: 4209254 查看本文章

用户调查需要有一些真实用户,让他们在需要测试的推荐系统上完成一些任务。在他们完成任务时,我们需要观察和记录他们的行为,并让他们回答一些问题。最后,我们需要通过分析他们的行为和答案了解测试系统的性能。
测试用户也不是随便选择的。需要尽量保证测试用户的分布和真实用户的分布相同。用户调查要尽量保证是双盲实验,不要让实验人员和用户事先知道测试的目标,以免用户的回答和实验人员的测试受主观成分的影响。
优点:
是可以获得很多体现用户主观感受的指标,相对在线实验风险很低,出现错误后很容易弥补。
缺点:
是招募测试用户代价较大,很难组织大规模的测试用户,因此会使测试结果的统计意义不足。此外,在很多时候设计双盲实验非常困难,而且用户在测试环境下的行为和真实环境下的行为可能有所不同,因而在测试环境下收集的测试指标可能在真实环境下无法重现。

(3)在线实验

AB测试是一种很常用的在线评测算法的实验方法。它通过一定的规则将用户随机分成几组,并对不同组的用户采用不同的算法,然后通过统计不同组用户的各种不同的评测指标比较不同算法
优点:
可以公平获得不同算法实际在线时的性能指标,包括商业上关注的指标。
缺点:
周期比较长,必须进行长期的实验才能得到可靠的结果。

一个新的推荐算法最终上线,需要完成上面所说的3个实验。
首先,需要通过离线实验证明它在很多离线指标上优于现有的算法。
然后,需要通过用户调查确定它的用户满意度不低于现有的算法。
最后,通过在线的AB测试确定它在我们关心的指标上优于现有的算法。

1.3.2 评测指标

(1)用户满意度

用户满意度时评测推荐系统的最重要指标。无法离线计算,只能通过用户调查或者在线实验获得。
可利用购买率度量用户的满意度。也可以用点击率,用户停留时间或转化率等指标度量用户的满意度。

(2)预测准确度

预测准确度度量一个推荐系统或者推荐算法预测用户行为的能力。这个指标是最重要的推荐系统离线评测指标。可通过离线实验计算。

a、评分预测

预测用户对物品评分的行为称为评分预测。
评分预测的预测准确度一般通过均方根误差(RMSE)和平均绝对误差(MAE)计算。

RMSE的定义为:

MAE的定义为:


RMSE加大了对预测不准的用户物品评分的惩罚(平方项的惩罚),因而对系统的评测更加苛刻。

假设我们用一个列表records存放用户评分数据,令records[i] = [u,i,rui,pui],其中rui是用户u对物品i的实际评分,pui是算法预测出来的用户u对物品i的评分,那么下面的代码分别实现了RMSE和MAE的计算过程。

def RMSE(records):
    return math.sqrt(sum([(rui-pui)*(rui-pui) for u,i,rui,pui in records]) / float(len(records)))

def MAE(records):
    return sum([abs(rui-pui) for u,i,rui,pui in records]) / float(len(records))

b、topN推荐

TopN推荐的预测准确度一般通过准确率(precision)/召回率(recall)度量。
令R(u)是根据用户在训练集上的行为给用户作出的推荐列表,而T(u)是用户在测试集上的行为列表。那么,推荐结果的召回率定义为:

推荐结果的准确率定义为:

下面的Python代码同时计算出了一个推荐算法的准确率和召回率:

def PrecisionRecall(test, N):
    hit = 0
    n_recall = 0
    n_precision = 0
    for user, items in test.items():
        rank = Recommend(user, N)
        hit += len(rank & items)
        n_recall += len(items)
        n_precision += N
    return [hit / (1.0 * n_recall), hit / (1.0 * n_precision)]

(3)覆盖率

覆盖率(coverage)描述一个推荐系统对物品长尾的发掘能力。

如果所有的物品都出现在推荐列表中,且出现的次数差不多,那么推荐系统发掘长尾的能力就很好。因此,可以通过研究物品在推荐列表中出现次数的分布描述推荐系统挖掘长尾的能力。如果这个分布比较平,那么说明推荐系统的覆盖率较高,而如果这个分布较陡峭,说明推荐系统的覆盖率较低。

在信息论和经济学中有两个著名的指标可以用来表征覆盖率:信息熵, 基尼系数

信息熵:

这里p(i)是物品i的流行度除以所有物品流行度之和。

基尼系数:

这里,ij是按照物品流行度p()从小到大排序的物品列表中第j个物品。


社会学领域有一个著名的马太效应,即所谓强者更强,弱者更弱的效应。如果一个系统会增大热门物品和非热门物品的流行度差距,让热门的物品更加热门,不热门的物品更加不热门,那么这个系统就有马太效应。

推荐系统的初衷是希望消除马太效应,使得各种物品都能被展示给对它们感兴趣的某一类人群。但是,很多研究表明现在主流的推荐算法(比如协同过滤算法)是具有马太效应的。评测推荐系统是否具有马太效应的简单办法就是使用基尼系数。如果G1是从初始用户行为中计算出的物品流行度的基尼系数,G2是从推荐列表中计算出的物品流行度的基尼系数,那么如果G2 > G1,就说明推荐算法具有马太效应。

(4)多样性

多样性描述了推荐列表中物品两两之间的不相似性。

假设s(i, j)[0,1]定义了物品i和j之间的相似度,那么用户u的推荐列表R(u)的多样性定义如下:

而推荐系统的整体多样性可以定义为所有用户推荐列表多样性的平均值:

(5)新颖性

新颖的推荐是指给用户推荐那些他们以前没有听说过的物品。最简单的办法是把那些用户之前在网站中对其有过行为的物品从推荐列表中过滤掉。

评测新颖度的最简单方法是利用推荐结果的平均流行度,因为越不热门的物品越可能让用户觉得新颖。因此,如果推荐结果中物品的平均热门程度较低,那么推荐结果就可能有比较高的新颖性。

但是,用推荐结果的平均流行度度量新颖性比较粗略,因为不同用户不知道的东西是不同的。因此,要准确地统计新颖性需要做用户调查。

通过牺牲精度来提高多样性和新颖性是很容易的,而困难的是如何在不牺牲精度的情况下提高多样性和新颖性。

(6)惊喜度

如果推荐结果和用户的历史兴趣不相似,但却让用户觉得满意,那么就可以说推荐结果的惊喜度很高,而推荐的新颖性仅仅取决于用户是否听说过这个推荐结果。
提高推荐惊喜度需要提高推荐结果的用户满意度,同时降低推荐结果和用户历史兴趣的相似度。

(7)信任度

度量推荐系统的信任度只能通过问卷调查的方式,询问用户是否信任推荐系统的推荐结果。

提高推荐系统的信任度主要有两种方法。

首先需要增加推荐系统的透明度(transparency),而增加推荐系统透明度的主要办法是提供推荐解释。只有让用户了解推荐系统的运行机制,让用户认同推荐系统的运行机制,才会提高用户对推荐系统的信任度。

其次是考虑用户的社交网络信息,利用用户的好友信息给用户做推荐,并且用好友进行推荐解释。这是因为用户对他们的好友一般都比较信任,因此如果推荐的商品是好友购买过的,那么他们对推荐结果就会相对比较信任。

(8)实时性

推荐系统的实时性包括两个方面。

首先,推荐系统需要实时地更新推荐列表来满足用户新的行为变化。

实时性的第二个方面是推荐系统需要能够将新加入系统的物品推荐给用户。对于新物品推荐能力,我们可以利用用户推荐列表中有多大比例的物品是当天新加的来评测。

(9)健壮性

健壮性(即robust,鲁棒性)指标衡量了一个推荐系统抗击作弊的能力。
算法健壮性的评测主要利用模拟攻击。首先,给定一个数据集和一个算法,可以用这个算法给这个数据集中的用户生成推荐列表。然后,用常用的攻击方法向数据集中注入噪声数据,然后利用算法在注入噪声后的数据集上再次给用户生成推荐列表。最后,通过比较攻击前后推荐列表的相似度评测算法的健壮性。如果攻击后的推荐列表相对于攻击前没有发生大的变化,就说明算法比较健壮。

提高系统的健壮性,除了选择健壮性高的算法,还有以下方法。

a、设计推荐系统时尽量使用代价比较高的用户行为。
b、在使用数据前,进行攻击检测,从而对数据进行清理。

(10)商业目标

不同的网站具有不同的商业目标。比如电子商务网站的目标可能是销售额,基于展示广告盈利的网站其商业目标可能是广告展示总数,基于点击广告盈利的网站其商业目标可能是广告点击总数。因此,设计推荐系统时需要考虑最终的商业目标,而网站使用推荐系统的目的除了满足用户发现内容的需求,也需要利用推荐系统加快实现商业上的指标。

(11)总结

对于可以离线优化的指标,我个人的看法是应该在给定覆盖率、多样性、新颖性等限制条件下,尽量优化预测准确度。用一个数学公式表达,离线实验的优化目标是:

最大化预测准确度
使得 覆盖率 > A
        多样性 > B
        新颖性 > C
其中,A、B、C的取值应该视不同的应用而定。

1.3.3 评测维度

增加评测维度的目的就是知道一个算法在什么情况下性能最好。

评测维度分为如下3种。
 用户维度 主要包括用户的人口统计学信息、活跃度以及是不是新用户等。
 物品维度 包括物品的属性信息、流行度、平均分以及是不是新加入的物品等。
 时间维度 包括季节,是工作日还是周末,是白天还是晚上等。

猜你喜欢

转载自blog.csdn.net/LiuQQu/article/details/83898201