学习美团推荐系统质量模型建设

news/2024/5/19 23:06:42 标签: 产品运营, 推荐算法

目录

一、背景引入

(一)基本背景说明

(二)从推荐系统“数据飞轮”看质量建设必要性

二、质量的定位和考量思考

(一)对推荐系统质量的思考迭代

(二)可用性计算的关注点

(三)从请求的角度度量质量

三、质量分计算与建设

(一)质量分计算方法

(二)业务层次的聚合分析

(三)质量指标体系建设

(四)推荐系统的数据血缘

四、质量运营建设

(一)质量分的系统实现

(二)告警跟进流程

五、推荐系统或检索系统质量稳定性建设的思考

参考文章链接或推荐阅读


一、背景引入

(一)基本背景说明

美团到店综合业务的推荐系统是其关键技术组件,旨在通过智能化方式高效匹配用户需求与多元化本地服务,能够涵盖到综业务中的各个行业,包括但不限于洗浴、KTV、美业、医美、亲子、结婚、运动健身、玩乐、教育培训、家居、宠物、酒吧、生活服务等。这要求推荐系统具有良好的扩展性和适应性,能够处理多样化的业务类型和用户需求。

在美团到店综合业务中,推荐系统扮演着关键的角色,是实现供给和需求高效匹配的重要环节。其作用类似于一座智能的桥梁,连接用户的需求与各类本地服务,确保用户能够迅速而准确地找到符合其期望的服务。

推荐系统不仅仅是数据处理的一环,更是传递数据价值的出口。通过分析用户的历史行为、偏好和实时需求,推荐系统能够从庞大的数据中提炼出有价值的信息,为用户提供个性化、精准的服务推荐,实现了数据的最大化利用。

然而,推荐系统的质量直接关系到匹配效果的折损程度。如果推荐系统质量低下,匹配的服务可能不准确,导致用户体验下降,甚至错失一些潜在的商机。因此,推荐系统的质量提升成为确保匹配效果高效的关键步骤。这可能包括采用先进的推荐算法、实时性的数据处理、有效的用户反馈机制等措施,以不断优化系统的性能。

现在我们就以其在质量方面的实践和研究作为基本学习点,进行展开学习一下,具体学习资料主要见:美团综合业务推荐系统的质量模型及实践 - 美团技术团队。

(二)从推荐系统“数据飞轮”看质量建设必要性

想一下,数据在美团到店综合业务中经历了一个闭环的处理过程

  1. 数据采集与数仓处理: 首先,原始数据从各个业务系统和渠道中被采集,并经过清洗、转化等处理流程后,被存储在数据仓库(数仓)中。这一步是确保数据质量和可用性的关键环节。

  2. 算法加工: 在数仓中的数据被用于训练和优化推荐算法。算法加工阶段包括对数据的分析、建模、训练推荐模型等步骤,以提高推荐系统的准确性和个性化水平。

  3. 数据服务到业务系统: 加工后的数据通过数据服务的方式被分发到各个具体的业务系统。这可能包括对用户进行个性化推荐、精准定位等服务,以满足用户的具体需求。

  4. 客户端埋点: 为了获取用户在客户端的实时行为数据,如点击、浏览、购买等,通过在客户端进行埋点操作,记录用户与业务系统的交互。这些埋点数据是获取用户反馈和行为的关键来源。

  5. 数据重新流转回数仓: 最后,客户端埋点收集到的实时数据重新流转回数仓。这样的闭环设计有助于不断更新推荐模型,优化算法,并更好地适应用户的变化和业务的发展。

数据处理链路形成的一种正向的、增强型的效应,类似于一个飞轮(flywheel)在不断累积能量。数据的处理和流转形成一个循环,有助于推动整个系统的运转。通过这一完整的数据处理闭环,形成了数据的“飞轮效应”。每一个阶段都为下一个阶段提供了关键的信息和反馈,实现了数据的循环迭代,有助于推动业务系统的不断优化和创新。这种设计有助于形成一个具有自我学习和不断提升能力的数据生态系统。

在整个链路中,质量是关键的因素。如果推荐系统的质量不高,即推荐效果不佳,将导致整个链路中的匹配效果减弱,从而降低了系统的效率和效果。所以考虑进行推荐系统的质量模型建设是完全必须且有价值的,需要学习其如何以可用性为基础,然后调整计算方式,进而指导精细化的质量运营。

二、质量的定位和考量思考

(一)对推荐系统质量的思考迭代

在推荐系统中,产品通过理解用户场景,提出产品需求,向推荐团队传递用户需求。这在外部体现为产品的迭代和更新。同时,在推荐系统团队内部,团队成员相互协作,学习最佳优化模型策略,这在内部体现为数据团队的算法迭代。

上图的可用性计算公式中强调了长时间的概念,而“需要”和“预期”主要体现在对外提供服务上。这是合理的,因为可用性是一个泛化的指标,定义上通常是对外提供服务的泛化表达。大多数后台系统的交付功能通常在“有”和“无”之间,因此对服务降级有一定的空间。

然而,对于以效果为核心目标的推荐系统,质量的思考逐渐演变为对外提供服务的“好”和“坏”。在推荐系统中,存在着更为广泛的效果光谱,而不仅仅是“有”和“无”。因此,对推荐系统质量的思考迭代,从“有”和“无”到“好”和“坏”,这也是改造可用性计算方式的出发点。这种改变强调了对用户体验和推荐效果的更精细的评估和优化。

(二)可用性计算的关注点

结合美团到综推荐系统的业务特色和高频质量问题,考虑如下图  所示的质量特征作为缺陷来源:

在对传统可用性度量的审视中,发现其主要集中在可靠性、功能完整性和正确性等方面,而对于推荐系统中关键的功能准确性、适当性以及安全性等方面缺乏充分的度量,这些方面与推荐质量和效果密切相关。具体来说,准确性和适当性对于推荐效果的直接影响较为直观,而其他方面的影响则较为间接。

以安全性为例,其中的爬虫访问问题是一个典型情况。爬虫的访问行为与真实人类的行为习惯不符,可能对核心指标如UVCTR(用户点击率)等产生负面影响,进而导致对效果的误判。同时,如果系统不能识别和清除爬虫数据,噪声将进一步影响模型训练的准确性。数据质量问题在数据“飞轮效应”中充当了一种“毒丸”,可能导致缺陷不断被正反馈放大。

这意味着将准确性、适当性、安全性等因素纳入度量体系,拓展可用性的外延,使度量更全面、细致,能够更准确地反映推荐系统在各个方面的性能和效果。这种拓展和量化的努力有助于全面理解推荐系统的质量,从而更好地优化系统,提高用户满意度。

(三)从请求的角度度量质量

在度量方式上,业界常用的质量度量方式如下图 4所示:

对于到综业务线众多的基本特点,以上评价体系并不直观,所以美团当前按以下从请求的角度度量质量。

三、质量分计算与建设

(一)质量分计算方法

在从成功请求占比的角度评估系统质量时,可以将缺陷划分为四个层面,以全面考量系统在不同方面的问题:

  1. 系统层面: 包括系统在请求过程中触发的异常,如召回超时、召回失败、召回空结果等。这一层面关注系统运行的稳定性和可靠性,确保请求的处理不受到系统级的问题影响。

  2. 数据层面: 涉及请求使用的数据出现异常,例如供给数量异常、标签分布异常等。在这一层面,关注数据的质量,确保数据的准确性和完整性,以及数据对用户请求的实际影响。

  3. 算法层面: 涉及在召回和排序过程中使用的特征、模型、策略的异常,比如模型更新延迟、特征缺失等。这一层面关注算法的准确性和实时性,以确保推荐的效果能够达到预期。

  4. 业务层面: 涉及请求触发了业务适当性或安全合规要求,包括运营反馈有供给质量、内容安全等严重的 Bad Case。在这一层面,关注业务的合规性和用户体验,确保推荐结果符合业务规定的标准。

对于一条请求,如果在生命周期的任意环节经历了上述任何层面的缺陷,那么就定义为缺陷响应。具体的缺陷环节可以通过详细的分析下钻来确定,这有助于深入理解问题根源并进行有针对性的改进。这种综合的缺陷分类方式有助于全面地评估系统质量,提高系统的整体性能和用户满意度。

(二)业务层次的聚合分析

到综推荐系统的业务特色是多业务线,行业差异大,推荐物料位置多,折射到质量度量上,需要各个层次的聚合分析,进而指导精细化的运营。

(三)质量指标体系建设

通过将推荐系统响应的一条请求视为一次产品交付行为,将无缺陷的请求比例作为顶层的质量输出指标。这一指标为质量分,是整个质量度量的顶层汇总。在这一体系中,可以建立一级输入指标,用于衡量核心流程的质量现状,例如召回缺陷率、排序缺陷率等。

进一步,可以对一级输入指标进行拆解,得到更为具体的二级输入指标。以召回缺陷率为例,可以衡量召回空值率、召回超时率等细分指标。这有助于深入挖掘系统性能和质量的方方面面,提供更详尽的信息。

另外,用户的请求可以根据业务进行垂直、横向、时间维度的聚合,得到具有业务属性的质量分。这样的质量分更加有针对性,更能聚焦于不同业务维度的性能差异。这种多维度的质量分体系可以更好地指导运营决策和系统优化。

通过这套改进后的质量分计算方式,以请求为基本单位,相较于最初的可用性计算方式,一定程度上解决了其对缺陷敏感的局限性。这种改进使得系统的质量度量更全面、灵活,并且方便进行多业务维度的聚合分析。

所以开始有些思考,推荐系统的质量建设需要基于整体的系统理念,通过细致的质量度量体系来全面评估系统性能。将每条请求视为产品交付行为,并以无缺陷的请求比例作为顶层的质量输出指标,是一种有效的方法。以下是一些建议和思考:

  1. 建立多层次的质量度量体系: 通过建立多层次的质量度量体系,从顶层的整体质量分到一级、二级输入指标,再到业务维度的聚合分,能够更全面、深入地了解系统在不同方面的表现。这有助于定位问题、制定针对性的优化策略。

  2. 细分关键质量指标: 在每个层次细分关键质量指标,例如召回缺陷率、排序缺陷率等,使得问题能够更具体地显现出来。细分指标的使用有助于深入挖掘系统性能的各个方面,从而更有针对性地进行优化。

  3. 多维度的业务聚合: 根据业务进行垂直、横向、时间维度的聚合,得到有业务属性的质量分。这使得质量度量更具有业务针对性,有助于关注不同业务维度下的性能差异,从而更好地指导运营决策和系统优化。

  4. 请求作为基本单位: 将每条请求作为基本单位进行质量度量,有助于细致地把握系统性能。这种方式相对于传统的可用性计算方式更为灵活,能够更好地适应推荐系统的复杂性和多样性。

  5. 解决缺陷敏感性问题: 改进的质量分计算方式在一定程度上解决了对缺陷敏感的问题,使得系统的质量度量更加稳健。通过全面考量缺陷对质量的影响,能够更准确地评估系统性能。

综合而言,建议推荐系统的质量建设要以用户请求为核心,通过多层次、多维度的质量度量体系,深入挖掘系统性能,提高系统的质量和用户满意度。实践建设中还需要在多打磨下!!!

(四)推荐系统的数据血缘

血缘拓展在推荐系统的业务语境下是质量分度量的重要补充,通过将请求的生命周期延展到数据全链路,借助数据的血缘关系构建全景的质量画像。

以下是对血缘拓展的一些思考:

  1. 数据血缘关系的概念: 数据的血缘关系类比于人际关系中的家族血缘,反映数据之间的融合、转换关系。血缘关系可以分为数据库、数据表、字段等不同级别,用于数据资产、数据开发、数据治理和数据安全等方面。

  2. 血缘关系的应用: 在推荐系统的质量分思路中,主要通过影响分析去拓展质量分。通过血缘关系,标记所有途径故障节点的请求,扣除相应的分数。这有助于更全面地评估系统中可能存在的问题,准确追踪和修复故障。

  3. 六种业务元数据: 在业务语义下,定义了六种业务元数据,包括快照、方案、组件、索引、模型、特征。基于这些元数据构建血缘,分为任务接入、血缘解析、数据导出三个步骤。这种方式更贴近推荐系统的业务场景,为质量分的拓展提供了有力支持。

  4. 异常检测和影响分析: 血缘关系的建立使得节点本身的异常能够得到系统发现和人工标记,通过自动化的影响分析,能够更快速地识别和定位问题。异常信息通过血缘传播,影响下游环节的质量分计算。

  5. 业务损失的计算: 当异常波及到用户端时,采用业务语言重新描述损失。根据到综收入模型,计算各个业务线每个意向 UV 的价值,并利用该流量位的周同比访问情况,自动推导业务损失。这有助于更直观地了解异常对业务带来的实际影响。

通过血缘拓展,推荐系统的质量分不仅仅局限于请求的粒度统计,还可以更全面地理解数据全链路的性能,从而提高系统的整体质量水平。

四、质量运营建设

(一)质量分的系统实现

系统实现方面,推荐系统质量分的建设依赖于埋点和诊断,包括以下主要步骤:

埋点数据收集: 通过Kafka异步收集埋点数据,覆盖全链路的多个环节,包括参数输入、召回前置处理、召回、召回后置处理、粗排、精排、重排等。这些埋点数据包含运行时异常、各环节的关键输入输出信息。

数据处理和存储:

  • 在生产环境下,使用近实时的Elasticsearch(ES)构建索引,提供近4天的快速查询服务。4天前的日志入Hive进行归档。
  • 通过Flink引擎解析埋点数据,进行必要的诊断,实时计算分数并推送告警信息。
  • 在测试环境下,将日志实时分拣至MySQL,方便测试排查。

质量分计算: 结构化展示推荐不同阶段的质量情况,提高结果的可读性。初始阶段主要关注推荐空结果,以避免最严重的质量问题。

空结果的诊断: 针对推荐空结果,通过参数诊断、数据诊断、链路诊断三个环节进行识别和处理。

  • 数据诊断:当线上筛选条件出现空结果时,回源二次校验底层数据,查询底表数据是否为空。根据结果,沉淀免告警规则,设置免告警有效期。
  • 链路诊断:确定出错环节,将问题纳入相应的质量分计算。

规则引擎的选择: 选择适当的规则引擎,例如EasyRule、Drools、Zools、Aviator等。规则引擎需要能够对请求参数、推荐链路以及底层数据进行规则诊断。在这方面,Aviator表达式引擎较为合适,考虑到使用成熟度和便利性。

通过埋点和诊断的系统实现,推荐系统能够全面地收集、处理、诊断各个环节的数据,实现质量分的计算和监控,从而及时发现并解决系统中可能存在的问题,提高整体的质量水平。

(二)告警跟进流程

在推荐系统中,质量分不仅可以用于实时监控,还可以用于运营复盘,需要团队成员及时跟进异常情况。然而,由于推荐系统是一个平台型服务,模型策略由不同的团队成员维护,存在业务间的行业知识和理解门槛。通常,通用的告警系统基于服务名称粒度配置告警接收人,但这种广播式的告警方式容易引起告警风暴,使每个人难以专注于自己模块的问题,同时也可能导致告警遗漏的问题。

为了解决这一问题,基于现有告警系统进行二次开发,引入了跟进功能。具体来说,将特定流量位的告警通过专属负责人进行路由,并记录跟进状态流转。这种方式有助于及时通知相关人员,同时方便事后复盘。通过这样的跟进机制,团队能够更精准地分配问题,并提高团队对异常的跟进效率。

在运营方面,通过数据报表搭建了质量分看板,定期回顾不同业务的质量波动情况。这样的操作有助于全面了解不同业务线的质量状况,及时发现潜在问题,并采取相应的优化策略。通过跟进功能和质量分看板的建设,推荐系统团队能够更加高效地进行异常处理和质量管理,提升整体服务水平。

五、推荐系统或检索系统质量稳定性建设的思考

基于前述内容,推荐系统或检索系统的质量稳定性建设进行一些思考。

多维度的质量度量

了解和度量系统质量的关键是采用多维度的指标。传统的可用性、稳定性等指标仍然重要,但在推荐系统中,更需要关注准确性、适当性等与推荐效果相关的指标。建立一个全面的质量分体系,包括系统层面、数据层面、算法层面和业务层面,有助于更全面地评估系统质量。

实时性和故障处理

推荐系统在本地服务场景中对实时性有较高要求,因此需要建立实时监控和反馈机制。及时发现系统异常,进行快速的故障处理是确保系统稳定性的关键。在推荐系统中,尤其需要关注召回、排序、推荐效果等关键步骤的实时性和准确性。

业务场景特征

推荐系统往往涉及多个业务线,每个业务线可能有自己的特点和需求。因此,在质量稳定性建设中,需要考虑不同业务场景的差异性。对于多业务线的平台型产品,建立适应不同业务场景的质量度量和监控机制是至关重要的。

血缘关系和链路追踪

建立数据的血缘关系,实现全链路的质量监控。这包括从数据源到最终推荐结果的整个流程,通过链路追踪技术,可以及时发现并定位问题,从而提高系统的整体稳定性。

异常诊断和自动化

引入异常诊断引擎,通过规则匹配机制自动识别异常,减少人工介入。通过自动化的异常诊断,可以更迅速地响应问题,并及时采取措施,提高系统的质量和稳定性。

团队协作与业务理解

推荐系统的质量稳定性建设涉及多个团队成员,而这些成员可能来自不同的领域,拥有不同的业务理解和技术背景。因此,建设一个有效的团队协作机制,促进不同团队成员之间的信息共享和合作,对于推动质量稳定性的提升至关重要。

参考文章链接或推荐阅读

美团综合业务推荐系统的质量模型及实践 - 美团技术团队  --- 主要学习来源

推荐系统:作者: 周志华《推荐系统实践》推荐系统实践 (豆瓣)

《Site Reliability Engineering: How Google Runs Production Systems》:https://sre.google/sre-book/table-of-contents/

《Effective Monitoring and Alerting》:https://www.oreilly.com/library/view/effective-monitoring-and/9781491953712/


http://www.niftyadmin.cn/n/5172013.html

相关文章

postgis函数学习

1.特定功能的SQL 转为完整的json,前端调用用json_build_object、jsonb_agg等函数,处理mass_test表 select json_build_object(type,FetureCollection,features,jsonb_agg(st_asgeojson(mt.*)::json)) from mass_test mt获取图形边界范围的坐标 select…

51单片机PCF8591数字电压表LCD1602液晶显示设计( proteus仿真+程序+设计报告+讲解视频)

51单片机PCF8591数字电压表LCD1602液晶设计 ( proteus仿真程序设计报告讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0060 51单片机PCF8591数字电压表LCD1602液晶设计 1.主要功能&a…

笔记:AI量化策略开发流程-基于BigQuant平台(一)

从本文开始,按照AI策略开发的完整流程(共七步),上手在BigQuant平台上快速构建AI策略。本文首先介绍如何使用证券代码模块指定股票范围和数据起止日期。重要的事情说三遍:模块的输入端口有提示需要连线的上游数据类型&a…

QT 布局管理综合实例

通过一个实例基本布局管理,演示QHBoxLayout类、QVBoxLayout类及QGridLayout类效果 本实例共用到四个布局管理器,分别是 LeftLayout、RightLayout、BottomLayout和MainLayout。 在源文件“dialog.cpp”具体代码如下: 运行效果: Se…

Netty入门指南之NIO Selector监管

作者简介:☕️大家好,我是Aomsir,一个爱折腾的开发者! 个人主页:Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏:Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言问题解…

Django框架FAQ

文章目录 问题1:Django数据库恢复问题2:null和blank的区别问题3:Django创建超级用户报错问题4:Django同源策略 问题1:Django数据库恢复 问题: 从仓库拉下来的Django项目,没有sqlite数据库和migrations记录,如何通过model恢复数据库 解决方法: # 步骤1:导出数据 # 不指定 ap…

C语言 音乐播放器项目(综合)

1.main.c文件 #include<stdio.h> #include<stdlib.h> #include<string.h> #include <unistd.h>//休眠所需的头文件 #include "./pos/console.h"//光标使用所需的头文件 #include "lrc.h" #include "./mplayer/start_mplayer…

gorm之项目实战-使用gen以及定义表间关系

gorm之项目实战 ER图 关系整理 一对一关系&#xff1a; User 和 UserLog&#xff1a; 一个用户对应一个用户日志&#xff0c;通过 User 模型的主键与 UserLog 模型的外键建立一对一关系。 一对多关系&#xff1a; User 和 Teacher&#xff1a; 一个用户可以对应多个老师&…