“千里佳片一线牵” ——基于协同过滤算法的个性化电影推荐系统

发布者:陆敏发布时间:2021-05-26浏览次数:14


一、摘要


互联网时代下,科技给人类的生活提供了更多便捷服务,但与此同时,网络带来的信息量也呈指数级增长,“信息过载”问题日益严重。如何有效推荐用户所需信息成为亟待解决的问题,尤其是在娱乐和影视行业,商家如何推荐给用户满意的电影、观众如何通过推荐选择心仪的电影成为广泛关注的问题。推荐系统是信息领域的重大跨越之一,但很多单纯基于内容的推荐并不能很好地解决这一问题。鉴于此,首先,本案例组选取豆瓣电影样本信息构建了电影推荐系统网站。网站用户可注册账号,并根据网站的电影列表信息自行添加喜欢的电影。其次,本案例组在电影属性分析的基础上,通过对用户特征资料的搜集,分析用户喜好特点,借鉴机器学习中集成学习的方法,融合基于用户及基于物品的协同过滤算法,从而为用户推荐其感兴趣的电影信息,解决信息过载的问题。此外,本案例组还融合了社交功能,可以把相似用户所喜欢的电影通过添加好友的方式互相推荐给对方。


关键词:有效喜爱电影信息;协同过滤;推荐系统;可视化;电影推荐网站


二、研究主要流程


      1. 研究背景与意义

      2. 数据介绍

      3. 案例分析流程

      4. 基于协同过滤的推荐系统

      5. 结果分析


三、分析及主要结论


(一)问题、现状与解决方案


       随着互联网的发展而产生的信息量越来越多,质量也稂莠不齐,人们正面临严重的“信息过载”问题,这就导致接收者无法快速精准地得到所需要的信息。搜索引擎是解决信息冗余的有效策略之一,但往往用户提供的关键不够准确,导致搜索引擎输出的信息不能满足用户的需求,因而从纷繁复杂的信息中找到自己真正需要的选择,无异于大海捞针,面对这样一个棘手的问题,个性化推荐系统应运而生。个性化推荐在电影网站的应用也相当普遍,很多商家选择基于内容的推荐算法,将与用户所感兴趣信息相似度高的信息推送给用户。个性化电影推荐的目标是根据相似偏好的用户的意见向目标用户推荐他、她没有关注到但可能喜欢的电影,但人的“喜爱”是复杂的,机器所识别的相似度高也许并不是用户心中的高相似度。因此如何将推荐信息更加人性化,推荐过程更符合人类思考的特征,就成为了一个重要问题。

       以蓬勃发展的电影市场为背景,个性化影视推荐系统成为当前热门研究方向。国内短视频(抖音、快手、微视)推荐系统比较成熟,它们会根据用户以往的浏览记录以及喜好来给用户推荐相似的短视频,深受人们喜爱。目前,针对长视频,尤其电影的个性化推荐较少,如豆瓣等均是根据影片类型,年份等将影片分类,再从特定类别的影片集合中选择出属性相似的电影推荐,筛选出的电影虽是个性化定制,但种类多而杂,出现不对胃口电影的几率仍然很高,对于选择困难症的人群来说并不够友好,以致大多用户常常选择一部电影看几分钟就默默地退出。

       基于上述痛点问题,拟对用户历史行为数据的挖掘发现用户的喜好偏向,并预测用户可能喜好的产品进行推荐。


(二)数据介绍


      1. 数据描述

本案例共选取来自豆瓣平台的23999条电影样本,录入的信息包括电影海报、演员、上映年份、评分等信息供用户浏览。

豆瓣电影样本信息示例


上表是部分原始电影信息示例,展示的信息包含电影名称、演员信息、导演信息、豆瓣评分、豆瓣投票人次、语言、上映日期、上映地区等。用户可根据页面所示的电影信息来选择、添加自己喜欢的电影。

用户信息示例


上表所示为部分用户信息样本,除用户ID外,本案例组还收集了用户喜欢的电影总数与名称。从表3显示信息来看,多数用户都喜欢《千与千寻》、《霸王别姬》、《摔跤吧!爸爸》等电影,这些电影都是来自世界各地的经典之作,不仅演员阵容强大、观赏度高,电影所表达的内涵也十分深刻。从喜欢的电影数量来看,用户喜欢的电影数量多少不一,希望通过本文的推荐,网站的每个用户都能快速寻找到自己喜欢的电影。


      2. 电影信息

电影类型分布饼图



上图所示的电影样本类型比较丰富,共有16种。其中动作、剧情、喜剧、冒险、科幻、爱情、奇幻类电影所占比重较大,武侠、历史、战争类题材的电影占比较少。从数据来看,剧情与动作类电影各占13.55%,占比较大;其次是喜剧类电影作品,占13.55%;冒险类电影占比也较高,为13.18%;科幻与奇幻类电影占比也都在12%以上;其余电影种类占比则较低。

电影评分直方图


上图中柱体的高度代表了相应得分电影的频数,本案例选择的电影样本平均得分6-8分,说明所挑选的电影更加符合大众口味。评分较低与较高的电影也在入选范围,评分较高的电影当然受到绝大多数观众的青睐。同时,本推荐系统还选择了一部分评分较低的电影,但评分低并不意味着电影一定不好看,也可能只是因为小众或者电影宣传较少而评分偏低,所以这里的评分只能代表豆瓣的注册用户对其评分不高。

电影评分概率密度图


为使电影评分曲线更加平滑,获得其峰值属性,本案例组绘制了概率密度图,见上图。从中可以更加清晰地看出电影评分从低到高的变化趋势,它经历了先升后降、再升再降的波折;图像上可以准确获知评分频数的峰值,处于6-6.5评分阶段的电影数量是最多的。

      3. 用户信息

用户画像男


上图是基于一名用户喜欢的电影做出的词云图。这轮廓一看就是帅气的小哥哥!观察此用户的词云图,该用户所喜爱的电影大多是钢铁侠、美国队长、蝙蝠侠等类型的电影,毕竟每个男孩心里都有一个守护世界的梦想。还有回魂、监狱风云等国产经典电影也是这位男性用户的最爱。


用户画像女


接下来通过上图可以观察另外一位用户的词云图,此图案是一位长发飘飘的小姐姐。这位小姐姐喜爱的电影种类比较杂,有类如天空之城的“大人动漫”,毕竟每位女孩都有一颗温暖天真的心,有类如贫民窟的百万富翁、驴得水等社会题材的剧情电影,还有类如湄公河行动等相对激烈的动作电影等。从上述两张词云图中,可以获知用户喜爱的电影个性化标签更为显著,因此基于用户喜欢的电影信息来推荐电影,不失为一种好的策略。


      4. 推荐信息

基于一位用户的喜欢信息推荐的电影词云图


案例组根据算法推荐了此用户可能喜欢的电影,上图中大写的推荐映入眼帘,该词云图显示了推荐的电影名及词频大小,直观展示了电影推荐结果。


      5. 案例分析流程概述

项目流程概述


本案例组对网站进行了推广。终端用户可以提交注册申请,登录并且选取自己喜欢的电影和用户,案例组将用户的数据存储于后台的系统数据库中,在后台数据库中,将用户信息与电影数据相匹配,进行推荐系统的模型训练,得到模型的预测结果,最终将预测结果通过网站前端呈现出来,反馈给用户,用户端最终实现“所见即所得”,项目流程概述见上图

本案例组的创新之处在于:一是通过爬虫技术实时获取数据,相对于直接采用某一特定的电影数据集(如MovieLens)更具有时效性;二是建立了电影推荐系统网站,任何用户均可直接注册,点击喜欢的电影,立即能够得到电影推荐的反馈,方便快捷。同时,随着时间的推移,当用户数量动态增长,该推荐系统的预测效果可逐渐提高。


(三)基于协同过滤的推荐系统


在不考虑算法的情况下,一个推荐系统的通用模型如下图

推荐系统通用模型


      1. 协同过滤算法

常见的协同过滤推荐算法有两种,一种是基于用户的(user-based)协同过滤推荐,另一种是基于物品的(item-based)协同过滤推荐,如下图所示。

  基于用户的协同算法的示意图


基于物品的协同过滤算法


无论是基于物品合适基于用户的协同过滤算法基本都是需要以下三个步骤:

Step1.计算用户或者物品相似度

Step2.找到与目标用户兴趣相似的用户集合

Step3.形成推荐列表


      2. 推荐算法的评价指标

基于推荐系统的基于准确率的评价指标大多采用HR(命中率)NDCG(归一化折扣累积增益)以及MRR(平均倒数排名)评价推荐系统的性能。

       其中,|GT|代表所有测试集合,分子是推荐列表中属于测试集合的数量NDCG基于列表排名位置折损因子体现,它的思想主要是:位置在推荐列表越靠前的推荐内容,其相关度应该越高,具体表达式如下所示

       其中,累加项的分子是效用函数,也称为增益(Gain),分母是关于位置的一个折损因子,Z是一个归一化因子,表示理想的推荐列表的折损累计增益(discountedcumulativegainDCG)NDCG的取值范围在01之间,分值越高代表推荐效果越好,公式中的N是列表排名个数。当用户量较少时,取前10个输出进行HRNDCG评价,即N=10


      3. 算法流程

如下图所示,本案例组搜集的数据分为两个部分,所爬取的电影数据和用户的行为数据,在搜集到用户的行为信息和电影的实时信息之后,首先对数据进行预处理,将非结构化的数据进行结构化。本案例组使用正则化技术编写程序对文本信息进行清洗处理,对缺失数据进行补全处理,将上述信息处理为可用于模型训练和预测的结构化数据。在数据预处理完毕之后,可得如图中所示的三个表,即电影—属性表、用户—好友表和用户—电影表。在获得结构化数据的基础上,本文进行相似度计算,见图11中的计算部分。当用户数据量较大时,计算两两之间的相似度计算量比较大,而且考虑到实际中大部分用户之间没有直接关系,品味完全相同的总是极少数,所以在这里首先使用反查表来剔除部分样本。计算完相似度之后进行,确定相似邻居集的部分。本文在寻找有相同爱好的人,或者相似电影的时候,可能会找到多个,根据上述计算相似度的方法,计算相似度,本文设定数K,取相似度最高的K个人称为最相邻的用户或者电影集合,作为推荐的来源群体。如图所示,得到电影相似邻居集1和电影相似邻居集2。最后,本分别依据相似邻居集1和相似邻居集2进行排序打分,得到用户-物品的得分矩阵。最终的预测得分,由两部分得分加权取得,目标用户中的推荐列表中的排序则按照最终推荐度打分进行排序,最终得到图中的用户电影推荐列表。

协同过滤算法流程图


      4. 预测


(1)基于用户的协同过滤预测


假定共有m个用户,n部电影。其中R1为用户—电影矩阵,S1为用户相似矩阵,P1为基于用户的协同过滤算法获得的用户得分矩阵,P1 =S1xR1,显然,用户—电影矩阵R1可以直接得到,为的矩阵。用户相似度矩阵S1的计算按照如下方式计算取得:

将用户相似矩阵与用户-电影矩阵相乘得到的得分矩阵P1,其第i行,第j个元素P1(i,j)表示基于用户的协同过滤算法得到的第i个用户对第j部电影的得分。


(2)基于电影的协同过滤预测


其中R2为用户—电影矩阵,S2为电影相似度矩阵,P2为基于电影的协同算法获得的用户得分矩阵:P2=S2xR2,与4.5.1节相同,显然,用户—电影矩阵R2可以直接得到,为的矩阵。与4.5.1节不同,电影相似度矩阵S2是通过电影—属性表计算得到的:


将用户—电影矩阵与电影相似矩阵与相乘得到的得分矩阵P2,其第i行,第j个元素P2(i,j)表示基于电影的协同过滤算法得到的第i个用户对第j部电影的得分。第i个用户对第j部电影的最后得分为P(i,j)=w1P1(i,j)+w2P2(i,j),为两种协同过滤算法的加权求和,其中w1w2为权重系数。


(四)结果分析


本文融合了基于用户和内容的协同过滤算法,可实现对用户推荐电影的功能,由于算法还同时融合了社交功能,能够计算用户相似度,从而还能同时向用户推荐相似度高的好友。

在社交网络方面,以案例组的一个用户为例,下图所示即为此用户的好友列表与推荐好友列表。点击“向您推荐的好友”中的用户头像即可浏览该用户喜欢的电影,而每位用户也可以根据自己的喜好进行添加或删除好友操作。

推荐好友界面


从结果所示,采用基于用户和物品融合的协同过滤推荐算法有如下优点:

(1)将“我喜欢的”电影列表与其他用户结合,推荐结果更为人性化。

(2)本案例组采用协同过滤算法,分别基于内容相似度和用户相似度计算进行召回,之后加权得到最终评分,并在用户相似度计算中引入了社交功能,因此用户除了可以自由选择自己喜欢的电影外,还可以自由选择添加或删除好友来进行推荐列表的更换,灵活方便。