基于协同过滤的美食店铺推荐算法
2022-05-30林帅伽俞婷程芳颖
林帅伽 俞婷 程芳颖
摘要:最近,随叫随到的外卖服务在中国非常流行,美团、大众点评每天的外卖订单超过3000万份,美食平均在30分钟内送到食客手中。如何推荐出更符合用户喜好的餐厅,成为当下商家和用户较为关心的话题。针对如何对用户推荐符合心意的餐厅的问题,文章提出了基于协同过滤的美食店铺推荐算法,同时分析了基于用户的推荐算法、基于餐厅的推荐算法、基于[ SVD]的协调过滤算法以及流行度推荐算法这四种推荐算法,解决了推荐餐厅与用户喜好适配度问题。实验表明,文章提出的基于协同过滤的美食店铺推荐算法,在准确率(Precision)和召回率(Recall)以及[ F1]这三种指标上优于其他对比算法。
關键词:协同过滤;推荐系统;混合算法;美食店铺;美食推荐
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2022)30-0051-03
开放科学(资源服务)标识码(OSID):
1 引言
如今,随叫随到的外卖服务非常流行。食客可以浏览在线餐厅市场,选择餐厅并预订他们喜欢的食物或饮料。但是面对网络数据的爆炸增长,使得用户难以在海量的数据中快速地找到适合自己的美食,具有一定的盲目性。通过对现有美食App的调查发现,美食数据排行过于笼统,不能有效地解决用户的个人喜好等问题。针对以上问题,现阶段的市场提供个性化推荐服务、提高检索效率、优化用户体验成了广大食客的诉求。面对这一诉求,根据数据集的用户和餐厅特征,提出基于协同过滤[1-3]的美食店铺推荐系统算法,该算法结合了基于用户的推荐算法、基于餐厅的推荐算法、基于[ SVD]的协同过滤算法以及流行度推荐算法,并使用准确率和召回率以及[ F1]这三种指标与其他算法进行了比较。
2 基于协同过滤的混合推荐算法
本文构建了融合多因素的美食推荐方法,该方法统一对用户、餐厅签到记录、餐厅流行度进行建模,通过餐厅签到记录捕获用户潜在的偏好,并且结合流行度模型进行餐厅推荐。本文最后在真实世界的数据集上进行了实验,证明本文提出的方法相比现有的其他方法能够更加准确地向用户推荐餐厅。
2.1 基于流行度的协同过滤算法
所谓“从众”,是指在群体的影响下,放弃自己的观点,与他人保持一致的社会心理行为。例如,在网上购物时,用户会习惯性地查看商品的销售量。当销售量越大时,用户更倾向于购买并给予高分。餐厅的受欢迎程度极大地影响着用户的决定。换言之,用户更有可能访问热门餐厅。
本文提出基于流行度的推荐算法,该基础算法是根据用户对餐厅点击的热度将当下最热门的内容推荐给用户[4-5],由此对求解基于流行度的推荐算法的算法思路基本如下:
1)用户-餐厅历史调用记录
通过对历史数据集进行分析,得到了用户集合和餐厅集合,记用户集合为[U],[U={u1,u2,u3,…un}]。记餐厅集合为[R],[R=r1,r2,r3,…rm]。记用户餐厅调用记录矩阵[Yn×m],若用户[ui]访问过餐厅[rj],那么[yi,j=1],[yi,j∈Yn×m]。
2)计算餐厅之间的相似度
利用余弦算法计算餐厅之间的相似度,公式如下:
sim([rx,ry)=N(rx)∩N(ry)N(rx)N(ry)] (1)
其中,[N(rx)] 表示喜欢餐厅[rx]的用户数,[N(ry)] 表示喜欢餐厅[ry]的用户数,[N(rx)∩N(ry)]表示同时喜欢餐厅[rx],[ry]的用户数。
3)计算推荐餐厅推荐列表
本方法采用引入流行度来进行餐厅推荐。记某一餐厅为[ra],通过对数据集历史记录进行分析,得到餐厅[ra]的历史访问人数为num([ra]), 餐厅[ra]的流行度为[pnum(ra)],平均流行度为[pnum(ra)avg],对流行度进行归一化,得到公式如下:
[weightra=pnum(ra)avgpnum(ra)] (2)
[weightra]表示餐厅[ra]的流行度权重因子。
利用流行度来改进公式(1),得到如下公式:
sim([rx,ry)=weightra*N(rx)∩N(ry)N(rx)N(ry)] (3)
若用户[ui]访问过餐厅[rx],那么依据公式(3)可得到其余餐厅与[rx]的相似程度,利用相似程度完成推荐,得到餐厅推荐列表。
2.2 基于SVD的协同过滤算法
通过对基于SVD的协同过滤算法[6]的研究,对矩阵Y进行[SVD]分解,得到如下公式:
[Y=PQT] (4)
其中[P]为用户特征矩阵,[Q]为餐厅特征矩阵。其中,[P∈Yf×n]的每一行表示用户,每一列表示一个特征,它们的值表示用户与某一特征的相关性,值越大,表明特征越明显。[Q∈Yf×m]的每一行表示餐厅,每一列表示餐厅与特征的关联。
经过SVD分解,得到每一个用户对于每一个餐厅的偏好程序,公式如下:
[sui,ry=puiqryT] (5)
本文使用梯度下降算法来进行训练,公式如下:
[minp,q(ui,ry)∈Y(yi,j-puiqryT)2+λ(||pui||2+||qry||2)] (6)
其中,[λ]为超参数,[λ(||pui||2+||qry||2)]表示计算方差,衡量模型的稳定性。方差大的模型会过拟合[6]。
2.3 总体偏好程度
为了提高推荐的准确性,使用线性框架来结合用户偏好和流行度影响。本文使用用户对于餐厅的总体偏好程度[7]来计算餐厅推荐列表,目的就是根据线性框架来学习用户对不同餐厅的偏好,从而给出用户感兴趣的餐厅分布[8]。为了提高推荐算法的准确程度,将基于[SVD]与流行度算法相结合,并引入流行度权重因子[α],得到最终结果,公式如下:
[finals=1-α×sui,ry+α×sim(rx,ry)] (7)
通过对权重因子的测试,获得本推荐算法的最终结果,从而产生餐厅推荐列表。
3 实验及评估结果
3.1 实验数据集
本文数据来自于和鲸社区美食数据集①,共4万家餐厅,54万用户,440万条评论数据。首先对数据集进行数据预处理,删除低于100条的数据记录数,通过整理最终参与实验一共4417家餐厅,3291用户,76208条数据。由于用户评价较为主观性,采用归一化处理评价数据。
3.2 评估指标
本文使用精确率、召回率和F1指标来衡量算法性能。
精确率。表示符合用户喜爱的推荐物品数在用户总推荐物品数的比例,定义如下:
[p=n(B)s(B)]
其中[n(B)]为符合用户B喜爱的推荐餐厅, [m(B)]为用户B总喜爱的推荐餐厅,[s(B)]为用户B总推荐餐厅[8]。
召回率。表示符合用户喜爱的推荐物品数与用户总喜爱的推荐物品数的比例[9],定义如下:
[r=n(B)m(B)]
[F1]指标。代表精确率和召回率的一个综合考量,两者一起使用才能评价推荐系统的好坏,定义如下:
[F1= 2prp+r]
3.3 基础算法对比
将数据集分为训练集和测试集,通过误差计算,发现不同参数对应的误差值都不同。这些参数包括邻居个数,训练,测试集的划分比例。为测试其灵敏性,分别对训练集、测试集进行数据测试。
针对基于用户的推荐算法,本文对不同推荐个数以及邻居个数进行研究,结果如图1所示。图表中数据显示,邻居个数的增加,基于用户的推荐相似度总体趋势呈下降状态。并通过对数值反复的模拟计算,前期topk=5的曲线趋势值要处于相对于中间趋势,但后期随着邻居个数的增加,取topk=5的效果要优于其他。
针对基于餐厅的推荐算法对推荐程度的影响,改变topk和邻居个数的值通过控制变量法,测得数据如图2。通过图2可以看出在邻居个数位于50左右,基于餐厅推荐算法的相似度达到一个相对峰值,为相对优值。
基于上述两种推荐算法引入第三种基于SVD的推荐算法对实验的影响程度,根据数据得出上述图3,发现基于SVD 推荐总体数据区间位于0.50%~0.90%,整体相似度相对提高,呈上升趋势,数据波动较小,在邻居个数处于80左右得到此算法在同一topk下的相对峰值。
在对流行度进行数据分析,数据波动于0.4%~0.6%这一区间内,在topk=2时处于该算法的峰值0.58%。
3.4 混合算法对比
如图5给出了六种混合推荐算法各项指标下的实验结果,其中UCF为基于用户的协同过滤、RCF为基于餐馆的协同过滤、SVD为基于SVD的协同过滤、POP为基于流行度的协同过滤。
通过对基础算法的改进与融合,对精确率、召回率、F1的实验结果分析,相比于其他混合算法只有某一方面的提升,基于POP与SVD的混合推荐算法无论是在美食餐厅推荐的准确程度、全面度都有了明显的质量提高,在topk=5时达到了实验的峰值,推荐效果好。
4 结束语
本文提出了基于SVD和基于流行度(POP)的混合推荐算法,该算法结合了SVD算法和POP算法的优点。实验表明,该算法在精确率、召回率和F1三个指标上要优于其他对比算法。未来,我们计划将神经网络算法引入到美食推荐中。
注释:
①https://www.heywhale.com/mw/dataset/5e946de 7e7 ec38002d 02d533/content.
参考文献:
[1] Bell R M,Koren Y,Volinsky C.The BellKor 2008 solution to the netflix prize[R].2008.
[2] Paterek A.Improving regularized singular value decomposition for collaborative filtering[S.I.].2007.
[3] Lee D D,Seung H S.Learning the parts of objects by non-negative matrix factorization[J].Nature,1999,401(6755):788-791.
[4] 張春丽.基于Hadoop的协同过滤算法的研究与实现[D].上海:东华大学,2015.
[5] 熊聪聪,邓滢,史艳翠,等.基于协同过滤的美食推荐算法[J].计算机应用研究,2017,34(7):1985-1988.
[6] 陈清浩.基于SVD的协同过滤推荐算法研究[D].成都:西南交通大学,2015.
[7] 王立才,孟祥武,张玉洁.上下文感知推荐系统[J].软件学报,2012,23(1):1-20.
[8] 巨星海,周刚.一种基于用户偏好分析和论坛相似度计算的改进LFM推荐算法[J].信息工程大学学报,2021,22(4):433-437,449.
[9] 张芳.基于项目流行度与用户信任度的协同过滤推荐算法研究[D].青岛:山东科技大学,2018.
【通联编辑:谢媛媛】