推荐系统的定义:
我们已经进入了一个信息过载
的时代:
推荐系统就是解决这一矛盾的重要工具。
信息过载的解决:
搜索引擎和推荐系统有着互补的关系。
推荐系统的基本任务:
联系用户和item,解决信息过载的问题。
推荐算法的本质:
通过一定的方式将用户和item联系起来
主要的应用场景有:
音乐推荐的特点
两种推荐方式对比 :
推荐系统的参与者
一个好的推荐系统应该是对推荐系统的三个参与者都有益的。
从用户角度,好的推荐系统不仅能够准确预测用户的行为,而且能够拓展用户的视野,帮助用户发现那些用户感兴趣却不太容易发现的东西。
离线实验
证明新方法在离线指标上优于在线算法用户调查
确定新方法用户满意度不低于在线算法在线ABtest
确定新方法在线上指标优于在线算法评分预测
对于测试集中的一个用户u和物品i, 令 r u i r_{ui} rui是用户u对物品i的实际评分,而 r ^ u i \hat{r}_{ui} r^ui是推荐算法给出的预测评分,则有:
RMSE和MAE的实现:
令records[i] = [u, i, rui, pui]
, 其中,rui
是用户u
对物品i
的实际评分,pui
是算法预测出来的用户u
对物品i
的评分,则python实现如下:
def RMSE(records):
return math.sqrt(sum([(rui - pui) ** 2 for _, _, rui, pui in records]) / (len(records)))
def MAE(records):
return sum([abs(rui - pui) for _, _, rui, pui in records]) / len(records)
TopN推荐
为了全面评测TopN推荐的准确率和召回率,一般会选取不同的推荐列表长度N,计算出一组准确率/召回率,然后画出准确率高/召回率曲线(p/r curve)。
推荐系统的目的是找到用户最有可能感兴趣的item,而不是预测用户给item什么样的评分。因此,TopN推荐更符合实际应用需求。
覆盖率(coverage)描述一个推荐系统对item长尾的发掘能力。
从定义角度来说覆盖率是一个item提供商会关心的指标。
假设系统的用户集合为U,物品集合为I,推荐系统给每个用户推荐一个长度为N的物品列表R(u),那么覆盖率的定义为:$ Coverage = \frac {|U_{u\in U} R(u)|} {|I|}$
按照上述定义,当覆盖率接近100%时,系统可以有无数不同的流行度分布,为了更细致的描述推荐系统发掘长尾的能力,需要将流行度分布加入覆盖度指标。
在信息论和经济学中有两个著名的指标: 信息熵
和基尼系数
。
信息熵
令p(i)为物品i的流行度除以所有物品的流行度之和,则有信息熵的定义如下:
H = − ∑ i = 1 n p ( i ) l o g p ( i ) H = - \sum_{i=1}^n {p(i)log\ p(i)} H=−i=1∑np(i)log p(i)
基尼系数(Gini Index)
令 p ( i j ) p(i_j) p(ij)为物品i按流行度升序排列后的低j个物品的流行度,则有基尼系数的定义:
G = 1 n − 1 ∑ j = 1 n ( 2 j − n − 1 ) p ( i j ) G = \frac 1 {n-1} \sum_{j=1}^n (2j-n-1)p(i_j) G=n−11j=1∑n(2j−n−1)p(ij)
推荐系统中的马太效应
社会学领域有一个著名的马太效应,即所谓强者更强、弱者更弱的效应。
一般来说,热门排行榜系统具有马太效应,搜索引擎的PageRank也具有马太效应。
如果一个推荐系统会增大热门物品和非热门物品之间的流行度差距,则这个系统具有马太效应。而推荐系统的初衷是消除马太效应,使得各种物品都能展示给对他们感兴趣的某一类人群。但是,很多研究表明,现在主流的推荐算法(比如协同过滤)是具有马太效应的。
评测一个推荐系统是否具有马太效应最简单的方法是使用基尼系数:
若 G 2 > G 1 G2>G1 G2>G1 则说明推荐算法具有马太效应。
用户的兴趣是广泛的,为了满足用户广泛的兴趣,推荐列表需要能够覆盖用户不同的兴趣领域。
多样性描述了推荐列表中物品两两之间的不相似性。因此,多样性和相似性有对应关系。假设 s ( i , j ) ∈ [ 0 , 1 ] s(i,j) \in [0,1] s(i,j)∈[0,1] 定义了物品i和j之间的相似度,那么用户u的推荐列表R(u)的多样性定义如下:
D i v e r s i t y ( R ( u ) ) = 1 − ∑ i , j ∈ R ( u ) , i ≠ j s ( i , j ) 1 2 ∣ R ( u ) ∣ ( ∣ R ( u ) ∣ − 1 ) Diversity(R(u)) = 1 - \frac {\sum_{i, j\in R(u),i\not =j}s(i, j)} {\frac 1 2 |R(u)| (|R(u)|-1)} Diversity(R(u))=1−21∣R(u)∣(∣R(u)∣−1)∑i,j∈R(u),i=js(i,j)
推荐系统的整体多样性可以定义为所有用户推荐列表多样性的平均值:
D i v e r s i t y = 1 ∣ U ∣ ∑ u ∈ U D i v e r s i t y ( R ( u ) ) Diversity = \frac 1 {|U|} \sum_{u\in U} Diversity(R(u)) Diversity=∣U∣1u∈U∑Diversity(R(u))
新颖性的推荐是指给用户推荐那些他们不曾听说过的物品。
但是上述两个方法都比较粗糙,比如针对第一个,用户可能在其他平台和系统推荐的物品有过行为;第二个则未考虑不同用户的了解范围不同,物品对A用户是新颖的,但对B用户可能就是非新颖的。
不同于新颖性,惊喜度是指:
推荐的结果和用户历史上喜欢的物品不相似,单用户却觉得满意的推荐。
要想定义惊喜度,就得先定义相似性,其次需要定义用户的满意度。
提高惊喜度需要实现两点:
如果用户信任推荐系统,则可能会和推荐系统有更多的交互。特别是在电商等系统中,信任非常重要。
提高推荐系统信任度的主要有两种方法:
在很多网站中,物品具有时效性,比如新闻、微博,所以需要在物品还在有意义的时效内时将其推荐给用户。
推荐系统的实时性包含两个方面:
第一个方面举例,用户新买了一个iPhone,此时推荐系统应该更新信息,将iPhone配件推荐给用户。而第二个方面主要考验了推荐系统的冷启动能力。
任何一个能带来利益的算法系统都会被人攻击,推荐系统会面临刷热门等注入式攻击。
我们应该这样提高系统的健壮性:
很多时候,公司评价一个推荐系统更加注重商业目标是否达成,推荐系统的业务每家公司都会有,但是每家的目标都不同。
因此,评测一个推荐系统时除了要考虑上述技术指标外,还要考虑产品提出的商业目标。
如果能够在推荐系统评测报告中加入细分的不同维度下系统评测指标,就能帮我们更全面的了解推荐系统的性能。