前言:
上个月公司的同事提议组内做几次关于数据挖掘的技术串讲交流下学习和工作经验,本着提携新人的考虑,建议博主也讲点什么。开始时博主想简单讲一讲推荐算法的协同过滤算法。后来考虑到其实串讲不仅仅是和其他人交流分享,也是对自己已有知识的巩固。想一想还是加点挑战,谈谈推荐系统吧^_^。为什么选推荐系统呢,原因有三个:
1.人们在网络中经常接触推荐,讲起来例子多,人们不陌生;
2.原理比较简单,不需要学习者有高超的数学基础;
3.这个领域是博主最先接触的数据挖掘领域^_^。
博主第一次接触推荐系统的学习是在林鸿飞教授的《文本挖掘与搜索引擎》的课上,课上他向我们推荐项亮编著的《推荐系统实践》,虽然期末的大作业博主被分到了QA组(注:这里的QA不是质量保证而是问答系统),但博主拜读了这本书,感觉受益颇多,之后和直博北大的学霸大白弄了个简陋的基于社交网络的好友推荐系统,当时也不会什么hadoop、spark什么的,我们俩全程手撕代码,虽然效果和效率都不好但加深了对推荐系统的了解,这样看来手撕代码或许对学习帮助比较好吧(写到这里博主想起了一天下午和大白敲完码,大白兴致勃勃拉着博主去爬学校后面的牛角山,博主爬一半没了力气,上不去也下不来的可怕回忆)。
一、什么是推荐系统
设想一下这个情景:
中国男足在世界杯预选赛上一路高歌猛进,有杀入世界杯之势。过几天晚上有场关键的比赛,你考虑到要尽情享受足球之夜,看球时嘴不能闲着,还需要买点零食边看球边吃。这里你有三个选择:
-
到楼下的小超市或便利店买零食。你飞快的走到零食货架,从十几种零食中选了一种你爱吃的。
-
去离你最近的大超市家乐福买零食。家乐福有三层,有上千种商品在出售,你蒙了,还好漂亮的店员小姐告诉你,你需要的零食在二楼的零食区的非膨化食品货架有卖。
-
作为一个宅男,你怎么可能下楼去买东西,你机智的拿出手机,打开淘宝,淘宝上有无数的商品出售,即使在分类的零食区也有数不尽的网页,还好你很机智,在搜索栏输入了你想要的零食,马上你找到你想要的零食,江浙沪包邮,你所在的地区不包邮,预计下周日到达,你怒了。
上面三个例子对应着信息量的发展,随着互联网时代的到来,信息从匮乏的状态变成了过载的状态。当信息很少时(小卖铺),我们只凭经验浏览就可以得到我们想要的信息;当信息增加时(大超市),我们无法一一浏览信息找出我们想要的,这时就出现了门户分类网站(雅虎等);到了信息过载时(电子商务网站),分类已经无法让我们快捷的获取信息了,这时就出现了搜索引擎(谷歌等)。
但仅仅有搜索引擎就够了吗?上诉例子是在用户有明确的目标的条件(买某个品牌的零食)下完成的。但在用户没有明确目标时(比如晚上没啥事想随便找部电影看看),搜索引擎就显得捉襟见肘了。
在这个数据过载的时代,信息的消费者需要从海量的信息中找到自己所需要的信息,信息的生产者要让自己生产的信息在海量的信息中脱颖而出,这时推荐系统就应运而生了。对用户而言,推荐系统不需要用户提供明确的目标;对物品而言,推荐系统解决了2/8现象的问题(也叫长尾效应),让小众的物品可以展示到需要它们的用户面前。
在我们生活中,推荐系统应用十分广泛,比如:电子商务,视频与音乐网站、社交网络、广告等等。同时推荐系统中的各种预测算法还能应用到其它不同的领域。
二、什么是好的推荐系统
回答什么是好的推荐系统之前先抛出一个问题:好的推荐系统是不是等于作出准确预测的推荐系统?
我们回到买零食的情景,假如你没有去淘宝购买零食而是去了另一个网站,这个网站用了一套高超的推荐算法算出了此时此刻的你想要买某个品牌的零食(比算命的都厉害),当你打开应用的一刹那,就把这个品牌的零食呈现在你眼前,你在惊讶的同时,欣然的下单。
那么这个网站的推荐系统是不是一个好的推荐系统呢?答案可能会让你惊讶。不是!原因是用户在之前已经有了明确的目标要买某种零食,这套推荐系统可能会增加用户的体验,但除此之外并没有给网站带来多大的利益,因为即使没有这套推荐系统,用户也会通过网站的搜索引擎来找到这种零食并购买,,有没有这套推荐系统网站的收入都是一样的(当然这套系统提高了用户体验可能会让用户更倾向使用这个网站,收入还是有所提升的)。
而另一套推荐系统在你买零食时向你推荐了一款啤酒,你突然想到“看球不喝啤酒咋行”,你欣然买下了这款啤酒。这个推荐就好于上一个。因为用户本来没有买啤酒的计划,但看了推荐后购买了啤酒,网站通过这个推荐多赚了一单。
推荐系统的评价指标有很多,项亮的《推荐系统实践》给出了以下指标:
-
用户满意度
也就是加完这套推荐系统后用户的的满意度,这个指标可以通过用户调查问卷等形式得到,但值得注意的一点是获得指标的方式方法也有可能降低用户的满意度。
-
预测准确率:
就是我们预测结果的准确度。一般情况下在TopN预测时我们计算召回率和准确率;在评分等预测时用MAE或RMSE
-
覆盖率:
代表推荐的事物对全部事物的覆盖情况,可以用来判断推荐系统是否有马太效应。马太效应是出自《圣经 马太福音》的一个典故,社会学中的一种强者越强弱者越弱的现象,也就是说推荐系统是否会使被关注的事物更加被关注,被忽视的事物更加被忽视。常用的协同过滤就有马太效应。比较简单的测试指标就是信息熵。
-
多样性:
判断推荐结果是否覆盖用户各个兴趣点
-
新颖性:
例如不应该推荐用户已经看过的电影等,应该多推荐给用户用户不知道的商品。记得当时林教授举了一个例子,一个朋友买了5L的洗衣液,应该几个月都不需要洗衣液了,但那个电子商务平台(不说是哪个了)还是想推荐洗衣液,这就是一个新颖性不够的推荐。假如用户买了一台电脑,新颖性高的推荐是向他推荐一些外设,而不是另一台电脑。
-
惊喜性:
用户对推荐的商品之前没有兴趣,但用过之后很满意。
-
信任性:
这个是网站运营方面的,推荐是不是受用户信任,例如用户相比百度搜索的推广推荐更信任淘宝网的商品推荐
-
健壮性:
是否能承受住攻击和刷分(就是使用一些手段使自己的商品优先被推荐)等现象
-
商业目标:
该推荐系统上线后商业目标完成情况,如业绩提升、销量增加等等
这篇文章向大家介绍了什么是推荐系统,推荐系统的产生原因和推荐系统的一系列评价指标也可以说是推荐系统的目标。接下来的几篇文章,可能会介绍用户行为数据和协同过滤。
后记:
本来这篇文章是九月末开始写的,由于工作比较忙所以一直没来得及发,也没来得及写后续文章。博主最近学习爬虫,后续可能会分享一些爬虫相关的知识