解密 Airbnb 的数据科学部门如何构建知识仓库

简介:

Airbnb的数据团队很重要的一个职责就是传播基于数据的决策方法。我们将数据的获取民主化,使得每一个Airbnb的成员都可以量化他们基于数据的决策影响力并且借此洞察用户偏好,提升数据产品的用户体验。最近,我们开始解决一个令人头疼的问题。随着组织的扩大,如何确保我们如何确保一个洞见有效地通过社交网络,这在我们内部称之为知识扩张。

当我们团队仅由几个乐于分享和发现研究技巧的人组成这不是什么难题。但是当我们团队开始快速扩张时,这个问题一下就被放大了。Jennifer是一位新来的数据科学家,她正在研究如何通过房东拒租的话题和同事开展工作。

这里是我们所看到的:

  1. Jennifer 找到了一堆的PPT、Email、Google Docs 并且询问团队其他成员有关这个项目的历史。
  2. 前人的代码已经不是最新的了,但 Jennifer 还是从 GitHub 或者原来作者的机器上弄下来代码。
  3. 在和代码一顿混战之后, Jennifer 意识到之前的项目有些许问题,她决定从头开始撸代码。
  4. 在浪费大量重复工作之后,Jennifer 又放弃了重头开始的想法,她感到精疲力尽。
  5. Jennifer 留下了一堆的 PPT、Email、Google Doc, 循环往复。

基于其他公司的对话,我们发现这个现象实在太普遍了。随着组织的扩张,跨团队跨时期的知识传输成本不断增长,一个低效、乌合的研究环境使得这种情况雪上加霜,放慢了分析和决策的速度。因此,一个更加一气呵成的解决方案可以加快决策落地的速度并且保持公司在知识洪流中立于不败之地。

药方

随着我们看到这个问题工作流的不断发生,我们意识到我们可以做得更好。作为一个团队,我们在一起决定了做研究的五个关键原则:

  • 可重复性 - 代码不应该分离,整个查询、转化、可视化、文档撰写应该一气呵成,并且保证结果是尽量更新的。
  • 质量 - 没有经过正确性和准确性审查的研究都不应该被共享。
  • 用户体验 - 研究结果应该是让读者容易理解的,我们也应该将美感和品牌延伸考虑在内。
  • 可得性 - 任何人都可以发现、浏览并且保持在相关工作话题上的更新。
  • 学习价值 -  与可重复性,其他研究者应该能够通过工具和技术从其他人的工作中增益自己的能力。

根据这些原则,我们单独调查了现有的工具来解决这个问题。我们注意到Rmarkdown和 iPython notebook 是一个可重复性研究的一个优秀解决方案。 GitHub 提供了一个审查框架,但是对于代码之外的内容和文档,比如图片就没有什么好的解决方案。 可得性通常是基于文件夹的形式的,但是类似Quora这样的其他站点内在对标签和话题又有特殊的审查机制。

综上,我们将这些想法集成到一个系统里面。我们的解决方案整合了贡献和审查的工作,用一个工具来呈现和传播知识。我们内部称之为"知识仓库"。

这里的核心其实是一个我们提交工作成果的 Git 仓库。我们在 Jupyter 笔记、Rmarkdown 文件或者纯 markdown都会发布在这里,所有的文件(包括查询文件和脚本)都会被提交。每个文件都从一个很小的结构化元数据开始,包括作者、标签以及TLDR,再用一个Pyhon脚本验证内容并用Markdown格式转化为纯文本。我们使用 GitHub 从审查流程中拉取请求系统。最后,用一个 Flask的 web-app 来渲染Repo的内容作为一个按时间、话题、内容排序的内部博客。

这些工具集的最顶层,我们有一个流程 专注于确保所有研究是高质量和高可用的。和工程代码不同,低质量的研究是不会产生指标下降或崩溃日志的。相反,低质量的研究表现为知识的环境嘈杂,而团队只能信任他们自己创建的研究。

为了避免这种现象的发生,我们将流程封装在工具里面,结合了工程上的代码评审和学术上的同行评议方法,保证我们的研究结果以一个startup的速度在推进。在代码评审的环节,我们检查代码的正确性、最佳实践和工具。在同行评议上,我们检查方法论的改进、现有工作的关联性以及准确的解释性声明。我们通常不指望一个研究是面面俱到的,但是也不能草率迭代,这些对他们都是有正确的和透明的限制的。我们能够驾驭内部的R和Python包并维护品牌调性、整合数据仓库的函数库、以及基于GitHub的R和Python笔记的文件处理流程。

图一 - 一个两篇文章的总结卡牌的知识流截图

图二 — 一篇房东同意接待的缺口天数的研究文章示例

这些工作为我们的智囊团提供了强大的功能。

  • 可重复性 — 这个工作从核心的ETL表查询到转化、可视化到整理文章都是在一个文件里完成的。通常是 Jupyter 笔记, RMarkdown, 或 markdown 文件。
  • 质量 — 通过学习GitHub来发表、审查以及版本控制直接推动了我们整个工作流。
  • 高可用 - markdown 将我们的 web-app 隐藏在代码之后并且我们使用了内部一致的美学风格,对非技术读者也更加友好。同行评审用评论也能提供反馈和交流并提高了项目的影响力。
  • 可得性 - 元数据的结构非常有利于通篇浏览历史研究。每个文章都有一组tag,并有一个类似于知乎话题的多对一的内置话题机制。用户可以订阅话题并且收到新消息提醒。文章可以以书签收藏、通过读者浏览或者在博客流中订阅。
  • 学习价值 - 通过之前一系列的工作,现在数据科学家可以分享自己的新方法论、代码技术并且加快品牌化推广,让团队之外的人可以快速了解自己的领域。

这个知识仓库囊括了海量的内容。大量的工作都是和某个非尝试性问题的深挖,但是对实验结果的检验没有被我们的实验记者记录也是很普遍的。此外也有一些纯粹关于如何扩展数据分析的文章,包括新方法论的撰写、工具或包的示例、使用SQL和Spark的教程等等。我们也在知识仓库上公开数据博客文章,当然也包括这一篇。总的来说,这个原则就是:如果这个东西将来可能对一些人有用就可以发。

未来

知识仓库仍然是个在建工程。小团队正在持续满足新需求特性。我们也在公司内部的其他团队推广这种方法,比如一些不使用GitHub的量化研究。最后,我们正在测试一个基于Markdown的内建审查编辑应用,这个应用另一个可能的特性是主编对研究议题的管理,我们也正在考虑现有文章的迁移问题。


本文作者:Harry Zhu

来源:51CTO

相关文章
|
1月前
|
SQL NoSQL Linux
『GitHub项目圈选11』推荐5款本周 深受开发人员青睐 的开源项目
『GitHub项目圈选11』推荐5款本周 深受开发人员青睐 的开源项目
|
6月前
|
自然语言处理 Java Go
项目总监必看:如何利用Git深度统计团队代码贡献?多语言实践教程揭秘!
项目总监必看:如何利用Git深度统计团队代码贡献?多语言实践教程揭秘!
158 0
|
5月前
|
数据采集 机器学习/深度学习 大数据
数据科学与数据治理项目全纪录
数据科学与数据治理项目全纪录
|
存储 编解码 前端开发
如何参与医疗软件开源项目
作为一名软件开发人员,我觉得我可以产生巨大的影响。在某种程度上,我觉得帮助一家披萨连锁店提高在线销售额或帮助抵押贷款机构提高利润率是一种浪费。随着 COVID-19 大流行的全面爆发,我想要帮助一个与我息息相关的项目。
|
机器学习/深度学习 自然语言处理 算法
月度十佳机器学习 Github 开源项目
十佳机器学习 Github 开源项目。
3029 0
|
监控 关系型数据库 MySQL