CWYAlpha

Just another WordPress.com site

Thought this was cool: 如何评价推荐系统的效果

leave a comment »


当你的推荐系统搭建完毕之后,你最想了解的可能就是这个系统的效果如何?对于电商系统来说,推荐系统能够带来多大的转化率?对于提供音乐、电影、资讯服务的网站来说,推荐系统推荐给用户的东西有多少是用户真正喜欢的,并且使用了的?

如果一个智能系统的智能程度很弱的话,对于工业界来说,完全可以不用智能系统。假象你推荐给用户的东西效果很差的话,还不如推荐给用户一些比较hot的东西。

那么,如何来评价一个推荐系统的效果呢?

(1)Accuracy

准确性是一个可以量化的指标,在学术界,评价一个推荐系统最重要的指标就是看看你预测的分数和真实的分数之间的误差有多大。一般的做法是将你拿到的数据集分为两组,training set和 testing set,两者的比例一般是4:1(或者随便自己定,但训练集明显要多于测试集)

然后你可以用平均误差MAE或者误差的平方RMSE来计算推荐系统的准确性。

通过计算准确性,可以不断调试推荐系统的各种参数,比如PureSVD方法中的要保留的矩阵维数k,比如Latent Factor Model中gradient desent 算法中的下降因子等等诸多参数。

对于在工业界的应用来说,转化率一个比较实在的指标。在商城系统中,系统为顾客推荐的产品有多少转化成了顾客的购买行为时他们最最关心的。在音乐,电影,资讯服务的网站中,系统为用户推荐的音乐,电影,资讯有多少被用户点击并且表达出一种喜欢的态度。(不管是用户显式地告诉系统他喜欢,还是系统通过挖掘用户的行为分析得到他喜欢)

(2)Diversity

在一个智能web应用中,推荐系统不仅仅基于一种算法,而是多种算法混合起来使用。(混合推荐技术总结:http://somemory.com/myblog/?post=16

不同的算法由于机理不同,产生的结果必然不同,然而每个算法都有自己的特点,推荐出的产品的特点也是非常鲜明的。比如,user-based cf 会推荐出和你有相同品位的人喜欢的产品,item-based cf会推荐给你和你喜欢的产品非常相似的产品,Latent Factor Model可以充分地考虑用户评分矩阵中的missing value,也就是说这个模型可以挖掘用户的隐性反馈行为,换句话说把矩阵中缺的值也可以利用起来。

因此,在推荐的结果列表中往往会参杂各种算法推荐出来的结果,而不是只是单调的与您喜欢的产品非常类似的产品。就像你表示过喜欢射雕英雄传,系统永远给你推荐的是鹿鼎记,天龙八部,这些结果都太单调了,如果系统可以给这个用户推荐出得分非常高的其他种类的item将会让用户觉得非常surprise。

(3)Ability to surprise

推荐系统有一个比较好听的名字叫做猜你喜欢(或者您可能会喜欢)。

如果你猜对了用户喜欢的东西就会给用户带来非常棒的用户体验,会觉得你这个系统非常的智能和神奇。

说是猜,其实还是计算和挖掘。

多样的推荐结果会更大概率的给用户surprise。

(4)Explain Ability

系统为什么推荐给我这个呢?这是用户常常思考的问题。

所以一个好的推荐系统,必须给用户一个推荐的理由,不然用户会觉得非常的诧异,怀疑你的系统是不是瞎猜。

比如,在Amazon上经常会看到这样的话:

您浏览过XXX,查看此商品的顾客也查看了XXX XXX  XXX

根据浏览记录为您推荐:XXX  XXX XXX

一个好的解释,可以更加让用户信服你的推荐结果,从而认同你的网站。

(5)Computational efficiency

一个系统运行的优劣,结果是一个重要的因素,但效率也是一个非常重要的因素。

效率可以理解为时间效率和空间效率。

但如果让我给这两个因素按重要程度排序的话,我会觉得结果更加重要。

因为你的结果很差,还不如不要这个推荐系统了,这时候也就没有效率什么事儿了。

推荐系统分为线上系统和线下系统。

一般线下系统会把各种矩阵分解,user之间的相似度,item之间的相似度,用户的预测评分计算好。

然后直接将离线系统计算好的预测评分和对应的item放到线上系统,过滤掉用户明显不喜欢的(这个可以通过反馈系统或者用户行为分析得到。),然后按分数降序输出。

考虑到推荐结果的Diversity和Ability to surprise,将不同算法计算出的结果各推荐几个给用户,并且尽量推荐以前没有推荐过的。(或者说尽量可以让用户在一段时间内看到不太相同的推荐结果。)

这里,推荐系统的速度主要体现在离线系统的计算上,item-based cf和content-based在这方面表现得非常好,在短期内,计算好一次结果就可以一直用,有点“一劳永逸”的意思。但user-based cf则相对差一些,需要你很频繁地计算用户的相似度矩阵,非常费时。

说到空间的效率,原始数据、中间结果以及最后的结果的存储都是一些问题。

对于原始数据来说,用户的评分矩阵是个非常稀疏的矩阵,大部分是0。如何存储和读取稀疏矩阵也是个关乎效率的问题。

对于中间结果,user相似度矩阵,item相似度矩阵,item-tag矩阵,svd分解后的矩阵,或者一般的矩阵分解方法产生的矩阵都是需要占掉大量的空间,有的甚至是内存空间。

对于最后的结果,解决起来还是比较容易的。

所以一个推荐系统的好坏,还是要顾及到算法的计算速度和产生的结果和中间结果的存储和读取等等效率方面的问题。

以上我是个人的一些看法,仅供参考,欢迎批评指正。

 

 

 

 

 

 

 

from 阿俊的博客: http://somemory.com/myblog/?post=18

Written by cwyalpha

五月 22, 2012 在 3:24 上午

发表在 Uncategorized

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: