机器学习(ML)被广泛应用于整个Uber平台,以支持智能决策和预测功能,如埃塔预测而且欺诈检测.为了获得最佳结果,我们投入了大量资源开发精确的预测ML模型。事实上,对于从业者来说,通常会将20%的精力投入到构建初始工作模型上,而将80%的精力投入到改进模型性能的过程中20/80分割ML模型开发规则。
传统上,当数据科学家开发模型时,他们使用汇总分数来评估每个模型候选者日志丢失,曲线下面积(AUC),平均绝对误差.尽管这些度量提供了关于模型如何执行的见解,但是它们并没有传达关于模型为什么执行不好以及如何改进其性能的太多信息。因此,当确定如何改进模型时,模型构建者倾向于依靠试验和错误。
为了使模型迭代过程更加知情和可操作,我们开发了廖, Uber内部的模型不可知可视化工具,用于ML性能诊断和模型调试。利用可视化分析技术,廖廖允许ML实践者超越总体汇总指标来检测哪个子集一个模型无法准确预测的数据。流形还解释了模型性能差的潜在原因,通过展示更好和更差的数据子集之间的特征分布差异。此外,它可以显示几个候选模型如何对每个数据子集具有不同的预测精度,为模型集成等高级处理提供理由。
在本文中,我们将讨论Manifold的算法和可视化设计,并解释Uber如何利用该工具来洞察其模型并提高模型性能。
流形背后的动机
鉴于其复杂性,ML模型在本质上是不透明的。随着ML日益成为Uber业务的一部分,我们需要为用户配备工具,使模型更透明、更容易理解;只有到那时,他们才能满怀信心和信任地使用ml生成的预测。ML可视化这个新兴领域解决了这个问题。
以前的ML可视化方法通常包括直接可视化内部结构或模型参数,这种设计受到底层算法的限制,因此不能扩展到处理公司范围的通用用例。1、2、3
为了解决Uber的这一挑战,我们构建了Manifold来服务于大多数ML模型,从分类和回归模型开始。4我们还开发了流形,为ML模型开发的黑箱提供透明度堆焊数据子集之间的特征分布差异。
有了Manifold的设计,我们彻底改变了传统ML模型可视化的挑战。我们不是检查模型,而是检查单个数据点,方法是:(1)识别使模型执行良好或糟糕的数据段,以及这些数据如何影响模型之间的性能,(2)评估这些数据段的聚合特征特征,以确定某些模型行为的原因。这种方法促进了模型不可知论,当涉及到识别模型集成的机会时,这是一个特别有用的特性。
可视化和工作流设计
除了在[4]中构建的研究原型之外,我们雷竞技是骗人的还专注于在大量的高维ML数据集中显示重要的信号和模式。在接下来的章节中,我们将讨论Manifold的界面和用户工作流程,深入研究我们的设计考虑因素,并解释启用这种类型的可视化分析的算法。
廖廖的界面由两个协调的可视化组成:
- 视图性能对比视图,由一个具有小提琴编码的多路图组成,比较模型和数据段之间的性能。
- 特征归因视图,由两组特征分布直方图组成,比较所选两个数据段的特征。
Manifold帮助用户通过三个步骤发现模型改进的领域:
- 比较首先,给定一个具有一个或多个ML模型输出的数据集,Manifold比较并突出显示模型或数据子集之间的性能差异(图3a)。
- 片:此步骤允许用户根据模型性能选择感兴趣的数据子集,以便进一步检查(图3b)。
- 属性: Manifold然后突出所选数据子集之间的特征分布差异,帮助用户找到性能结果背后的原因(图3c.)
我们使用Manifold的目标是比较不同模型在不同数据点(换句话说,特征值)上的表现。作为一种设计替代方案,这种可视化的直接实现如下面的图4所示:
在图4中,图中的每个点表示模型x在数据点上的性能y.虽然这个概念在理论上是可行的,但在实践中,这种方法有三个主要挑战:
- 点云中的点太多,无法清晰识别模式;需要对点进行一些抽象或简化来揭示模式。
- 为了识别点云中的相关模式,很难精确指出哪些特征对y轴最有价值。
- 随着模型数量的增加,比较不同的模型变得更加困难。
为了先发制人地解决这些问题,我们实现了以下聚合/简化:不是单独表示每个数据点,而是将它们分组到子集中。我们没有使用y轴来编码特定特征的值,而是将其转换为表示不同数据子集的分类轴。这种方法演变成了我们最后的性能图表,带来了以下两个显著的好处:
- 本质上相似的数据点在图表上不会重复。只有最突出的,高层次的差异被突出。
- 由于图表中形状的数量减少了,不同的模型可以绘制在同一个图表上,以便更好地进行比较。
在工具的Performance Comparison视图中显示模式的关键是将测试数据集划分为子集。在Manifold中,子集是使用基于一个或多个性能列的聚类算法自动生成的。这样,在每个模型方面具有相似性能的数据被分组在一起(因为算法保证性能模型X对于不同的数据点Y子集彼此一致)。下面的图5和图6说明了这个过程:
![]() |
![]() |
图6。左:性能指标被用作在流形中运行的聚类算法的输入。右:用户可以修改聚类参数,以探索数据集中的模式。
多方面的架构
由于生成流形可视化涉及一些密集的数值计算(聚类、kl发散),低于标准的计算性能减慢了UI呈现速度,影响了整体用户体验。考虑到这一点,我们开始用Python实现所有重量级的计算,利用其优化的DataFrame处理和ML库(例如熊猫而且Scikit-Learn).
然而,必须依赖Python后端使得廖廖不那么敏捷,也很难组件化,这在将廖廖与Uber更大的ML生态系统(例如我们的ML平台)集成时成为了一个缺点,米开朗基罗.因此,除了Python计算之外,我们还添加了第二个使用GPU加速的用户工作流路径,完全用JavaScript编写,JavaScript是一种更加敏捷的语言。
下面的图7描述了这两个工作流如何与Manifold集成:
用户可以通过两种方式利用Manifold:通过Python包或npm包(通过网页)。由于代码的可重用性和模块化对于两个工作流的共存是至关重要的,所以Python和JavaScript的代码库都被组织成三个不同的功能模块:
- 数据变压器,该特性将来自其他内部服务(如Michelangelo)的数据格式适配为廖廖的内部数据表示格式
- 计算引擎该特性负责运行集群和其他数据密集型计算
- 前端组件,流形可视化分析系统的UI(它的Python包使用内置的JavaScript前端组件)
与Python不同,处理数据密集型计算对JavaScript计算引擎来说是一个挑战。要让用户看到有意义的模式,需要大约10,000个数据记录(“行”)。在其他操作中,聚类和kl发散的计算需要发生在前端,这可能会成为速度的瓶颈,并严重影响用户体验。事实上,根据我们的实验,在浏览器中,每次用户更新性能比较视图中的集群数量时,用纯JavaScript实现的计算可能需要超过10秒。
相反,我们利用TensorFlow.js作为一个线性代数实用程序库来实现我们的k-means聚类和KL-divergence计算。因为这种类型的计算可以向量化,因此可以通过TensorFlow.js使用WebGL加速,更新集群数量的相同任务可以在几秒内完成——超过原始性能的100倍。
被组件化并包含在npm包中,使流形可以作为一个独立的服务使用,也可以集成到其他公司范围内的ML系统中,如Michelangelo。因为大多数用于ML的可视化工具箱需要超出模型训练后端所包含的额外计算过程,因此将它们与企业ML系统集成可能非常麻烦或不可扩展。针对这种情况,Manifold公司提出了一种解决方案,即将视觉分析系统所需的计算与训练模型所需的计算分开处理,从而实现更快的迭代和更清晰的数据接口。
在Uber上使用歧管
专注于ml的Uber团队利用歧管的一切埃塔预测为了更好地理解驾驶员安全模型。下面,我们将介绍两个最常见的用例:识别ML模型的有用特性和消除模型结果中的假阴性。在这些情况下,Manifold使数据科学家能够发现指导他们通过模型迭代过程的见解。
确定有用的特性
Uber Eats团队使用廖里评估的效果一个预测订单交付时间的新模型.在模型迭代过程中,他们集成了一组额外的特征,他们认为这些特征有可能改善现有模型的性能。然而,在他们加入这些功能后,模型的整体性能几乎没有改变。为什么新功能没有帮助?他们是否应该放弃使用这些功能,或者是否有其他原因导致了这种低水平的性能?
为了回答这些问题,他们使用了图8所示的模型——一个原始模型(绿色)和一个经过额外特征训练的模型(橙色)——作为流形的输入。这两种模型的其他方面都是一样的。
上面的图8描述了由Manifold的数据可视化表示的这种分析。如前所述,测试数据集根据数据点之间的性能相似性自动划分为四个集群。对于集群0、1和2,具有额外特性的模型没有提供性能改进。然而,新模型(具有额外功能的那个)的性能在Cluster 3中稍好一些,这可以从日志丢失向左移动看出。
由于原始模型对簇3中的数据段的预测很差(从它比其他簇的日志损失值更高可以看出),我们认为这些特征对他们的模型很有价值,因为它们似乎可以处理一些最困难的个别情况,如簇3中所代表的情况。
消除假阴性
在另一个例子中,Uber的安全团队使用了Manifold来提高一个二元分类识别可能引发安全事故的行程的模型。具体地说,他们想要消除由他们的模型产生的假阴性的数量(应该被预测为具有Positive标签的实例,但模型没有捕捉到),为了做到这一点,他们需要确定为什么他们的模型会在这些情况下将Positive实例预测为Negative。
为了达到这一目的,他们过滤掉了一个标记为Negative的测试数据集中的所有实例,然后比较标记为Positive的案例之间的差异。他们将Performance Comparison图表的x轴度量设置为“实际预测得分”(1),增加集群数量(2),并比较值在决策阈值(3)以下和以上的子集,如图9所示:
结果,我们注意到有几个特征(a, B, C, D, E)在真阳性组(灰色)和假阴性组(粉色)之间显示出显著的分布差异,如下图10所示。换句话说,如果一个数据点在特征a、B、C或D中具有较低的值,并且它的真实标签是正的,那么模型往往不能正确地预测值E。
为了进一步深入到这些假阴性的根本原因,我们直接比较了阳性组和阴性组的特征分布,如下图11所示:
我们注意到,大多数真正的Negative实例在特性A、B、C或d中也倾向于具有较低的值。因此,如果一个实例在这些特性中具有较低的值,模型倾向于将其预测为负值(这有时是错误的!)在对Manifold进行分析之后,他们意识到模型对这些特征索引过度了。为了提高性能,他们可以找到更多有助于区分假阴性和真阴性的特征,或者为这些特征低于某个阈值的数据分区训练一个单独的模型。
下一个步骤
自2018年8月推出Manifold以来,该工具已成为Uber ML模型开发过程中不可或缺的组成部分。Manifold的三个主要优点包括:模型不可知性,用于模型性能评估的可视化分析,它可以超越不准确性的模型性能汇总统计,以及将可视化分析系统和标准模型训练计算分离的能力,以促进更快、更灵活的模型开发。
目前,Manifold是一个独立的网络工具和Python包。为了增加Manifold的功能,我们计划将of Manifold工具箱集成到Uber无数的数据科学平台中,进一步将该工具建立为我们更广泛的数据科学工作流程的关键部分。通过这样做,我们将能够真正增长Manifold的数据不可知论的潜力,以对抗整个公司的各种数据科学使用场景。从那里开始,我们打算基于这些应用程序进行设计改进,从而实现对这些用例的更健壮的支持。
如果你对处理机器学习和数据可视化的大型工程问题感兴趣,可以考虑申请这个职位我们的团队!
确认
我们要感谢Uber的可视化和机器学习平台团队在这个项目开发过程中的支持。我们也感谢Uber AI实验室的Piero Molino和Jiawei Zhang与我们合作,共同完成了雷竞技是骗人的廖以及优步数据科学家Le Nguyen和Sunny Jeon,感谢他们在我们开发这个工具时给予的宝贵支持。
参考文献
- M. Kahng, P. Y. Andrews, A. Kalro和D. H. Chau,“ActiVis:工业规模深度神经网络模型的视觉探索”,于IEEE可视化与计算机图形学汇刊第24卷第4期。1, 88-97页,2018年1月。
- 明昱,曹胜,张荣,李振英,陈赟,宋赟,曲浩。循环神经网络隐藏记忆的研究。arXiv预打印arXiv:1710.10777, 2017年。
- L.帕多瓦,H.舒尔茨,K.马特科维奇和C.德尔里欧。数据挖掘中参数空间的交互式探索:理解大型决策树集合的预测质量。计算机与图形学学报,41 (5):561 - 561,2014
- 张建军,王颖,李丽娟,“流形:一种用于机器学习模型解释和诊断的模型不可知论框架”,载于IEEE可视化与计算机图形学汇刊,第25卷,no。1, pp. 364-373, 2019年1月。








