"先生,我注意到你买了啤酒,请问要不要再来一些尿布?"如果超市收银员这样问你,你会不会想K人?即使,你知道那个关于啤酒和尿布的故事。 其实原故事是说,发现很多男人周五买尿布,所以超市就把啤酒也摆在尿布旁边。所以刚刚我故意混淆了两个细节:尿布和啤酒的相关性是"单向"的;推荐方式是"隐式"的(摆在一起)而不是"显式"的(口头推荐)。更重要的是,它是针对一个特定目标用户群(已婚有小孩的妻管严男人)的行为。 令人吃惊的是,我看到大多在讲"啤酒和尿布的故事"的地方,都故意忽视了这些细节,转而大谈诸如协同过滤或数据挖掘什么的。恐怕这就是为什么现在很多网站的推荐系统都做得相当糟糕的缘故吧。推荐系统,本质上一种产品,而不是什么技术架构,回归到产品设计的根本原则,才有可能把它做得"有用",进而"好用"。 我其实也对推荐系统的技术一知半解,不妨抛开那些技术算法,谈几点我认为很重要的设计原则: 一,着眼于"后续期望"。举个例子,假设我在浏览ipad的产品介绍,旁边的相关推荐应该是什么?设想几种答案:A:iphone,ipod;B:ipad皮套等配件;C:不同渠道商的ipad报价;D:仿ipad的其他山寨产品。如果甲同学想买一个时尚电子产品送给女友,乙同学是ipad的狂热粉丝,丙同学还在为ipad的价格犹豫,丁同学只是想要一个电子阅读器,那上面这四个答案都恰好能让他们可以继续多看一些产品。所以,推荐系统是否成功的最关键因素,并非算法实现等技术问题,而是如何洞悉用户的当前行为以及后续期望。 值得一提的是,除了揣测用户本身已有的期望外,为用户创造出一个新的期望也是推荐系统常常做的。比如卖书的网站就经常告诉我,这两本书可以配套买。但这种为用户推荐他原本并不期待的东西,成功率就会低很多,相反可能会打乱用户原本的行为路径。所以要慎重,不能自作聪明弄巧成拙。 二,牢记80-20法则。想用一套算法解决千万用户不同的需求是不可能的,这就要求我们作一些取舍。我有一个绕口的原则是:用最简单的办法顾好大多数人在大多数情况下的最常见需求。我的这个原则的灵感来自于一个叫everything的桌面搜索软件。不管是微软还是google的桌面搜索软件,一开始总是要花很长时间(几个小时)来建索引。但这个everything只用1分钟就能建好整个硬盘的文件索引,很神奇!后来才发现,它只能搜文件名,而不能搜文件内容,而后者正是其他桌面搜索长时间建索引的原因。问题就在于,其实我们绝大多数时候找文件都是在找文件名而非内容,everything正是抓住了这个问题的核心,用20%的精力解决了80%的问题,然后,将剩下20%的问题直接抛弃! 将这个80-20法则用到推荐系统里,是再合适不过的了。你只需要集中精力在最常发生的情况下,用合适的算法找出合适的推荐结果,剩下的结果只要保证"相对过得去"就好。当然,这样做的前提是,你对用户的后续期望很有把握。