Airbnb 是如何做数据分析的?
神译局是36氪旗下编译团队,关注科技、商业、职场、生活等领域,重点介绍国外的新技术、新观点、新风向。
编者按:Airbnb是一家数据驱动的公司,而Minerva是Airbnb的度量平台,帮助Airbnb发现了大量的商机。本文介绍了Minerva的创建背景,它的核心功能,及它对Airbnb的影响。本文是介绍Airbnb数据化工作系列文章的一部分,在接下来的文章中,作者还将深入探讨Minerva背后的技术,并分享他们一路上学到的经验教训。本文译自Medium,发布者为Robert Chang,原标题为" How Airbnb Achieved Metric Consistency at Scale ",希望对您有所启发。
原文作者:Amit Pahwa, Cristian Figueroa, Donghan Zhang, Haim Grosman, John Bodley, Jonathan Parks, Maggie Zhu, Philip Weiss, Robert Chang, Shao Xie, Sylvia Tomiyama, Xiaohui Sun
图:在疫情期间,我们看到使用Airbnb的用户的旅行已经变得超本地化。
1. 引言
在Airbnb,我们依靠数据来做出关键决定。我们通过随机对照实验验证产品理念,并严格跟踪业务绩效,以确保利益相关者的价值最大化。为了实现这些目标,我们需要构建一个稳健且靠谱的数据平台,以满足内部用户的端到端需求。
虽然我们之前已经分享了如何将数据吸收到数据仓库(data warehouse)中,以及如何使用户能够对数据进行自己的分析,但我们还没有讨论中间层:如何正确地建模,并将数据转换为准确的、便于分析的数据集。[译者注:数据仓库之父Bill Inmon在1991年出版的“Building the Data Warehouse”一书中所提出的定义被广泛接受:数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策(Decision Making Support)。]
在这篇文章中,我们将分享我们构建Minerva的过程,这是Airbnb的度量平台,被整个公司用作分析、报告和实验的唯一来源。具体来说,在这篇文章中,我们将论述我们创建它的背景,描述它的核心功能和它所启用的工具生态系统,并指出它对Airbnb的影响。在接下来的文章中,我们将深入探讨Minerva背后的技术,并分享我们一路上学到的经验教训。通过发布这个系列,我们希望我们的读者能够欣赏像Minerva这样的系统的力量,并受到启发,为他们自己的组织也创建出类似的东西。
2. Airbnb的分析简史
和许多数据驱动型公司一样,Airbnb在其数据之旅的起点也是卑微弱小的。大约在2010年,公司只有一名全职数据分析师,他的笔记本电脑实际上就是公司的数据仓库。查询通常直接针对生产数据库运行,有时候查询偶尔会导致严重的事件,并导致Airbnb.com瘫痪。尽管存在这些缺陷,但这个简单的解决方案帮助Airbnb在过去几年找到了许多增长的机会。
随着Airbnb的规模在2010年代早期持续增长,公司聘请了更多的数据科学家,数据的规模和种类都在不断增长。就在那时,我们经历了第一阶段的变化,即对我们的数据基础设施进行升级和稳定。我们从Chronos转向了我们自己开发的、现在开源的Apache Airflow,并投资构建了一组名为“core_data”的高度关键的数据表。
图:这些年来,Airbnb大幅扩张,相关支持数据也在大幅增长。
以“core data”为基础,Airbnb的分析事业开始蓬勃发展。首先,我们通过搭建和扩展Airbnb的实验平台,将A/B测试带到Airbnb。我们建立了一个内部的数据目录,数据门户,来组织和记录我们的数据,并创建了开源的Apache Superset,这样更多的用户就可以独立和交互式地分析数据。最后,我们专注于数据教育,推出了数据大学(data University),这是一个向非数据科学家教授有用技能的项目,旨在使Airbnb的数据分析大众化。
3. 增长的烦恼
虽然“core_data”为Airbnb的数据功能带来了几次阶梯功能的改变,但我们的成功也伴随着一些重大成本。事实上,数据和用例的激增给数据生产者和数据消费者带来了严重的所谓“增长的烦恼”。
首先,随着“core_data”越来越受欢迎,越来越多的数据生产者希望将其用于分析、预测和实验。每隔一天就会有在' core_data '表上手动创建新的表,但是没有办法知道是否已经存在类似的表。我们的数据仓库的复杂性继续增长,数据沿袭变得不可能跟踪。当上游发现并修复数据问题时,无法保证该修复将传播到所有下游作业。结果,数据科学家和工程师花费了无数的时间来调试数据的差异,赶场救火,还经常感到没有成效。
图:建立在“core_data”之上的派生表的大量增加,带来了一些严重的增长问题。
在数据消费方面,我们听到决策者抱怨说,对于非常简单的业务问题,不同的团队会给出不同的数字,而且没有简单的方法来知道哪个数字是正确的。几年前,当我们的首席执行官布莱恩(Brian)问一些简单的问题,比如前一周哪个城市的预订最多,数据科学和金融部门有时会使用略微不同的表、指标定义和业务逻辑提供不同的答案。随着时间的推移,甚至数据科学家也开始对自己的数据进行事后猜测,对数据质量的信心下降,决策者的信任也下降了。
4. 用Minerva来克服增长的烦恼
随着这些痛点的恶化,Airbnb开始了一段多年的旅程,以大幅提高公司的数据质量为目标,对其数据仓库进行改造。作为第一步,我们的数据工程团队从头开始,重新构建了几个关键业务数据模型,这形成了一组经过认证的、精简的、规范化的表,这些表不使用不必要的连接。这些经过审查的表格现在成为我们分析仓库的新基础。
然而,我们的工作还没到此为止。为了将这些表格转化为有用的见解,我们需要能够以编程的方式将它们连接在一起,以创建便于分析的数据集。当业务逻辑发生变化时,我们需要能够回填数据。最后,我们需要在不同的消费工具中一致正确地呈现数据。
这就是Airbnb的度量平台Minerva出现的时候。Minerva将事实表和维度表作为输入,执行数据去规范化,并将聚合的数据提供给下游应用程序。Minerva API弥合了上游数据和下游消费之间的gap,使数据工程团队能够灵活地修改核心表,同时维护对各种下游消费者的支持。该API在Airbnb的下一代数据仓库架构中扮演着至关重要的角色。
图:Minerva是Airbnb的度量平台,在Airbnb新的数据仓库架构中扮演着核心角色。
到目前为止,我们在Minerva中有超过12000个指标和4000个维度,有超过200个数据生产者,跨越不同的功能(如数据、产品管理、财务、工程)和团队(如核心产品、授信、支付)。现在大多数团队都把Minerva作为他们在Airbnb进行分析、报告和实验的首选框架。
图:在过去的两年里,Airbnb对Minerva的接纳度大幅增长。
5. Minerva的数据生产
从基础结构的角度来看,Minerva是建立在开源项目之上的。它使用Airflow进行工作流编排,使用Apache Hive和Apache Spark作为计算引擎,使用Presto和Apache Druid进行消费。从指标创建到计算、服务、消费,最后弃用,Minerva涵盖了指标的整个生命周期。
图:Minerva负责管理Airbnb的整个指标生命周期。
指标定义:Minerva在一个集中的Github存储库中定义了关键业务指标、维度和其他元数据,公司的任何人都可以查看和更新这些数据。
已验证的工作流:Minerva开发流强制执行最佳数据工程实践,如代码审查、静态验证和测试运行。
DAG编排:Minerva通过最大化数据重用和中间连接结果,来有效地执行数据去正规化。
计算运行:Minerva有一个复杂的计算流,可以在作业失败后自动自修复,并内置检查以确保数据质量。
指标/元数据服务:Minerva提供了一个统一的数据API,可以根据需要同时提供聚合指标和原始指标。
灵活的回填:Minerva版本控制数据定义,因此对数据集的主要更改会自动跟踪和回填。
数据管理:Minerva具有内置功能,如成本归因、GDPR选择性删除、数据访问控制和自动弃用策略。
数据保留:Minerva建立了基于使用频率的保留/弃用数据集,所以不经常使用的数据集会被删除。
上面提到的特性允许我们标准化度量创建、数据计算和数据交付。在下一篇文章中,我们将深入研究这些特性并更详细地解释它们。
6. Minerva的数据消耗
Minerva的产品愿景是允许用户“定义一次,随处使用”。也就是说,在Minerva中创建的指标应该很容易在Superset等公司仪表板工具中访问,在我们的A/B测试框架ERF中进行跟踪,或者通过我们的异常检测算法来发现业务异常,这只是其中的一些功能。在过去的几年里,我们与其他团队紧密合作,在Minerva上创建了一个工具生态系统。
图:Minerva的愿景是“定义一次,随处使用”。
1) 数据目录
首先,我们与分析产品团队紧密合作,将所有Minerva指标和维度索引到Airbnb的数据目录中。当用户与数据门户进行交互并搜索指标时,它会将Minerva指标排在搜索结果的顶部。数据门户还显示背景信息,如认证状态、所有权和流行度,以便用户可以衡量指标的相对重要性。对于大多数非技术用户来说,数据门户是他们在Minerva中的第一个入口点。
图:Minerva指标在数据门户UI中被索引和编目。
2)数据探索
在选择一个指标后,用户将被重定向到Metric Explorer,这是支持开箱即用数据探索的数据门户组件。在指标页面上,用户可以通过额外的限制和“Group By”和“Filter”等选项查看指标的趋势。希望深入挖掘的人可以点击Superset视图来执行更高级的分析。在此过程中,Metric Explorer显示元数据,如指标所有者、历史登录时间和指标描述,以丰富背景数据。这种设计平衡了技术用户和非技术用户的需求,这样他们就可以无缝地发现数据提供的洞察力。
图:用户可以在Metric Explorer和Superset中无缝地查看数据趋势和异常数据。
3)A/B测试
历史上,Airbnb的实验报告框架(ERF)拥有自己的实验指标库,称为“metrics repo”。实验者可以在实验中添加任何商业指标,并将对照组和实验组的结果进行比较。不幸的是,“metrics repo”不能用于实验之外的其他用例,所以我们决定将Minerva与ERF集成起来,这样A/B测试的所有基本事件都可以从Minerva定义。在实验和分析中使用相同的资源,可以使数据科学家对他们的分析更有信心。
4) 执行报告
自从Airbnb成为一家上市公司以来,我们一直采用每周、每月和每季度的节奏来评估Airbnb的经营业绩。在这些会议中,不同职能部门的领导会开会讨论业务的当前状态。这种类型的会议需要高层和简洁的执行报告。我们会提供集成的数据,进行趋势分析和图表绘制,在不同的时间线上进行比较。
图:在Minerva之上构建的报告示例。
为了支持这种类型的报告,我们构建了一个执行报告框架(XRF)。XRF获取用户指定的Minerva指标和维度列表,并将它们转换为聚合指标时间序列,以便报告看起来更加可读。这个框架使大量的手工工作自动化,并允许我们通过利用用于分析和实验的相同的Minerva度量和维度来标准化高质量的报告。
5)数据分析
最后,Minerva数据通过Minerva的API公开给Airbnb的定制R和Python客户端。这使得数据科学家可以在笔记本环境中轻松查询Minerva数据。重要的是,在笔记本环境中显示的数据的计算和显示方式与在上述工具(如Superset和Metric Explorer)中完全相同。这为数据科学家节省了大量的时间,因为他们可以根据分析的复杂性挑选合适的工具。值得注意的是,这个数据API鼓励内部工具的轻量级原型,这些工具后续可以被创造出来并在整个公司内共享。例如,在过去两年中,数据科学家已经使用该API构建了一个时间序列分析工具和一个电子邮件报告框架。
图:数据科学家可以使用我们的Python客户端在Minerva中检索聚合的数据并进行分析。
7. 我们如何利用Minerva数据应对COVID-19
随着Minerva成为Airbnb分析的核心,我们一次又一次地看到它给Airbnb的数据社区带来的效率的提高。在最后一节中,我们将给出一个具体的例子,说明Minerva在疫情期间如何帮助企业发展的。
2020年3月,全球旅行因新冠肺炎疫情陷入停顿。几乎在一夜之间,Airbnb的订房量大幅下降,取消量大幅上升。这对我们来说是一个可怕的时刻,我们面临许多重要的商业问题:疫情如何影响我们的入住率?取消订单增加对财务有什么影响?疫情如何改变旅行需求?我们需要快速正确地回答所有这些问题。
图:借助Minerva,我们能够大大缩短从数据管理到洞察发现的时间,并评估COVID-19对Airbnb业务的影响。
为了回应这些涌入的问题,我们的数据科学团队收集了这些问题,并开始头脑风暴,我们如何利用数据来回答这些问题。至关重要的是,由于Minerva中已经定义了供应、需求、财务和客户支持的许多重要的业务指标和维度,我们的中央分析团队能够在几天内构建一个执行控制面板并推出初始版本。COVID-19控制面板迅速成为唯一权威的真相来源,并在疫情期间受到我们的执行团队的密切关注。从那时起,它已经积累了超过1.1万的浏览量和1500名不同的受众。不出意料,COVID-19控制面板是2020年Airbnb上最受欢迎的Superset控制面板。
Minerva指标生成的见解也让公司能够自信地确定快速变化的前景。例如,我们发现了市场机会,如需求转向本地旅游和长期旅行。这些发现促使我们重新设计了产品页面的几个重要接触点,以满足用户偏好的转变。在危机时刻,回答问题和发现洞察力的能力比以往任何时候都重要。多亏有Minerva提供的真实数据和见解,我们才能够高效地做到这一点。
8. 总结
在这篇文章中,我们简要总结了Airbnb的分析历程,我们在过去几年面临的增长烦恼,以及我们为什么要建立Airbnb的度量基础平台Minerva。特别是,我们讨论了如何通过Minerva产生和使用数据。在文章的最后,我们还举了一个Minerva最近帮助Airbnb应对COVID-19危机的一个例子。
在下一篇文章中,我们将深入探讨Minerva的技术架构,包括设计原则、用户开发流程以及数据计算图。在本系列的最后一篇文章中,我们将介绍Minerva API,这是我们的单层数据抽象层,它使上述所有集成成为可能。我们将通过分享我们从构建Minerva中学到的经验教训,来结束这个系列,希望这些经验教训能够对其他构建类似系统的人有所帮助。
9. 致谢
Minerva的构建离不开工作人员的关心和奉献。我们也要感谢Lauren Chircus, Aaron Keys, Mike Lin, Adrian Kuhn, Krishna Bhupatiraju, Michelle Thomas, Erik Ritter, Serena Jiang, kris Wongsuphasawat, Chris Williams, Ken Chen, Guang Yang, Jinyang Li, Clark Wright, Vaughn Quoss, Jerry Chu, Pala Muthiah, Kevin Yang, Ellen Huynh,还有更多的人与我们合作,让Minerva在整个公司更容易推出和使用。最后,感谢Bill Ulammandakh创建了美丽的可视化图像,让我们可以使用它作为我们的头图。
说明:
Apache®, Apache Airflow, Apache Superset, Apache Hive, Apache Spark and Apache druid 是Apache Software Foundation在美国和/或其他国家的注册商标或商标。
Presto是LF Projects, LLC的注册商标。
GITHUB®是GITHUB, Inc.在美国注册的独家商标。
所有商标均为其各自所有者的财产,在文中提到是为了识别目的,并不意味着赞助或背书。
译者:Jane
本文来自翻译, 如若转载请注明出处。