`
mahengyang
  • 浏览: 35564 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论
阅读更多

上篇提到一个“如果不知道你的喜好,就连个方向都没有(注:从这个理论出发可以做出一个简单的推荐系统)”,下面我们就从这个理论出发实现一个简单的推荐系统。

1、背景知识

电子商品务推荐系统有些场景(或者叫页面)与优酷的视频推荐有点相似,当你在看一个视频的时候,页面的右边会出现“你可能会对这些视频感兴趣”,这个在电子商品网站中就是浏览商品的情景,以亚马逊为例,当我们浏览lumia 900的时候,页面的中部会出现“购买了此商品的顾客同时也购买”

浏览了还浏览了推荐结果

可以看到推荐列表中的商品与lumia900都有很强的相关性。

这个数据是如何得出来的呢?仅仅依靠数据统计可以完成吗?是完全真实的吗?

 

2、算法1--从数据出发

从直观意义上讲,要得到“买了lumia900的顾客还购买了”的商品列表,只需要查找网站的购买记录,找到买了lumia900的顾客,再找出他们还买过的其它商品就可以了。但是这里需要解决两个问题:时间、排序。在顾客购买的其它的商品中是不是所有的商品都与lumia900有关?如果用户一年前买了件衣服,与这个手机一点关系都没有,所以需要界定一个时间,用户多长时间购买的商品跟这个手机有关系呢?联想到现实生活中,我们去超市购物的时候,会把要买的东西都放入购物车、结帐,这样的一次购买就相当于用户在网站的一次会话,所以这个时间我们暂定为一次会话;买过这个手机的顾客不止一个,他们在这次会话中购买的其它商品有时也不止一个,最终会得到一个比较长的列表,那么如何排序呢?一般来说最相关的商品应该排在前边,如何确定相关度?可以用与lumia900同时被购买的次数做为相关度,然后可以按相关度大小排序。

上述算法描述如下:找到购买过当前商品的人在这次会话中还购买的其它商品,并统计这些商品与当前商品被同时购买的次数,最后按相关度排序,取前N个做为推荐商品展现在前台页面。N为你需要展现在前端的商品的个数

这个算法用到了大名鼎鼎的apriori算法的一部分,关联规则计算,我们最后得到的推荐结果其实就是频繁二项集。

此算法有两个硬伤:数据稀疏、关联性过强。这个留在以后讨论

 

3、算法2--从结果出发

 其实上图的推荐列表其实很简单,就是手机推手机壳、耳机、内存卡、其它颜色的同款手机,生活常识告诉我们,买空调一般需要再买空调挂架,买笔记本电脑需要电脑包、U盘……从而我们可以用一种与算法1完全不同的做法来达到相似的效果,那就是人工配置商品关联。当然商品数有很多,需要做的工作也非常多,实际做起来可能不太好办。所以我们可以配置商品所属的目录关联规则,这样工作量就减少了很多。根据我的经验,如果目录数在500个左右的话,一个人三天就可以做完。最终得到的结果类似这样:

 

笔记本电脑->【U盘;笔记本电脑包;移动硬盘;……】

 

当我们需要为一个商品做推荐的时候,先找到它所属的目录,再找到关联目录,从中挑选一些商品做为推荐。这个也需要解决两个问题:如何从关联目录中挑选推荐商品?挑先出来的商品如何排序?

如果关联目录有很多,可以人工的为每个目录、及目录中的商品设置权重,从每个目录中挑选两个商品,加权后排序取前N个做为推荐结果。

这个算法非常简单,需要人工做的工作很多,它存在几个问题:

推荐的商品与当前商品不配套;

推荐出来的结果并非用户真实的行为结果,而是完全出于个人感觉;

无法发现隐藏的商品关联规则(如:啤酒和尿布);

 

基于以上两种算法就可以构建出一个简单的推荐系统了,有的人可能会觉得奇怪:连个数学函数都没,也叫算法?

这里我觉得有必要提一点,上面我说到是为了解决商品关联的问题,那么只要我解决了这个问题,用不用数据函数又有什么关系呢。所谓的算法很多时候只是一个想法,你做出来效果不错,就是一个算法,而不局限于数学函数。算法有时候也没有那么高深,后面几篇会有更深一点的理论,会出现数学函数。

另:本人也是初入推荐时间不久,国内推荐资料少之又少(真正的只有一本《推荐系统实践》),特此记录本人学习历程,大家看完后有什么建议,还望不吝赐教

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics