本次大数据项目数据及分析均做脱敏化和保密化,主要分享思路体系,全程用Python实现,数据和代码均不提供。如有建议欢迎讨论!
4、模型构建
在实际应用中,构造推荐系统时,并不是采用单一的某种推荐方法进行推荐。为了实现较好的推荐效果,大部分都将结合多种推荐方法将推荐结果进行组合,最后得出了推荐结果。在组合推荐结果时,可以采用串行或者并行的方法。如图所示展示的是并行的组合方法。
分析项目的实际情况,其目标长尾节目丰富、用户个性化需求强烈以及推荐结果实时变化明显。结合原始数据节目数明显小于用户数的特点,项目采用基于物品的协同过滤推荐系统对用户进行个性化推荐,以其推荐结果作为推荐系统结果的重要部分。因其推荐的结果是利用用户的历史行为为用户进行推荐,可以产生令用户容易信服的推荐结果,如图所示。
4.1 基于物品的协同过滤算法的推荐(item-based CF)
(1)item-based CF推荐算法
通过用户购买不同的产品来评价产品之间的相似性,基于物品(item)之间的相似性做出推荐。推荐思路是建立在“一个人会喜欢‘和他以前喜欢的东西’相似的东西”的假设基础上,比如我喜欢文艺片,昨天看过文艺片,或者刚刚看完一部文艺片,正不知道下一部要看啥,这时候推荐引擎会给我推荐其它类的文艺片。基于物品的协同过滤算法主要对目标用户所购买过的产品进行研究,并计算这些产品与目标产品之间的相似性,然后从选择前N个最相似度最大的产品进行推荐。
首先,传统的协同过滤推荐算法中,用户对物品的评分信息使用m×n 阶的用户-物品矩阵表示。一般来说,使用u1,u2,⋯,um 表示m个用户的集合,i1,i2,⋯,in 表示n个物品的集合。rij 表示用户对物品的评分值。物品-用户评分矩阵如表 9‑10所示。
rij
i1
i2
i3
i4
u1
1
0
1
0
u2
0
1
1
0
u3
1
0
0
1
然后计算用户或物品间的相似度。常见的相似度计算方法有余弦相似性、皮尔森相关相似性、杰卡德相似性,如表所示。
在协同过滤系统分析的过程中,用户行为存在有很多种,比如是否购买、评论、评分、点赞等行为。如果要采用统一的方式表示所有这些行为是很困难的,因此只能针对具体的分析目标进行具体的表示。在本项目中,原始数据只记录了用户的收视、购买行为,因此用户的行为是收视记录,并没有类似电子商务网站上的评分和评论等用户行为。
完成各个物品之间的相似度的计算后,即可构成一个物品之间的相似度矩阵如表所示。通过采用相似度矩阵,推荐算法会给用户推荐与其物品最相似的N个的物品。采用P=sim*R ,度量了推荐算法中用户对所有物品的感兴趣程度。其中R代表了用户对物品的兴趣,sim代表了所有物品之间的相似度,P为用户对物品感兴趣的程度。因为用户的行为是二元选择(是与否),所以用户对物品的兴趣R矩阵中只存在0和1。
物品
A
B
C
D
A
1
0.763
0.251
0
B
0.763
1
0.134
0.529
C
0.251
0.134
1
0.033
D
0
0.529
0.033
1
或者使用预测评分公式计算得到目标用户对物品的预测评分值,实现推荐。
*p**ui*=*r**u*+*vϵ**NBS**u*sim*u*,*v*×*r**vi*-*r**v**vϵ**NBS**u*sim*u*,*v*
(式 9‑1)
(式 9‑1)中pui 表示用户u对物品i的预测评分值,ru 和rv 分别表示用户u和v的评分平均值,rvi 表示用户v对物品i的评分,NBSu 表示用户u的近邻集合。
基于物品的协同过滤推荐算法的主要工作内容是最近邻居查询和产生推荐,故可以分为两个阶段。最近邻查询阶段是要计算物品与物品之间的相似性,搜索目标物品的最近邻居;产生推荐阶段是根据用户对目标物品的最近邻居的评分信息,来预测用户对目标物品的评分,最后产生前N个推荐信息。
基于物品的协同过滤关键步骤是计算项目之间的相似性并选出最相似的物品,这一点与基于用户的协同过滤(user-based CF)类似。计算两个物品i和j之间相似性的基本思想是提取出两个物品共同评分的用户,并将每个物品获得的评分看作是n维用户空间的向量,通过相似性度量公式计算两者之间的相似性。
(2)构建基于物品的协同过滤推荐模型
由于推荐系统是根据物品的相似度以及用户的历史行为,对用户的兴趣度进行预测并推荐,因此在评价模型的时候需要用到一些评价指标。为了得到评价指标,一般是将数据集分成两部分:大部分作为模型训练集,小部分数据作为测试集。通过训练集得到的模型,在测试集上进行预测,然后统计出相应的评价指标,通过各个评价指标的值可以知道预测效果的好与坏。
由于实际数据中,物品数目过多,建立的用户物品矩阵与物品相似度矩阵是一个很庞大的矩阵。因此采用一个简单示例,在用户物品矩阵的基础上采用杰卡德相似系数的方法,计算出物品相似度矩阵。通过物品相似矩阵与测试集的用户行为,计算用户的兴趣度,获得推荐结果,进而计算出各种评价指标。
在用户收视行为信息数据中提取用户号与节目名称2个特征。本项目数据量较大,故选取500000条记录数据。构建基于物品的协同过滤模型,相似度计算用余弦相似度(夹角余弦)。针对每个用户进行推荐,推荐相似度排名前5的节目。
4.2 基于Simple TagBased TF-IDF算法的标签推荐模型
为了达到最好的推荐方式,本项目将个性化推荐算法与非个性化推荐算法组合,选择了两种个性化算法和一种非个性化算法进行相应的建模并对其进行模型评价与分析。其中两种个性化算法为基于Simple TagBased TF-IDF算法、基于物品的协同过滤算法。其中基于Simple TagBased TF-IDF算法的标签推荐模型是每次都挑选用户有过类似节目标签的节目推荐给当前用户。非个性化算法为Popular算法,Popular算法是按照节目的流行度给用户推荐他没有产生过观看过的行为中最热门的节目。
在如今时代信息量与日俱增,让人眼花缭乱,用户如何在翻番复杂的信息中有效的搜索到自己喜欢的信息变得尤为重要。而标签可以很好地解决这一问题。标签是联系用户和信息的纽带,也是反映信息特征的重要数据来源。用户可以根据自己的兴起爱好,搜索具有特定标签的数据,进一步减少需要搜索的范围,更准确更迅速的定位到自己所喜欢的信息。
(1)Simple TagBased算法
用户用标签来描述自己对物品的看法,因此,标签成为了联系用户和物品的纽带。因此,标签数据是反应用户兴趣的重要数据源,而如何利用用户的标签数据来提高用户个性化推荐结果的质量,是推荐系统研究的重要问题。
在如何利用标签数据的问题上,豆瓣无疑是这方面的代表。豆瓣将标签系统融入到他们的整个产品线中。以豆瓣读书为例,在每本书的页面上豆瓣有个“豆瓣成员常用标签”的应用功能,它给出了这本书上用户最常打的标签。同时,在用户希望给书做评价时,豆瓣也会让用户给图书打标签。最后,在最终的个性化推荐结果里,豆瓣利用标签将用户的推荐结果做了聚类,显示了不同标签下用户的推荐结果,从而增加了推荐的多样性和可解释性。
广电行业的节目推荐同样可以基于用户画像进行推荐。一个用户观看节目行为的数据集一般由一个三元组的集合表示,其中记录(u, i, b) 表示用户u观看了具有标签b的节目i。当然,用户的真实观看节目行为远远比三元组表示的要复杂,比如用户观看节目的时间、用户的属性数据、节目的属性数据等。为了简化模型,只考虑上面定义的三元组形式的数据,即用户的每一次观看节目行为都用一个三元组(用户、物品、标签)表示。
根据用户观看节目行为数据使用Simple TagBased算法对用户进行推荐,该算法的描述如下。
- 统计每个用户最常观看节目所具有的的标签。
- 对于每个标签,统计拥有该标签且观看人数最多的节目。
- 对于一个用户,首先找到他偏好的标签,然后找到具有这些标签的最热门节目推荐给这个用户。
用户u 对节目i 的兴趣公式如所(式 9‑2)示。
pu,i=*b**n**u,b**n**b,i*
(式 9‑2)
其中:n**b 是标签b所具有的所有集合,n**i 是节目i所具有的标签集合,n**u,b 是用户观看具有该标签节目的次数,n**b,i 是节目所具有该标签的个数。
(2)借助Simple TagBased TF-IDF算法的思想对模型进行修正
由于是基于标签的推荐,故不考虑观看节目收视时长的计算,但是对标签的观看次数进行修正。
对用户观看节目行为数据使用观看时间进行加权。记录(u, i, b) 表示用户u 观看了具有标签b 的节目i ,在每条记录(u, i, b) 中加入时间因素,以时间长度对每个标签b 施加权重,如(式 9‑3)所示。
*n**u*,*b*=*ceil**time*60**n**u*,*b*
(式 9‑3)
对用户观看具有该标签节目的次数*n**ub* 进行加权。公式倾向于给热门标签对应的物品很大的权重,因此不能反应用户个性化的兴趣,从而降低推荐结果的新颖性,如(式 9‑4)所示。
*n**u*,*b*=*n**u*,*b*log(1+*n**b*)
(式 9‑4)
如果认为同一个物品上的不同标签具有某种相似度,那么当两个标签同时出现在很多物品的标签集合中时,可以认为这两个标签具有较大的相似度。模型修正后的形式如(式 9‑5)所示。
pu,b=*n**u*,*b*log(1+*n**b*)
(式 9‑5)
(3)创建基于Simple TagBased TF-IDF算法的标签推荐模型
当用户观看某个节目时,标签系统非常希望用户能够给这个节目打上高质量的标签,这样才能促进标签系统的良性循环。因此,很多标签系统都设计了标签推荐模块给用户推荐标签。
处理好的用户收视行为信息数据自定义建立基于Simple TagBased TF-IDF算法的标签推荐模型,推荐指数采用修正后的公式,表示用户对标签的兴趣度。针对每个用户进行推荐,推荐推荐指数排名前20的节目。
(4)Popular流行度推荐模型
对既不具有点播信息且收视信息过少(甚至没有)的用户,可以推荐最热门的前N个节目,然后等到用户收视行为信息数据收集到一定的时候,再切换为个性化推荐。针对每个用户进行推荐,推荐流行度(热度)排名前20的节目。
5、模型评价
评价一个推荐系统的好与不好一般从用户、商家、节目三个方面整体进行考虑。好的推荐系统能够满足用户的需求,推荐其感兴趣的节目。同时推荐的节目中,不能全部是热门的节目,还需要用户反馈意见帮助完善推荐系统。因此,好的推荐系统不仅能预测用户的行为,而且能帮助用户发现可能会感兴趣,但却不易被发现的节目。
在实际应用中,评价指标主要有3种评价推荐效果的实验方法,即离线测试、用户调查和在线实验。离线测试是通过从实际系统中提取数据集,然后采用各种推荐算法对其进行测试,获各个算法的评价指标,好处是不需要真实用户参与。
离线测试的指标和实际商业指标存在差距,比如预测准确率和用户满意度之间就存在很大差别,高预测准确率不等于高用户满意度。所以当推荐系统投入实际应用之前,需要利用测试的推荐系统进行用户调查。
用户调查利用测试的推荐系统调查真实用户,观察并记录他们的行为,并让他们回答一些相关的问题。通过分析用户的行为和他们反馈,判断测试推荐系统的好坏。
在线测试顾名思义就是直接将系统投入实际应用中,通过不同的评价指标比较与不同的推荐算法的结果,最终判断推荐系统的好坏。
本项目是采用离线的数据集构建的模型,因此模型评价采用离线测试的方法获取评价指标,评价指标的公式如表所示。
如果有评分数据并要预测用户对某个物品的评分,可以采用表 9‑13中预测准确度的评价指标均方根误差(RMSE),平均绝对误差(MAE)。其中rui 代表用户u对物品i的实际评分,rui 代表推荐算法预测的评分,N代表实际参与评分的物品总数。
对于分类问题,由于用户在节目上是二元选择,比如喜欢与不喜欢,是否观看等,采用分类准确度,其中的评价指标有准确率(P、precesion),它表示用户对一个被推荐产品感兴趣的可能性。召回率(R、recall)表示召回率表示一个用户喜欢的产品被推荐的概率。F1指标表示综合考虑准确率与召回率因素,更好的评价算法的优劣。其中相关的指标说明如表所示。
预测
合计
推荐物品数(正)
未被推荐物品数(负)
实际
用户喜欢物品数(正)
TP
FN
TP+FN
用户不喜欢物品数(负)
FP
TN
FP+TN
合计
TP+FP
TN+FN
除了上述评价指标外,还有真正率TPR=TP/(TP+FN) (正样本预测结果数占正样本实际数的比重,即召回率),假正率F PR=FP/(FP+TN) (被预测为正的负样本结果数占负样本实际数的比重)。
由于本项目用户的行为是二元选择,因此在对模型进行评价的指标为分类准确度指标。
随着建模数据量的增加,基于物品的协同过滤算法模型的准确率与召回率会越来越高。同时建模数据时效性的限制,基于Simple TagBased TF-IDF算法标签推荐的推荐数据是实时(8月份)爬取获得的,但是目前的原始数据是5月份的数据。节目与用户行为信息变化较大,标签推荐模型评价需要在线调查评价方法的验证。
Popular流行度推荐算法可以获得原始数据中热度前3000的节目。计算推荐的准确率与召回率,随着时间、节目、用户收视行为的变化,流行度也需要实时排序。
在此基础上比较基于物品的协同过滤算法模型与Popular流行度算法模型的性能,可以发现协同过滤算法推荐效果优于流行度算法。当用户收视数据量增加时,协同过滤算法的推荐效果会越来越好,可以看出基于物品的协同过滤算法模型相对较“稳定”。对于Popular流行度算,推荐节目个数的增加,其准确率在下降而召回率在逐步上升。
6、结果分析
在协同过滤推荐过程中,两个节目相似是因为它们共同出现在很多用户的兴趣列表中,也可以说是每个用户的兴趣列表都对节目的相似度产生贡献。但是并不是每个用的贡献度都相同。通常不活跃的用户要么是新用户,要么是收视次数少的老用户。在实际分析中,一般认为新用户倾向于浏览热门节目,而老用户会逐渐开始浏览冷门的节目。
当然,除了个性化推荐列表,还有另一个重要的推荐应用就是相关推荐列表。有过网购的经历的用户都知道,当你在电子商务平台上购买一个商品时,它会在商品信息下面展示相关的商品。一种是包含购买了这个商品的用户也经常购买的其他商品,另一种是包含浏览过这个商品的用户经常购买的其他商品。这两种相关推荐列表的区别:使用了不同用户行为计算节目的相似性。
1、哪些对电视产品的营销推荐有帮助?
- 内容多元化。以套餐的形式将节目多元化组合,可以满足不同观众的喜好,增加观众对电视产品的感兴趣程度,提高用户观看节目的积极性,有利于附加产品的推广销售。
- 流行度推荐与个性化推荐结合。既对用户推荐其感兴趣的信息,又推荐当下最流行的节目,这样可以提高推荐的准确率。
- 节目库智能归类。对于节目库做智能归类,增加节目标签,从而更好地完成节目与用户之间的匹配。
2、本项目通过数据获取用户画像特征的,如何检验、互动、完善和更新用户标签库?
提高标签质量。同一个语义不同的用户可能用不同的词语来表示。这些同义词会使标签的词表变得很庞大,会使计算相似度不太准确。而使用推荐标签时,需要对词表进行选择,首先保证词表不出现太多的同义词,同时保证出现的词都是一些比较热门的、有代表性的词。
3、除了基于Simple TagBased TF-IDF算法的标签推荐模型,是否有别的文本推荐模型?
由于在原始数据中,每个节目都存在一个甚至对个标签,可以通过采用文本挖掘的分析方法。通过文本挖掘,找出其每个节目文本中的隐含语义,然后通过文本中隐含特征,将用户与节目联系在一起,相关的名称有LSI、pLSA、LDA和Topic Model。当然也可以通过这种方法提取出关键字,通过TF-IDF的方法对其关键字进行定义权重,然后采用最近邻的方法求出那些无法得到推荐列表的结果。因此可以采用隐语义模型实现推荐,同样采用离线的方法对其进行测试。
文章未经博主同意,禁止转载!
版权归原作者 mx丶姜小辉 所有, 如有侵权,请联系我们删除。