分析全球最大美食点评网站万家餐厅数据 寻找餐厅经营成功的秘密-阿里云开发者社区

开发者社区> 小旋风柴进> 正文

分析全球最大美食点评网站万家餐厅数据 寻找餐厅经营成功的秘密

简介:
+关注继续查看

◆ ◆ 

摘要


各位美食爱好者对于Yelp应该比“大众点评”更加熟悉。这家美食评论起家的网站是被全球公认的“美食攻略提供者”,它是利用大众经验和点评的最好例子之一,而其中的大量评价数据和排名机制也因此“操控”了很多家大小餐厅的生死。


开一家自己的餐厅,对小企业主们而言是一件很令人胆怯的活——开始经营的前三年中,60%的餐厅会经营失败。对于很多业主,Yelp曝光率是决定他们能否挺过前三年经营的关键因素。


本文来自NYC数据科学学院举办的为期12周全日制的数据科学训练营,该文章基于他们最后的毕业设计。


该毕业设计的目的是:确定出能在Yelp中取得高评分的关键属性和特征。结合数据可视化和机器学习算法,我们识别出高商业评分的影响属性和特征。我们也利用自然语言处理从用户评价中提炼出有价值的信息。喜欢奇思妙想的我们五个人,利用R Shiny 构建应用程序来帮助业主们通过以下三种方式进入该市场:


  1. 地图:针对经营成功的餐厅进行地理位置分析

  2. 主题模型:针对不同类别的餐厅进行差评分析

  3. 美食廊:对好评如潮的菜系种类进行分析


◆ ◆ 

简介


康奈尔大学的研究表明,27%新餐厅会在第一年倒闭,而将近有60%的餐厅会在三年内倒闭。无法经营成功的一个关键性阻碍是Yelp曝光率不足。经营良好的餐厅,顾客会定期光临,会有较高评分和点评数量,这样会提高餐厅在搜索排名中的位置,为任何倒霉事保留缓冲空间。


Yelp中的餐厅排名是被全球公认的,它是利用大众经验和点评的最好例子之一。我们想要寻求的答案是——影响餐厅经营成功的关键特征是什么?我们相信从Yelp提供的与评分相关的官方数据中,一定能找出可识别的重要特征。


这些关键特征可以是商家经营的固有属性,例如开业时间,环境吵闹程度,也可以是客户的主观因素。通过数据可视化和预测模型,我们探索出在Yelp中取得高分的关键特征。我们通过基于隐狄利克雷分布(Latent Dirichlet Allocation)的主题模型算法处理客户评价内容。我们的最终作品,汇总了我们的各种发现,以R Shiny应用——YelpQuest的形式进行呈现。


◆ ◆ 

数据处理


我们应用的数据源来自于Yelp 2016 Dataset Challenge,它提供的数据表有:业务表(businesss),评价表(reviews),小贴士表(tips,更简短的评价),用户信息表(user information)和签到表(check-ins)。其中业务表(business table)中列出了餐厅的名称,地理位置,营业时间,菜系类别,平均星级评分,评价数量和其他与经营相关的一系列因素,如:吵闹程度,预订政策。评价表(review table)中列出餐厅星级评分,评价内容,评价时间,和该评价获得的支持率。我们限制采样数据集的范围在美国凤凰城(Phoenix)的大都市区域,然后通过类别过滤业务表(business)数据,仅保留餐厅和评价数据。从餐厅中获取到的评价文本会构成该项目的语料库。


0?wx_fmt=png


挑战


  1. 关于预测,虽然只有9427家餐厅为样本,但特征的数量是十分庞大的。我们拥有的数据不足以充分支持结论。特征简化或者选择一个相对复杂的模型是有必要的。

  2. 对于不同菜系的餐厅,好评/差评 的标准是不同的。仅通过评价星级无法完全捕捉客户的观点。例如,快餐店的评分一般都很低;因此,4星评分的快餐店比4星评分的意大利餐厅更出色。


业务表(Business Table)


  1. 从业务表文件中查找出餐厅

  2. 创建只包括餐厅(restaurants)的业务子表文件

  3. 创建包括评价,签到、小贴士的子表文件

  4. 从评价,签到和小贴士子文件中进行数据总结(例如:每个餐厅的签到/小贴士/评价总数量),并创建包括业务ID和求和字段的概况数据文件,该文件可以追加到餐厅(restaurants)文件中

  5. 合并概况数据到业务餐厅(restaurants)数据中,并形成最终的模型数据集


评价表(Reviews Table)


  1. 根据餐厅分类得到平均分,判断各餐厅是高于还是低于平均分(例如,在分类平均值中,泰式:4.5星,快餐店:3.5星)

  2. 基于餐厅类别平均分,创建好评的数据子集

  3. 基于餐厅类别平均分,创建差评的数据子集

  4. 连接从步骤2到步骤3得到的两个子集

  5. 从步骤4创建顶级菜肴的评价子集,对好评和差评的数据集根据评价进行主题建模。


◆ ◆ 

探索性数据分析


通过探索性分析,我们首先想要检测自己那些先入为主的观点。当我们想到5星餐厅时,我们不会想到是快餐店或者披萨店。我们想到的是富丽堂皇的欧洲菜,如意大利菜或法国菜。通过菜系进行分类计算评分平均值,我们得到了以下的信息图表,例如:泰式或希腊菜系会有很高的评分,而自助餐,快餐和鸡翅店会有较低的评分。这些数据似乎能支持我们的假设:餐厅的评分跟特定的菜系类别有关。 


0?wx_fmt=png


与此同时,当我们想象5星评分的餐厅时,一般不会想到路边的便宜小餐厅。为检测人均消费对餐厅评分的影响,我们绘制了以下Mosaic图。你看到的是关于价格范围和评分水平的卡方检验(它给出了一个很显著的P值 2.2e-16)。 


0?wx_fmt=png


Mosaic图使用颜色作为比较各价格范围和星级评分组合下,观测值与期待值的差别(译注:如图所示,横向为星级评分,分为9组,纵向为价格范围,分为4组。如果价格范围对星级评分没有影响,则各价格段的星级评分频率分布是均一的(即期待值),应显示为白色,而本例中多处显示为红色或蓝色,表示价格范围对星级评分有影响)。蓝颜色表示,相对于预期结果,实际上有更多的观测值,而红色却有更少的观测值。在本案例中,我们可以观察到,价格和星级评分不是完全独立的,该结果可通过χ2检测得到证实。


◆ ◆ 

预测模型


为从数据中确定出关键的影响特征,我们决定使用基于树的模型。相对于观察到的大量属性和特征,我们的数据表显得很稀疏。基于树的模型可以解决稀疏性问题,特别是XGBoost更为出色。我们选择了三种不同的模型:随机森林,XgBoost和梯度增强树。下图展示了基于XGBoost的结果,因为它具有更高的稳定性。 


0?wx_fmt=png


首先我们将所有的有效属性作为预测因子进行建模,拟合到了一个R square =0.936的模型。根据特征重要性的图示我们可以得出一个很强的影响因子——用户平均评价星级。然而,该信息并不是什么远见卓识;总体的商业评分是所有用户评分的平均值,因此显而易见该因素在图表中会很显著。我们决定移除所有跟评价相关的因素后,再重新运行XGBoost: 


0?wx_fmt=png


第二次运行时,R square 明显地下降到0.318,去除评价相关的因素后,我们无法很好的进行评分预测。这次试验中,地理位置,用餐人数,人均消费是重要的预测因子。


◆ ◆ 

主题建模


预处理


建立任何模型之前,我们都需要预处理点评文本:

  1. 删除常用的停用词,例如“在”,“和”,“但是”等等。。。 

  2. 删除标点,规避非字符号 

  3. 删除数字 

  4. 删除无法写出的符号 

  5. 去除空白符号 

  6. 将文本转换为小写字母 

  7. 把文本分词为二元词和三元词(n-gram语言模型中的bigrams和trigrams)


由于一些词汇与其他词汇连用时会改变其原有的意思,我们决定将点评文本分词为二元词组和三元词组(2或3字的组合) 。例如,如果将 “不好” 分成 “不” 和 “好” 两个单词,那么分析过程就会出错。


◆ ◆ 

LDA(主题模型)和数据可视化


为了理解点评数据中的关键主题,我们使用LDA主题建模算法来提取每个类别和每个评级中的20项关键主题。我们使用R语言扩展包 “LDAvis” 来进行交互式主题模型的可视化, 并且回答了这些问题: 


  1. 每项关键主题都是什么意思? 

  2. 这些关键主题普遍性怎么样? 

  3. 这些关键主题是如何相互关联?


0?wx_fmt=png


上图右侧结果是LDAvis对第一个问题的回答。在这张条形图中,y轴是词条,x轴是出现次数,你可以看出点评内容中特定词条在各主题内的出现次数。我们采用一种特殊的度量标准 -- 显著性(saliency) -- 来确定一项主题中最重要的词条。显著性就是词条在单个主题中出现频率相对其在整个点评文本中出现频率的比例。排列越靠前的词条也就越独特,相对于这项主题也就更重要。


上图左侧LDAvis的结果图叫做主题间距模型。它为主题模型提供全局视图,并且回答了后两个问题 -- 每个主题圆的直径代表每项主题的普遍性;詹森 - 香农离散度计算出主题间的相互距离,(詹森 - 香农离散度是测算两个概率分布间相似性的流行方法),然后再按比例调整每两个主题的间距。要点在于,两个气泡越是靠近彼此,它们就越相似。一图胜千言,因此我们将它纳入了我们的应用程序。


◆ ◆ 

应用程序


我们的最终产品为R Shiny应用程序,包含以下几项功能:

  1. 地图:餐厅成功的地理位置分析

  2. 主题建模:理解指定类别市场中的差评

  3. 料理画廊:理解好评中频繁出现的料理主题


我们的主要用户将是想要开餐厅或扩展餐厅的小企业主。 


0?wx_fmt=gif


通过地图,用户可以找出开餐厅最好的地方,或是鸟瞰餐厅间的竞争状况。亚利桑那州的一张互动地图显示出了这些餐厅,它们被分为某类餐厅中 “高于同类平均水平” 和 “低于同类平均水平” 两组。用户通过点击地图上的标记就能获得有关餐馆的具体信息。现在假设用户希望开一家意大利餐厅:


◆ ◆ 

标识出地图上的大型片区 


在地图上,人们普遍喜欢意大利食品的最大片区就很可能是开餐厅的好地点。


0?wx_fmt=gif


◆ ◆ 

还有就是主题模型功能。 

以前如果想要了解其他餐馆的负面点评,唯一方法就是阅读每一页点评。而主题模型是迅速汇总信息的最快方式。用户可以快速探索不同的主题气泡,并基于点评中词条的出现频率找出问题。例如,如果时间是一个很重要的问题,那么用户在开餐厅时就可以利用这一点。


◆ ◆ 

最后是菜单画廊功能。 

画廊可以显示出最受好评的食物。用户可以通过了解最流行的词条来建立自己餐厅的菜单。


通过使用预测模型和探索式数据分析(EDA),我们确定了要纳入应用程序YelpQuest中作为预测因子和过滤器的关键特征。而基于差评和好评的主题模型使我们的产品有望帮助未来小企业主们的成长和成功。

原文发布时间为:2016-11-22

本文来自云栖社区合作伙伴“大数据文摘”,了解相关信息可以关注“BigDataDigest”微信公众号

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
7.数据本地化CCString,CCArray,CCDictionary,tinyxml2,写入UserDefault.xml文件,操作xml,解析xml
 数据本地化 A CCUserDefault 系统会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.win32\Debug.win32下生成一个名为UserDefault.xml.所有的key皆为char *型,value类型为bool intfloat double std::string. 读操作
1233 0
解析实时的DB time过程分析
在我们查看awr报告的时候总是会有一个关键指标需要注意,那就是DB time,这个指标一般都是通过awr报告来看到的。 比如我们得到的awr报告头部显示的下面的信息,我们就清楚的知道DB time是1502.06 mins,相对于Elapsed time来说,将近有20倍的压力。
568 0
Memcached命令执行漏洞(CVE-2016-8704、CVE-2016-8705、CVE-2016-8706)原理和对阿里云Memcache影响分析
Memcached是一个广泛使用的高速缓存系统,近期研究者发现小于1.4.33的版本存在3个整数溢出漏洞,通过这几个漏洞攻击者可以触发堆溢出导致crash,这里对漏洞做了分析和验证。尔后验证了阿里云ApsaraDB for Memcache不受漏洞影响,并分析了原因。
6996 0
JVM源码分析之System.currentTimeMillis及nanoTime原理详解
##概述 上周`@望陶`问了我一个现象很诡异的问题,说JDK7和JDK8下的`System.nanoTime()`输出完全不一样,而且差距还非常大,是不是两个版本里的实现不一样,之前我也没注意过这个细节,觉得非常奇怪,于是自己也在本地mac机器上马上测试了一下,得到如下输出: ``` ~/
6503 0
机器学习实战(Machine Learning in Action)参考答案以及原始数据
数据以及参考code在官网下载即可 https://www.manning.com/books/machine-learning-in-action 如果下载不了可以从这里下载:名称 MLiA_SourceCode.
966 0
2728
文章
6591
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载