通过收集分析参观者的行为数据,数据侠Belinda设计了一套简单的推荐系统,让一家老牌传统博物馆重新变得鲜活起来。你不用担心在参观时,会被博物馆卷帙浩繁的历史厚度压得喘不过气来,因为数据会为你精心推荐一条个性化的历史故事线,带你领略最有趣的历史片段。
老博物馆的新玩儿法
Cooper Hewitt博物馆是一座坐落在纽约、有着一百多年历史的设计主题博物馆。它始建于1896年,收藏了来自全球的优秀设计作品。从伟大的建筑构想,到来自非洲的珍贵纺织品,再到反映人类历史各时期文化脉搏的海报……博物馆中的展品加起来,就是一部浩瀚的世界设计作品编年史。
这座古老的博物馆位于一间同样古老的豪宅内。1970年博物馆搬进美国钢铁大王安德鲁-卡内基(Andrew Carnegie)的一座故居。这座建于1901年的老房子拥有64间房屋,也是美国首座钢结构的私人屋邸,这让其拥有奢侈的空间以及顶级的采光。同时它还是首座拥有电梯、中央供暖的私人住宅,甚至还设计出了中央空调系统的雏形。而最近一次重新翻修设计,让这座传奇老宅的创新精神得到延续,并且彻底改变了博物馆与参观者之间的交流方式。
(图片说明:Cooper Hewitt设计博物馆内景)
2014年,博物馆完成3年的整修重新开门。游客们发现,在入馆参观时多了一个可以随身携带的工具——一支电子笔。人们可以用这根笔扫描自己喜欢的展品,也可以在沉浸式体验区使用它制作自己的设计作品。结束参观回到家中,游客还可以随时在网上重温此次游览——扫描过的展品会被记录下来供你随时查看。
(图片说明:博物馆电子笔使用指南)
这样的创新设计,让科技和数据能够融入游览者的参观体验中,从而彻底颠覆了过往单向地、被动地从墓碑一样的介绍牌中获取知识的游览体验。博物馆为游客提供了一个与艺术品互动对话的场所。
而更令人兴奋的是,电子笔记录的游览数据,让数据分析师有了施展空间。博物馆开放了API,感兴趣的人都可以使用这些数据进行分析。我平时也很喜欢逛博物馆,但是常常被这些大量的历史知识所淹没。所以我决定使用这些数据为博物馆设计一个推荐系统,让参观者能够更个性化地了解设计的历史故事。
数据采集与分析
我使用的数据均来自博物馆的Github资料库。我一共下载了两个CSV文件,使用R语言进行分析。数据包括:
展品数据:共194316件展品相关数据,包括展品ID、来源地、标签、种类、历史时期等38个数据维度。
用户电子笔记录的数据:2014年8月到2016年2月的3559735组被扫描的展品相关数据;时间跨度584天的电子笔数据;111467次独立游览数据。
我首先对这些数据进行基本分析以掌握大概的情况。我首先对展览所属展区(departments)和来源地进行了基本的探索性数据分析。结果显示,属于绘画,印刷品和图片设计展区,和来自美国,法国,德国和意大利的展品最多。这一结果也符合我们的基本历史知识:意大利文艺复兴,德国的包豪斯运动,法国布杂艺术(Beaux-Arts)以及当代美国设计对艺术设计史都有不小的影响。
(图片说明:所属展区分布情况)
(图片说明:展品来源地国家情况)
而在电子笔记录的数据方面,共有两个维度:游客ID和物品ID。对这些数据进行基本的探索性数据分析,结果显示平均每个游客每次游览大约会扫描3到4件展品。
(图片说明:单支电子笔扫描展品次数分布)
用“协同过滤+关联规则”设计我们的推荐系统
接下来介绍我设计推荐系统的方法。我在设计推荐系统的过程中研究了协同过滤(Collaborative filtering)和关联规则(Association rules)的方法。
搭建协同过滤模型时,我使用了 R 语言包 Recommenderlab 来帮助设计推荐算法。为博物馆设计的算法主要基于:
受欢迎程度(popular):基于受欢迎的展品进行推荐;
关联规则(Association Rules):基于在展品中所发现的各展品间(amongst items)的关系所作的推荐;
基于用户的协同过滤(User-Based Collaborative Filtering),基于其他相似用户的喜好所作的推荐;
基于展品的协同过滤(Item-Based Collaborative Filtering),以关联规则为出发,基于发现的展品两两之间(between items)的关系进行推荐。
以用户为基础的协同过滤是一种以记忆为基础的协同过滤技术。它会基于相似的用户或使用KNN算法识别出的“邻居”所表现出的行为模式(pattern)进行推荐。KNN算法即K近邻分类算法(k
nearest neighbor algorithm),简单说就是对于待测点a,它最有可能属于距离它最近的k个样本中同类别项目数量最多的一类。
在这里,我设置一个二进制的稀疏矩阵,每一列代表一个展品,行代表每个游客。如果游客喜欢这个展品,那么对应方格会填入1,否则就是0。如下图,所有列都被加总,KNN算法识别出的“邻居”用蓝色标出;再将目标用户本身就喜欢的展品从推荐选项中移除(红色x),剩下的展品中加总分数大于0的就会被最终推荐给这名目标用户。
(图片说明:基于用户的协同过滤)
使用这种方法的一个阻碍,就是计算量很大,这也是KNN算法一直有的一个问题。所有数据都必须在本地读取,两两之间都要进行相似度的计算。我训练一个基于用户的协同过滤模型的尝试最终失败,因为所有训练都显示超时。
以记忆为基础(Memory based)的协同过滤技术是以用户的评分数据来计算用户与展品之间的相关性。它的缺点在于难以处理大数据量,因此后来又发展出以模型为基础的协同过滤技术。
基于展品的协同过滤算法是以模型为基础的协同过滤技术。它是利用用户对一些展品评价的历史数据构建模型,以模型预测用户对新展品可能的评分。
它的前提假设是,用户会希望被推荐与他喜欢的展品相似的展品。也就是通过计算展品之间的相似性来代替用户之间的相似性。
这个算法基于一个评分矩阵(rating matrix)中展品间的彼此关系进行推荐,类似于关联规则挖掘。于是,我建立起一个相似度矩阵(similarity matrix),每行每列都代表一个展品,将使用余弦相似性或皮尔森相关系数得出的相似度数值填入相应方格。
下图中蓝色即为与活跃用户喜欢的展品相似的展品,每一列被加总,活跃用户已经喜欢过的展品被移除(红色x),剩余的加总值大于0的展品被推荐。
(图片说明:基于展品的协同过滤)
通过Recommenderlab包能够让不同的训练算法结合在一起,得出一个混合的模型。我尝试将上面提到的四种算法组合成一个混合模型。尽管我能够对这个混合模型进行训练,但用于预测时却并不成功,总是显示返回错误。
下面的ROC曲线(接收者操作特征曲线)图显示了对混合模型进行评估的情况。关联规则挖掘方法、基于展品的协同过滤表现优于其他组。整个模型的TPR(真阳性率)比较低,这令人担忧,并需要进一步检测。而我倾向于认为这背后的原因是由于之前的二进制矩阵极度稀疏。
(图片说明:对混合模型进行评估的情况)
Recommenderlab 还有一个问题,就是无法检视其使用关联规则方法所找到的规则,因此我额外使用了一个关联规则包“arules”来训练用于分析的模型。
使用同样一批电子笔数据,以支援度(support)为0.075,置信度(confidence)为0.8的参数训练的一个关联规则模型,得出了1218条规则。
研究了被推荐最多的展品后我发现:它们大多为建筑类展品。我很好奇为何会这样。对比后我发现,游客扫描次数最多的20个展品其实也都属于建筑类,这就让推荐结果看上去比较合乎逻辑。
是骡子是马,拉出来溜溜
最后,我使用Shiny App(一个用于便捷制作App的包,帮助实现R语言与web交互的功能)制作了一个应用软件,来模拟推荐系统的工作原理。用户会看到5个图片,感兴趣可以选择“喜欢”,否则可以选择“不太感冒”。根据用户的选择,App会利用基于展品的协同过滤算法推荐出5个新的展品图片。用户还可以提前设定展品的所属年代和来源地等。
(图片说明:Shiny交互页面截图)
这个App仅有基本的功能,未来还有许多可以增加的功能,比如优化图片设计和交互细节;鼠标悬浮于图片上时显示展品信息;与博物馆的API进一步对接,以实时更新展品目录等。对于办展方和展览馆,还可以尝试用这些数据预测游客的兴趣以及职业,进行空间分析,看展品的摆放位置是否也会影响被扫描的次数,并可以对这些信息进行可视化呈现。
领取专属 10元无门槛券
私享最新 技术干货