最近比较关注Customer Segmentation和Personalized Recommendation。
国内电子商务圈好像很少提起这件事情(我之前写过Use personalized recommendation algorithm to enhance conversion rate for ecommerce website,不过也没什么反响)……所以随便写点科普一下。
本文大部分知识来自于一份叫做Item-to-Item Collaborative Filtering的文档,如果有条件,建议看原文。
这个文档的好处是:
- 写很短,只有5页,其它相关论文动辄上百页,打印出来都觉得是在浪费森林
- 写很简单,我这种技术白痴也可以看
- 号称是Amazon官方算法
坏处是:
- 写得很简单,所以有基础的同学们不用看了。真想了解的话可以用英文搜索相关关键词,研究论文还是很多的
- 2003年出的,比较古老
文章主要比较了三种算法:
- Collaborative Filtering
- Cluster models
- Item-to-Item Collaborative Filtering
下面分几个post来详细说:
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),可是如果产品数量巨大的话,这个复杂度仍然是很可怕的,而相关的降低复杂度的算法(例如限制取样的客户样本大小或者商品样本大小)都会显著影响推荐结果的精度。
未完待续
文章TAG:摄影设计 用户体验