基于协同过滤算法的旅游推荐系统的设计与实现
2020-06-07史睿瑶
史睿瑶
摘要:目前用户出行前多是从网上查找旅游信息,由于信息过载且推荐算法在旅游推荐领域应用很少,从海量信息中找到心仪的旅游景点并非易事。为了能够有效解决过载问题并向用户精准提供有效信息,设计出融合了旅游景点属性的协同过滤算法的旅游推荐系统。该文首先为旅游景点建立评价指标体系,将指标数据作为景点属性进行相似度计算并根据计算结果对旅游景点进行相似分类,结合协同过滤算法计算用户相似性并产生专属景点推荐列表,为用户提供个性化旅游推荐。本系统对河北省11个城市的旅游景点进行推荐。
关键词:旅游推荐;景点属性;协同过滤;相似度
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2020)35-0064-03
开放科学(资源服务)标识码(OSID):
Design and Implementation of Travel Recommendation System Based on Collaborative Filtering Algorithm
SHI Rui-yao
(Hebei University of Engineering, Handan 056004, China)
Abstract: At present, a lot of users before a trip to find travel information from the Internet, due to information overload and recommendation algorithm applied in the field of recommendation are very few, found in the mass information of tourist attractions is not easy to be able to effectively solve the problem of overload and provide useful information to user accurately, design the blend of the tourist attractions tourism recommendation system properties of collaborative filtering algorithm This paper in order to establish the evaluation index system of tourist attractions, the index data as the attributes of the scenic spots in similarity calculation based on the calculation results of similar tourist attractions are classified, combined with the collaborative filtering algorithm to calculate similarity between user and generate exclusive attractions recommended list, to provide users with personalized recommendation system this tourist attraction of 11 cities in Hebei province is recommended.
Key words: tourism recommendation; scenic spot attribute; collaborative filtering; similarity
1 背景
随着旅游业的发展旅游行业越来越信息化,数量众多的旅游景点存在着信息过载现象且日益严重,用户在网上查找时很难真正搜索到自己感兴趣的旅游景点,对此推荐系统是一种行之有效的解决方法。目前推荐系统已在电影、新闻、音乐、电子商务等方面应用广泛,但在旅游领域还未广泛使用:各大旅游网站多是提供信息查询及订票服务,鲜有对于旅游景点的推荐,因此本文将推荐算法应用于旅游景点的推荐。
个性化推荐系统具有商务智能,依托于挖掘大量数据信息,建立模型帮助用户进行决策或者为用户定制推荐符合其自身喜好的商品。本文选择的推荐算法是协同过滤算法,其诞生之初主要用于过滤个人邮件,目前协同过滤推荐在电子商务、电影、音乐等方面应用成熟,在旅游领域鲜有使用。国内目前存在的旅游服务网站大多只是将旅游景点进行简单的分类,对景点概要介绍并为用户开放评论与评分功能,这些服务较为被动且不具个性化,对于沒有明确目的地的用户来说服务不够有针对性。矩阵稀疏是它的一大缺点,有学者提出利用景点自身特性为旅游景点添加标签以解决数据稀疏的问题[1]。对于普通用户来说,协同过滤的优点在于可以共同分享他人经验,使得搜索结果信息更加精确,还可以得到新信息。基于以上研究背景,本文设计并实现基于协同过滤的旅游推荐系统,希望可以为现在的旅游信息系统发展个性化推荐时提供一定的借鉴意义[2]。
2 旅游景点推荐系统的相关介绍
2.1 算法介绍
旅游推荐系统的作用主体为用户和旅游景点,主要研究也是针对用户信息和景点信息进行计算。协同过滤算法的原理和思想是:基于用户信息从历史用户中寻找与其爱好相似、兴趣相投的,找到相似用户集群之后通过分析这些历史用户的历史行为发掘他们的其他喜好和行为信息,并基于这些信息完成对目标用户的喜好和行为预测给出推荐[3]。由于只考虑用户评分有其片面性和局限性,本文考虑在协同过滤算法中引入景点属性对景点进行相似度计算。通过建立旅游景点评价指标体系作为详细描述景点的标签,结合协同过滤算法对矩阵中的空缺值进行评分预测从而得到推荐结果。根据算法特性本系统使用基于物品的协同过滤推荐算法[4],基本公式为:
[Puj=j∈N(u)?S(i,K)Wjiruj]
基本原理就是通过分析用户的历史行为找到用户喜欢过的商品集合,计算相似度确定历史商品的相似商品,将相似度高的新商品推荐给用户[5],适用于商品数比用户集数量小很多且数量不宜发生变化的情况。
2.2 评价指标的建立
评价指标是分析旅游竞争力的必不可少的要素,可以详细表现出景点的特征,对于景点相似度计算结果有增益效果。由于目前尚未形成统一的指标评价体系,本文在研究大量文献的基础上,分析与筛选整理并选取其中质量好、可信度高的,作为本文旅游景点评价指标体系构建的理论依据。本旅游景点评价指标体系的确立所使用到的方法有:调查问卷法、专家法和二次文献法建立,本评价指标体系分为三级,如下表1所示。
2.3 确定权重
本文确定数据权重的方法是AHP层次分析法, 是一种定性和定量相结合的、系统化、层次化的分析方法[6]。其确定流程为:首先需要构建判断矩阵,构建方式为:计算出各分析项的平均值,接着利用平均值大小相除得到判断矩阵,平均值越大意味着重要性越高,权重也会越高,得出结果之后计算CR值(一致性指标,[CR=CIRI])。大致可将一致性检验过程分为以下几个步骤:第一:先描述上述计算得到的CI值,公式为:[CI=最大特征根-1n-1];第二:结合判断矩阵阶数得到RI值;第三:求出CR值得到一致性检验结果。一般情况下CR值越小越好,若小于0.1,则可以得出此矩阵满足一致性检验;反之需调整判断矩阵之后重新检验。由于旅游景点有13个属性值,故本次判断矩阵为13阶且CI值为0.000,针对RI值查表为1.560,根据结果可知得出的权重具有一致性。结果如下表2所示。
2.4 景点相似度计算
确定评价指标体系每项数据权重之后,从网络上爬取相关数据可以构建出关于景点-评价指标的549×12维矩阵:
[J1J2...J549A1A2...A12B1B2...B12............N1N2...N12]
其中每一行代表一个景点的数据,本次数据采集到河北省的549条景点数据,所以本矩阵有549行;每一列分别代表一个评价指标。由于旅游景点数量不容易发生大的变动且远远小于用户数量,本矩阵数据密集且变量之间基本存在共有值,故景点相似度选用欧氏距离计算。其表示在向量空间中某两点之间的真实距离,或某点到原点间距离,通过对个体在空间中距离的度量来确定个体间的相似性,公式为:
[dist(X,Y)=i=1n(xi-yi)2]
对于实现景点相似度计算时选用Python语言,将预处理过的数据写入上述矩阵中,循环赋值矩阵中每一行为X、Y,分别两两计算其欧氏距离并选取TOP10作为景点的相似景点。该部分核心代码如下:
for i in item_similar.index:
_df = item_similar.loc[i].drop([i])
_df_sorted = _df.sort_values(ascending=False)
top10 = list(_df_sorted.index[:10])
topN_items[i] = top10
3 旅游景点推荐系统设计构建
3.1 总体架构设计
本系统需要构建用户属性数据库表和景点属性数据库表,通过对用户和景点的属性信息相似度的计算确定推荐列表,为用户提供个性化推荐。系统架构图如下。
3.2 主要功能
本旅游推荐系统主要针对目标目的地模糊不清或想探寻没去过的、不一样的旅游景点的游客,系统分为管理端和用户端[7],用户端分为游客登录模块、热门推荐模块、景点评分模块、个性化推荐模块。用户初登录系统时会看到热门推荐模块,该模块结果选自所有景点中用户评分较高的TOP景点,由于所有用户登录系统后所看到的推荐结果相同所以不具有个性化推荐功能。个性化推荐是通过对用户和景点信息进行相似度计算并结合协同过滤算法得到的针对用户的专属推荐列表,每个用户的推荐结果都不一样。管理员负责管理用户和景点的信息,从管理端的登录入口登录。系统的功能模块图如图2所示。
3.3 数据获取
通过对景点数据的抓取,将得到的550个景点分为9个类别分别为:地文景区、水域景区、生物景区、历史遗迹景区、博物馆景区、主题公园景区、度假区、建筑物景区和民族民俗景区九类。本系统数据集主要利用爬虫[8]技术从旅游网站上获取,取得的景点数据其实就是标签数据,矩阵中的一行[A1A2...A12]就是景点J1的标签。指标体系中创新的属性为酒店餐饮服务,需要爬取景点周边两公里范围内的酒店餐馆数量,该部分核心代码为:
For i in range(len(lat_partion)):
location=str(lat_partion[i])+","+str(lng_partion[i])
3.4 系统实现
景点评价指标体系作为景点属性可以侧面反映出每个景点的具体标签信息,通过分析指标体系数据可以获取景点特征,进而计算景点相似度。将取得的550个景点数据中每个景点与除自身以外的其他景点分别进行相似度计算,然后取得相似度值最高的TOP10个景点作为该景点的相似景点。随机取得两个景点的相似度计算结果如图3所示。
得到景点的相似景点之后,结合用户评分对用户-项目评分矩阵进行填充,从而得到每个用户的专属推荐列表,实现对于用户的个性化推荐。
4 结束语
好的推荐系统的意义在于不仅能够预测用户的喜好选择,更能够为其提供“意外之喜”,拓宽用户视野,帮助他们发现自己以前从未接触过并很感兴趣的新事物[9]。本文针对旅游景点信息建立评价指标体系,爬取相关数据并将其作为景点属性对旅游景点进行相似度计算,再结合协同过滤算法得出每个用户的旅游景点推荐列表从而对用户产生个性化推荐,实验结果表明这种方法可以对用户产生有效推荐并帮助用户发现新的未知景点。
参考文献:
[1] 李雅美,王昌栋.基于标签的个性化旅游推荐[J].中国科学技术大学学报,2017,47(7):547-555.
[2] 吴军.基于协同过滤的个性化旅游推荐系统的研究与实现[D].北京:北京交通大学,2017.
[3] 侯新华,文益民.基于协同过滤的旅游景点推荐[J].计算技术与自动化,2012,31(4):116-119.
[4] 程江飞. 面向个性化推荐系统的协同过滤算法研究[D].苏州:苏州大学,2019.
[5] 高洁. 基于主题特征的情感分类及推荐算法研究[D].天津:天津大学,2016.
[6] 屈正庚.基于AHP旅游景点竞争力评价体系的研究[J].甘肃科学学报,2019,31(2):8-12.
[7] 林琬珍.基于协同过滤技术的旅游景点推荐系统的设计与实现[D].沈阳:辽宁大学,2016.
[8] 汪欲胜,朱尚斌,侯山,等.基于大數据环境下Python的爬虫技术的应用[J].信息通信,2020,33(8):189-190.
[9] 项亮.推荐系统实践[M].北京:人民邮电出版社,2012.
【通联编辑:谢媛媛】