达观动态

达观愿与业内同行分享 助力各企业在大数据浪潮来临之际一起破浪前行

达观数据推荐系统实践—实时演算用户动态数据  提升运营效率

本文曾在infoq大数据微信群和数据猿直播平台上进行过分享,是对分享内容最直观的表达,同时对推荐结构和算法解释的也很详尽。

随着移动互联网技术的迅猛发展、互联网信息的爆炸式增长和种类的纷繁复杂,导致用户常常在面临信息选择时感到无所适从。这种选择多样性不但没有产生经济效益,反而降低了用户满意度。同时,互联网上的各种物品又存在长尾(long tail)现象,指大部分商品属于冷门而没有展示的机会。Chris Anderson在2006年出版的《长尾理论》一书中指出,传统的80/20原则(80%的销售额来自于20%的热门品牌)在互联网时代下回面临更多挑战。主流的商品基本上代表的是大部分用户的需求,但是长尾的商品代表的则是一小部分个性化需求。

1

图1:用户面临信息选择时的无所适从

近年来,推荐系统被证明是一种解决“信息过载”和“长尾物品”问题的有效工具。推荐系统基于知识发现的相关技术来解决人们在选择商品、信息或者服务是的问题,尤其是基于海量用户行为数据的最近邻协同过滤方法获得普遍应用。但是数据量的急剧增长也给推荐系统带来了一些挑战,包括如何开发高质量的推荐系统、如何快速响应用户行为变化和高并发请求、如何解决数据稀疏情况下的高覆盖问题等。

 

技术是慢慢沉淀的。达观数据(www.datagrand.com)推荐团队在智能推荐和数据挖掘领域深耕多年,不仅多次获得国际顶级数据挖掘比赛冠军,而且自主研发的达观推荐引擎也为企业带来了极大的经济效益。本文从系统架构、推荐算法、效果评估和优化等方面分享达观数据在高质量推荐系统研发方面积累的一些经验。(达观数据联合创始人 于敬)

 

1.      系统架构

从图中的系统框架图可以看出,整个推荐系统从下往上依次可分为:基础层、模型层、算法层、组合层和应用层。在具体的业务场景中,这种层次结构和实际的数据流向是对应。从最底层的数据存储,经过一层一层的数据加工,最终在顶层的应用层,汇总成最优化的推荐结果,按照指定格式对外提供服务。

2

图2:达观数据推荐系统架构

 

  • 基础层,主要包括数据生成、传输、预处理和存储。

 

数据的采集有多种方式,包括HTTP方式的上报、服务器日志打印、SDK采集、爬虫爬取、FTP拉取等。为了保证后续使用的数据一致性,需要通过不同的管道方式进行传输,将原始的数据汇总到一起,并生成统一的规范化格式,如用户多种ID的归一。

 

数据不仅包括基本的用户和物品数据,还包括各样各样的用户行为数据,如用户的注册、登录、浏览、点击、购买、收藏、打分、评论等。

 

另外,在原始的数据源中会混杂各种各样的噪音数据,一方面是在数据采集和上报的过程中,出现一些异常数据,另一方面也包括系统上线运行时所产生的作弊数据。所以在数据存储前需要进行深度清洗。

 

数据采集和上报的异常数据,需要结合数据库表结构和实际场景做过滤,如空值检查、数值异常、类型异常、数据去重。另外,对于 “人为”的噪音数据,如刷点击、刷榜单等行为,这些关键数据会严重影响后续算法的效果,需要有一些反作弊策略进行清除或者降权,如进行session分析,结合cookie、ip、行为发生的时间和次数等一些规则进行过滤。

 

  • 模型层,主要是包括生成用户和物品画像以及建立各种底层的数据模型。

 

用户画像包括两方面信息,一是通过多种方式采集到基本人口统计学信息,二是通过对海量用户行为数据进行深入分析和挖掘,从多个维度来描述用户的基础属性、标签及兴趣点等,如对品牌、标签和类别的偏好,清晰并且准确地勾勒出用户的轮廓概貌。这些数据帮助企业更好了解用户行为路径,明确用户流失情况和原因,为应用方的产品功能优化决策提供可靠参考依据。

3

图3:用户画像

 

物品画像除了包括基本信息,对于服装而言如名称、类别、标签、品牌、尺寸、适合年龄和性别等,还包括各种维度的指数数据,如衡量新商品的潜力指数、衡量商品历史销量的吸金指数以及全局热门指数等。

 

其它模型包括基于历史商品销售数据的销量预测模型、基于流失用户数据的预流失模型等。

 

  • 算法层,包括各种推荐算法以及多种强规则策略。

 

推荐算法是将物品推荐给用户的纽带,基于各种各样的算法生成待推荐的物品集合,作为最终的候选集输入到组合层。其中应用最广泛的是基于内容的推荐和协同过滤。

 

  • 基于内容的推荐

 

主要过程是将推荐物品的信息特征和待推荐对象的特征相匹配的过程,从而得到待推荐的物品集合。整个流程包括三个阶段。

 

首先是进行内容分析,对于非结构化信息,需要在预处理阶段抽取相关的结构化信息,以便于下一阶段的处理。数据对象经过特征抽取技术的分析,目的是将原始信息空间转换到想要的物品描述格式,如将网页表示成特征向量。这样的描述格式作为特征学习和过滤组件的输入。

 

然后,在特征学习阶段,根据对海量用户行为数据的分析挖掘,获取用户偏好的数据特征,如对类别、品牌的偏好,并泛化这些特征,最终构建用户特征信息。泛化策略一般是通过机器学习技术实现的,它可以从用户喜好的或不喜欢的物品中推断出一个用户的兴趣模型。

4

图4:基于内容的推荐系统的层次结构

 

最后,过滤组件将推荐对象和待推荐对象在特征空间上进行匹配,从而推荐出内容上很相关的物品。匹配算法很多是借鉴了信息检索领域中的技术,如K最近邻KNN和Rocchio的相关性反馈方法。

5

图5:KNN方法

K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。在推荐系统中,基于向量空间模型计算推荐对象和待推荐对象之间的相似度,取相似度最高的N个作为最终的推荐结构。KNN方法虽然从原理上也依赖于极限定理,但在决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。

 

Rocchio方法的主要思想是,首先将评分文档分成两组:67,分别对应喜欢和不喜欢的文档;然后计算这些分类的初始向量。当前查询词8像文档一样表示为多维单词向量,然后重复地增加相关文档的加权初始向量,并减去代表不相关文档的加权向量,这样逐步优化9,最终得到一组相关文档。调整89的计算公式如下:

12

变量131415用于精细调整“移动”到更加相关文档的过程。实验表明,正反馈比负反馈更有价值,甚至仅考虑正反馈会更好一些。

 

基于内容的推荐方法,优点是能保证推荐内容的相关性,并且根据内容特征可以解释推荐结果,而且对新物品的推荐是也能有很好的考虑,也不需要专业的领域知识。另一个重要的优势,是基于内容的推荐能很好的解决推荐系统的“冷启动”问题,因为这类推荐算法不需要依赖用户行为的积累,当待推荐的物品是新出现时,基于内容的推荐算法往往是最有效的方法。缺点是由于内容高度匹配,导致推荐结果的惊喜度较差,而且对新用户不能提供可靠的推荐结果。对稀疏数据、复杂属性的处理等问题的推荐结果不够理想。

 

  • 协同过滤

6-1

图6:协同过滤技术总览

 

主要思想是基于群体智慧,利用已有大量用户群过去行为数据来预测当前用户最可能感兴趣的东西。这种方法克服了基于内容方法的一些弊端,最重要的是可以推荐一些内容上差异较大但是又是用户感兴趣的物品。构成CF(Collaborative Filtering)的两种主要技术:基于领域的方法和隐语义模型。

 

基于领域的方法重点关注物品之间的关系或者用户之间的关系,基于物品的方法是根据用户对和他感兴趣的物品相似的物品评分,来对该用户的偏好物品建立模型。隐语义模型采用的是另外一种方法,把物品和用户映射到相同的隐语义空间。这个空间试图通过描述物品和用户两种实体在因子上的特征来解释评分,而这些因子是根据用户的反馈自动判断出来的。

 

用隐语义模型来进行协同过滤的目标是揭示隐藏的特征,这些特征能解释观测到的评分。该模型包括pLSA(Probability Latent Semantic Analysis)模型、神经网络模型、LDA(Latent Dirichlet Allocation)模型,以及由用户-物品评分矩阵的因子分解推导出的模型(也叫基于SVD的模型,Singular Value Decomposition)。由于矩阵因子分解技术在线上业务的准确性和稳定性的突出表现,已经成为协同过滤算法的首选。达观数据的推荐系统也大量使用了这种技术,并做了诸多性能和效果优化。

 

CF模型视图捕捉用户和物品之间的交互作用,正式这些交互作用产生了不同的评分值。设15-1为总体评分值,未知评分17的基准预测18综合考虑了用户和物品两个因子

19

参数1718表示用户30和物品22的与评分平均值的偏差。我们可以通过解决最小二乘法的问题来估计1718的值

23

在上述这个公式中,第一项24用来寻找与已知评分数据拟合得最好2021的。正则化项25通过对参数的复杂性增加惩罚因子来避免过拟合问题。这个最小二乘法问题可以通过随机梯度下降(SGD,Stochastic gradient descent)算法有效地解决。

 

矩阵因子分解模型把用户和物品两方面的信息映射到一个维度为的联合隐语义空间中,因此用户-物品之间的交互作用被建模为该空间的内积。例如,如果物品是电影,因子变量将会用来度量如喜剧或悲剧、情节的数量或者面向儿童的等级等这些明显的维度,以及如性格发展深度或者“突变”等隐式维度,甚至是无法解释的维度。

 

相应地,每一个物品22都有一个26维向量27相关,每一个用户都与一个26维向量28相关。给定一个物品2229向量的维度值代表了该物品拥有这些因子的程度。例如,某部电影的搞笑因子程度为5,而恐怖因子程度为1。取值大小反应了物品拥有这些因子的积极或者消极程度。给定一个用户3031的维度值代表了用户对这些因子的偏好程度。如某用户对搞笑因子的偏好程度为1,而对恐怖因子的偏好程度为0.01。同样地,这些值的大小反映了用户对这些因子的消极或者积极的评价。

32

为了学习模型中的参数,也就是20213129,我们可以最小化以下正则化的平方误差

33

常量34控制了正则化程度,一般通过交叉验证来获得。

 

考虑隐式反馈信息可以增加预测准确度,这些隐式反馈信息提供了用户爱好的额外信息。这对于那些提供了大量隐式反馈但是仅仅提供少量显式反馈的用户尤为重要。这就出现了一些根据用户评分的物品来对用户的某个因子(比如,电影评分记录中用户对喜剧电影的喜爱程度)建模的方法,这里谈一下SVD++,这种方法能够提供比SVD更好的准确度。

 

为了达到上述目的,我们增加了第二个物品因子集合,即为每一个物品22关联一个因子变量35。这些新的物品因子向量根据用户评分的物品集合来描述用户的特征。模型如下:

36

例如,如果一个用户3037中的一些物品有某种类型的隐式偏好(如他买过它们),对38中的物品又另一种类型的偏好(如他赞过它们),就可以使用下面的模型:

39

在处理用户行为数据的过程中,需要考虑时间因素的影响,毕竟用户的偏好是随着时间变化的。比如,用户会改变对特定导演或者演员的看法。矩阵分解的方法也能很好地对时间效应进行建模。得到扩展模型time SVD++如下:

40

每一次迭代的时间复杂度仍然与输入大小呈线性关系,而运行时间大概是SVD++算法的两倍,原因是更新时序参数需要额外的花费。重要的是,收敛速度并没有受时序参数化的影响。

 

在算法层,经过多种推荐算法的处理,最终生成了候选的推荐物品集合,作为组合层的输入数据。

 

  • 组合层,主要是对算法层的结果数据进行重排序。

 

推荐系统需要面对的应用场景往往存在非常大的差异,例如热门/冷门的内容、新/老用户,时效性强/弱的结果等,这些不同的上下文环境中,不同推荐算法往往都存在不同的适用场景。不存在一个推荐算法,在所有情况下都胜过其他的算法。而融合方法的思想就是充分运用不同分类算法各种的优势,取长补短,组合形成一个强大的推荐框架。

7-1

图7、重排序流程

 

 

由于排序过程牵涉到各种维度的参数数据,导致调参费时费力,而且很可能会出现过拟合现象。而机器学习方法不仅有成熟的理论基础,而且很容易融合多种特征,通过不断的迭代来进行参数优化,可有效解决数据稀疏、过拟合等问题。

 

对于已标注的训练集,首先选定LTR(Learn To Rank)方法,确定损失函数,以最小化损失函数为目标进行优化即可得到排序模型的相关参数,这就是学习过程。预测过程将待预测结果输入学习得到的排序模型中,即可得到结果的相关得分,利用该得分进行排序即可得到待预测结果的最终顺序。(达观数据联合创始人 于敬)

 

关于排序模型,有很多模型可以选择,如LR(Logistic regression)、DT(Decision Tree)、SVM(Support Vector Machine)。LR主要适用于特征数很多、样本量很大的情况。如果是样本量很大,但是特征比较少的情况时,建议使用DT。主要是因为在特征数较少时,对应的问题往往是非线性的,DT可以发挥自身的优势。另外,SVM在解决非线性分类问题时效果也非常好。

 

经过多个推荐算法的处理,最终得到待推荐物品的结合,使用少量维度的特征进行排序过于简单,效果也大打折扣。基于推荐算法得到的相关特征,结合物品和用户的特征进行组合,可以得到各种特征,并且有些特征是正相关有些是负相关,需要不断优化。借助机器学习方法得到了最终的物品排序,呈现给用户。

 

5)应用层,主要是按照不同的推荐类型,将推荐结果通过API调用的方式返回,包括个性化推荐、相关推荐和热门推荐。

2.      近实时响应用户行为反馈

高质量推荐系统的一大特点是能在高并发的情况下,快速响应用户行为反馈。用户的信息诉求受很多因素影响,如时间、场景、心情等。用户心情有低落有兴奋、在地铁上还是在办公室。达观数据推荐系统采用三层结构,根据用户点击反馈实时挖掘用户兴趣,最快最准的满足用户信息诉求。

8-1

图8:推荐系统三层体系

受制于硬件资源和时效性因素,推荐系统的性能也面临诸多考验,体系结构也需要优化到极致。数据量急剧增加,每天采集到的物品数据、用户数据以及海量的行为数据,对计算资源都是极大的挑战,而且数据变化很快。hadoop集群的运算能力也是有限的,分布式计算的时效性也跟不上用户实时的信息诉求。

 

达观数据推荐系统三层体系借鉴了信息检索领域思想,采取online-nearline-offline的结构。主要思想是让最珍贵的资源留给高价值的user和item。Online模块采用负载均衡,负责及时响应API请求,并返回推荐结果,保证高可靠高并发。Offline基于hadoop集群对海量数据进行深入挖掘,承担高负荷的算法。Nearline模块主要是填补Online和Offline之间的空白。作为Offline的补充,保证快速响应点击反馈数据。作为Online的补充运行一些轻量级的算法。

 

三层体系协同工作,保证了推荐系统的高可靠、高并发的性能;同时高负荷和轻量级的算法并举,秒级响应用户行为反馈,保证了推荐结果的精准。(达观数据联合创始人 于敬)

3.      推荐系统效果评估

推荐系统有各种维度上的指标进行衡量,可以定性描述,也可以定量计算。常用的评价指标有以下几种:

1) 用户满意度。个性化推荐系统的主体是用户,这个指标是对推荐系统好坏最直接的回答。这部分数据一般是通过问卷调查的方式获得。

2)准确率。推荐物品本身是对用户兴趣的预测,这个指标可以衡量实际结果和用户期望结果直接您的偏差。一般通过离线数据计算得到,常用均方根误差(RMSE)和平均绝对误差(MAE)计算。

3)覆盖率。反应了推荐的物品在“长尾问题”上的效果。覆盖率的计算方法一般是看推荐出来的物品占全部物品的比例。

4)多样性。用户的口味一般不是简单的一两种,而是非常广泛的,推荐结果也需要覆盖到用户多种口味想。多样性描述了推荐物品之间的不相似性。不同的物品相似度度量函数可以定义不同的多样性。

5)新颖性。主要表现的是推荐的物品是用户没有了解过的。一般通过推荐结果的平均流行度进行衡量,因为相对冷门的物品会让用户觉得新颖。

 

在实际的业务场景中,衡量推荐系统也有很多更具体的指标。

1)在带有用户行为反馈的场景下,通过采集用户“点赞”或者“不感兴趣”的反馈,总体衡量推荐结果的效果。

2)在很多场景中,并没有和用户交互的操作。有多种指标可以应用到线上业务,如推荐点击率、推荐带来的pv、uv和登录uv、转化率、付费数量和金额等等。

3)还有很多反应用户粘性的指标,如用户停留时长,用户平均点击物品数、用户进入站点的次数等等

 

推荐系统效果的好坏有多种维度,结合到实际的业务场景,一般是选取主要的几个指标进行量化,通过不断的迭代和AB测试来优化推荐系统。

 

达观数据推荐系统的技术实践不仅在国际大赛上屡获殊荣,在工业界也给企业带来了实实在在的价值。个性化推荐点击率提升了3倍、付费金额提升了60%……推荐系统不仅极大的改善了用户体验,满足了用户的信息诉求,同时也增加了用户粘性、减少了用户流失,提升了企业经济效益。

9-1

图9:达观数据推荐系统效果

4.      效果调优

为了提升推荐系统的效果,首先需要“对症下药”,也就是推荐出来的物品集合可以追溯来源,找到问题。在设计推荐系统的时候,对推荐结果进行“埋点”,带上推荐策略的标识。然后在推荐效果的时候,对各个推荐策略分别统计结果,对比数据可以看出各个算法的优劣。最后,根据推荐统计结果,优化对应的推荐策略,进行分流测试,验证优化方法的有效性。

10-1

图10:不同推荐策略的效果统计

 

和搜索引擎一样,在推荐系统中也存在一个问题:position bias。推荐结果在最终展现给用户的时候,不可避免的会有先后之分,好的位置有好的曝光机会。但是最好的位置不代表有最好的推荐效果,比如推荐点击率。即使有更高的推荐点击率也不代表就一定是好的推荐结果。所以需要去除position bias,进行点击反馈调权。

 

首先需要基于历史数据,分析每个位置的推荐效果数据,这个时候就可以看出各个位置的推荐系统的差异。然后在推荐的时候,基于推荐物品数据和每个位置的推荐效果数据,对最终的推荐结果顺序进行调整。从下图可以看出,使用点击反馈之前点击率在11.5%左右,加上点击反馈之后,点击率在14%左右,提升了20%。

11-1

图11:点击反馈调权对推荐点击率的影响

 

6、结束语

本文介绍了达观数据推荐系统的一些实践经验,从框架图的五个层次详细说明了推荐系统的整个流程。同时分享了达观数据在高质量推荐的性能优化、快速响应用户行为反馈、推荐效果评估和优化等方面的成果。推荐系统不仅可以有效解决信息过载和长尾物品两个方面的问题,提供了极佳的用户体检,满足了用户的信息需求,也帮助了企业充分挖掘其中蕴含的商机,提升经营业绩。达观数据一直致力于为企业提供优质的大数据服务,经过多年的积极探索,目前在推荐系统研发和效果提升方面已经积累了丰富的实战经验。达观数据也会不断尝试新技术,持续不断地给企业提供更加优质、稳定、可靠的推荐系统服务。

 

作者:于敬,达观数据联合创始人&推荐系统负责人,主要负责智能推荐系统的研发工作。同济大学计算机应用技术硕士,之前在盛大创新院、盛大文学、腾讯文学从事智能推荐、用户画像及建模、数据挖掘和分析等相关工作。