Collaborative Filtering——电子商务商品推荐算法科普

April 20th, 2008 by MarsOcean Leave a reply »

转载声明:转载时请以超链接形式标明文章原始出处:
http://www.marsopinion.com/2008/04/20/collaborative-filtering/

Collaborative Filtering

简单说就是,找到和你喜好类似的那群人,看他们买了什么你还没买的东西,推荐给你。

简化举例来说,你买了哈利波特,羽泉的CD,新宋……他会去找其他买了类似产品的同学们:A, B, C。然后他看到A和B都还买了《九州》,就会推荐你《九州》;你买了《沉默的大多数》,买了《黄金时代》,买了《黑铁时代》,系统去找到了其他买这些书的同学们:D, E, F,发现这三位同学都买了《白银时代》,于是把这本书推荐给你。

详细来讲(当然其实还是省略大量实现上的细节),假设www.MarsOpinion.com(我的博客:P)有M个客户,N种产品,就把每个客户当成一个N维的项量,客户见的相似度可以用这两个项量的COS计算

fomula

找到和你“相似”的那些消费者之后,就可以给其他商品打分了,越多和你相似的消费者买了商品X,说明商品X越可能吸引你,所以可以以“有多少和你相似的消费者购买了这个商品”作为这个商品的分数。举例来说:和你相似的消费者中,80个买了《青铜时代》,《白银时代》,70个买了《失乐园》,那么《青铜时代》和《白银时代》分数就是80,《失乐园》分数就是70,要推荐的话就应该先推荐《青铜时代》、《白银时代》,再推荐《失乐园》。

这里还有两点需要考虑,第一是不要推荐客户已经购买的东西,例如如果你已经购买过《青铜时代》,就应该只给你推荐《白银时代》(至少对于书是这样,对于重复购买的消费品再议)。

第二就是要降低那些畅销产品的权重:举例来说,买哈利波特的人动辄百万计,因为你和别人都买了哈利波特而向你推荐他所购买的商品,其实没有什么意义;相反,如果你买了本《MarsOpinion.com电子商务推荐算法》,这本书一共就4个人买过,另外三个人都买了《MarsOpinion.com鬼扯全集》,那么你很可能也会喜欢那本书。因为越大众化的爱好,越难代表一个人的特质(从而没有办法通过这个特质去寻找类似的人),而越小众的爱好,相对能更加说明者个人某方面强烈的偏好。——基本上,解决这个问题的方法很多,有一种就是在设置项量时,将值设置为该产品销量的倒数。例如你买了《哈利波特》(假设有100万人买了它),那么代表你的那个项量的《哈利波特》那个值就是百万分之一;而你如果买了《MarsOpinion.com电子商务推荐算法》,那么你相对应的那个值就是四分之一。

整个算法的复杂度是O(MN),但是因为每个客户购买的商品数量都很有限(远远小于N),所以复杂度很可能降为O(M+N),可是如果产品数量巨大的话,这个复杂度仍然是很可怕的,而相关的降低复杂度的算法(例如限制取样的客户样本大小或者商品样本大小)都会显著影响推荐结果的精度。

Related Posts with Thumbnails

Popularity: 3% [?]

相关文章

Advertisement

6 comments

  1. 菁菁 says:

    也就是说,做用户间的相关分析。那可否直接做产品的相关分析?找出一些关联规则呢?比如,买尿布的人67%买啤酒的话,就把他们联系在一起。哪种效果好呢?

  2. MarsOcean says:

    @菁菁:不一定的。

    你说的算法之后我会谈到(写完开头就懒得写了。。。拖拉ing),就是Amazon的Item-to-Item算法。本文中算法基础是“和这个客户类似的其他客户买过什么东西”,而那个算法则是计算“买过这个产品的客户还买过什么东西”,以此来做推荐。

    基本上,很难说哪种效果更好。Amazon之所以选择这种,更大的原因是因为这样可以降低实时计算的运算压力,而并非纯粹从效果出发。

    昨天刚听大黄说Amazon光算法就用了上千人在做……@___@, 怎么想他们都应该很先进。。。

  3. nicky says:

    MarsOcean兄,我还指望着你的科普续集呢..

Leave a Reply