Collaborative Filtering——电子商务商品推荐算法科普
by MarsOcean on April 20, 2008
Collaborative Filtering
简单说就是,找到和你喜好类似的那群人,看他们买了什么你还没买的东西,推荐给你。
简化举例来说,你买了哈利波特,羽泉的CD,新宋……他会去找其他买了类似产品的同学们:A, B, C。然后他看到A和B都还买了《九州》,就会推荐你《九州》;你买了《沉默的大多数》,买了《黄金时代》,买了《黑铁时代》,系统去找到了其他买这些书的同学们:D, E, F,发现这三位同学都买了《白银时代》,于是把这本书推荐给你。
详细来讲(当然其实还是省略大量实现上的细节),假设www.MarsOpinion.com(我的博客:P)有M个客户,N种产品,就把每个客户当成一个N维的项量,客户见的相似度可以用这两个项量的COS计算:
找到和你“相似”的那些消费者之后,就可以给其他商品打分了,越多和你相似的消费者买了商品X,说明商品X越可能吸引你,所以可以以“有多少和你相似的消费者购买了这个商品”作为这个商品的分数。举例来说:和你相似的消费者中,80个买了《青铜时代》,《白银时代》,70个买了《失乐园》,那么《青铜时代》和《白银时代》分数就是80,《失乐园》分数就是70,要推荐的话就应该先推荐《青铜时代》、《白银时代》,再推荐《失乐园》。
这里还有两点需要考虑,第一是不要推荐客户已经购买的东西,例如如果你已经购买过《青铜时代》,就应该只给你推荐《白银时代》(至少对于书是这样,对于重复购买的消费品再议)。
第二就是要降低那些畅销产品的权重:举例来说,买哈利波特的人动辄百万计,因为你和别人都买了哈利波特而向你推荐他所购买的商品,其实没有什么意义;相反,如果你买了本《MarsOpinion.com电子商务推荐算法》,这本书一共就4个人买过,另外三个人都买了《MarsOpinion.com鬼扯全集》,那么你很可能也会喜欢那本书。因为越大众化的爱好,越难代表一个人的特质(从而没有办法通过这个特质去寻找类似的人),而越小众的爱好,相对能更加说明者个人某方面强烈的偏好。——基本上,解决这个问题的方法很多,有一种就是在设置项量时,将值设置为该产品销量的倒数。例如你买了《哈利波特》(假设有100万人买了它),那么代表你的那个项量的《哈利波特》那个值就是百万分之一;而你如果买了《MarsOpinion.com电子商务推荐算法》,那么你相对应的那个值就是四分之一。
整个算法的复杂度是O(MN),但是因为每个客户购买的商品数量都很有限(远远小于N),所以复杂度很可能降为O(M+N),可是如果产品数量巨大的话,这个复杂度仍然是很可怕的,而相关的降低复杂度的算法(例如限制取样的客户样本大小或者商品样本大小)都会显著影响推荐结果的精度。
8 comments
也就是说,做用户间的相关分析。那可否直接做产品的相关分析?找出一些关联规则呢?比如,买尿布的人67%买啤酒的话,就把他们联系在一起。哪种效果好呢?
by 菁菁 on April 23, 2008 at 10:14 am. #
@菁菁:不一定的。
你说的算法之后我会谈到(写完开头就懒得写了。。。拖拉ing),就是Amazon的Item-to-Item算法。本文中算法基础是“和这个客户类似的其他客户买过什么东西”,而那个算法则是计算“买过这个产品的客户还买过什么东西”,以此来做推荐。
基本上,很难说哪种效果更好。Amazon之所以选择这种,更大的原因是因为这样可以降低实时计算的运算压力,而并非纯粹从效果出发。
昨天刚听大黄说Amazon光算法就用了上千人在做……@___@, 怎么想他们都应该很先进。。。
by MarsOcean on April 23, 2008 at 7:30 pm. #
MarsOcean兄,我还指望着你的科普续集呢..
by nicky on April 29, 2008 at 12:54 am. #
[...] 原始出处: http://www.marsopinion.com/?p=1111 [...]
by 电子商务商品推荐算法-Collaborative Filtering- 南京网络营销研究-下面网 on July 24, 2008 at 2:03 am. #
[...] 只是促销处于长尾的产品常常是一件很困难的工作——因为相对而言,长尾产品的转化率较低,大规模导入流量并不合算。所以唯一得到公认的好方法是精准产品推荐,根据消费者历史行为来推荐长尾中的产品(参考www.MarsOpinion.com另外两篇文章Collaborative Filtering——电子商务商品推荐算法科普和Use personalized recommendation algorithm to enhance conversion rate for ecommerce website),只有这样才能获得比较满意的转化率,不浪费流量。而传统的站内促销活动,或者媒体投放(甚至于关键词投放),都并不适合受众窄、销量小、转化率低的长尾产品。 [...]
by Mars Opinion on August 18, 2008 at 10:19 pm. #
[...] 举例来说,Amazon会分析每个消费者购物习惯,你买了《Mars网络营销大全》,他去数据挖掘一下发现和你类似的人都买了《Mars胡说八道手册》——于是了解到你是个喜欢胡说八道的人,然后有针对性地给你推荐这本书(这是简化说法,详细的解释请参看我以前的科普文章,或者我自己异想天开的一个算法(抱歉这篇是用英文写的))。先了解消费者“可能会想要什么”,然后有的放矢的去选择marketing的方式方法和内容,这样才能达到好的效果。 [...]
by Mars Opinion on April 23, 2009 at 3:15 am. #
太可怕了,我以前学金融的时候看过相关性的算法,那个复杂程度,可是变态至极,那时是算52只股票,可是B2C网站上的客户与商品数目可以远远超出52个!
by DaMao on June 1, 2010 at 11:31 pm. #
最近在看商品相关度的算法,觉得这个文章挺不错的。还有站主提到的三个算法
Collaborative Filtering
Cluster models
Item-to-Item Collaborative Filtering
by eagle_ipad on June 11, 2010 at 2:04 pm. #