今天查文献的时候看到ACM RecSys 2010的一篇关于top-n推荐的文章,注意到文章的第二作者是Netflix Prize赛程中贡献最大的Yehuda Koren,所以仔细读了一下。看完之后相当困惑:高手也有盲点?Yehuda Koren是Netflix Prize获奖团队的主要成员,在整个赛事中展现出了非常优秀的问题分析和数据分析能力。但这篇文章的话题却实在让人意外。
文章的作者通过实验发现,在Netflix Prize中表现优异的算法虽然可以大幅降低RMSE,但如果以Recall@n或者Precision@n作为评测标准,效果却非常差,还不如直接推荐最热门的商品效果好。很诧异作者会因为这个结果而诧异,这难道不是一个显而易见的问题?事实上,Greg Linden,Amazon.com早期推荐系统的主要贡献者,在09年三月的博客里就讨论过这个问题。用RMSE做目标,预测的是用户对每个商品感兴趣的程度,而以Recall@n或者Precision@n为目标,预测的是用户最感兴趣的商品有哪些,这是两个完全不同的目标,为优化RMSE而设计的算法不见得适用于top-n推荐。这个问题在CofiRank和Matchbox,以及更早的用Ranking方法作推荐的文献中,都有讨论。
类似的讨论在相关领域有更长的历史。比如在Web检索中,用户期望相关结果尽可能排在前面,因而往往以NDCG或者MAP作为评价指标。而在专利检索中,用户期望尽可能多地返回相关结果,因而Recall@n是更合适的评价指标。显然,不同的业务目标决定了不同的评价指标,而针对不同的目标,算法也需要作相应的调整。Machine Learning Rank的研究成果中,很大一部分工作就是探讨如何去直接优化这些各不相同的评价指标。实际上,之所以在回归算法之外还会去研究分类算法,不也是因为对于不同的业务问题有不同的评价指标,因而需要有不同的算法吗?不是这样吗?
数据挖掘项目首先要明确业务目标,然后才是分析数据和设计算法,这个是很多教材都会提到的一个标准过程。明确业务目标很重要的一点就是要设置一个合适的评价指标,这样,后续的精力就可以集中在如何实施算法**优化这个指标上了。而相反的流程,先实施一个算法,然后拿出几个评价指标看它在哪个指标上表现好,就像是先打枪再在落弹点处画靶心,虽然在学术研究中不排除这种逆向工作法有时会带来意想不到的结果,但在应用项目里恐怕大都是做无用功。
这篇文章的另外一个问题是它的实验方法。文章认为对于top-n推荐来说,标准的SVD会优于SVD++等Netflix Prize赛程中出现的矩阵分解算法。对于SVD++,作者通过交叉验证选取了使RMSE最优的lambda值,而标准SVD是没有学习参数的(除了低阶矩阵的维数)。这个做法很难让人理解:既然评价指标是Recall和Precision,当然应该选取使Recall和Precision最优的 lambda值,这才是公平的对比!
最后说点题外话。KDD Cup-2011将使用Yahoo! Music的数据,展开音乐推荐算法的竞赛。这次竞赛有两个子任务,第一个任务是预测用户的评分,很可能和Netfilx Prize一样,将采用RMSE作为评价指标。第二个任务是区分用户打了高分的音乐和没打分的音乐,我原来猜想他们可能会采用AUC做评价标准,但看了上面这篇文章后,我觉得用Recall,Precision或者F-Score的可能性更大。因为这篇文章的实验目标也是区分用户打了高分的音乐和没打分的音乐,而Yehuda Koren是竞赛Organizing Committee三个成员之一(另一个成员Markus Weimer是CofiRank的作者之一)。
(欢迎转载 谢绝篡改 作者:chen_1st 微博:http://t.sina.com.cn/chen1st)