数据集成-作业一

作业一 大众点评应用系统集成

引言

大众点评是中国领先的本地生活信息及交易平台,也是全球最早建立的独立第三方消费点评网站。大众点评不仅为用户提供商户信息、消费点评及消费优惠等信息服务,同时亦提供团购、餐厅预订、外卖及电子会员卡等O2O(线上到线下)交易服务。本文试从大众点评推荐业务出发,分析大众点评推荐业务是如何将抽象的统计学数据以及非结构化的原始数据转化成了规范化的、特征化的系统推荐需要的数据。

一. 业务分析与目标确定

近年来,随着信息、科技的迅猛发展,对于数据的采集、存储、处理和传播的数量与日俱增。企业常采用数据共享以使得工作者更高效地使用数据。然后数据的来源、格式、特点性质往往不同,严重阻碍了数据的流动与共享,数据集成应运而生,可以把不同来源、格式、特点性质的数据在逻辑上或物理上有机地集中,从而为企业提供全面的数据共享,成为了如今企业最重要的技术之一。大众点评作为领先于业界的平台,也使用了数据集成这一技术。

大众点评最主要功用在于可以根据智能排序、筛选等功能,为用户提供心仪的餐厅推荐,本文从这一业务入手,重点分析其集成中数据或调用的逻辑和数据集成相关的技术,对于推荐业务相关的机器学习等其他技术,也有所涉及,以更全面地了解大众点评是如何处理、利用数据的。

对于推荐功能,大众点评认为其应有如下特征:

  1. 全面:大众点评应该收集尽可能的关于各种餐厅的数据,以便将尽可能多的餐厅信息展现给用户以供选择,亦可以将餐厅正确地分类,为用户提供个性化推荐
  2. 多样化:大众点评应该不断地发现用户的消费意愿,收集新餐厅的信息,并且确保新的餐厅不会一直无法获得用户市场(用户市场不能总被固定的餐厅所占据)
  3. 个性化:大众点评的首页推荐应该根据以往客户浏览大众点评的数据信息对用户的特征、行为作出预测分析,以进行个性化推荐,帮助他们更快更好地找到自己喜欢的类型的餐厅

以此为基础,大众点评团队确定了如下的业务目标:

  1. 获取比其他竞争对手更多的数据信息,并对其数据集成以合理地分析应用
  2. 根据用户的行为产生的数据信息进行分析,得到用户特征以进行个性化推荐
  3. 预测用户的消费意愿,不断获取新的数据信息

二. 大众点评用户行为数据构建

红利缩减的当下,互联网的粗放式发展模式已经转向精耕细作。面对海量的用户行为数据,如何将其集成提炼,发挥出这些数据的真正价值,是提升用户体验的关键点。

大众点评在精细化方面做了很多深度思索。根据用户在App中的行为、频率不同,可以划分出各个层次的用户生命周期,不同周期中的用户所需要的体验和所进行的活动都有所参差,对此就需要不同的运营策略。比如针对成长期的用户,主要运营方向是让其了解平台的核心功能,提高认知,如写点评、分享、收藏等;对于新激活用户则需要即时的激励来形成奖励反馈,这就需要很高的时效性,通常在毫秒级别,才能有效提升新用户的留存率。

针对上述精细化场景,系统需要实时感知极大量用户行为,分析并构建画像,同时要求高时效性和稳定性。对此,大众点评搭建了一套用户行为系统(UAS, User Action System)。

UAS主要处理的问题如下:

  1. **格式不一致:**平台业务繁多,用户行为分散,格式不统一,难以一起利用。如有些行为消息是基于自研消息中间件Mafka/Swallow,有些行为消息是基于流量打点的Kafka消息,还有一些行为没有对应的业务消息。对此首先要制定一个统一的数据收集标准。
  2. **上报不及时:**部分用户行为的收集依托于公司统一的流量打点体系,时效性不够高。
  3. **查询差异化:**各个业务所需要的用户行为数据有所区别,如对次数的统计,不同业务就有各自的统计逻辑。这就需要一个统一且灵活的系统架构。

数据格式的集成

数据格式直接影响到集成的范围和利用率,只有统一的数据格式才能供各部门交叉收集、利用,实现高一致性,为企业提供全面的数据共享。大众点评参考了5W1H模型,抽象出几大类用户行为,作为记录的标准格式:

0

其中,what标签对应点赞、评论、分享等行为;where标签对应了行为作用对象的ID,如商户ID、评论ID等;how则是一些额外属性,如浏览商户的商户品类、签到商家的城市等。

数据处理的实时性

流量打点上报的数据格式是标准化的,但是上报有时延,也存在数据丢失的情况。为此,大众点评团队额外维护了一个通用的MAPI上报通道,直接从客户端通过专有的长连接通道进行上报,保证数据的时效性,上报后的数据处理之后,进行了标准化,再以消息的形式传播出去,并且按照一定的维度,进行了TOPIC的拆分。两种渠道分别用于不同用户场景,对外无感知。

641

服务的统一

通常对于不同的应用场景,所要求的用户行为处理的数据规模和时效性是不同的。一些情况下,用户行为上报之后,需要立即进行相关查询,这就需要很高的写入和查询性能;另一些情况下,只需要进行行为的写入,这就允许使用异步的方法。对于这些不同的场景,尽管解决方案不同,但提供的服务接口是统一的UAS服务。

架构的统一

数据收集、处理分发、业务加工、数据持久化等数个方面都要保证质量与性能,为此需要一个统一的系统架构来应对现有要求与业务的扩展,满足日益增长的数据需求。

针对以上想法构建出的UAS系统整体架构如下:

642

实时数据源基于公司消息中间件Mafka和开源消息中间件Kafka。实时计算使用Storm实时大数据处理框架,其中的Spout可以方便对接实时消息队列,保障了时效性,其他的心跳检测机制和Acker机制等,也使得可用性等都有所保障。

离线历史数据来源于Hive和HDFS,便于大量数据的存储和并行运算。离线处理主要包含了MR模块和Spark模块,一些ETL操作基于MR模块,一些用户行为数据分析则交由Spark。另外美团内部有基于Hive搭建的ETL平台可供大众点评开发数据处理任务和数据传输任务,并且配置相关的任务调度信息。

数据处理

对于需要实时处理的数据,构建了基于大众点评全网的流量网关,所有用户产生的行为数据,都会通过实时上报通道进行上报,并且会在网关中流转,然后对行为数据进行加工。主要流程如下图:

image-20241215214130905

对于离线数据,依赖遵循一套数据仓库分层体系来构建用户行为的数据仓库,通过发布一些通用的数据来服务用户,对于一些长时间段的数据,会采取如先以天为周期聚合,再做一次总的聚合等办法来进行解决。

在近实时处理中,将经过流量网关的数据通过Kafka2Hive的流程,写入到Hive中,并且保证整个过程的时延不超过15分钟,算法团队可以利用近实时的数据,结合其他的海量数据,进行整体的加工和存储。

通过离线、实时、近实时的不同的处理方法,满足了业务不同的时效性需求。

数据存储

数据在进行处理之后成为标准化数据后,再通过明细存储和聚合存储进行存储。

明细存储主要针对用户的核心操作行为,包括签到、点击、分享、浏览、评论等,这类数据将被按照一定的粒度进行拆分,存储在拥有一定的过期机制的搜索集群中,具体的操作流程如下图:

图片

而在某些要求高性能的场景下,要求更快的查询和更短的响应时间,大众点评采取了引入NoSQL存储,使用存储中间件Squirrel和Cellar,其中Cellar是基于淘宝开源的Tair进行开发的,而Squirrel是基于RedisCluster进行开发的。

系统特性

  1. 系统灵活性: 对于用户的行为数据,通过Transformer组件进行数据扩展来满足业务需求;还支持业务方自己编写查询逻辑或采用插件托管的方式,以此做到对外接口和服务的一致统一。
  2. 低延时性:采用Lambda架构来处理长周期、存储大的数据,保证了数据完备性的同时实现了数据的时效性。架构包含Batch Layer批处理层和Speed Layer实时计算层,分别用以预处理历史数据和计算实时数据。
  3. 数据可用性:Speed Layer会保留三天的数据,来确保覆盖全量数据。
  4. 监控:实现从用户行为数据的产生,到收集分发、到数据处理和存储的全过程监控。

三. 数据清洗与特征处理

经过上述操作,大众点评能够将抽象的统计学数据以及非结构化的业务数据转化成了规范化的、特征化的系统推荐的输入数据。随着用户数量的增多以及时间的积累,评论数据与业务数据的量成几何增长。利用数据仓库对这些数据进行挖掘与分析,能够为今后的业务方向提供知识决策,此外,大众点评中的评论数据还能够与美团公司旗下的美团APP进行共享,进行辅助决策帮助。

为了避免无关数据与干扰数据的影响,以及能够准确地对干净数据进行分析以便辅助决策,本章将对数据清洗与数据的特征处理进行一个大致介绍。

数据选取

在确定业务目标后,需要确定能够实现该目标的数据—―即事先梳理可能决定用户是否决定打卡店铺相关的数据。通常而言,能够借鉴一些业务经验,同时运用特征选择、分析方法辅助选择数据。

根据经验判断,可能影响用户决策的重要因素由:距离、用户实时兴趣、价格、评分、餐厅种类等等。在确定数据范围后,需要对选中的数据再次进行可用性评估,评估内容包括:获取难度、数据规模、数据准确率等等。

据调查显示,大众点评所使用的特征获取平台与美团旗下的美团APP一致,该平台由三部分框架组成:训练样本生成、特征生产以及特征获取计算。

image-20230303134900332

数据清洗

数据清洗(Data Cleaning)是对数据进行重新审查和校验的过程,目的在于删除重复信息与干扰信息、纠正存在的错误,并提供数据一致性等等。

数据清洗的主要类型有:

  1. 残缺数据:这—类数据主要是—些应该有的信息缺失,如供应商的名称、分公司的名称、客户的区域信息缺失、业务系统中主表与明细表不能匹配等。对于这一类数据过滤出来,按缺失的内容分别写入不同Excel文件向客户提交,要求在规定的时间内补全。补全后才写入数据仓库。

  2. 错误数据:这一类错误产生的原因是业务系统不够健全,在接收输入后没有进行判断直接写入后台数据库造成的,比如数值数据输成全角数字字符、字符串数据后面有一个回车操作、日期格式不正确、日期越界等。这一类数据也要分类,对于类似于全角字符、数据前后有不可见字符的问题,只能通过写SQL语句的方式找出来,然后要求客户在业务系统修正之后抽取。日期格式不正确的或者是日期越界的这一类错误会导致ETL运行失败,这一类错误需要去业务系统数据库用SQL的方式挑出来,交给业务主管部门要求限期修正,修正之后再抽取。

  3. 重复数据:
    对于这—类数据,通常做法是将重复数据记录的所有字段导出,让客户确认并整理。

数据清洗步骤:

  1. 对缺失值进行清洗:一般来说,缺失值是最常见的数据问题,处理缺失值也有很多方法,我们需要按照步骤来做,第一就是确定缺失值范围:对每个字段都计算其缺失值比例,然后按照缺失比例和字段重要性,分别制定策略。

  2. 去除不需要的字段:实际操作中是十分简单的,直接删掉就可以了,不过需要提醒大家的是,清洗数据的时候每做一步都备份—下,或者在小规模数据上试验成功再处理全量数据,如果删错数据就会追悔莫及。

  3. 填充缺失内容:这是因为某些缺失值可以进行填充,方法有三种,分别是以业务知识或经验推测填充缺失值、以同一指标的计算结果(均值、中位数、众数等)填充缺失值、以不同指标的计算结果填充缺失值。

  4. 重新取数:由于某些指标非常重要又缺失率高,那就需要和取数人员或业务人员了解,是否有其他渠道可以取到相关数据。这就是缺失值清洗的步骤。

  5. 关联性验证:如果你的数据有多个来源,那么有必要进行关联性验证。如果不关联,这个数据据需要清洗。

image-20230303135258797

数据标注

数据标注模块根据 globalId(一次搜索的全局唯一 标示)和相应的 id 为 key,将相关数据关联起来 ,最终生成一份标注好是否被点击、打卡、支付等等的标注数据。同时这份标注数据携带了本次展现的详细特征信息。

image-20230303135340312

特征分类

在清洗以及标注好数据后,应当对特征进行分类,对于不同的特征应当采取不同的处理方法。常用的特征处理方法如下:

  1. Low Level特征和High Level 特征:Low level特征是较低级别的特征,主要是原始特征,不需要或者需要非常少的人工处理和干预,例如文本特征中的词向量特征、图像特征中的像素点、用户id、商品 id等;High level特征是经过较复杂的处理,结合部分业务逻辑或者规则、模型得到的特征,例如人工打分,模型打分等。一般前者用于简单的模型,后者用于复杂的模型
  2. 稳定特征与动态特征:稳定特征是变化频率(更新频率)较少的特征,例如评价平均分、团购单价格等,在较长的时间段内都不会发生变化。动态特征是更新变化比较频繁的特征,有些甚至是实时计算得到的特征
  3. 二值特征、连续特征、枚举特征:二值特征主要是0/1特征,即特征只取两种值:0或者1;连续值特征是取值为有理数的特征,特征取值个数不定,例如距离特征;枚举值特征主要是特征有固定个数个可能值

特征选择方法

image-20230303135737471

四. 具体业务执行

大众点评拥有一套完善的推荐系统框架,包括基于机器学习的多选品召回与排序策略以及从海量大数据的离线计算到高并发在线服务的推荐引擎。在经过上文所介绍的流程过后,通过该推荐系统中的召回生成推荐的候选集以及排序负责将多个算法策略的结果进行个性化排序。

IMG_256

上图即是大众点评的实时推荐数据流

召回

大众点评通过用户行为、场景等进行实时判断,通过多个召回策略召回不同候选集。再对召回的候选集进行融合。以下是大众点评所应用到的几种召回策略:

User-Based **协同过滤:**找出与当前User X最相似的N个User,并根据N个User对某Item的打分估计X对该Item的打分。在相似度算法方面,大众点评采用了Jaccard Similarity:

Model-Based *协同过滤:*用一组隐含因子来联系用户和商品。其中每个用户、每个商品都用一个向量来表示,用户u*对商品i*的评价通过计算这两个向量的内积得到。算法的关键在于根据已知的用户对商品的行为数据来估计用户和商品的隐因子向量。

**Item-Based协同过滤:*大众点评先用word2vec对每个Item取其隐含空间的向量,然后用Cosine Similarity计算用户u*用过的每一个Item与未用过Item i之间的相似性。最后对Top N的结果进行召回。

**Query-Based:**是根据Query中包含的实时信息(如地理位置信息、WiFi到店、关键词搜索、导航搜索等)对用户的意图进行抽象,从而触发的策略。

**Location-Based:**移动设备的位置是经常发生变化的,不同的地理位置反映了不同的用户场景,可以在具体的业务中充分利用。在推荐的候选集召回中,大众点评会根据用户的实时地理位置、工作地、居住地等地理位置触发相应的策略。

排序

每类召回策略都会召回一定的结果,这些结果去重后需要统一做排序。大众点评推荐排序的框架大致可以分为三块:

**离线计算层:**离线计算层主要包含了算法集合、算法引擎,负责数据的整合、特征的提取、模型的训练、以及线下的评估。

**近线实时数据流:**主要是对不同的用户流实施订阅、行为预测,并利用各种数据处理工具对原始日志进行清洗,处理成格式化的数据,落地到不同类型的存储系统中,供下游的算法和模型使用。

**在线实时打分:**根据用户所处的场景,提取出相对应的特征,并利用多种机器学习算法,对多策略召回的结果进行融合和打分重排。

IMG_256

上图即是大众点评现有的排序框架,到目前为止,大众点评推荐排序系统尝试了多种线性、非线性、混合模型等机器学习方法,如逻辑回归、GBDT、GBDT+LR等。通过线上实验发现,相较于线性模型,传统的非线性模型如GBDT,并不一定能在线上AB测试环节对CTR预估有比较明显的提高。在实际的运用当中,大众点评根据Google在2016年提出的Wide & Deep Learning模型,并结合自身业务的需求与特点,将线性模型组件和深度神经网络进行融合,形成了在一个模型中实现记忆和泛化的宽深度学习框架。