数据科学职业构建指南-全-

数据科学职业构建指南(全)

原文:Build a Career in Data Science

译者:飞龙

协议:CC BY-NC-SA 4.0

第一部分. 数据科学入门

图片

如果您在谷歌上搜索“如何成为一名数据科学家”,您可能会遇到一份长长的技能清单,从统计建模到用 Python 编程,再到有效沟通和制作演示文稿。一份工作描述可能描述的是一个接近统计学家角色的职位,而另一位雇主则寻找拥有计算机科学硕士学位的人。当您寻找获得这些技能的方法时,您会发现从回学校攻读硕士学位到参加训练营,再到开始在您当前的工作中开始数据分析的各种选择。将这些路径组合起来,可能会感觉难以逾越,尤其是对于那些还没有确定他们甚至是否想成为数据科学家的人来说。

好消息是,没有哪位数据科学家拥有所有这些技能。数据科学家们共享一个知识基础,但他们各自都有自己专长,以至于许多人无法互换工作。本书的第一部分旨在帮助您了解所有这些类型的数据科学家是什么,以及如何做出最佳决定来开始您的职业生涯。到这一部分结束时,您应该已经准备好所需的技能和理解,以便开始您的求职之旅。

第一章涵盖了数据科学的基础知识,包括您需要为这份工作准备的技能和不同类型的数据科学家。第二章详细介绍了数据科学家在五类公司中的角色,以帮助您更好地了解这份工作的样子。第三章涵盖了获得成为数据科学家所需技能的途径以及每种途径的优缺点。最后,第四章涵盖了如何创建数据科学项目组合,以获得实际进行数据科学工作的经验,并创建一份可以向潜在雇主展示的组合。

第一章. 什么是数据科学?

图片

本章涵盖

  • 数据科学的主要三个领域

  • 不同类型的数据科学工作

“21 世纪最性感的工作。” “美国最好的工作。”数据科学家,这个在 2008 年之前甚至不存在的头衔,现在成为了雇主难以招聘足够的人手,求职者都力争成为的职业。这种炒作有很好的理由:数据科学是一个快速增长的领域,2019 年在美国的中位基本工资超过 10 万美元 (mng.bz/XpMp)。在一家好公司,数据科学家享有很大的自主权,并且不断学习新事物。他们利用自己的技能来解决重大问题,例如与医生合作分析药物试验,帮助一支运动队挑选新球员,或者重新设计小工具业务的定价模式。最后,正如我们在第三章 chapter 3 中所讨论的,成为数据科学家没有唯一的方法。人们来自各行各业,因此你不会因为你在本科时选择了什么专业而受到限制。

但并非所有数据科学工作都是完美的。公司和求职者都可能有不切实际的期望。对于刚开始接触数据科学的公司来说,他们可能会认为一个人就能解决所有数据问题,例如。当最终聘请到数据科学家时,他们可能会面临一个永无止境的任务清单。他们可能被要求立即实施一个机器学习系统,而在此之前没有任何工作来准备或清理数据。可能没有人来指导或帮助他们,甚至没有人能理解他们所面临的问题。我们将在第五章 chapters 5 和第七章 7 中更深入地讨论这些问题,我们将帮助你避免加入那些可能不适合新数据科学家的公司,并在第九章 chapter 9 中建议你如果陷入不利局面应该怎么做。

从另一方面来看,求职者可能会认为他们的新职业生涯永远不会无聊。他们可能期望利益相关者会例行公事地遵循他们的建议,数据工程师可以立即解决任何数据质量问题,以及他们将获得最快的计算资源来实施他们的模型。然而,在现实中,数据科学家花大量时间清理和准备数据,以及管理其他团队的期望和优先事项。项目并不总是能顺利进行。高级管理层可能会向客户做出关于你的数据科学模型可以提供什么的非现实承诺。一个人的主要工作可能是与一个过时的数据系统打交道,这个系统无法自动化,每周需要花费数小时进行令人厌烦的工作,仅为了清理数据。数据科学家可能会在遗留分析中注意到许多统计或技术错误,这些错误有实际后果,但没有人感兴趣,他们工作负担过重,没有时间尝试修复它们。或者,数据科学家可能被要求准备支持高级管理层已经做出的决定的报告,因此他们可能会担心如果给出独立的答案就会被解雇。

这本书旨在引导你通过成为数据科学家和发展你职业生涯的过程。我们希望确保你,作为读者,能够获得成为数据科学家的大部分好处,并避免大多数陷阱。也许你正在从事相邻领域的工作,如市场营销分析,并想知道如何进行转换。或者,也许你已经是一名数据科学家,但你在寻找新工作时并不认为你的第一次求职搜索做得很好。或者,你希望通过在会议上发言、为开源项目做出贡献或成为独立顾问来进一步你的职业生涯。无论你的水平如何,我们相信你会发现这本书很有帮助。

在前四章中,我们涵盖了获得数据科学技能和建立个人作品集以克服需要经验才能获得经验这一悖论的主要机会。第二部分 展示了如何撰写一份能够获得面试机会的求职信和简历,以及如何建立你的网络以获得推荐。我们介绍了研究已经证明可以为你赢得最佳报价的谈判策略。

当你在数据科学领域工作时,你将需要编写分析报告,与利益相关者合作,甚至可能将模型投入生产。第三部分 帮助你了解所有这些流程看起来是什么样子,以及如何为自己设定成功的基础。在第四部分中,你将找到在项目不可避免地失败时如何重新振作的策略。当你准备好时,我们将在这里引导你通过决定将你的职业生涯引向何方:晋升为管理层,继续作为个人贡献者,或者甚至成为独立顾问。

在开始这段旅程之前,你需要清楚数据科学家是做什么的以及他们从事的工作。数据科学是一个涵盖许多类型工作的广泛领域,你对这些领域之间的差异理解得越好,你在这些领域的发展就会越好。

1.1. 什么是数据科学?

数据科学是使用数据尝试理解和解决现实世界问题的实践。这个概念并不是全新的;自从零的发明以来,人们一直在分析销售数据和趋势。然而,在过去十年中,我们获得了比以前指数级更多的数据。计算机的出现有助于生成所有这些数据,但计算也是我们处理大量信息的唯一方式。通过计算机代码,数据科学家可以转换或汇总数据,进行统计分析,或训练机器学习模型。这些代码的输出可能是供人类消费的报告或仪表板,或者可能是将被部署以持续运行的机器学习模型。

如果一家零售公司难以决定在哪里开设新店,例如,它可能会请一位数据科学家来进行分析。数据科学家可以查看历史数据,了解在线订单发送到的地点,从而了解客户需求。他们还可能将客户位置数据与来自人口普查记录的当地人口和收入信息相结合。有了这些数据集,他们可以找到新店的最佳位置,并创建一个 Microsoft PowerPoint 演示文稿,向公司的零售运营副总裁提出他们的建议。

在另一种情况下,同一家零售公司可能希望通过向客户推荐商品来增加在线订单的规模。数据科学家可以加载历史网络订单数据,创建一个机器学习模型,该模型可以预测在购物车中当前商品的最佳推荐商品。创建该模型后,数据科学家将与公司的工程团队合作,确保每次客户购物时,新的机器学习模型都能提供推荐的商品。

当许多人开始研究数据科学时,他们面临的一个挑战是感到需要学习的东西太多,比如编码(但应该学习哪种语言?)、统计学(但在实践中哪些方法最重要,哪些主要属于学术领域?)、机器学习(机器学习与统计学或 AI 有何不同?)以及他们想要工作的行业领域的专业知识(如果你不知道你想在哪里工作怎么办?)。此外,他们还需要学习商业技能,比如如何有效地向从其他数据科学家到 CEO 的各种受众传达结果。这种焦虑可能会因招聘启事中要求拥有博士学位、多年的数据科学经验和一系列统计和编程方法的专长而加剧。你如何可能学会所有这些技能?你应该从哪个开始?基础是什么?

如果你已经研究过数据科学的各个领域,你可能对 Drew Conway 的流行数据科学 Venn 图很熟悉。在 Conway 绘制该图时(当时),数据科学被认为是数学和统计知识、领域专业知识和黑客技能(即编程)的交集。这张图常被用作定义数据科学家是什么的基石。从我们的角度来看,数据科学的组成部分与他提出的略有不同(图 1.1)。

图 1.1. 构成数据科学技能及其如何组合形成不同角色的技能

图 1.1

我们将 Conway 原始的 Venn 图改成了三角形,因为并不是说你要么有这项技能,要么没有;而是你可能拥有这项技能的程度与其他领域的人不同。虽然确实所有三种技能都是基本的,并且你需要达到一定的程度,但你不需要在所有这些技能上都是专家。我们在三角形内放置了不同类型的数据科学专业。这些专业不一定总是与职位名称一一对应,即使它们确实对应,不同的公司有时也会称它们为不同的名称。

那么,这些组成部分各自意味着什么呢?

1.1.1. 数学/统计学

在基本层面上,数学和统计知识是数据素养。我们将这种素养分解为三个知识层级:

  • 技术存在—— 如果你不知道某件事是可能的,你就无法使用它。如果一个数据科学家试图将相似的客户分组,知道统计方法(称为聚类)可以做到这一点将是第一步。

  • 如何应用这些技术—— 尽管数据科学家可能了解许多技术,但他们也需要能够理解应用这些技术的复杂性——不仅要知道如何编写代码来应用这些方法,还要知道如何配置它们。如果数据科学家想使用如k-均值聚类这样的方法来分组客户,他们就需要了解如何在 R 或 Python 这样的编程语言中实现k-均值聚类。他们还需要了解如何调整方法的参数,例如,通过选择要创建多少组。

  • 如何选择尝试哪些技术—— 由于在数据科学中可以使用许多可能的技术,因此对于数据科学家来说,能够快速评估一种技术是否能够很好地工作非常重要。在我们的客户分组示例中,即使数据科学家专注于聚类,他们仍然需要考虑几十种不同的方法和算法。与其尝试每种方法,他们需要能够快速排除方法,并专注于少数几种。

这些技能在数据科学角色中经常被使用。考虑一个不同的例子,假设你在一家电子商务公司工作。你的业务伙伴可能对哪些国家的平均订单价值最高感兴趣。如果你有可用数据,这个问题很容易回答。但与其只是展示这些信息并让客户自己得出结论,你可以深入挖掘。如果你从国家 A 有一个订单价值 100 美元,而从国家 B 有 1000 个订单,平均价值为 75 美元,那么国家 A 的平均订单价值更高是正确的。但你是否确信这意味着你的业务伙伴应该肯定投资于国家 A 的广告以增加订单数量?可能不会。你只有国家 A 的一个数据点,可能它是一个异常值。如果国家 A 有 500 个订单,你可能会使用统计测试来查看订单价值是否显著不同,这意味着如果在这个指标上 A 和 B 之间真的没有差异,你不太可能看到你所看到的差异。在这个一段长的例子中,对哪些方法合理、应该考虑什么以及哪些结果被认为不重要进行了许多不同的评估。

1.1.2. 数据库/编程

编程和数据库指的是从公司数据库中提取数据以及编写干净、高效、可维护的代码的能力。这些技能在很多方面与软件开发者需要了解的知识相似,但数据科学家需要编写进行开放式分析而不是产生预定义输出的代码。每个公司的数据堆栈都是独特的,因此对于数据科学家来说,不需要一套特定的技术技能。但总的来说,你需要知道如何从数据库中获取数据以及如何清理、操作、总结、可视化和共享数据。

在大多数数据科学工作中,R 或 Python 是主要语言。R 是一种起源于统计学的编程语言,因此它在统计分析、建模、可视化和生成带有结果的报告方面通常表现最强。Python 是一种最初作为通用软件开发语言开始的编程语言,并在数据科学中变得非常流行。Python 因其能够更好地处理大型数据集、进行机器学习和支持实时算法(如亚马逊的推荐引擎)而闻名。但多亏了许多贡献者的工作,这两种语言的性能现在几乎相当。数据科学家正在成功使用 R 来构建每周运行数百万次的机器学习模型,他们也在 Python 中制作整洁、易于展示的统计分析。

R 和 Python 之所以成为数据科学中最受欢迎的语言,有几个原因:

  • 它们是免费和开源的,这意味着许多人,而不仅仅是单一的公司或团体,都会贡献你可以使用的代码。它们拥有许多用于数据收集、操作、可视化、统计分析和学习机器学习的包或(代码集)。

  • 重要的是,由于每种语言都有如此庞大的追随者群体,当数据科学家遇到问题时很容易找到帮助。尽管一些公司仍然使用 SAS、SPSS、STATA、MATLAB 或其他付费程序,但许多公司正开始转向 R 或 Python。

尽管大多数数据科学分析都是在 R 或 Python 中进行的,但你通常需要与数据库合作以获取数据。这就是 SQL 语言发挥作用的地方。SQL 是大多数数据库用来在数据库内部操作数据或提取数据的编程语言。考虑一位想要分析公司数亿条客户订单记录的数据科学家,以预测每天订单的变化。首先,他们可能会编写一个 SQL 查询来获取每天订单的数量。然后,他们会使用这些每日订单计数在 R 或 Python 中进行统计预测。因此,SQL 在数据科学社区中非常受欢迎,不了解它很难取得太大进展。

另一项核心技能是使用版本控制——一种跟踪代码随时间变化的方法。版本控制允许你存储文件;将它们回滚到之前的时间点;并查看谁更改了哪些文件,如何更改,以及何时更改。这项技能对于数据科学和软件工程至关重要,因为如果有人意外更改了导致你的代码崩溃的文件,你希望有回滚或查看更改的能力。

Git 是迄今为止最常用的版本控制系统,通常与基于网络的 Git 代码托管服务 GitHub 一起使用。Git 允许你保存(提交)你的更改,同时查看项目的整个历史记录以及每次提交后的变化。如果两个人分别在不同的文件上工作,Git 确保不会有人不小心删除或覆盖他人的工作。在许多公司,尤其是那些拥有强大工程团队的公司,如果你想共享你的代码或将某些内容投入生产,你将需要使用 Git。

没有编程,你能成为数据科学家吗?

只使用 Excel、Tableau 或其他具有图形界面的商业智能工具,就可以完成大量数据工作。虽然你不需要编写代码,但这些工具声称具有与 R 或 Python 等语言类似的许多功能,许多数据科学家有时也会使用它们。但它们能成为完整的数据科学工具包吗?我们说不。实际上,很少有公司拥有一个不需要编程的数据科学团队。即使情况不是这样,编程也有优于使用这些工具的优势。

编程的第一个优势是可重复性。当你编写代码而不是使用点击式软件时,你可以在数据变化时随时重新运行它,无论是每天还是六个月后。这个优势也与版本控制相关:在你每次更改代码时,你不需要重命名文件,你可以保持一个文件,但查看其整个历史记录。

第二个优势是灵活性。例如,如果 Tableau 没有可用的图形类型,你将无法创建它。但通过编程,你可以编写自己的代码来创建工具的创建者和维护者从未想过的事情。

Python 和 R 等开源语言的第三个也是最后一个优势是社区贡献。数千人创建 ,并将它们公开发布在 GitHub 和/或 CRAN(对于 R)以及 pip(对于 Python)上。你可以下载这些代码,并用于解决你自己的问题。你不需要依赖一家公司或一组人添加功能。

1.1.3. 业务理解

任何足够先进的技术都与魔法无法区分。

亚瑟·C·克拉克

说到数据科学的工作方式,企业对数据科学的理解各不相同。通常,管理层只是想要完成某事,并转向其数据科学独角兽来实现这一目标。数据科学的核心技能之一是知道如何将业务情况转化为数据问题,找到数据答案,并最终提供业务答案。例如,一个商人可能会问:“为什么我们的客户在离开?”但并没有“为什么客户离开”的 Python 包可以导入——你需要自己推断如何用数据来回答这个问题。

商业理解是您的数据科学理念与现实世界的实际需求相结合的地方。仅仅想要特定的信息,而不了解数据在你所在公司是如何存储和更新的,是不够的。如果你的公司是一个订阅服务,数据在哪里?如果有人更改了他们的订阅,会发生什么?那个订阅者的行会被更新,还是会在表中添加另一行?你是否需要处理数据中的任何错误或不一致?如果你不知道这些问题的答案,你将无法对像“2019 年 3 月 2 日我们有多少订阅者?”这样的基本问题给出准确的答案。

商业理解还帮助你了解应该提出哪些问题。当利益相关者问“我们接下来应该做什么?”时,这有点像被问“我们为什么没有更多的钱?”这样的问题。这类问题需要更多的问题。对核心业务(以及涉及的个性)的理解可以帮助你更好地分析情况。你可能还会跟进问“你希望得到关于哪个产品线的指导?”或者“你希望看到我们某个受众群体有更多的参与吗?”

商业理解的另一个方面是培养一般商业技能,例如能够根据不同的受众调整你的演示和报告。有时,你会在一个充满统计学博士的房间里讨论更好的方法论,有时你会在一个 20 年前没有上过数学课的副总裁面前。你需要向你的听众传达信息,既不要轻视他们,也不要过于复杂化。

最后,随着你变得更加资深,你的工作的一部分是确定业务可以从数据科学中获得哪些好处。如果你一直想为你的公司建立一个预测系统,但从未得到管理层的支持,成为管理层的一部分可以帮助解决这个问题。高级数据科学家会寻找可以实施机器学习的地方,因为他们了解其局限性和能力,以及哪些类型的任务会从自动化中受益。

数据科学会消失吗?

在关于数据科学是否会在十年或二十年后仍然存在的疑问背后,有两个主要担忧:工作可能会自动化,以及数据科学被过度炒作,就业市场泡沫可能会破裂。

诚然,数据科学流程的某些部分可以自动化。自动机器学习(AutoML)可以比较不同模型的表现,并执行某些数据准备的部分(例如缩放变量)。但这些任务只是数据科学过程中的一个小部分。你通常需要自己创建数据,例如;几乎很少有一开始就完美干净的数据等待你使用。此外,创建数据通常需要与其他人交谈,例如用户体验研究人员或工程师,他们将进行调查或记录可以驱动你分析的用户行为。

关于就业市场泡沫爆发的可能性,一个很好的比较是 20 世纪 80 年代的软件工程。随着计算机变得更便宜、更快、更普遍,人们担心很快计算机就能做任何事情,程序员将不再需要。但相反的情况发生了,现在美国有超过 120 万软件工程师(mng.bz/MOPo)。尽管像网站管理员这样的头衔消失了,但从事网站开发、维护和改进工作的人比以往任何时候都多。

我们相信数据科学将会有更多的专业化,这可能会导致通用头衔数据科学家的消失,但许多公司仍处于学习如何利用数据科学的早期阶段,还有很多工作要做。

1.2. 数据科学的不同类型职位

你可以将数据科学(在第 1.1 节中介绍)的三个核心技能混合搭配到多个职位中,所有这些职位都有一定的理由被称为数据科学家。从我们的角度来看,这些技能主要通过以下三种方式混合在一起:分析学、机器学习以及决策科学。这些领域各自为公司服务不同的目的,并且从根本上提供不同的事物。

在寻找数据科学职位时,你应该更多地关注职位描述和面试中的要求,而不是职位名称。看看数据科学角色的背景,例如他们之前的工作和学位。你可能会发现,从事类似工作的人可能有完全不同的职位,或者拥有相同数据科学家头衔的人可能做着完全不同的事情。正如我们在本书中讨论不同类型的数据科学职位时所说,请记住,公司实际使用的职位名称可能会有所不同。

1.2.1. 分析学

一个分析师将数据呈现给合适的人。在公司设定了年度目标后,你可能会将这些目标放在仪表板上,以便管理层可以每周跟踪进度。你也可以添加一些功能,让经理们能够轻松地按国家或产品类型分解数字。这项工作涉及大量的数据清洗和准备,但通常在解释数据方面的工作较少。虽然你应该能够发现并修复数据质量问题,但使用这些数据的决策主要是由业务伙伴做出的。因此,分析师的职责是从公司内部获取数据,有效地格式化和整理它,然后将这些数据交付给其他人。

由于分析师的角色不涉及很多统计学和机器学习,有些人和企业可能会认为这个角色不属于数据科学领域。但大部分工作,例如设计有意义的可视化以及决定特定的数据转换,都需要与其他类型的数据科学角色中使用的相同技能。分析师可能会被分配一个任务,例如“创建一个自动仪表板,显示我们的订阅者数量随时间的变化,并允许我们过滤数据,仅显示特定产品或特定地理区域的订阅者。”分析师必须在公司内找到适当的数据,想出如何适当地转换数据(例如,将每日新订阅转换为每周新订阅),然后创建一组有意义的仪表板,这些仪表板视觉上吸引人,并且每天自动更新,不会出错。

简短规则:分析师创建的是 提供数据的仪表板和报告

1.2.2. 机器学习

一位 机器学习工程师 开发机器学习模型并将它们投入生产,在那里它们会持续运行。他们可能会优化电子商务网站搜索结果的排名算法,创建一个推荐系统,或者监控生产中的模型以确保其性能自部署以来没有下降。机器学习工程师在创建能够说服人们相信某事的可视化方面花费的时间较少,而在数据科学编程工作上花费的时间更多。

与其他类型的数据科学职位相比,这个角色的一个重大区别是,工作输出主要是为机器消费的。例如,你可能会创建被转换成其他机器的应用程序编程接口(API)的机器学习模型。在许多方面,你将比其他数据科学角色更接近软件开发者。尽管任何数据科学家遵循最佳编码实践都是有益的,但作为机器学习工程师,你必须这样做。你的代码必须高效、经过测试,并且编写得让其他人能够与之协作。因此,许多机器学习工程师来自计算机科学背景。

在机器学习工程师的角色中,一个人可能会被要求创建一个机器学习模型,该模型能够实时预测网站上客户实际完成订单的概率。机器学习工程师必须在公司找到历史数据,在它上面训练一个机器学习模型,将该模型转换为 API,然后部署该 API,以便网站可以运行该模型。如果该模型因某种原因停止工作,机器学习工程师将被要求修复它。

简短规则:机器学习工程师创建的是 持续运行的模型

1.2.3. 决策科学

决策科学家将公司的原始数据转化为帮助公司做出决策的信息。这项工作依赖于对不同数学和统计方法的深入理解以及对企业决策的熟悉。此外,决策科学家必须能够制作引人注目的视觉化和表格,以便他们与之交谈的非技术人员能够理解他们的分析。尽管决策科学家做了很多编程工作,但他们的工作通常只运行一次以进行特定分析,因此他们可以容忍代码的低效或难以维护。

决策科学家必须了解公司内部其他人的需求,并找出如何生成建设性的信息。例如,营销总监可能会要求决策科学家帮助他们决定在公司的假日礼品指南中应该突出哪些类型的产品。决策科学家可能会调查哪些产品在没有被突出展示在礼品指南中时销售良好,与用户研究团队讨论进行调查,并使用行为科学原理进行分析,以提出最佳建议的项目。结果可能是一个 PowerPoint 演示文稿或报告,用于与产品经理、副总裁和其他商业人士分享。

决策科学家经常利用他们对统计学的了解来帮助公司在不确定性下做出决策。例如,决策科学家可能负责运行他们公司的实验分析系统。许多公司运行在线实验,或 A/B 测试,以衡量一个变化是否有效。这种变化可能只是添加一个新按钮,也可能像改变搜索结果的排名系统或完全重新设计一个页面那样复杂。在 A/B 测试期间,访客被随机分配到两个或更多条件之一,例如一半访客分配到旧版主页,即控制组,另一半分配到新版本,即处理组。然后比较访客进入实验后的行为,以查看处理组中执行期望行为的比率是否更高,例如购买产品。

由于随机性,控制组和处理组中的指标完全相同的情况很少见。假设你抛了两枚硬币,一枚有 52 次出现正面,另一枚有 49 次出现正面。你会得出第一枚硬币更有可能出现正面的结论吗?当然不会!但一个商业伙伴可能会看到一项实验,看到转化率在控制组是 5.4%,在处理组是 5.6%,并宣布处理组是成功的。决策科学家在那里是为了帮助解释数据,执行实验设计的最佳实践,等等。

简短规则:决策科学家创建的分析会产生推荐

1.2.4. 相关职位

尽管前面几节讨论的三个领域是数据科学职位的主要类型,但你可能会看到一些其他独特的角色,这些角色并不属于这些类别。我们在这里列出这些工作,因为了解现有的职位是好事,因为你可能需要与这些职位上的同事合作。话虽如此,如果你对其中任何一个角色感兴趣,这本书中的材料可能对你来说不那么相关。

商业智能分析师

商业智能分析师的工作与分析师的工作类似,但他们通常使用的统计和编程专业知识较少。他们可能选择 Excel 而不是 Python 作为工具,并且他们可能永远不会制作统计模型。尽管他们的工作职能与分析师相似,但由于工具和技术限制,他们创建的输出较为简单。

如果你想要从事机器学习或编程,或者应用统计方法,商业智能分析师的职位可能会非常令人沮丧,因为这样的职位不会帮助你获得新技能。此外,这些工作的薪水通常低于数据科学工作,并且被认为不那么有威望。但是,商业智能分析师的工作可以是一个很好的入门点,特别是如果你之前没有在商业环境中处理过数据。如果你想从商业智能分析师开始,并成长为数据科学家,寻找那些你可以学习一些可能没有掌握的技能的职位,比如用 R 或 Python 进行编程。

数据工程师

数据工程师专注于保持数据库中的数据维护,并确保人们能够获取他们所需的数据。他们不运行报告,进行分析或开发模型;相反,他们保持数据整洁地存储和格式化在结构良好的数据库中,以便其他人可以进行这些操作。数据工程师可能负责维护大型云数据库中的所有客户记录,并根据要求向该数据库添加新表。

数据工程师与数据科学家有很大不同,他们更为罕见且需求更高。数据工程师可能帮助构建公司内部实验系统的数据后端组件,并在作业开始运行时间过长时更新数据处理流程。其他数据工程师开发和监控批处理和流式环境,从数据收集到处理再到数据存储进行管理。

如果你对数据工程感兴趣,你需要强大的计算机科学技能;许多数据工程师曾是软件工程师。

研究科学家

一位研究科学家开发和实施新的工具、算法和方法,通常供公司内的其他数据科学家使用。这类职位几乎总是需要博士学位,通常在计算机科学、统计学、定量社会科学或相关领域。研究科学家可能会花费数周时间研究和尝试方法来提高在线实验的效力,比如在自动驾驶汽车中提高图像识别的 1%准确性,或者构建一个新的深度学习算法。他们甚至可能会花时间撰写可能很少在公司内部使用但有助于提升公司声望(理想情况下)并推进该领域的研究论文。由于这些职位需要非常具体的背景,所以我们在这本书中不重点介绍它们。

1.3. 选择你的道路

在第三章中,我们讨论了获得数据科学技能的一些选择,每个选择的利弊,以及一些在选择它们时的建议。在这个时候,开始反思你想要专攻的数据科学领域是很好的。你已经在哪个领域有经验?我们见过前工程师、心理学教授、市场营销经理、统计学学生和社会工作者成为数据科学家。很多时候,你在其他工作和学术领域获得的知识可以帮助你成为一个更好的数据科学家。如果你已经在数据科学领域,现在反思一下你处于三角形的哪个部分。你对它满意吗?你想转到一个不同类型的数据科学工作吗?转型通常是可行的。

Vicki Boykis:任何人都能成为数据科学家吗?

在数据科学周围的所有乐观情绪(以及新闻文章中列出的高薪)中,很容易看出为什么它提供了吸引人的职业机会,尤其是随着数据科学职位名称的范围和范围持续扩大。但对于这个领域的新进入者来说,重要的是要有一个现实、细致的观点,了解数据科学市场在未来几年将走向何方,并据此进行调整。

当前影响数据科学领域的有几个趋势。首先,数据科学作为一个领域已经存在了十年,因此已经走过了炒作周期的早期阶段:大众媒体炒作、早期采用和整合。它被过度炒作,在媒体上被广泛讨论,被硅谷公司以及其他公司采用,而现在我们正处于大型公司高增长采用阶段,以及像 Spark 和 AutoML 这样的数据科学工作流程工具集的标准化。

其次,因此,新数据科学家的供应过剩,他们来自训练营、大学中新设立的数据科学项目或在线课程。任何特定数据科学职位的候选人数量,尤其是在入门级,已经从每个职位 20 人左右增长到 100 人或更多。现在看到每个空缺职位有 500 份简历已不再罕见。

第三,工具集的标准化、劳动力的充足供应以及对在该领域有更多经验的人的需求,意味着数据科学职位名称的分配方式发生了变化,以及数据科学职位和描述的等级制度的形成。例如,在一些公司,“数据科学家”可能意味着创建模型,但在一些公司则意味着主要运行 SQL 分析,这与数据分析师的职位名称过去所代表的工作相当。

这对那些想要进入数据科学领域的新手来说意味着几件事情。首先也是最重要的一点,他们可能会发现就业市场极其竞争激烈且人满为患,尤其是对于那些对整个行业(如大学毕业生)来说是新手,或者是从其他行业转行过来,与成千上万的类似候选人竞争的人。其次,他们可能会申请的工作并不真正反映数据科学,正如博客文章和流行媒体所描述的那样——仅仅是编写和实施算法。

考虑到这些趋势,了解这一点很重要,那就是可能很难在最初从一堆简历中脱颖而出,进入最终的面试环节。尽管你在本书中读到的策略可能看起来工作量很大,但它们将帮助你脱颖而出,这在新的、竞争激烈的数据科学环境中是必要的。

1.4. 与 Airbnb 数据科学家罗伯特·张的访谈

罗伯特·张(Robert Chang)是 Airbnb 的数据科学家,在那里他从事 Airbnb Plus 产品的相关工作。他之前在 Twitter 工作,在那里他负责增长团队,进行产品分析、创建数据管道、运行实验和创建模型。你可以在medium.com/@rchang找到他的数据工程博客文章、他对新和有抱负的数据科学家的建议以及他在 Airbnb 和 Twitter 的工作。

你的第一次数据科学之旅是怎样的?

我的第一份工作是担任《华盛顿邮报》(The Washington Post)的数据科学家。回想起 2012 年,我准备离开学术界进入工业界,但我不确定自己想要做什么。我希望成为一名数据可视化科学家,因为我被《纽约时报》(The New York Times)的工作所打动。当我参加学校的职业博览会,看到《华盛顿邮报》正在招聘时,虽然我天真无邪,但我只是想当然地认为他们肯定在做与《纽约时报》类似的事情。我申请了,并且得到了这份工作,没有做更多的尽职调查。

如果你想要一个不如何开始数据科学职业生涯的例子,我肯定会自告奋勇!我得到这份工作希望做数据可视化或建模,但很快我就意识到我的工作更像是数据工程师。我大部分的工作是构建 ETL(提取、转换、加载)管道,重新运行 SQL 脚本,并确保报告能够运行以便我们可以向高管报告顶级指标。这在当时非常痛苦;我意识到我所想要做的事情与公司真正需要的不一致,最终我离开了这份工作。

但在我随后的几年里在 Twitter 和 Airbnb 工作期间,我意识到我所看到的是常态而不是例外。当你正在构建数据能力时,你必须一层层地构建。Monica Rogati 写过一篇著名的博客文章,关于数据科学需求层次结构,这非常准确(mng.bz/ad0o)。但当时,我太新了,无法真正欣赏到真实、现场的数据科学工作是如何进行的。

人们应该在一个数据科学职位中寻找什么?

如果你正在寻找数据科学职位,你应该关注公司的数据基础设施状况。如果你加入一个只有大量未存储在数据仓库中的原始数据的公司,可能需要几个月甚至几年才能达到可以进行有趣的分析、实验或机器学习的程度。如果你不期望做这些,那么你与公司阶段和你的组织贡献意愿之间将存在根本的不一致。

要评估这一点,你可以提出类似的问题:“你们有数据基础设施团队吗?他们存在了多久?数据栈是什么?你们有数据工程团队吗?他们如何与数据科学家合作?当你正在构建新产品时,你们有对日志进行仪表化、构建数据表并将它们放入数据仓库的流程吗?”如果这些都没有,你将成为负责构建这些的团队的一员,你应该预期会在这上面花费相当多的时间。

第二件事是要寻找的是人。你应该关注三种类型的人。假设你不想成为第一个数据科学家,你希望加入一个有经验领导者的数据科学组织。有经验的领导者知道如何构建和维护良好的基础设施和工作流程,以便数据科学家能够高效工作。其次,寻找一个支持持续学习的经理。最后,当你刚开始工作时,与一个非常实际的科技负责人或高级数据科学家合作非常重要。对于你的日常工作来说,这个人会给你最大的帮助。

成为数据科学家需要哪些技能?

我认为这取决于你在寻找什么样的工作以及雇主设定的标准。一般来说,顶级公司有很高的标准,有时是不合理的,因为很多人试图加入公司。他们通常在寻找独角兽——这样的人既有 R 或 Python 的数据处理技能,又有构建 ETL 管道、数据工程、实验设计和构建模型并将其投入生产的经验。这给候选人带来了很大的压力!虽然这些都是你可以最终学习并且可能对你解决任何问题都有用的技能,但我认为它们进入数据科学领域并不是必需的。

如果你懂 R 或 Python 以及一点 SQL,你已经处于一个相当不错的位置进入数据科学领域。如果你能通过提前学习更多东西来规划你的职业生涯,那总是有帮助的,但我认为那不是必需的。对学习的热爱更为重要。如果你试图被顶级科技公司雇佣,你需要更多一点,但这更多的是为了信号效应,而不是你真正在工作中需要的东西。区分你在数据科学职业生涯开始时需要的核心技能和如果你想进入一个竞争激烈的品牌公司所希望拥有的其他技能是有帮助的。

摘要

  • 数据科学技能组合因人和职位而异。尽管一些知识是基本的,但数据科学家不需要在每个相关领域都是专家。

  • 数据科学工作有不同的关注领域:将正确、清洗过的数据放在利益相关者面前(分析);将机器学习模型投入生产(机器学习);以及使用数据做出决策(决策科学)。

第二章 数据科学公司

图片

本章涵盖

  • 招聘数据科学家的公司类型

  • 每种公司类型的优缺点

  • 你可能在不同的工作中看到的科技栈

如第一章所述,数据科学是一个广泛的领域,有很多不同的角色:研究科学家、机器学习工程师、商业智能分析师等等。尽管你作为数据科学家所做的工作取决于你的角色,但它同样受到你所在公司的影响。大公司与小公司、科技与传统行业、新兴与成熟可以影响项目焦点、支持技术和团队文化。通过了解一些公司原型,当你寻找工作地点时,无论是你的第一份数据科学工作还是第 n 份工作,你都会准备得更好。

本章的目标是让您了解一些典型的公司日常工作的情况。我们将介绍五家虚构的公司,这些公司雇佣数据科学家。这些公司都不是真实的,但它们都基于研究和我们自己的工作经验,并且它们展示了可以广泛应用的的基本原则。尽管没有两家公司完全相同,但了解这五种典型模式应该有助于您评估潜在的雇主。

尽管这些刻板印象是基于我们在这些行业看到的趋势,但它们当然不是绝对的。您可能会发现一家完全打破我们这里所说的模式的公司——或者公司中一个与公司本身截然不同的特定团队。

尽管本章中的公司是虚构的,但您将看到的所有摘要都是由在真实公司工作的真实数据科学家撰写的!

2.1. MTC:大型科技公司

  • 类似于:谷歌、Facebook 和微软

  • 公司成立时间:20 年

  • 员工人数:80,000

MTC 是一家拥有巨大影响力的科技公司,销售云服务、消费者生产力软件(如文本编辑器)、服务器硬件以及无数一次性商业解决方案。该公司积累了大量财富,并用它来资助非同寻常的研究和开发(R&D)项目,如自动驾驶滑板车和虚拟现实(VR)技术。他们的研发项目经常成为新闻头条,但技术工作团队的大多数成员都是工程师,他们在现有产品上进行渐进式改进,增加更多功能,改进用户界面,并推出新版本。

2.1.1. 您的团队:MTC 中的众多团队之一

MTC 拥有近千名数据科学家,遍布公司各个部门。这些数据科学家主要分为团队,每个团队支持不同的产品或部门,或者个别地被安置在非数据科学团队中,以全面支持该团队。例如,有一个团队的数据科学家专注于 VR 头戴设备,第二个团队的数据科学家专注于市场营销,第三个团队的数据科学家专注于 VR 头戴设备和市场营销,而 VR 头戴设备供应链团队也有自己的数据科学家。

如果您是这些数据科学团队的一员,当您加入时,您将很快完成入职。大型组织每天都会雇佣新员工,因此公司应该有标准流程来为您提供笔记本电脑和访问数据的权限,以及培训您如何使用任何特殊工具。在团队中,您将负责为您特定的关注领域进行数据科学工作。这个领域可能包括创建报告和图表,供高管使用以证明项目的资金合理性。它也可能包括构建机器学习模型,这些模型将被转交给软件开发人员投入生产。

你们团队可能规模庞大,成员经验丰富。由于 MTC 是一家大型、成功的科技公司,它拥有广泛的足迹,可以吸引许多优秀的招聘对象。你们的团队规模庞大,因此团队内部的人可能在进行几乎无关的任务;例如,一个人可能在使用 R 为一位主管进行探索性分析,而另一个人可能为姐妹团队在 Python 中构建机器学习模型。团队的规模既是祝福也是诅咒:你们有一大批专家数据科学家可以讨论想法,但他们中大多数人可能对你正在从事的特定任务不熟悉。此外,你们团队有一个既定的等级制度。职位更高的人因为他们在该领域的经验更丰富,以及与 MTC 不同部门打交道经验更丰富,所以更容易被听取意见。

你们团队所做的工作可能是一个健康的平衡,既要保证公司运营,例如制作月度报告和提供季度机器学习模型更新,也要进行新的项目,比如创建一个前所未有的预测。团队的经理需要在满足其他团队对数据科学工作的短期需求,以及进行创新但未提出要求的可能带来长期利益的工作之间取得平衡。凭借 MTC 的大量现金储备,公司能够承担比其他公司更多的创新和研发工作,这一点也体现在愿意尝试有趣的新数据科学项目上。

2.1.2. 技术:先进,但公司内部各自为政

MTC 是一个庞大的组织,对于如此规模的组织来说,在整个公司使用不同类型的科技是不可避免的。一个部门可能将订单和客户数据存储在 Microsoft SQL Server 数据库中;另一个部门可能使用 Apache Hive 来保存记录。更糟糕的是,不仅存储数据的技术是分离的,而且数据本身也可能是分离的。一个部门可能按电话号码索引客户记录;而另一个部门可能使用电子邮件地址来索引客户。

大多数与 MTC 规模相当的公司都有自己的定制技术栈。因此,作为 MTC 的数据科学家,你必须学习特定于 MTC 的查询和使用数据的具体方法。学习这些专业工具对于在 MTC 内部获得更多权限大有裨益,但你获得的知识无法转移到其他公司。

作为数据科学家,你可能会使用几种可能的工具。由于 MTC 规模庞大,它为 R 和 Python 等主要语言提供了大量支持,许多人都在使用这些语言。一些团队也可能使用 SAS 或 SPSS 等付费语言,但这种情况较为罕见。如果你想使用你喜欢的但其他人很少使用的非主流语言,比如 Haskell,你是否能够使用取决于你的经理。

机器学习栈根据你在公司中的不同部分而有很大差异。一些团队使用微服务和容器来高效地部署模型,而其他团队则拥有过时的生产系统。用于部署软件的技术栈多样性使得连接到其他团队的 API 变得困难;没有中央位置可以了解和学习正在发生的事情。

2.1.3. MTC 的优缺点

在 MTC 担任数据科学家意味着在一家令人印象深刻的公司拥有一份令人印象深刻的工作。因为 MTC 是一家科技公司,人们知道数据科学家是做什么的以及你能做哪些有益的事情。对你角色的普遍理解使得工作变得容易得多。公司中数据科学家的数量众多意味着,如果你遇到困难,你可以依赖一个庞大的支持网络,以及顺畅的公司加入流程和获取所需资源的途径。你很少会发现自己孤立无援。

周围有很多数据科学家也有缺点。技术栈复杂且难以导航,因为很多人以多种方式构建了它。你可能被要求重新创建的分析可能是由一个不再在身边的人用你不知道的语言编写的。由于周围有那么多其他数据科学家,你可能会发现很难脱颖而出并引起注意。而且,你可能发现很难找到一个有趣的项目来工作,因为许多明显的项目已经被其他人启动。

因为 MTC 是一家成立已久的公司,在那里工作能给你带来更多的职业保障。虽然裁员的风险始终存在,但为 MTC 工作并不像在初创公司工作,那里的资金可能随时会枯竭。此外,在大公司中,管理者更倾向于为某人寻找新的团队而不是解雇他们;解雇会引发各种法律复杂问题,需要为终止决定提供彻底的支持。

MTC 的一个既是优点又是缺点的是,人们在公司内部担任许多专业化的角色。数据工程师、数据架构师、数据科学家、市场研究人员等等,都执行与数据科学相关的不同角色,这意味着你会有很多人可以移交工作。例如,你不太可能被迫创建自己的数据库。这种情况对于移交超出你专业范围的工作来说很棒,但也意味着你不能扩展你的技能。

MTC 的另一个缺点是官僚主义。在大公司中,为了获得对新技术、参加会议和启动项目等的批准,可能需要走很长的命令链。更糟糕的是,你多年来一直在努力的项目可能会因为两位高管之间的争斗而被取消,你的项目成为附带损害。

MTC 是一家非常适合数据科学家的大公司,他们希望通过使用尖端技术来解决大问题——无论是希望进行分析的决策科学家,还是希望构建和部署模型的机器学习工程师。大型公司有许多问题需要解决,并且有预算来尝试新事物。你可能无法自己做出重大决策,但你会知道你已经做出了贡献。

对于希望成为决策者并掌控全局的数据科学家来说,MTC 不是一个好的选择。这家大型公司已经建立了必须遵循的方法、协议和结构。

2.2. HandbagLOVE:一家成熟的零售商

图片

  • 类似于:Payless,Bed Bath & Beyond,和 Best Buy

  • 公司年龄:45 年

  • 规模:15,000 名员工(10,000 名在零售店,5,000 名在总部)

HandbagLOVE 是一家遍布美国 250 个地点的零售连锁店,所有门店都销售手提包和钱包。该公司历史悠久,拥有众多专家,他们精通如何布置商店和提升客户体验。该公司在采用新技术方面一直比较缓慢,在拥有第一个网站和第一个应用程序之前,花费了很长时间。

最近,HandbagLOVE 的销售量有所下降,因为亚马逊和其他在线零售商蚕食了其市场份额。意识到形势不妙,HandbagLOVE 一直在寻求通过技术来改善状况,投资了在线应用程序和亚马逊 Alexa 技能,并试图利用其数据的价值。HandbagLOVE 已经聘请了财务分析师多年,他们计算了其订单和客户的复杂汇总统计数据,但直到最近,公司才开始考虑聘请数据科学家来更好地理解客户行为。

新成立的数据科学团队是在之前为公司的绩效指标制作 Excel 报告的财务分析师的基础上建立的。随着 HandbagLOVE 补充了受过训练的数据科学家,团队开始提供更复杂的产品:使用 R 进行的客户增长月度统计预测,允许高管更好地理解销售的交互式仪表板,以及将客户分组成对营销有帮助的群体。

尽管该团队已经创建了机器学习模型来支持新的报告和分析,但 HandbagLOVE 距离将机器学习模型部署到持续运行的生产环境中还远。其网站和应用程序上的任何产品推荐都是由第三方机器学习产品支持的,而不是在公司内部构建的。数据科学团队中有人谈论改变这种状况,但没有人知道这还需要多少年。

2.2.1. 您的团队:一个努力成长的的小团队

团队主要倾向于那些能够进行报告而不是接受机器学习培训的数据科学家,因为机器学习还非常新。当团队成员需要现代统计和机器学习方法时,他们不得不自学,因为周围没有人已经了解这些方法。这种自学很好,因为人们有机会学习对他们来说有趣的新技术。缺点是,使用的一些技术方法可能效率低下,甚至错误,因为没有专家来检查工作。

HandbagLOVE 为数据科学家制定了晋升到高级职位的通用路径。不幸的是,这些职业路径并不特定于数据科学;它们是从其他职位(如软件开发)复制粘贴的高层次目标,因为没有人真正知道应该有哪些指标。为了在职业生涯中进步,你必须说服你的经理你已经准备好了,并且幸运的话,你的经理可以批准晋升你。另一方面,如果团队最终扩大,你将很快成为团队中的高级成员。

因为数据科学团队为公司各部门(如市场营销、供应链和客户服务)提供报告和模型,团队成员在公司中享有很高的知名度。这一事实使团队在公司内部获得了极大的尊重,反过来,数据科学团队内部也充满了团队精神。团队规模和在公司中的影响力水平使得数据科学家比在其他公司拥有更大的影响力。数据科学团队成员与高级管理人员会面并参与讨论并不罕见。

2.2.2. 你的技术:一个开始变化的遗留技术栈

在谈论 HandbagLOVE 的技术时,你经常会听到这样的话:“嗯,一直都是这样。”订单和客户数据存储在一个直接连接到收银机技术的 Oracle 数据库中,并且 20 年来没有改变。系统已经远远超出了其极限,并且已经添加了许多修改。尽管如此,系统仍然在运行。其他数据也收集并存储在中央数据库中:来自网站的数据、客户服务电话的数据以及促销和营销电子邮件的数据。所有这些服务器都位于现场(on-prem),而不是在云端,一个 IT 团队负责维护它们。

通过将所有数据存储在一个大型服务器上,你可以自由地以任何方式连接和合并数据。尽管你的查询有时需要很长时间或使系统过载,但通常你可以找到一种解决方案来获取可用的结果。绝大多数分析都是在你的笔记本电脑上完成的。如果你需要更强大的计算机来训练模型,获取它可能会很麻烦。公司没有机器学习技术栈,因为它没有内部机器学习。

2.2.3. HandbagLOVE 的优缺点

在 HandbagLOVE,你拥有很大的影响力和能力去做你认为明智的事情。你可以从提出建立客户终身价值模型,构建它,并在公司内部使用它开始,而不需要说服太多人让你实施你的想法。这种自由,是由于公司规模和数据科学的新颖性相结合的结果,是非常有回报的;你被赋予了极大的权力去做你认为最好的事情。这种权力的缺点是,你没有很多人可以求助。你必须负责找到让事情运转的方法,或者处理事情不顺利时的后果。

技术栈过时,你将不得不花费大量时间来解决这个问题,这不是很好的时间利用方式。你可能想使用更新的技术来存储数据或运行模型,但你不会得到技术支持来做这件事。如果你不能完全自己设置任何新技术,你将不得不不使用它来应对。

数据科学家的薪水可能不会像在大公司,尤其是科技公司那样高。HandbagLOVE 没有足够的现金来支付高薪的数据科学家。此外,公司也不需要最好的最好的人——只需要能够做基本工作的人。话虽如此,薪水不会很糟糕;它肯定会比公司里拥有相似工作经验的大多数人的薪水要高。

对于那些渴望拥有自由去做他们认为正确的事情,但又可能不感兴趣使用最先进方法的科学家来说,HandbagLOVE 是一个很好的工作场所。如果你习惯使用标准统计方法并制作更平凡的报告,HandbagLOVE 应该是一个舒适的职业成长之地。如果你真正只对使用最前沿的机器学习方法感兴趣,你不会在 HandbagLOVE 找到很多可以做的项目;同样,你也不会在那里找到很多了解你所谈论内容的人。

2.3. Seg-Metra:早期初创公司

图片

  • 类似于:你未曾听说的一千家失败的初创公司

  • 公司年龄:3 年

  • 规模:50 名员工

Seg-Metra 是一家年轻的公司,它销售的产品帮助客户公司通过为独特的客户细分市场定制来优化其网站。Seg-Metra 将其产品销售给企业,而不是消费者。在其短暂的历史早期,Seg-Metra 获得了几个知名客户的青睐,开始使用这个工具,这帮助公司从风险投资家那里获得了更多资金。现在,手头有数百万美元,公司正寻求快速扩大规模并改进产品。

创始人向投资者推销的最大改进是将基本的机器学习方法添加到产品中。这项改进被推销给投资者为“尖端人工智能”。有了这笔新资金,创始人正在寻找机器学习工程师来构建他们所推销的内容。他们还需要决策科学家开始报告工具的使用情况,以便公司更好地了解在产品中需要做出哪些改进。

2.3.1. 您的团队(哪个团队?)

根据数据科学家被雇佣的时间,他们可能会成为公司第一位数据科学家。如果不是第一位,他们将是第一批几位数据科学招聘人员之一,并可能向第一位被雇佣的人汇报。由于团队的初创性,将很少有或没有协议——没有确立的编程语言、最佳实践、存储代码的方式或正式会议。

任何方向都将来自第一位数据科学家招聘。团队的氛围很可能由他们的仁慈程度决定。如果那个人愿意进行团队讨论并信任其他团队成员,整个数据科学团队将决定诸如使用哪种语言等问题。如果那个人是控制型的并且不乐于倾听,他们将自行做出这些决定。

这样的非结构化环境可以创造出巨大的团队精神。整个数据科学团队努力工作,努力让新技术、方法和工具工作,并可以形成深厚的纽带和友谊。另一方面,那些拥有权力的人可能会对那些没有权力的人施加巨大的情感虐待,因为公司规模很小,几乎没有问责制。无论 Seg-Metra 的增长结果如何,这个早期阶段公司的数据科学家都将面临一段颠簸而狂野的旅程。

团队的工作可能会因当天的情况而变得既迷人又令人沮丧。很多时候,数据科学家正在做他们第一次的分析,例如第一次尝试使用客户购买数据来细分客户或部署第一个神经网络到生产环境中。这些首次分析和工作任务之所以令人兴奋,是因为它们在公司内部是未知的领域,数据科学家们得以成为先驱。在其他日子里,工作可能会非常艰苦,例如当演示必须在投资者面前准备,而模型前一天还没有收敛时。即使公司有数据,基础设施可能组织得如此混乱,以至于数据无法实际使用。尽管工作很混乱,但所有这些任务意味着数据科学家在 Seg-Metra 工作期间能够非常快速地学习大量技能。

2.3.2. 技术:拼凑在一起的尖端技术

作为一家年轻的公司,Seg-Metra 没有维护老旧遗留技术的束缚。Seg-Metra 还希望给投资者留下深刻印象,而当你的技术栈令人印象深刻时,这要容易得多。因此,Seg-Metra 采用最新的、最优秀的方法进行软件开发、数据存储和收集、以及分析和报告。数据存储在现代云技术中,所有操作均不在本地进行。数据科学家直接连接到这些数据库,并在配备 GPU 处理的大型亚马逊网络服务(AWS)虚拟机实例上构建机器学习神经网络模型。这些模型通过现代软件工程方法进行部署。

初看之下,技术栈确实令人印象深刻。但公司如此年轻且发展迅速,不同技术之间的协同问题不断出现。当数据科学家突然发现云存储中缺失数据时,他们必须等待超负荷工作的数据工程师来修复它(如果他们足够幸运的话,能有一个数据工程师)。如果 Seg-Metra 有一个专门的开发运维(DevOps)团队来帮助保持一切正常运行,那将是非常好的,但到目前为止,预算已经花在其他地方了。此外,技术安装得如此之快,即使公司年轻,要监控所有这些也相当困难。

2.3.3. Seg-Metra 的优缺点

作为一家成长中的初创公司,Seg-Metra 具有很强的吸引力。公司的发展提供了各种有趣的数据科学工作,以及一个迫使数据科学家快速学习的环境。这类职位可以教授那些能够加速数据科学职业生涯的技能——比如在有限约束下按时完成任务、与非数据科学家有效沟通,以及知道何时推进项目或决定项目不值得继续。特别是在职业生涯早期,培养这些技能可以使你比只在大型公司工作的人更有吸引力。

在 Seg-Metra 工作的另一大优点是能够使用最新的技术。使用最新技术应该会让你的工作更加愉快:假设,新技术的出现比旧技术更好。通过学习最新技术,你也应该拥有一个更加令人印象深刻的简历,为未来的工作做好准备。希望使用新技术的企业会希望你能帮助他们指引方向。

虽然薪酬不如大型公司,尤其是科技公司具有竞争力,但这份工作确实提供了有潜在价值的股票期权。如果公司最终上市或被出售,这些期权可能价值数十万美元或更多。不幸的是,这种情况发生的概率介于当选市议会和当选美国国会之间。所以,只有当你喜欢赌博时,这个事实才是一个优点。

在 Seg-Metra 工作的一个缺点是你必须非常努力工作。每周工作 50 到 60 小时并不罕见,公司期望每个人都尽其所能贡献。在公司的眼中,如果大家不团结一致,公司就不会成功,那么你真的会成为那个一年中用完所有假期时间的人吗?这种环境可能非常有毒,容易受到滥用,导致大量员工过度劳累。

这家公司波动性很大,依赖寻找新客户和投资者的帮助来维持运营,这使得 Seg-Metra 面临低就业保障的风险。任何一年,公司都可能决定裁员或完全倒闭。这些变化可能毫无预警地发生。对于有家庭的人来说,工作不稳定尤其困难,这也导致了公司人口结构偏向年轻。如果想要与一个更加多元化、经验丰富的团队一起工作,年轻的劳动力也可能是一个缺点。

总体而言,在 Seg-Metra 工作提供了与有趣技术一起工作、快速学习和有很小机会赚大钱的好机会。但这样做需要付出巨大的努力,并可能面临一个有毒的环境。因此,这家公司最适合那些想要积累经验然后离开的数据科学家。

罗德里戈·丰特内阿尔巴·卡尔特斯,一家小型政府咨询公司首席数据科学家

我所在的公司为政府机构、武装力量、执法部门和一些私人客户提供数据分析、数据科学和移动解决方案。我是首席数据科学家,也是公司唯一负责数据科学项目的人。我们那里没有数据工程师、数据整理员或其他任何数据科学角色,因为该部门相对较新。相反,我们有数据库管理员、软件开发人员和系统集成人员,我同时担任系统/软件架构师和开源开发者。这看起来可能有些奇怪,并且肯定给我带来了压力,但出人意料地效果很好。

我工作中一个奇怪的故事:我参与了一个项目,该项目涉及使用来自许多环境变量的历史信息,例如每日天气条件。由于研究区域没有安装气象站,因此缺乏关键所需的数据。项目处于危险之中,客户决定如果他们的人找不到信息,将在一周内关闭项目。

我决定飞到那个地区并采访一些渔民,并询问他们如何知道出海是安全的。他们说他们通常会派一艘船通过无线电传输天气状况。我参观了一个广播电台,他们从 1974 年开始就有手写的通信记录。我实施了一个能够识别手写笔记并提取有用信息的算法,然后实施了一个自然语言处理管道,可以分析字符串。多亏了去现场发现这些不寻常的数据,项目才得以挽救。

Gustavo Coelho,一家小型初创公司的数据科学负责人

我在过去 11 个月里在一家相对较新的初创公司工作,该公司专注于将人工智能应用于人力资源管理。我们预测候选人的未来表现或他们被特定公司录用的可能性。这些预测旨在帮助加快招聘流程。我们在模型中非常依赖偏差缓解。这是一家小型公司;我们共有 11 人;数据科学团队由包括我在内的 5 人组成。整个公司都致力于帮助数据科学团队将训练好的模型投入生产。

在一家小型初创公司工作让我有机会学习新概念并将其应用到日常生活中。我喜欢思考如何最佳地建立我们的数据科学流程,以便我们能够扩展规模并给予数据科学家更多的自由,让他们专注于数据科学。人力资源不是一个技术敏感的领域,因此项目超过一半的时间都花在向客户解释解决方案并帮助他们适应新概念上。当我们最终获得批准时,还需要花费大量时间与客户的 IT 部门协调,以整合到我们的数据管道中。

2.4. Videory:后期成功的科技初创公司

  • 类似于:Lyft、Twitter 和 Airbnb

  • 公司年龄:8 年

  • 规模:2,000 人

Videory 是一家后期成功的科技初创公司,运营一个基于视频的社会网络。用户可以上传 20 秒的视频并与公众分享。公司刚刚上市,每个人都对此感到非常兴奋。Videory 的规模并不接近 MTC,但作为一个社交网络,它做得很好,每年都在扩大客户群。它对数据敏感,可能已经拥有数据分析师或科学家几年了,甚至从公司成立之初就有。团队中的数据科学家非常忙碌,他们进行数据分析、报告,支持业务,以及创建机器学习模型,帮助将人与艺术家配对以委托工作。

2.4.1. 团队:专业但具有灵活性

Videory 目前还处于一个可以将在一个超大型会议室聚集所有数据科学家的阶段。考虑到公司的规模,团队可能采用集中式模型。每个数据科学家都向数据科学经理汇报,并且都在组织的单一大型部门中。中央数据科学团队帮助公司内的其他团队,但最终,团队会设定自己的优先事项。一些数据科学家甚至在进行内部长期学术研究项目,这些项目没有立即的收益。

由于公司规模的原因,Videory 的数据科学团队中存在专业化。在那些进行重型机器学习、统计学或分析的人之间也有一些划分。Videory 规模足够小,以至于随着时间的推移,可以在这些小组之间进行切换。数据科学家通常有一些互动——例如培训课程、月度会议和共享的 Slack 频道——这在像 MTC 这样的公司中是不可能的,因为公司规模太大,无法让所有人一起交谈。子团队可能会使用不同的工具,一群拥有博士学位的人会发表学术论文并做更多理论工作。

2.4.2. 技术:努力避免陷入遗留代码的泥潭

Videory 有很多遗留代码和技术,可能至少有一些是内部开发的工具。公司可能试图跟上技术发展,并计划切换到新的系统或用新技术补充现有系统。与大多数公司一样,数据科学家几乎肯定会查询 SQL 数据库来获取数据。公司可能还有一些商业智能工具,因为有很多非数据科学消费者。

作为 Videory 的数据科学家,你肯定会学到一些新东西。所有这些公司都有大量数据以及处理这些数据的系统。仅仅使用 SQL 是不够的;公司每月需要处理数十亿事件。当你需要提取一些存储在 SQL 数据库之外的定制数据时,你可能需要尝试使用 Hadoop 或 Spark。

数据科学通常在 R 或 Python 中进行,如果遇到困难,有大量的专家可以提供帮助。机器学习通过现代软件开发实践部署,例如使用微服务。由于公司作为一家成功的初创公司而闻名,那里有很多有才华的人,他们使用最前沿的方法。

2.4.3. Videory 的优缺点

Videory 对数据科学家来说可能是一个合适的大小;足够多的其他数据科学家可以提供指导和支持,但团队又足够小,你可以认识每个人。数据科学在公司层面被认可为重要,这意味着你的工作可以得到副总裁甚至可能是 C 级高管(CEO、CTO 等)的认可。你将拥有数据工程师来支持你的工作。数据管道有时可能会变慢,甚至出现故障,但你不需要负责修复它们。

在拥有 1000 多人以上的组织中,你需要处理不可避免的政冶问题。你可能会受到压力,要生成符合人们期望的数据(他们可以向老板汇报以获得奖金)或面对关于某事物可以多快开发的不切实际期望。你也可能因为经理的要求而从事业务实际上并不需要的事情。有时,你可能会觉得自己没有方向,或者时间被浪费了。虽然这不会像在早期初创公司那样改变很多,但组织仍然会发生变化;一个季度的优先事项可能在下一个季度被完全忽视。

尽管 Videory 的其他数据科学家在大多数数据科学主题上可能比你更有知识,但你可能会很快成为某个特定领域的专家,比如时间序列分析。如果你喜欢指导他人和教学,这种情况会很好,尤其是如果你的工作支持通过阅读论文或参加课程来深入了解你的特定专业领域。但当你觉得没有人能检查你的工作或推动你学习新事物时,这可能会很困难。你总是有更多东西要学习,但你学到的东西可能不在你想要专注的领域。

总体而言,Videory 提供了其他原型中的一些好处。它足够大,以至于在需要时周围有可以提供帮助和协助的人,但又不至于大到让请求陷入官僚主义的疯狂或部门在范围上重叠。在公司工作的数据科学家有很多学习的机会,但由于角色的专业化,他们没有尝试一切的机会。对于寻找一个安全赌注、提供成长机会但不会带来压倒性机会的数据科学家来说,这是一个绝佳的地方。

Emily Bartha,一家中型初创公司的首位数据科学家

我在一家中型初创公司工作,我们的产品专注于保险领域。作为首位数据科学家,我有机会帮助定义我们围绕使用数据和将机器学习引入产品中的战略。我在公司的数据团队中,因此我与数据工程师以及我们的数据产品经理紧密合作。

我一天的工作生活从与数据团队的晨会开始。我们讨论当天计划做什么,以及任何阻碍或依赖关系。我花很多时间挖掘数据:可视化、创建报告,并调查数据的质量问题或怪异之处。我也花很多时间在文档上。当我编码时,我使用 GitHub,就像工程团队的其他成员一样,并且团队成员会审查我的代码(我也会审查他们的代码)。我还花了一整天的时间参加会议或与团队成员的桌面协作。

在过去为大型公司工作过,我喜欢在小型公司工作!这里有很多自由来主动采取行动。如果你有一个想法,并想努力使之成为现实,没有人会阻碍你。寻找已经对数据工程进行投资的公 司。当我到达时,已经有几位数据工程师和一个关于仪器、数据收集和存储的策略。在小型公司工作,事情不断变化,优先级也在转移,这使得适应性变得很重要。那些喜欢深入一个项目并为之工作数月的人可能不会喜欢在初创公司工作,因为通常需要开发出足够好的解决方案并继续进行下一件事。

2.5. 全球航空航天动力学:巨大的政府承包商

图片

  • 类似于:波音、雷神和洛克希德·马丁

  • 公司年龄:50 年

  • 规模:15 万人

全球航空航天动力学(GAD)是一家庞大而富有的公司,每年通过各种政府合同带来数十亿美元的年收入。该公司从战斗机和导弹到智能交通灯系统,开发了一切。公司通过各个部门遍布全国,其中大多数部门之间并不交流。GAD 已经存在了几十年,许多在那里工作的人也已经在那里工作了数十年。

GAD 在数据科学方面进展缓慢。大多数工程部门一直在收集数据,但他们在理解如何将其应用于他们非常规范的现有流程方面遇到了困难。由于工作的性质,代码需要极其不可能出现错误,并且需要无情地测试,因此实施一个在实时情况下具有有限可预测性的机器学习模型的想法,充其量是冒险的。总的来说,公司的工怍进度缓慢;科技界的口号“快速行动,打破事物”与 GAD 的心态正好相反。

随着人工智能、机器学习的兴起以及使用数据来转型企业的需求,GAD 的执行官们准备开始招聘数据科学家。数据科学家出现在组织的各个团队中,执行诸如分析工程数据以改善报告、构建机器学习模型以投入产品以及作为服务提供商帮助 GAD 客户解决问题的任务。

2.5.1. 团队:工程师海洋中的数据科学家

尽管他们的角色取决于他们在 GAD 的哪个部门以及他们正在从事哪个项目,但平均而言,数据科学家是工程师团队中的一个人。最多,你的团队可能有二到三个数据科学家。数据科学家的职责是支持工程师进行数据分析、模型构建和产品交付。团队中的大多数工程师对数据科学只有非常模糊的了解;他们记得大学里的回归分析,但不知道收集数据或特征工程的基础,也不知道验证模型或模型部署的困难。当事情出错时,你将很少有资源来帮助你,但由于如此少的人理解你的工作,其他人可能不会注意到事情正在出错。

团队中的许多工程师已经在公司工作了十年或更长时间,因此他们拥有丰富的机构知识。他们也更可能持有“自从我到这里以来,我们就是这样做事的,为什么我们要改变?”的心态。这种态度将使数据科学家提出的思想更难得到实施。国防工业的缓慢性质意味着人们往往比其他地方工作得少;人们每周打卡 40 小时,但轻松地低于这个总数并不罕见。在其他公司,你可能因为任务太多而感到不堪重负,而在 GAD,压力来自于没有足够的工作可做和感到无聊。

提拔和加薪非常公式化,因为管理者必须遵循规则以减少偏见(从而降低 GAD 被起诉的可能性)并且因为这是几十年来一直的做法。获得加薪和提拔在很大程度上取决于你在公司工作了多少年。成为一个极其努力工作的人可能会使你的下一次晋升提前一年或使你获得略高的奖金,但一个初级数据科学家迅速晋升为高级数据科学家的可能性很小。另一方面,员工很少被解雇。

2.5.2. 技术:老旧、硬化且处于安全锁定状态

虽然 GAD 内部各个小组的技术栈差异很大,但它们都倾向于相对较旧,是本地部署而不是云部署,并且覆盖了安全协议。因为涉及的数据涵盖了战斗机性能等主题,所以公司必须确保数据不会泄露。此外,公司需要对其使用的任何技术承担法律责任,以防万一出现问题,因此开源通常会受到冷遇。例如,与 PostGRES SQL 相比,Microsoft SQL Server 价格更高,但 GAD 愿意支付额外的费用,因为他们知道如果出现安全漏洞,他们可以联系微软来处理。

实际上,这种设置看起来像是数据存储在由 IT 团队管理的 SQL Server 数据库中,这个团队对谁可以访问什么非常吝啬。数据科学家可以访问数据,但他们必须在具有有限互联网访问权限的特殊服务器上运行 Python,这样任何库都不会秘密将数据发送到外国。如果数据科学家想使用特殊的开源软件,IT 和安全部门批准的可能性很小,这使得数据科学家的工作变得更加困难。

如果代码需要部署到生产系统,它通常会以传统的方式部署。GAD 正在开始采用将机器学习代码投入生产的现代方法。

2.5.3. GAD 的优缺点

在 GAD 工作的好处是数据科学职位工作节奏缓慢、舒适且安全。工作节奏不太严格意味着你晚上回家时更有可能剩下精力。你工作时经常会发现自己有闲暇时间,可以用来阅读数据科学博客和文章,而不会有人抱怨。由于知道数据科学基础知识的人很少,所以质疑你的人也会更少。而且由于 GAD 是一个庞大的组织,非常担心法律责任,所以你必须表现非常糟糕才能被解雇。

在 GAD 工作的缺点是,你不太可能学会像在其他公司那样多的新技能。你可能会被分配到一个项目上多年,因此该项目使用的技术和工具很快就会变得陈旧。更糟糕的是,你学会的技能将是过时的技术,这些技能无法转移到其他机构。尽管你不太可能被解雇,但你也不太可能得到晋升。

如果你发现有一个团队在做你喜欢的项目,而且你不想让工作成为你的生活,那么 GAD 是一个很好的工作场所。许多人因为舒适而为 GAD 工作了几十年,他们对舒适感到满意。但如果你需要挑战来保持前进的动力,GAD 可能不适合你。

Nathan Moore,一家公用事业公司的数据分析经理

我所在的公司为数十万人提供和销售电力,公司部分由政府拥有。公司本身拥有约 1,000 名员工,分布在许多不同的职能中。我的工作涉及调查和原型设计新的数据源,并与数据库专家合作清理和记录当前的数据源。我们有一系列遗留系统和新的项目正在进行,所以总有事情要做。

目前,一天的工作包括会议、审查 ETL 规范、尝试在 Twitter 上找到的新机器学习技术、对报告提供反馈、学习使用 JIRA 和 Confluence,以及回复大量电子邮件。过去我曾参与模型开发和评估、在夜间处理失败时的数据分析,以及向政府提交关于该行业审查的提案。

我们规模足够大,拥有一个优秀的分析师团队,可以处理各种项目,从日常报告到大型客户细分项目。我在业务中有很多机会流动,并且在这里工作了 11 年。但是,由于我们拥有数十亿美元的资产,公司内部风险规避程度很高,变革步伐有点缓慢。我们有一个足够大的 IT 部门,可以支持日常功能,但任何重大项目,如系统升级,都意味着非优先改进的资源稀缺。每一件事都需要得到证明,并预留预算,而且有很多政治因素需要应对。

2.6. 整合一切

当你在寻找工作公司时,会发现许多公司以各种方式与这些公司相似。在申请工作和面试过程中,尝试理解在这些公司工作的优缺点可能会有所帮助 (表 2.1)。

表 2.1. 招聘数据科学家的公司总结
标准 MTC HandbagLOVE Seg-Metra Videory GAD
大型技术 零售商 初创公司 中型技术 国防
--- --- --- --- ---
官僚主义 很多 很少 一些 很多
技术栈 复杂 过时 易损 混合 古老
自由度 很少 很多 极大 很多
薪资 极佳 合理 极佳 合理
工作保障 极佳 合理 合理 极佳
学习机会 很多 一些 很多 很多 很少

2.7. 与 Google 量化用户体验研究员 Randy Au 的访谈

Randy Au 在 Google Cloud 团队工作。在数据科学领域专注于人类行为超过十年,他在 medium.com/@randy_au 博客上分享如何思考在初创公司和不同类型的公司工作。

大公司和小公司之间有大的差异吗?

是的。通常情况下,这更多是组织结构和结构性的。在公司中,由于规模的变化,文化会在某些点上发生变化。在一个 10 人的初创公司里,每个人都做所有的事情,因为每个人都戴着所有的帽子。同时,在 20 人左右的时候,事情开始专业化。你开始得到三到四人的团队专注于特定的事情。人们可以更深入地思考某些事情,而且你不需要了解公司的所有事情。在 80 到 100 人左右的时候,现有的团队不再能够扩展。然后,在事情周围会有更多的流程。你不再了解公司里的每个人。你不知道每个人在忙什么,因此需要更多的开销来达到共识。超过 150 到 200 人之后,就几乎不可能了解公司周围的情况,因此官僚机构必须存在。然后你进入谷歌,那里有 10 万人。在那里,你不知道公司的大部分人在做什么。

公司越小,你越有可能与公司里的每个人互动。在一个 40 人的公司里,我会和 CEO 一起坐在我的桌子前,我们一起探索一个数据集。这种情况在谷歌永远不会发生。但是,你是否能够接受在许多初创公司中常见的情景,即你正在建造一辆 F1 赛车,同时也在驾驶它,每个人都争论你是否应该有一个方向盘?当你是一家小公司的数据人员时,方法并不那么重要;你只是在尝试挤压所有数据,从中获得一些见解。不要求过于严谨也是可以的,这样你可以更快地做出决策。

公司的行业是否会有差异?

一些行业历史上一直有数学或数据人才。例如,保险公司有精算师。这些人已经存在了一百年,他们真的非常了解统计数据。如果一个保险公司要引入数据科学家,他们的观点会有所不同。他们已经为极其有才华的统计人员建立了一个内置结构。他们将在其他地方填补一个空缺:可能是在大数据方面,或者在优化他们的网站等方面。

金融行业也有一个长期的传统,那就是拥有量化分析师。我记得有一次量化金融面试失败,因为他们进行了一次代码测试。但作为数据科学家,我只是确保我的代码是功能性的,并给出正确的答案;我不会太过于考虑性能,直到它成为一个问题。他们的代码测试实际上是在测试你的性能,并因为你不够高效而扣分。我想,“哦,是的,你们在金融行业。我明白了。”

我认为如果你和所有从事数据科学工作的人交谈,绝大多数都是那些在做这种一点也不性感的基础工作的沉默的大多数。我写的关于初创公司数据科学的文章收到了大量的回复,人们说:“是的,这就是我的生活。”这不是人们谈论数据科学时谈论的内容。它不是那种性感的“我从这篇 arXiv 论文中应用了一个新的闪亮的算法。”我认为我在过去 12 年的工作中没有在 arXiv 论文中应用过任何东西。我还在使用回归,因为回归真的有效!我认为这就是现实。

你将要去清理你的数据;我认为即使是 Facebook 和 Google 这样的公司,也没有人不需要清理数据。可能清理数据会稍微容易一些,因为数据周围有结构。但是,不,你将不得不清理数据。这是生活的事实。

你对刚开始从事数据科学的人有什么最终建议?

了解你的数据。这确实需要很长时间——如果是复杂系统,可能需要六个月到一年或更长时间。但你的数据质量是你宇宙的基础。如果你不了解你的数据,你将做出一些非常奇怪的说法,关于一些你的数据根本不允许你说的东西。有些人会说:“哦,我有访问我网站的独特 cookie 数量,这等于独特的人数。”但这不是真的。那些使用多个设备或浏览器的人怎么办?

为了真正了解你的数据,你需要和有领域知识的人交朋友。当我做财务报告时,我和财务人员交朋友,这样我就可以学习会计关于如何命名事物以及事物减法顺序的惯例。也许你从这一个 IP 得到了 5000 万页的数据,而另一个人可能会意识到那是 IBM。你可能不会知道所有这些,但可能有人会知道。

摘要

  • 许多类型的公司都会雇佣数据科学家。

  • 数据科学工作各不相同,很大程度上取决于每个公司的行业、规模、历史和团队文化。

  • 理解你正在考虑的公司类型是很重要的。

第三章:获取技能

图片

本章涵盖

  • 学习数据科学的不同方式

  • 理解什么因素造就了一个优秀的学术项目或训练营

  • 选择最适合你的路线

现在你已经决定成为一名数据科学家,你需要获得这些技能!不要害怕:想知道如何学习数据科学家的技能是成为数据科学家过程中的一个普遍部分。有很多方法可以做到这一点,从观看 YouTube 视频到获得学位,很多人会告诉你他们所做的方法是唯一正确的路径。更糟糕的是,你可能会因为必须学习的内容量而感到不知所措,比如算法、编程语言和统计方法——然后再加上不同的商业领域。仅仅想到这一点就可能会让你情绪上感到疲惫。

好消息是,获得所需技能主要有四种方法。每种方法都有其优点和缺点,但当你把它们列出来时,通常就会清楚哪种方法最适合你。在本章结束时,你应该了解不同的方法,经过一些反思后,你应该能够决定最适合你情况的路线。你可以做到这一点!

本章中介绍的数据科学技能获取的四种方法是

  • 获得数据科学或相关领域的硕士学位

  • 参加数据科学训练营(一个 8 至 15 周的高强度课程)

  • 在当前工作中进行数据科学工作

  • 通过在线课程和数据科学书籍自学

我们将在本章中详细介绍所有这些方法。

如果你没有大学毕业怎么办?

本章的大部分内容假设你已经大学毕业,很可能获得了技术学位。如果你不符合这一标准,不要担心;本章的大部分内容仍然适用,但你在阅读时需要做一些调整。

如果你还没有大学毕业,你可能会想在遵循本章步骤之前先获得一个本科学位。你的最佳选择是相关技术学位,这种学位会教你一些数据科学技能,例如数学、统计学或计算机科学。如果你选择这些专业之一,尽量利用任何灵活的学分要求来填补你在数据科学技能方面的空白。现在一些学校提供数据科学本科学位,这将使你在大学毕业后非常适合找工作。完成学位后,你应该能够直接从学校获得数据科学工作(特别是如果你遵循本书第一部分和第二部分的指导)。你也可以选择遵循本章中列出的额外步骤,例如自学额外的数据科学技能或在第一份工作中进行数据科学工作。

如果你以非技术学位大学毕业,本章的指南仍然适用。然而,获得数据科学硕士学位可能是一个非常好的主意,因为较长的学习时间将给你更多时间来提升你的技术技能。你可能倾向于获得第二个技术本科学位,但无论如何都要避免这种方法。获得第二个学位既昂贵又耗时;此外,你还可以通过其他方式获得这些知识。

3.1. 获得数据科学学位

许多学院提供数据科学研究生学位,项目涵盖计算机科学、统计学和商业等主题的混合。由于这些项目是硕士学位项目,它们通常需要两年时间,费用为 70,000 美元或更多。与大多数研究生项目一样,你可以选择在工作的同时以较慢的速度完成项目,或者可能以在线课程的形式上课。尽管许多学校提供实际的数据科学学位,但根据你的兴趣,你可能会选择获得计算机科学、统计学、商业分析、运筹学或与数据科学非常接近的学位。

数据科学学位的好处在于它非常全面;由于项目的长度和你在其中的时间,你应该拥有作为初级数据科学家开始所需的所有知识。通过课程和项目,你将获得使用统计和机器学习方法的经验,以及实际编程经验。如果你进入项目时没有太多编程经验,你应该能够在路上学会(尽管你可能需要额外上一两门课程)。

数据科学研究生学位有几个缺点:

  • 他们的费用极其高昂,无论是学费还是作为全职学生期间无法赚取收入和获得直接工作经验的机会成本。研究生项目在金钱和时间上都比其他选项贵一个数量级。在你感觉准备好转行之前花费数年学习是你生命中的一大笔时间,而且如果你在途中决定不想成为数据科学家,你就无法收回那笔钱或时间。

  • 如果你来自与数据科学相关的背景,例如软件开发,或者在该领域有大量的本科课程,研究生项目会教你很多你已经知道的东西。这意味着在一个长期的项目中,你可能只能获得少量有用的新信息——这是一个巨大的缺点,可能会让你觉得项目令人沮丧。

  • 这些项目是由学术教授讲授的。大多数学术教授在整个职业生涯中都从事学术研究,这使得他们教授的材料往往与工业界使用的内容大相径庭。例如,一个特别不投入的教授可能会使用旧的语言如 SPSS,或者不理解现代工具如版本控制。这种情况在数据科学学位项目之外尤为常见。一些大学会从工业界引进人来授课,但这些人对教学可能知之甚少。直到你进入项目,你才能判断项目中有多少使用了现代技术。在申请过程中,尽量寻找机会与当前或前任学生交谈,以了解项目及其对职业的实用性。

3.1.1. 选择学校

当你开始寻找研究生数据科学项目时,你可能会很快被可供选择的项目数量所淹没。更糟糕的是,你可能会发现你的邮箱里充满了不同项目的传单,你可能会接到招聘人员的烦人电话。根据你想要做的工作量,你可能应该申请三到十个这样的项目。申请太少,你可能会发现你一个都进不去;申请太多,你会发现自己在研究生申请上投入了过多的时间(和申请费)。

为了决定申请哪些学校,考虑以下指标:

  • 你对地点和生活方式的满意度[非常重要]— 你可能会在全国各地寻找研究生项目,但如果你去洛杉矶的学校而不是纽约州上州,你的学校外的生活会大不相同。如果气候、与朋友的距离或生活成本不适合你,那么无论项目有多好,你都会感到不快乐。

  • 该项目的课程涵盖哪些主题[重要]— 由于数据科学是如此新颖,大学之间的课程可能会有很大的不同。这种情况还特别复杂,因为项目所在的系;例如,以计算机科学为基础的数据科学项目将侧重于方法和算法,而商学院项目将更多地侧重于应用,并依赖于案例研究。检查课程材料是否涵盖了你的技能组合中的弱点(参考第一章)。

  • 项目中有多少项目工作[重要]— 项目涉及的项目越多,你将越多地了解数据科学在实际中的运作方式,你将越为行业做好准备。(项目在第四章中有详细说明。)重大的项目也是很好的简历内容,这可以帮助你在研究生期间获得实习机会,或者在你之后找到第一份工作。

  • 毕业生最终去向[重要]— 通常,学校会提供关于学生毕业后去向的统计数据,例如有多少百分比的人进入学术界或 500 强公司。这些统计数据可能很有信息量,但学校会展示使它们看起来最好的指标,即使这些指标可能是误导性的(这是讽刺的,因为理解构成误导性统计数据的是什么是一项你作为数据科学家将学习的技能)。如果可能的话,尝试通过 LinkedIn 联系一些项目校友,以获得对毕业生表现的客观看法。特别是如果你想在大型公司工作,你可以研究哪些公司在该校直接招聘。即使这些公司不招聘,你仍然可以申请工作,但你的求职申请可能会得到较少的考虑。

  • 资金[罕见但非常重要]— 在罕见的情况下,学校为硕士学生提供资金,支付你的课程费用,有时如果你是某个课程的助教,还会额外提供津贴。如果你被提供津贴,我们强烈建议你接受;不需要自己支付学费并获得工资,这在财务上比你自己支付账单要好得多。如果资金涉及教学,你还将受益于被迫学会如何与一群人沟通,这对你的数据科学职业生涯将有所帮助。不利的一面是,教学需要花费大量时间,这可能会分散你的学习注意力。

  • 该课程与当地企业的联系紧密程度[中等重要]— 如果学校与当地公司,尤其是科技公司有很多合作,那么学校与社区的联系就会更加紧密。这种联系将使你更容易获得实习或工作机会,并在课堂上提供更多有趣的学习材料。同时,这也降低了教授们与学术界外使用的方法脱节的可能性。

  • 入学要求[不太重要]— 一些学校要求你必须修过某些课程才能被录取。大多数项目要求你必须修过一些数学课程,例如线性代数,以及一些编程课程,例如 Java 入门。如果你缺少一两个必需的课程,你可能能够在项目中进行豁免或补修课程。如果你没有任何先决条件,或者学校要求特定的本科学位(如计算机科学),那么该项目可能不适合你。

  • 学校的声望[一点也不重要]— 除非你被斯坦福或麻省理工学院等极其著名的学校录取,否则雇主不会关心学校的知名度。声望主要在你打算进入学术界而不是工业界时才有意义,但如果是这种情况,你应该获得博士学位而不是硕士学位(并且也应该阅读不同的书籍)。学校的声望仅对那些学校提供的强大校友网络有用。

  • 你的导师[非常重要,但……]—— 如果你考虑的硕士项目包含论文或学位论文部分,你将有一个来自学校的导师引导你完成。拥有一个与你的工作风格和兴趣领域相似、且不是虐待狂的导师,将很容易在成功完成项目与失败之间做出区别。不幸的是,在进入学校之前很难知道你会与哪位导师配对,更不用说他们的个性如何了。所以尽管这一点非常重要,但你只能在此基础上做出有限的决策。然而,如果项目完全是基于课程或只有一个毕业设计项目,导师就不会很重要。

当你列出你的学校名单时,尝试制作一个电子表格,列出不同学校在每个指标上的表现。但是当你拥有所有数据时,你可能发现很难客观地排名学校。你究竟如何说一个你不愿意居住的城市中的学校,但与行业联系紧密的学校,和一个你愿意居住的城市中的学校,哪个更好或更差?我们建议你放弃寻找客观的“最佳”学校的想法。相反,将学校分为“喜爱”、“喜欢”和“一般”,然后只申请你喜爱的和喜欢的学校。

在线硕士项目

越来越多的学校提供在线硕士项目,使得你可以在不进入大学校园的情况下学习所需的一切。这个项目的明显好处是,在线上课比每周花费数小时去大学要方便得多。此外,在线项目在启动时并没有那么多的污名,所以你不必担心雇员是否会认为你的学位是合法的。缺点是,如果你完全在线进行,保持对项目和材料的参与度要困难得多。当你有问题时,与教授互动会更难,更容易半心半意地听课而不做作业。从某种意义上说,在线项目的便利性也可能成为其劣势:你不会有那么大的动力坚持下去。如果你认为你有能力在线项目中保持承诺和专注,这可以是一个很好的选择;只是要小心风险。

3.1.2. 进入学术项目

要进入一个学术项目,你需要申请。如果你熟悉申请硕士项目,数据科学硕士学位的申请流程与其它类似。第一步是撰写你的申请。学校通常在秋季宣布如何申请,包括截止日期和所需材料。研究生院的申请通常需要以下内容:

  • 一至两页的意向书,说明为什么你适合这个项目。在这封信中,尽可能多地强调你将如何为项目做出贡献。例如,在数据科学所需的某些技能方面有经验或你完成的相关工作的例子都非常有用。尽量避免使用陈词滥调,比如“我从小时候就对数据科学感兴趣。”关于撰写优秀的研究生入学论文的资源很多,你的本科学校也可能有一个部门可以帮助你完成这项任务。*

  • 一份从你的本科院校出具的证明,表明你有参加该项目的必要先决条件。你的学校网站应该有如何获取这份证明的说明,但请注意,这通常需要付费,并且需要一周或更长时间才能送达。不要把这项任务拖到最后一刻!

  • 符合最低水平的语言技能和数学能力的研究生入学考试(GRE)成绩。理论上,对于任何进入数据科学项目的人来说,数学 GRE 应该很容易,因为数学是数据科学的基础。然而,许多人自从高中以来就没有见过棘手的数学问题,所以学习是非常好的主意。语言测试可能更难,可能需要大量的学习。GRE 需要你去一个特殊的地方参加考试,并且安排起来可能很麻烦,所以要积极主动,尽量早点参加考试。如果你的母语不是英语,你可能需要获得英语作为外语(TOEFL)或国际英语语言测试系统(IELTS)的最低分数。

  • 三封推荐信,说明为什么你适合这个研究生项目。这些信可以是来自你的教授或如果你的工作与数据科学有间接关系,可以是你的老板。理想情况下,写信的人应该能够讨论你为什么是一个好的数据科学家,所以他们应该看到你表现出色。尽量避免那些只能说出“这个人在我的课上得了 A”的大学教授和那些在技术环境中对你的工作了解不多的雇主。如果你是正在阅读这本书的本科生,现在可能是通过参加办公时间、参加研讨会和加入学术俱乐部来更好地了解你的教授的好时机。

这些材料需要时间来整理,如果你同时申请多所学校,整理它们可能会变成一份全职工作。大多数申请在 12 月到 2 月之间截止,你会在 2 月或 3 月得到回复。如果你被录取,你有直到 4 月的时间来决定你是否想加入这个项目。当你的录取通知到来时,不要过于担心哪所学校是“最好的”——只要选择一个你认为你会快乐的地方!

3.1.3. 总结学术学位

将所有这些因素综合起来,数据科学的硕士课程非常适合那些想要接受广泛教育并且负担得起的人。这些人可能来自一个他们没有做过很多编程或技术工作的领域,比如市场营销。硕士课程将允许他们以合理的速度学习数据科学的所有组成部分。

硕士课程对已经拥有许多所需技能的人来说并不合适;这些课程时间太长,费用太高,不值得。此外,教师不是行业专家,所以他们传授的少量新知识可能甚至不太相关。你可能需要在硕士课程期间通过实习获得行业经验,以增强学位本身。

如果你认为在成为数据科学家之前你需要接受广泛的培训,那就去尝试吧;开始寻找你喜欢的学校。如果你觉得获得更多的教育将会是很多工作,而且肯定有更简单的方法,考虑下一节中的选项。

我需要博士学位才能获得数据科学工作吗?

可能不会。

博士学位需要多年才能获得,并且专注于培训学生成为教授。你必须花费多年时间进行研究,以找到一种比之前略好一点的新方法或解决方案。你需要在学术期刊上发表文章,并在一个非常具体的领域推进最先进的研究。但正如第一章和 2 章所展示的,数据科学家所做的很少像学术研究那样。数据科学家对找到优雅、最先进解决方案的关注远不如快速找到足够好的解决方案。

许多数据科学工作职位要求有博士学位。但博士课程中获得的技能很少是工作所必需的;通常,博士学位的要求是公司认为该职位具有声望的信号。你可以从硕士或本科学位课程中学到的材料将非常适合绝大多数数据科学工作。

此外,获得博士学位会带来巨大的机会成本。如果需要七年时间才能毕业,你本可以在一家公司工作七年,提高你的数据科学技能,并且赚取更多的钱。

你可以去获得博士学位然后成为一名数据科学家,但不要让任何人告诉你你需要这个学位。

3.2. 参加训练营

基地营是由 Metis 和 Galvanize 等公司举办的为期 8 至 15 周的密集课程。在基地营期间,你每天将花费超过 8 个小时学习数据科学技能、聆听行业演讲者和参与项目。课程结束时,你通常会在一群寻找数据科学家的公司代表面前展示一个毕业项目。理想情况下,你的演示将为你赢得面试,然后是工作机会。

基地营在很短的时间内教你大量的知识,这意味着它们非常适合那些已经拥有大部分数据科学所需技能但需要更多技能的人。考虑一下那些作为神经科学家工作并作为其工作一部分进行编程的人。数据科学基地营可以教他们诸如逻辑回归和 SQL 数据库等主题。凭借他们的科学背景和这些基础知识,他们应该准备好获得数据科学工作。有时,基地营最好的部分不是知识本身,而是从项目中获得的自信,即你实际上能够完成这项工作。

3.2.1. 你将学到什么

一个好的基地营有一个高度优化的课程大纲,旨在教你获得数据科学工作所需的知识——没有更多。该计划不仅包括技术技能,还包括参与项目和与人建立联系的机会。以下部分提供了更多关于你应期待基地营涵盖的内容的详细信息。

技能

基地营是现有教育的绝佳补充。通过参加基地营,你将能够快速获得数据科学工作,而无需在项目中花费两年时间(如果你去攻读硕士学位的话)。如果你已经拥有非数据科学领域的硕士学位,这个事实可能特别吸引人。在基地营中,你通常会获得以下技能:

  • 基础统计学—— 这项技能包括使用数据做出预测的方法,例如线性回归和逻辑回归,以及你可以在工作中使用的测试方法,例如 t 检验。由于时间范围非常有限,你不会深入了解这些方法为什么有效,但你将学会很多关于如何使用它们的知识。

  • 机器学习方法—— 该项目将涵盖随机森林和支持向量机等机器学习算法,并展示如何通过将数据分为训练组和测试组以及使用交叉验证来使用它们。你可能会学习特定案例的算法,例如自然语言处理或搜索引擎。如果你对其中任何一词都不理解,那么你可能非常适合参加基地营!

  • R 或 Python 的中级编程——你将学习数据在数据框中如何存储以及如何通过汇总、过滤和绘图来操作它。你将学习如何使用所选程序中的统计和机器学习方法。虽然你可能学习了 R 或 Python,但你可能不会两者都学,所以如果你在第一份工作中需要它,你可能需要在训练营结束后再学习另一种语言。

  • 现实世界的应用案例——你不仅会学习算法,还会学习人们在哪里使用它们——例如,使用逻辑回归来预测客户何时停止订阅产品,或者使用聚类算法来细分客户以进行营销活动。这些知识对于找工作非常有用,并且关于应用案例的问题经常出现在面试中。

项目

训练营有一个高度以项目为基础的课程。你不会每天花八个小时听课,而是大部分时间都在从事可以帮助你理解数据科学并开始自己的数据科学作品集(第四章的主题)的项目。这比学术教育有很大的优势,因为你的技能将与你在行业成功所需的东西相匹配,这通常与基于项目的工 作相似。

在一个项目中,你首先收集数据。你可以通过使用公司创建的用于提取数据的 Web API,从网站上抓取信息,或者使用来自政府网站等地方现有的公共数据集来收集这些数据。接下来,你将数据加载到 R 或 Python 中,编写脚本以操作数据,并在其上运行机器学习模型。然后,你将使用结果来创建演示文稿或报告。

项目中的这些步骤都不需要训练营。实际上,本书的第四章完全是关于你如何可以独立完成数据科学项目。话虽如此,将项目作为训练营的一部分意味着你将会有指导老师引导你,并在事情出错时帮助你。如果你独自工作,保持动力是很困难的,如果没有可以求助的人,很容易陷入困境。

网络关系

许多人从训练营成功过渡到谷歌和 Facebook 等公司的工作。训练营保留校友网络,你可以利用这些网络进入这些公司的大门。训练营在课程期间可能会邀请数据科学演讲者,以及来自行业的人士来观看你的最终演示。所有这些人都可以作为联系,帮助你获得在他们公司的工作机会。拥有进入拥有数据科学职位的公司的途径,在找工作时可以起到决定性的作用,因此强调训练营的这一优势是值得的。

除了在课程中认识人之外,你还可以使用 LinkedIn 等工具来联系你的训练营校友。这些人可能能够帮助你找到在他们公司的工作,或者至少为你指出一个合适的公司方向。

对于所有这些联系,你必须主动,这可能意味着在演讲者演讲后与他们交谈,或者在社交网络上向之前没有交谈过的人发送消息。这个过程可能会让人感到害怕,尤其是如果你不特别擅长与陌生人进行社交互动,但这是为了从训练营中获得最大价值所必需的。查看第六章以获取撰写有效网络请求的技巧。

3.2.2. 成本

与自学相比,训练营的一个显著缺点是成本:学费通常在$15,000 到$20,000 之间。虽然你可能能够获得奖学金来支付部分学费,但你还得考虑在项目期间无法全职(甚至兼职)工作的机会成本。此外,你可能在训练营结束后几个月内都在求职市场上。你无法在训练营期间申请,因为你太忙,而且还没有学到这些技能,即使是一个成功的数据科学职位申请过程也可能从申请到开始日期需要几个月。总的来说,你可能会因为训练营而失业六到九个月。如果你能在空闲时间自学数据科学或在工作中学习,你就可以继续工作而不必支付学费,这可以为你节省数万美元。

3.2.3. 选择项目

根据你所在的地方,你可能只有少数几个训练营的选择。如果你想参加面对面的训练营,即使是大城市可能也只有几个项目。如果你不住在大城市,但想参加训练营,你可能不得不暂时搬到大城市,这可能会增加项目的成本,并使其变得更为动荡。

另外,还有针对数据科学的在线训练营可供选择。但是请注意:与研究生项目一样,面对面训练营的一个好处是,你周围会有很多人来激励你并帮助你保持专注。如果你参加在线课程,你将失去这个好处,这可能会使在线训练营成为免费或廉价公开在线课程所能提供的相同课程的$20,000 版本。

在你所在地区选择训练营时,考虑查看他们的教室,与一些讲师交谈,看看你在哪里感到最舒适。但要注意:在学术界和训练营中,很多人都在寻找从那些想成为数据科学家的人身上快速赚钱的机会。如果你不小心,你可能会完成一个根本无法帮助你找到工作的项目,并留下数万美元的债务。对于训练营来说,与校友交谈非常重要。你在领英上看到成功的毕业生了吗?如果是的话,与这些人交谈,了解他们对经验的看法。如果你在领英上找不到完成该项目的校友,这个事实就是一个巨大的红旗。

3.2.4. 总结数据科学训练营

对于想要转行并且已经了解一些数据科学基础知识的人来说,训练营可以是非常好的项目。它们也对那些刚刚离开学校,想在求职时拥有几个数据科学项目的人来说很有用。然而,训练营并不是为了让你从 0 到 60;大多数训练营都有竞争性的入学要求,你需要有编程和统计学基础背景才能进入,并从项目中获得最大收益。

3.3. 在你公司内获得数据科学工作

你可能会发现自己从事与数据科学相关的工作。一种不寻常但通常非常有效的学习数据科学的方法是在你的当前工作中越来越多地做数据科学工作。也许你是一位商人,给数据科学报告添加商业视角,并可以开始添加自己的图表。或者也许你在金融行业工作,制作你可以转移到 R 或 Python 的电子表格。

考虑一个假设的 Amber,一个在市场调研部门工作了几年的人,负责对客户进行调研,并使用市场调研图形用户界面(GUI)来汇总调研结果。Amber 有社会学背景,在本科期间做了一些编程。他们经常与数据科学部门合作,传递调研数据,帮助数据科学家理解这些数据,以便他们可以在模型中使用它。随着时间的推移,Amber 开始为数据科学团队做一些工作——在这里做一些 R 语言的特征提取,在那里做一些可视化创建。很快,数据科学团队越来越依赖 Amber。在这段时间里,他们真正提高了团队成员的编程和数据科学技能。一年后,他们全职加入数据科学团队,放弃了市场调研工作。

在您当前的工作中尝试进行一些数据科学工作是一个很好的方法,因为它风险低且具有内置的动力。您不是在尝试参加一个昂贵的训练营或学位课程,您需要为此辞职;您只是试图在您能做的地方添加一些数据科学工作。而且,您在自己的工作中进行数据科学工作是有动力的,因为您将要做的工作对他人来说是有价值的。随着时间的推移,您可以做更多数据科学工作,直到最终,它成为您唯一的工作,而不是参加教育项目然后突然换工作。

前市场研究员,现在是数据科学家 Amber 有几个优势:

  • 他们与数据科学部门已有合作关系,该部门提供了指导。

  • 他们掌握了编程和数据可视化的基础知识。

  • 他们有足够的动力在他们的工作中学习数据科学技术。

  • 数据科学部门能够提供一些小项目,他们可以应对,随着时间的推移,这些项目逐渐增长,使 Amber 能够成为一名数据科学家。

当您试图在您的公司做更多数据科学工作时,寻找您可以找到的小数据科学项目和帮助您的人。像创建报告或自动化现有报告这样简单的事情可以教会您很多关于数据科学的知识。

如果您选择这条道路,请注意一个重要事项:永远不要成为他人的负担。直接的负担可能非常明显,例如反复要求人们为您创建清洗后的数据集,或者不那么明显,例如不断要求某人审阅您已完成的工作。您还可以通过向团队添加新工具无意中造成负担。如果您在金融行业,除了您之外,每个人都使用 Microsoft Excel(您现在使用 R),您已经使管理团队变得更加复杂。甚至请求别人为您做您能做的事情也是一种负担,因为这样他们就需要为您找到可以做的事情。在学习这些技能时,请务必小心,不要为他人制造问题。

两种对话视角

您说的话: “我很乐意尽我所能提供帮助;请告诉我如何!谢谢!”

你认为他们听到的内容是: “我是一个渴望为您工作的人。您可以交给我那个您长时间保留的既令人兴奋又简单易懂的项目,我会为您完成它!”

他们实际听到的内容是: “嗨!我想有所帮助,但我不知道您的需求是什么。我也不清楚我的技能与您的工作量相比如何,所以祝您好运,找到我能做的任务。另外,如果您 somehow 找到适合我的完美任务,您可能需要多次审阅它,直到它变得完美。所有这些工作都将占用您已经很少的可用时间。谢谢!”

要使这条道路可行,您需要采用一些关键策略:

  • 主动一些—— 你能在别人要求之前完成更多的工作,你就越能变得更加独立,减少负担。数据科学团队可能有一个任务,比如标记数据或制作简单的报告,这些任务耗时且无趣。你可以提出帮助完成这些工作。但要注意,不要只是盲目地跳进去自己动手做:你可能会以一种对团队没有任何价值但给了团队重新做你工作的机会的方式完成任务。然而,如果你能启动任务并获取其他人的意见,你可能会为团队节省很多时间。

  • 一次学习一项新技能—— 不要试图一次性学习关于数据科学的全部内容。找到你通过工作想要学习的一项单一技能,然后学习它。例如,你可能想学习如何使用 R 制作报告,因为数据科学团队经常这样做。通过找到一个可以帮助团队的小项目,你可以掌握这项技能并将其添加到你的工具箱中。从那里,你可以学习不同的数据科学技能。

  • 明确你的意图—— 很快就会很明显,你是在试图承担额外的工作来学习成为数据科学家。如果你主动,并让数据科学团队知道你对学习更多感兴趣,团队就能计划让你帮忙。此外,团队成员对你的不成熟会更有理解,因为他们曾经也是新手,也在学习。

  • 避免过于积极—— 帮助一个人成为数据科学家是一项巨大的工作量,而且通常,数据科学团队已经非常忙碌。如果你发现团队没有时间或精力来帮助你,不要把它当作个人问题。虽然偶尔检查一下团队是否失去了联系是可以的,但如果你的请求过于坚持,团队会很快感到不舒服。成员们会认为你与其说是一个潜在的资源,不如说是一个麻烦。

当没有机会时

你可能会发现自己处于一个没有机会在当前角色中使用数据科学的情况。可能你的工作限制阻止了你使用 R 或 Python,或者尝试实施数据科学技术。在这些情况下,你可能不得不采取极端措施。辞职去参加训练营或研究生学位是风险但有效的方法,可以让你摆脱当前的角色并进入数据科学领域。你也可以尝试在空闲时间自学,但这种方法有很多缺点(见第 3.4 节)。另一个选择是尝试在你所在的领域找到一份新工作,这样你可以在那个职位上学习更多。但当你到达新工作时,你能否得到你承诺的灵活性,这没有保证。

没有任何一种选择是容易的,但不幸的是,这就是现状的现实。进入数据科学职位需要付出努力,但这种努力可能非常值得。

3.3.1. 工作中学习总结

在工作中学习可以成为成为一名数据科学家的一种有效方式,前提是你有一份可以应用数据科学技能的工作,并且周围有可以指导你的人。如果这些条件都满足,那么这条路是非常好的,但对于许多人来说,这些条件并不具备。如果你认为这条路对你来说是可行的,我们强烈建议你尝试一下。工作通常不允许在工作中学到东西,所以如果你有机会,一定要抓住它。

3.4. 自学

有大量的书籍涵盖了数据科学(比如,嗯,这本书),以及许多在线课程。这些书籍和网站承诺通过一种实用(并且价格合理)的方式教授数据科学的基础知识和深入的技术技能。这些课程和书籍——以及所有数据科学博客、教程和 Stack Overflow 的回答——可以为人们提供足够的基础,使他们可以自学数据科学。

这些自学的学习材料非常适合学习个别技能。例如,如果你想了解如何进行深度学习,一本书可以是一个很好的学习方式。或者,如果你想了解 R 和 Python 的基础知识,你可以参加在线课程开始学习。

完全通过自学在线课程和书籍来学习数据科学,就像通过 YouTube 视频自学演奏乐器或在没有老师的情况下学习任何其他东西一样:这种方法的价值主要取决于你的毅力。学习新技能可能需要数百或数千个小时。当最好的 TikTok 视频就在另一个标签页上时,投入数千个小时来学习数据科学是非常困难的。同时,也很难知道从哪里开始。如果你想学习数据科学中的所有内容,谁能告诉你应该先读哪本书(比如,嗯,这本书)?

自学意味着你没有老师或榜样。由于没有可以提问的老师,就像在学术项目或训练营中那样,你将无法立即理解你做错了什么,或者知道下一步该做什么。在无方向或走错路所花费的时间是理解材料的障碍。对抗没有老师最好的方式是找到一个你可以提问的人群。一个很好的例子是托马斯·莫克发起的 TidyTuesday 项目(github.com/rfordatascience/tidytuesday);每周二,有抱负的数据科学家和实践中的数据科学家使用 R 来解决数据科学问题。

如果你决定走自主学习的路线,做一些有建设性的工作是很重要的。读书和看视频很好,但你从自己的数据科学工作和从中学习到的会更多。换句话说,阅读关于自行车的书籍可能会有教育意义,但如果你不真正骑上自行车,你永远也学不会骑自行车。确保找到一个你想要做的项目,比如从一个数据集中找到有趣的结果,创建一个机器学习模型和 API,或者使用神经网络生成文本。在第四章中,我们将更详细地介绍这些类型的项目。对于其他学习数据科学的方法,项目可以是建立个人作品集,但对于自主学习,项目是至关重要的。

3.4.1. 总结自学

自主学习很困难——虽然可能,但很困难。你需要能够确定你想要学习的顺序,保持足够的动力来学习技能,并且在没有导师或老师帮助的情况下完成这一切。你也会发现自己比使用其他方法更难在简历上展示你的资格。由于可能出现很多问题,以及很多人无法保持专注,这种方法是我们最不推荐成为数据科学家的途径。如果你想掌握一项或一项技术,走这条路可能更可行,但学习成为数据科学家所需的所有技能是一条艰难的道路。

3.5. 选择决定

你如何在这四条截然不同的数据科学途径之间做出选择?这个过程因人而异,但我们建议回答三个问题(图 3.1):

  1. 你已经有一些数据科学知识了吗? 特别是,你是否至少在轻量级课程之外使用过至少一种编程语言?你知道如何从 SQL 数据库查询数据吗?你知道像线性回归这样的东西是什么吗?

    1. 如果你回答“不,我有很多东西要学”,你可能最适合一个学术项目,比如硕士学位。这个项目将在足够长的时间内教授你所有这些主题,以便它们真正扎根。

    2. 如果你回答“是的,我知道这些内容”,请继续到问题 2。

  2. 你愿意花上一年的时间或更长时间来掌握必要的数据科学技能,而不是为了更快地找到数据科学工作而失业六到九个月吗? 当你专注于学习时,快速学习新技能是很困难的;如果你同时全职工作,那就更难了。你能否接受这条路可能会更长,这样你就可以继续全职工作?

    1. 如果你回答“不,我必须快速行动”,参加一个训练营。三个月后,你将掌握大量的数据科学知识,并准备好开始寻找新工作,这可能需要额外三到六个月的时间。

    2. 如果你的答案是“是的,我想慢慢来”,请继续到问题 3。

  3. 你能在当前的工作中学习数据科学吗? 你能在当前的角色中做数据科学的事情吗,比如进行一些分析,将一些数据存储在 SQL 中,或者尝试使用 R 或 Python?有没有一个团队可以指导你或给你一些小任务?

    1. 如果你的答案是“是的,我可以在工作中学习”,尝试这样做,并利用你的工作作为跳板进入数据科学。

    2. 如果你的答案是“不,我的工作没有机会”,那么是时候拿起书本和在线课程了。

图 3.1. 决定选择哪种数据科学教育路线的流程

图片

虽然这些问题应该为你提供一个起点,但你不必做出最终决定。你可以先独立阅读书籍,如果你发现你想要更快地学习,可以转向训练营。你还可以在尝试在当前工作中做数据科学的同时,晚上获得硕士学位。没有一种完美的答案;重要的是找到适合你的方法,如果某件事不起作用,就改变它,直到它起作用。

当你选择了你的路线,就是时候去遵循它了!报名参加那个硕士学位课程,加入那个训练营,或者购买那些书籍并开始阅读。为了这本书的目的,我们假设时间过去了,你已经成功学习了成为一名数据科学家所需的基本技能。在接下来的几章中,你将使用这些技能来创建一个可以帮助你获得第一份数据科学工作的数据科学作品集。

3.6. 访谈:Julia Silge,RStudio 的数据科学家和软件工程师

Julia Silge 因其在数据科学方面的热门博客文章以及她与 David Robinson 共同开发的 tidytext 包而闻名,该包是 R 中 NLP 的基石,下载量已超过 70 万次。她和 Robinson 还合著了《使用 R 进行文本挖掘:整洁方法》(O’Reilly)。Julia 曾在 Stack Overflow 担任数据科学家多年,现在在 RStudio 开发开源机器学习工具。

在成为数据科学家之前,你在学术界工作过;你在那里学到的技能如何帮助你作为数据科学家?

当我作为一名学者进行研究时,我的一些日子花在收集现实世界数据上。这段经历教会了我思考数据是如何被创建的过程。在这种情况下,它是由一个我可以触摸的物理过程创建的。我实际上可以看到导致数据杂乱无章或为什么在某个晚上我们没有获得数据点的原因。我看到了与我几年在处理网络数据的技术公司工作的直接平行;有一些过程产生了那些数据,我必须仔细思考我们如何记录那些数据以及这个过程如何顺利进行或出错。与真实世界数据相关的经验现在指导我开发机器学习工具的方法。

在成为数据科学家之前,我还学习了一组技能,那就是沟通和教学。我曾是一名大学教授多年,我也曾担任过与客户打交道的角色。在这些角色中,我练习了将一个概念尝试传递给另一个人的技能。我坚信,这是大多数数据科学家角色的一部分。如果我们训练了一些模型或进行了一些统计分析,那么它的价值与我们能够解释这个模型或分析的意义、工作原理或如何在更广泛的环境中实施它相比,就小得多。

当你决定成为一名数据科学家时,你使用了什么方法来学习新技能?

我确实认为学术项目、训练营和在线材料都是针对不同情况下的不同人的绝佳选择。鉴于我已经有了博士学位,我不想再回学校并花更多的钱。我必须承认,我申请了几次训练营,但他们都拒绝了我!当我决定进入数据科学领域时,我所感知的是,我可以做那份工作,但我需要向其他人证明我能做到。我还需要更新我的机器学习知识以及一些技术,因为当我还在研究生院时,现代机器学习还没有真正进入天体物理学。

我选择了在线课程和大量自学这条路。我开玩笑说,我参加了当时存在的每一个 MOOC(大规模开放在线课程):数量真的很多。我在一份工作中稍微有点失业,大约花了六个月的时间,然后我全力以赴地投入在线课程。我已经离开学校很长时间了,我对这些材料感到非常兴奋。我甚至有一段时间没有进行数据分析,所以重新进入数据分析领域真的很令人兴奋!

你在进入数据科学领域之前就知道你想要做什么类型的工作吗?

当我提前查看我的选择并看到人们都在做什么时,比如人们谈论“分析”与“构建”数据科学,我绝对认为自己是一个分析型的人。我觉得自己更像是一个科学家,而不是工程师——一个致力于理解事物和回答问题的人,而不是那么专注于构建事物。我的职业生涯就是从这里开始的。在我大部分时间里,我是 Stack Overflow 唯一的 data scientist,我和一个非常有才华、知识渊博的数据工程师团队一起工作。作为唯一的 data scientist,我的工作既是数据分析又是模型构建。现在,我在从事开源工具的工作,我的头衔是“软件工程师”,我花在构建上的精力比分析上的更多。

你会向那些想要获得数据科学家技能的人推荐什么?

我要强烈强调的一点是,你需要证明你能胜任这份工作。这可能会因人而异。这个领域还足够年轻,人们不确定成为数据科学家意味着什么,谁可以成为数据科学家;它仍然非常不明确。关于这个角色意味着什么,仍然有很多不确定性,而且这些职位薪酬很高,公司招聘错误的风险感知非常高,因此公司非常规避风险。公司需要确保候选人能够胜任这份工作。我看到的一些人展示他们能胜任工作的方式是通过开源贡献、在当地聚会中就他们完成的项目发表演讲,以及在博客或 GitHub 个人资料上开发项目作品集。对我来说,我学习了所有我需要学习的 MOOCs 和其他东西,并开始了一个关于所有这些项目的博客。我设想的是,这些项目和博客文章将成为我们在面试中可以讨论的内容。

摘要

  • 学习成为数据科学家所需技能的四种经过验证的途径是学术项目、训练营、在你当前工作中学习技能,以及自学。

  • 这些方法在教授的材料、所需时间和所需的自我激励水平方面都有权衡。

  • 为了选择适合自己的道路,花时间反思你已经拥有的技能、你的优势所在以及你拥有的资源。

第四章:构建作品集

图片

本章涵盖

  • 创建一个吸引人的数据科学项目

  • 开始写博客

  • 全部示例项目的详细教程

你现在已经完成了一个训练营、一个学位课程、一系列在线课程,或者在你当前工作中的一系列数据项目。恭喜你——你准备好去获得数据科学家的工作了!对吗?

嗯,也许吧。本书的第二部分全部关于如何寻找、申请以及获得数据科学职位,你当然可以现在就开始这个流程。但另一个步骤真的可以帮助你成功:构建作品集。一个作品集是一系列你可以向他人展示的数据科学项目,以便他们可以看到你能做什么样的数据科学工作。

一个强大的投资组合有两个主要部分:GitHub 仓库(简称“repos”)和博客。GitHub 仓库托管项目的代码,而博客展示了您的沟通技巧和您数据科学工作的非代码部分。大多数人不想阅读数千行代码(您的仓库);他们希望快速了解您所做的是什么以及为什么它很重要(您的博客)。而且谁知道呢——您甚至可能吸引来自世界各地的数据科学家阅读您的博客,这取决于主题。正如我们在本章的第二部分所讨论的,您不必仅仅写关于您所做的分析或构建的模型;您还可以解释一种统计技术,为文本分析方法编写教程,甚至分享职业建议(例如您如何选择学位课程)。

这并不是说您需要拥有一个博客或充满项目的 GitHub 仓库才能成为一名成功的数据科学家。实际上,大多数数据科学家都没有,而且人们经常在没有投资组合的情况下找到工作。但创建一个投资组合是帮助您脱颖而出、练习您的数据科学技能并变得更好的绝佳方式。我们也希望这会很有趣!

本章将引导您了解构建良好投资组合的过程。第一部分是关于进行数据科学项目并在 GitHub 上组织它。第二部分将介绍开始和分享博客的最佳实践,以便您能从所做的工作中获得最大价值。然后我们将向您展示我们实际完成的两个项目,以便您可以看到整个过程。

4.1. 创建项目

数据科学项目始于两件事:一个有趣的数据集和一个关于它的提问。例如,您可以取政府的人口普查数据,并问“全国的人口统计数据是如何随时间变化的?”问题和数据的结合是项目的核心(图 4.1),有了这两样东西,您就可以开始进行数据科学了。

图 4.1. 创建数据科学项目的流程

04fig01_alt.jpg

4.1.1. 寻找数据和提出问题

当您在考虑要使用哪些数据时,最重要的是找到对您有趣的数据。您为什么想使用这些数据?您选择数据的方式是展示您个性或您从前的工作或学习中获得的领域知识。例如,如果您从事时尚行业,您可以查看关于时装周的文章,看看过去 20 年风格是如何变化的。如果您是一位热情的跑步者,您可以展示您的跑步是如何随时间变化的,也许还可以看看您的跑步时间是否与天气有关。

您不应该做的事情是使用泰坦尼克号数据集、MNIST 或任何其他流行的入门级数据集。这并不是说这些学习体验不好;它们可以是好的,但您可能找不到任何新颖的内容,这会令雇主感到惊讶和好奇,或者让他们更多地了解您。

有时候,一个问题会引导你找到你的数据集。例如,你可能对大学专业性别分布随时间的变化以及这种变化是否与毕业后的中位数收入相关感兴趣。然后你会去谷歌尝试找到那个数据来源的最佳来源。

但也许你没有一个迫切的问题,你一直在等待数据科学技能来回答。在这种情况下,你可以从浏览数据集开始,看看你是否能提出任何有趣的问题。以下是一些建议,你可以从这里开始:

  • Kaggle.com Kaggle 最初是一个数据科学竞赛的网站。公司发布数据集和问题,通常为最佳答案提供奖金。由于这些问题涉及试图预测某些事情的机器学习模型,例如某人是否会违约或一栋房子的售价是多少,用户可以根据它们在保留测试集上的表现来比较模型,并为每个模型获得一个性能指标。Kaggle 还有讨论论坛和“内核”,人们在这里分享他们的代码,这样你就可以了解其他人如何处理数据集。因此,Kaggle 有数千个数据集,附带问题和其他人分析它们的示例。Kaggle 的最大优点也是最大的缺点:通过给你一个(通常已清理的)数据集和问题,它为你做了很多工作。你还有数千人正在解决相同的问题,因此很难做出独特的贡献。一种使用 Kaggle 的方法是取一个数据集,但提出不同的问题或进行探索性分析。但通常我们认为,Kaggle 最适合通过解决一个项目然后看到你与其他人的表现相比如何来学习,从而从他们的模型中学到东西,而不是作为你作品集的一部分。

  • 新闻中的数据集— 最近,许多新闻公司开始公开他们的数据。例如,FiveThirtyEight.com,一个专注于民意调查分析、政治、经济和体育博客的网站,发布了可用于文章的数据,甚至直接从文章网站链接到原始数据。尽管这些数据集通常需要手动清理,但它们出现在新闻中意味着可能有一个明显的问题与它们相关。

  • APIs— APIs(应用程序编程接口)是开发者工具,允许您直接从公司获取数据。您知道如何输入一个 URL 并访问一个网站吗?APIs 就像 URL 一样,但与网站不同,您会得到数据。一些提供有用 API 的公司示例包括《纽约时报》和 Yelp,它们分别允许您获取他们的文章和评论。一些 API 甚至有 R 或 Python 包,专门使与它们一起工作变得更容易。例如,rtweet for R 允许您快速获取 Twitter 数据,以便您可以找到带有特定标签的推文,了解京都的热门话题,或者查看斯蒂芬·金喜欢的推文。请记住,您使用这些 API 的方式有局限性和服务条款。例如,目前 Yelp 每天限制您调用 5000 次,因此您将无法获取所有评论。APIs 非常适合从多个来源提供极其强大、组织良好的数据。

  • 政府公开数据— 许多政府数据都可以在线获取。您可以使用人口普查数据、就业数据、一般社会调查以及大量的地方政府数据,例如纽约市的 911 电话或交通计数。有时,您可以直接下载这些数据作为 CSV 文件;在其他时候,您需要使用 API。您甚至可以向政府机构提交信息自由法案请求以获取未公开列出的数据。政府信息很棒,因为它通常很详细,涉及不寻常的主题,例如西雅图每只动物的注册宠物名称数据。政府信息的缺点是它通常格式不佳,例如存储在 PDF 文件中的表格。

  • 您的数据— 您可以在许多地方下载有关您自己的数据;社交媒体网站和电子邮件服务是其中两个大来源。但如果你使用应用程序来跟踪你的身体活动、阅读列表、预算、睡眠或其他任何事情,你通常也可以下载这些数据。也许你可以基于你与配偶的电子邮件构建一个聊天机器人。或者,你可以查看你在推文中使用的最常见单词以及这些单词随时间的变化。也许你可以跟踪你一个月的咖啡因摄入量和锻炼情况,看看你是否可以预测你睡得多少以及睡得好不好。使用你自己的数据的优点是,你的项目保证是独一无二的:没有人之前看过这些数据!

  • 网络爬虫—— 网络爬虫是一种从没有 API 的网站上提取数据的方法,本质上是通过自动化访问网页并复制数据来实现的。你可以创建一个程序,搜索电影网站上的 100 位演员名单,加载他们的演员资料,复制他们出演的电影列表,并将这些数据放入电子表格中。不过,你必须小心:爬取网站可能违反网站的使用条款,你可能会被禁止访问。你可以检查网站的 robots.txt 文件来了解允许做什么。你还要对网站友好:如果你频繁地访问一个网站,你可能会让它崩溃。但假设服务条款允许这样做,并且你在访问之间留出时间,爬取可以是一种获取独特数据的好方法。

什么让一个副项目变得有趣?我们的建议是选择一个探索性分析,其中任何结果都可能教会读者一些东西或展示你的技能。你可能会创建一个按类别着色的西雅图 311 电话互动地图;这个地图清楚地展示了你的可视化技能,并显示了你能写出出现的模式。另一方面,如果你尝试预测股市,你可能做不到,而且如果你有负面结果,雇主很难评估你的技能。

另一个提示是看看你在谷歌搜索问题时会出现什么。如果前几个结果都是报纸文章或博客文章,它们正好回答了你提出的问题,你可能需要重新考虑你的方法。有时,你可以扩展他人的分析或引入其他数据,为分析增加另一层,但你可能需要从头开始这个过程。

4.1.2. 选择方向

建立一个作品集不需要投入大量时间。在这里,完美是优秀的敌人。有比没有好;雇主首先寻找的证据是你能够编码并就数据进行沟通。你可能担心人们会看到你的代码并嘲笑,或者会说,“哇,我们以为这个人可能还不错,但看看他们的糟糕代码!”这种情况非常不可能发生。一个原因是雇主会根据资历水平调整他们的期望:如果你是一个初学者数据科学家,你不需要像计算机科学专业的学生那样编码。一般来说,更大的担忧是你根本不会编码。

还应该考虑我们在第一章中涵盖的数据科学领域。你想要在可视化方面专长吗?使用 D3 制作一个交互式图表。你想要进行自然语言处理吗?使用文本数据。机器学习?预测某事。

使用你的项目强迫自己学习新知识。进行这种类型的动手分析将揭示你知识中的空白。当你真正感兴趣的数据在网络上时,你会学习网络爬虫。如果你认为某个特定的图表看起来很丑,你会学习如何制作更好的可视化。如果你是自学,做一个项目是克服不知道下一步该学什么的无助感的不错方式。

自主驱动的项目常见的一个问题是范围过广。范围过广是指想要做所有的事情或者随着项目的进行不断添加更多内容。你总是可以继续改进/编辑/补充,但这样你永远不会完成。一个策略是像好莱坞一样思考,创作续集。你应该给自己提出一个问题并回答它,但如果认为以后可能想要重新审视它,你可以在研究结束时留下一个问题或进一步调查的主题(或者如果你必须的话,“待续……?”)。

另一个问题是无法进行转型。有时,你想要的数据不可用。或者数据量不足。或者你无法清理它。这些情况令人沮丧,在这个时候放弃很容易。但尝试找出如何挽救项目是值得的。你是否已经完成了足够的工作来写一篇博客教程,比如你是如何收集数据的?雇主寻找那些从错误中学习并且不怕承认错误的人。仅仅展示出了什么问题,以便其他人可能避免相同的命运,这仍然是有价值的。

4.1.3. 填写 GitHub README

也许你在一个训练营或学位项目中,你已经在做自己的项目。你甚至已经将代码提交到了 GitHub。这足够了吗?

不!一个有用的 GitHub 仓库的最小要求是填写 README 文件。你有一些问题需要回答:

  • 项目是什么? 它使用什么数据?它回答了什么问题?输出是什么:一个模型、一个机器学习系统、一个仪表板或一份报告?

  • 如何组织仓库? 这个问题当然意味着,仓库实际上是以某种方式组织起来的!有各种各样的系统,但一个基本的做法是将你的脚本分成几个部分:获取(如果相关)你的数据,清理它,探索它,以及最终的分析。这样,人们就可以根据他们感兴趣的内容找到相应的部分。这也暗示了,当你去公司工作时,你会保持你的工作井然有序。公司不希望冒风险雇佣你,然后在交接项目时,你给某人一个没有注释的、5,000 行的脚本,他们可能无法理解和使用。良好的项目管理也有助于未来的你:如果你以后想重用代码的一部分,你会知道去哪里找。

但尽管进行一个项目并在文档化的 GitHub 仓库中公开它是好事,但要真正理解代码为什么重要却非常困难。在你完成一个项目后,下一步是写一篇博客文章,这样人们就会知道你做的事情为什么酷和有趣。没有人关心 pet_name_analysis.R,但每个人都关心“我用 R 找到了最愚蠢的宠物名字!”

4.2. 开始写博客

博客允许你展示你的思考和项目,但它们也可以提供你工作的非技术视角。我们知道,我们知道——你刚刚学到了所有这些伟大的技术知识!你想要展示它们!但成为一名数据科学家几乎总是意味着向非专业人士传达你的结果,而博客将为你提供将数据科学过程转化为商业语言的经验。

4.2.1. 可能的主题

假设你已经创建了一个博客。人们真的会对你的项目感兴趣吗?你甚至还没有数据科学家的头衔;你怎么能教别人任何东西呢?

有一个值得记住的好方法是,你最适合教那些比你晚一步的人。在你刚刚学习一个概念,比如为你的包使用持续集成或制作一个 TensorFlow 模型之后,你仍然理解你所遇到的误解和挫折。多年以后,很难回到那个初学者的心态。你有没有遇到过一个显然非常聪明但完全无法传达概念的教师?你并不怀疑他们知道这个主题,但他们无法为你分解它,似乎他们很沮丧,因为你没有立刻就明白。

尝试将你的受众想象成六个月前的你。从那时起你学到了什么?你希望有哪些资源可用?这个练习也是庆祝你进步的好方法。在数据科学领域有这么多东西要学习,很容易觉得你永远做得不够;停下来看看你已经取得的成就是一件好事。

你可以将数据科学博客文章分为四个类别:

  • 代码密集型教程— 教程向读者展示如何在 Python 中进行诸如网络爬取或深度学习等操作。读者通常会是其他有志或正在实践的数据科学家。尽管我们称这些教程为“代码密集型”,但你通常仍然希望文本行数与代码行数相当,甚至更多。代码通常不是自我解释的;你需要引导读者了解每个部分的作用、为什么要这样做以及结果是什么。

  • 理论密集型教程— 这些教程向读者传授统计或数学概念,例如什么是经验贝叶斯或主成分分析是如何工作的。它们可能包含一些方程或模拟。与代码密集型教程一样,你的受众通常是其他数据科学家,但你应该写得更通顺,以便任何有一定数学背景的人都能跟上。理论密集型教程特别适合展示你的沟通技巧;有一种刻板印象认为,许多技术人员,尤其是那些拥有博士学位的人,无法很好地解释概念。

  • 你完成的一个有趣项目— 正如我们在第 4.1 节中希望说服你的那样,你不必只专注于突破性的医学图像识别工作。你也可以找出哪些《暮光之城》电影只使用了莎士比亚的《暴风雨》中的单词。例如,我们采访过的 Julia Silge,她在第三章中使用了神经网络生成听起来像简·奥斯汀的文字。这些博客文章可以更多地关注结果或过程,具体取决于你项目中哪部分最有趣。

  • 撰写你的经验。 你不必仅仅写关于教程或数据科学项目的博客。你可以在数据科学聚会或会议上谈谈你的经历:你发现哪些演讲有趣,给第一次参加的人提供建议,或者一些演讲者分享的资源。这类帖子可能对那些考虑在第二年参加相同活动或因物流或财务原因无法参加会议的人有帮助。同样,这类博客文章可以让潜在雇主了解你的思维和沟通方式。

4.2.2. 物流

但你应该在哪里放置你的有趣写作?对于博客,你有两个主要选择:

  • 创建你自己的网站。 如果你使用 R 语言,我们建议使用 blogdown 包,它允许你使用 R 代码创建一个博客网站(很酷,对吧?)。如果你使用 Python,Hugo 和 Jekyll 是两个选项,两者都允许你创建静态博客网站,并附带其他人构建的一系列主题,让你可以用 Markdown 编写博客文章。我们建议你不要过于担心你的主题和风格;只需选择一个你喜欢的。没有什么比因为过于关注博客的外观而停止写博客更糟糕的了。简单可能是最好的选择;更换主题可能会很麻烦,所以最好不要选择你可能在六个月内厌倦的主题。

  • 使用 Medium 或其他博客平台。Medium 是一个免费的在线发布平台。公司通常不创作内容;相反,它为数十万作者托管内容。如果你想要快速开始,Medium 和类似网站是不错的选择,因为你不需要担心托管或建立网站;你只需点击“新建文章”,开始写作并发布。当人们搜索诸如“数据科学”或“Python”等博客网站时,你也可以获得更多的流量。但一个担忧是,你处于平台的控制之下。例如,如果公司改变其商业模式并将所有内容都放在付费墙后面,你将无法做任何事情来保持你的博客文章免费。你也无法创建一个真正的个人简介部分或添加其他内容,例如包含你发表过演讲的链接页面。

人们关于博客的常见问题之一是多久需要发布一次文章,以及文章应该有多长。这些事情无疑是个人选择。我们见过有些人拥有微型博客,每周发布多篇简短的文章。其他人则可能几个月才发布一篇文章,并发布较长的文章。确实有一些限制;你确实想确保你的文章不会开始变得像《尤利西斯》那样冗长。如果你的文章非常长,你可以将其分成几个部分。但你希望展示你能够简洁地沟通,因为这是数据科学的核心技能之一。高管甚至你的经理可能不想或不需要听到你所有的尝试或尝试过的 20 种不同方法。尽管你可能选择包含你尝试的简要总结,但你需要迅速切入主题并展示你的最终路径。不过,有一个例外,那就是如果你的最终方法会令读者感到惊讶。例如,如果你没有使用最流行的库来解决一个问题,你可能想解释你没有这样做是因为你发现那个库不起作用。

你是否担心没有人会阅读你的博客,所有的工作都将付诸东流?好吧,无论如何拥有一个博客的一个原因就是它有助于你的求职申请。你可以在简历上添加指向你博客文章的链接,在提及数据科学项目时展示给面试官看,尤其是如果这些文章包含漂亮的交互式可视化或仪表板的话。拥有成百上千的读者并不重要。如果你在 Medium 上获得点赞或者在数据科学公司的通讯中受到推荐,那当然很好,但更重要的是拥有一个愿意阅读、重视并参与你内容的受众,而不是追求高流量指标。

这并不是说没有任何方法可以建立读者群。首先,你应该宣传自己;尽管这是一个陈词滥调,但拥有一个#品牌对于长期建立网络是有用的。即使某件事看起来很简单,但由于这个领域的规模很大,它可能对一群实际的数据科学家来说还是新鲜的。你想要工作的公司的人甚至可能会阅读你的东西!Twitter 是一个开始的好地方;你可以在发布文章时分享新闻,并使用适当的标签来获得更广泛的读者群。

但即使没有人(除了你的合作伙伴和宠物)阅读你的博客,你的博客也是很有价值的。撰写博客文章是一种很好的练习;它迫使你整理你的思路。就像亲自教学一样,它也有助于你意识到你不知道的东西比你想象的要多。

4.3. 在示例项目上工作

在本节中,我们将带你了解两个示例项目,从最初的构想到分析,再到最终的公开成果。我们将使用本书作者实际完成的项目:为数据科学自由职业者创建一个网站应用程序,帮助他们找到最合适的职位,以及通过在一个禁止的牌照数据集上训练来学习神经网络。

4.3.1. 数据科学自由职业者

Emily Robinson

问题

当我还是一个有抱负的数据科学家时,我对一些数据科学家赚取额外收入的一种方式产生了兴趣:自由职业。自由职业是为你未受雇于的人做项目,无论是另一个人还是一家大公司。这些项目从几小时到几个月的全职工作不等。你可以在像 UpWork 这样的自由职业网站上找到许多自由职业工作,但由于数据科学是一个非常广泛的领域,该类别的工作可能从网站开发到 Excel 分析,再到对 TB 级数据的自然语言处理。我决定看看我是否可以帮助自由职业者从数千个职位中筛选出最适合他们的职位。

分析

为了收集数据,我使用了 UpWork 的 API 来抓取当前可用的职位以及数据科学和分析类别中每个人的资料。最终我得到了 93,000 名自由职业者和 3,000 个职位。虽然 API 使得获取数据相对容易(因为我不需要进行网络爬取),但我仍然需要编写函数来进行数百次 API 调用,处理 API 调用失败的情况,然后将数据转换成我可以使用的形式。但这个过程的优势在于,因为数据不是现成的,所以没有数百人同时在同一个项目上工作,这在我使用 Kaggle 竞赛的数据时可能会发生。

在我整理好数据之后,我进行了一些探索性分析。我研究了教育水平和国家如何影响自由职业者的收入。我还制作了一个图表,展示了自由职业者列出的技能之间的相关性,这显示了不同类型的自由职业者:网页开发者(PHP、jQuery、HTML 和 CSS)、金融和会计(财务会计、簿记和财务分析)以及数据收集(数据录入、线索生成、数据挖掘和网页抓取),以及“传统”的数据科学技能集(Python、机器学习、统计学和数据分析)。

最后,我创建了一个介于个人资料文本和职位文本之间的相似度评分,并将该评分与技能重叠(自由职业者和职位都列出了技能)结合起来,为自由职业者和职位创建一个匹配评分。

最终产品

在这种情况下,我没有写博客文章。相反,我制作了一个交互式网络应用程序,用户可以输入他们的个人资料文本、技能和职位要求(例如,职位发布者的最低反馈评分以及工作所需的时间),然后可用的职位将被筛选以满足这些要求,并按与用户的匹配度进行排序。

我没有让完美成为优秀的敌人;我有许多方法可以使这个项目变得更好。我只提取了一次职位,由于我是在四年前做这个项目的,所以应用程序仍然可以使用,但那些职位已经不再可用。为了使应用程序长期有价值,我需要每晚提取职位并更新列表。我还可以制作一个更复杂的匹配算法,加快应用程序的初始加载时间,并使外观更华丽。但尽管有这些限制,项目实现了几个重要的目标。它表明我可以将一个项目交给人们互动,而不是仅限于我笔记本电脑上静态的分析。它有一个实际的应用场景:帮助自由职业者找到工作。并且它带我经历了整个数据科学项目周期:收集数据、清理数据、进行探索性分析和生成最终输出。

4.3.2. 在冒犯性车牌上训练神经网络

Jacqueline Nolis

问题

随着我作为一个数据科学家的成长,当我看到一些关于人们训练神经网络生成新乐队名称、新宝可梦和奇怪烹饪食谱的搞笑博客文章时,我总是感到沮丧。我认为这些项目很棒,但不知道如何自己完成它们!有一天,我想起我听说过一个数据集,包含了亚利桑那州因过于冒犯而被拒绝的所有定制车牌。如果我能得到这个数据集,它将非常适合最终学习如何制作神经网络——我可以制作自己的冒犯性车牌(图 4.2)!

图 4.2. 冒犯性车牌生成神经网络样本输出

分析

在向亚利桑那州交通部提交公开记录请求后,我得到了数千个冒犯性牌照的列表。我对神经网络一无所知,所以在收到数据后,我开始在网上寻找描述如何制作神经网络的博客文章。作为一个主要的 R 用户,我很高兴找到了 RStudio 的 Keras 包,用于在 R 中创建神经网络。

我将数据加载到 R 中,然后查看了 RStudio Keras 包的示例,该示例用于使用神经网络生成文本。我将代码修改为适用于牌照数据;RStudio 的示例是用于生成长文本序列的,但我想在七位数的牌照上训练。这意味着从每个牌照中为我的模型创建多个训练数据点(每个数据点预测牌照中的每个字符)。

接下来,我训练了神经网络模型,尽管一开始并没有成功。放下项目一个月后,我回来意识到我的数据处理并不完全正确。当我解决这个问题后,神经网络生成的结果非常出色。最终,尽管我没有对 RStudio 的示例做太多修改,但到头来,我在创建和使用神经网络方面感到更加自信。

最终产品

我写了一篇关于项目的博客文章,介绍了我是如何获取数据的,如何处理数据以便为神经网络做准备,以及我是如何修改 RStudio 示例代码以适应我的需求。这篇博客文章非常符合“我是神经网络的新手,以下是我学到的内容”的风格;我没有假装我已经知道所有这些是如何工作的。作为博客文章的一部分,我制作了一张图片,将我的神经网络模型的文本输出变成了亚利桑那州的牌照样式。我还把代码放在 GitHub 上。

自从写了那篇博客文章并公开了我的代码后,许多人已经修改了它来创建他们自己的有趣神经网络。从这个古怪的项目中学到的知识最终帮助我为客户咨询项目制作了具有高影响力的机器学习模型。仅仅因为原始工作并不严肃,并不意味着其中没有价值!

4.4. 数据科学家大卫·罗宾逊访谈

大卫·罗宾逊是 R 语言中 tidytext 包和 O’Reilly 出版的《使用 R 进行文本挖掘》一书的合著者(与朱莉娅·西尔格合著)。他还是自出版电子书《实证贝叶斯导论:来自棒球统计学的例子》和 R 包 broom 和 fuzzyjoin 的作者。他在普林斯顿大学获得了定量和计算生物学博士学位。罗宾逊在他的受欢迎的博客varianceexplained.org上撰写有关统计学、数据分析、教育和 R 编程的文章。

你是如何开始写博客的?

我是在申请博士后期末附近的工作时开始写博客的,因为我意识到我在互联网上展示我的编程或统计技能的内容并不多。当我启动我的博客时,我记得我有一种明显的恐惧,那就是一旦我写完我准备好的几篇帖子,我就没有新的想法了。但令我惊讶的是,我一直在想出我想写的新东西:我想分析的数据集,我想分享的观点,以及我想教授的方法。从那时起,我已经持续稳定地写博客四年了。

你从公开工作中获得了哪些具体的机会?

我确实是通过我在网络上公开发表的某篇文章找到了我的第一份工作。Stack Overflow 是基于我在 Stack Overflow 统计网站上的一个回答来联系我的。我写那个回答已经好几年了,但那里的某些工程师发现了它,并对它印象深刻。那次经历真的让我坚信生产公开作品的重要性,因为有时候好处可能会在几个月或几年后显现出来,带来我从未预料到的机会。

你认为哪些人特别受益于公开工作?

对于那些简历可能无法展示他们的数据科学技能,并且没有典型背景,如拥有博士学位或数据分析经验的人来说,公开工作特别有益。当我评估候选人时,如果他们没有那些类型的资历,很难说他们能否胜任这份工作。但我最喜欢的评估候选人的方式是阅读他们在网上所做的分析。如果我能看看某人创建的一些图表,他们如何解释故事,以及他们如何深入数据,我就可以开始了解他们是否适合这个角色。

你对公开工作的价值观念是如何随着时间的推移而改变的?

我以前看待项目的方式是,你只要继续工作,就会稳步取得进步。在研究生期间,一个想法并不是很有价值,但后来它变成了一些代码,一个草案,一个完成的草案,最后是一篇发表的论文。我认为在这个过程中,我的工作正在逐渐变得更有价值。

从那时起,我意识到我完全想错了。你电脑上任何仍然存在的东西,无论它多么完整,都是毫无价值的。如果它没有出现在世界上,那么到目前为止它已经被浪费了,而世界上任何存在的东西都更有价值。让我意识到这一点的是我在研究生期间开发的一些论文,我从未发表过。我投入了大量的工作,但我总觉得它们还不够成熟。多年以后,我已经忘记了它们的内容,我找不到它们,而且它们没有为世界增添任何东西。如果在这个过程中我写了几篇博客文章,发了几条推文,也许还制作了一个非常简单的开源软件包,所有这些都会在过程中增加价值。

你是如何为你的数据分析帖子想出想法的?

我养成了一种习惯,每次我看到数据集,我都会下载它,快速看一下,运行几行代码来获取数据的感受。这有助于你培养一点数据科学品味,通过足够多的项目,你就能感受到哪些数据片段会产生有趣的写作,哪些可能值得放弃。

我的建议是,无论何时看到分析数据的机会,即使它不是你当前的工作,或者你认为它可能对你没有兴趣,也要快速看一下,看看你能在几分钟内找到什么。选择一个数据集,决定一个固定的时间,做所有你能做的分析,然后发布。这可能不是一篇完全精炼的文章,你可能找不到你希望找到的所有东西,也无法回答你想要回答的所有问题。但通过设定一个目标,即一个数据集变成一篇文章,你可以开始养成这个习惯。

你对有抱负和初级数据科学家有什么最后的建议?

不要担心跟上该领域的最新进展。当你开始从事数据科学和机器学习工作时,很容易认为你应该开始使用深度学习或其他高级方法。但记住,这些方法是为了解决该领域的一些最困难的问题而开发的。这些不一定是你作为数据科学家,尤其是在你职业生涯早期会遇到的问题。你应该从非常舒适地转换和可视化数据开始;使用各种包进行编程;并使用统计技术,如假设检验、分类和回归。在开始担心前沿概念之前,理解这些概念并熟练应用它们是值得的。

摘要

  • 在 GitHub 仓库和博客中分享数据科学项目组合可以帮助你找到工作。

  • 有很多地方可以找到适合侧项目的优质数据集;最重要的是选择对你来说有趣且有点不寻常的东西。

  • 你不必只写关于你的侧项目的博客;你也可以分享教程或你在训练营、会议或在线课程中的经验。

第 1-4 章资源

书籍

《用 R 进行实用数据科学》,第 2 版,由 Nina Zumel 和 John Mount(Manning Publications)著

这本书是使用 R 作为主要工具的数据科学入门。它是你目前持有的书的绝佳补充,因为它深入探讨了工作的技术组成部分。它通过处理数据集,思考你可以提出的问题以及如何提出这些问题,然后解释结果。

《数据科学实战:来自一线的直言》,由 Cathy O’Neil 和 Rachel Schutt(O’Reilly Publications)著

这本书是数据科学的一个介绍,理论与实践相结合。它从广泛的角度审视该领域,并试图从多个角度来探讨,而不是仅仅是一系列案例研究。

《R 语言人人可用》,第 2 版,作者贾里德·兰德尔,《Pandas 语言人人可用》,作者丹尼尔·陈(Addison-Wesley Data and Analytics)

《R 语言人人可用》和《Pandas 语言人人可用》是 Addison-Wesley 数据分析和分析系列中的两本书。它们涵盖了从基本函数到高级分析和数据科学问题解决的使用 R 和 Python(通过 pandas)。对于那些觉得需要帮助学习这些主题中任何一个的人来说,这些书籍是极好的资源。

《像数据科学家一样思考:逐步解决数据科学过程》,作者布莱恩·戈德塞特(Manning Publications)

《像数据科学家一样思考》是一本关于数据科学的入门书籍,它围绕数据科学工作的实际操作来构建。这本书从定义问题和制定计划开始,解决数据科学问题,然后向他人展示你的发现。这本书最适合那些理解数据科学技术基础但新于长期项目工作的人。

《得到你想要的:聪明学生的硕士或博士学位指南》,罗伯特·L·彼得斯(Farrar, Straus and Giroux)

如果你已经决定去读研究生以获得硕士或博士学位,你将面临一段漫长而艰苦的旅程。理解如何通过考试和资格,坚持研究,以及快速完成都是你没有直接学到的事情。尽管这本书相当古老,但它教授的关于如何成功的方法至今仍然适用于研究生院。

《鸟瞰:写作与生活指南》,安妮·拉莫特(Anchor)

《鸟瞰:写作与生活指南》是写作的指南,但也是生活的优秀指南。书名来源于安妮·拉莫特父亲对她哥哥说的一句话,当时她哥哥因为要写一份关于他有三个月时间完成的鸟类的报告而感到焦虑:“鸟儿一个接一个,兄弟。就一个接一个来。”如果你一直在与完美主义或确定可以写什么作斗争,这本书可能就是为你准备的。

博客文章

《训练营排名》,Switchup.org

www.switchup.org/rankings/best-data-science-bootcamps

Switchup 根据学生评价提供前 20 名训练营的列表。虽然你可能想要带着怀疑的态度看待这些评价和排序,但这个博客仍然是选择申请哪些训练营的一个可靠的起点。

《数据科学、机器学习和人工智能之间的区别是什么?》,大卫·罗宾逊

varianceexplained.org/r/ds-ml-ai

如果你对于数据科学、机器学习和人工智能之间的区别感到困惑,这篇帖子提供了一种有用的方法来区分它们。尽管没有普遍认同的定义,但我们喜欢这种分类法,其中数据科学产生洞察力,机器学习产生预测,而人工智能产生行动。

在考虑攻读博士学位之前你需要知道什么,作者:Rachel Thomas

www.fast.ai/2018/08/27/grad-school

如果你认为你需要博士学位才能成为数据科学家,那么先阅读这篇博客。Thomas 概述了获得博士学位(在潜在的心理健康成本和职业机会成本方面)的重大成本,并驳斥了你需要博士学位才能在深度学习领域进行前沿研究的神话。

考虑在数据科学领域写博客?这里有一些技巧和可能的益处,作者:Derrick Mwiti

mng.bz/gVEx

如果第四章没有说服你博客的好处,那么这篇帖子可能会。Mwiti 还提供了一些使你的帖子引人入胜的绝佳技巧,包括使用项目符号和新的数据集。

《如何构建数据科学作品集》,作者:Michael Galarnyk

mng.bz/eDWP

这是一篇优秀的、详细的关于如何制作数据科学作品集的文章。Galarnyk 不仅展示了应该包含(和不应该包含)哪些类型的项目到作品集中,还介绍了如何将它们融入你的简历并分享它们。

第二部分. 找到你的数据科学工作

图片

现在你已经准备好获得数据科学工作了,是时候去做了。本书的这一部分涵盖了你需要了解的所有内容,以进行一次成功的求职,从寻找空缺职位开始,到谈判和接受工作邀请结束。由于数据科学领域的性质,数据科学的求职过程有一些独特的特点。我们将为你准备解析许多意味着“数据科学家”的职位发布以及公司对带回家做的案例研究有什么期望。尽管这部分内容特别适用于那些之前没有数据科学工作经验的人,但这些材料对于初级和高级数据科学家来说仍然可以作为复习之用。

第五章涵盖了搜索数据科学职位以及如何处理令人眼花缭乱的职位发布。第六章教你如何创建强大的数据科学简历和求职信,提供基于你的材料的示例以及背后的原则。第七章全部关于你从数据科学工作中可以期待什么以及如何准备,从最初的电话筛选到最后的现场会议。第八章将指导你在收到公司的工作邀请时应该说什么,包括如何决定是否接受它以及为什么以及如何谈判。

第五章. 寻找:为你找到合适的职位

图片

本章涵盖

  • 寻找可能适合的空缺职位

  • 解码职位描述以了解这些角色的真实情况

  • 选择申请的职位

你已经拥有了技能,也拥有了作品集;你所缺少的只是数据科学工作!不过,你应该预期到求职过程需要一些时间。即使是成功的求职申请,通常也需要从申请到获得录用至少一个月的时间,更常见的是几个月。但通过在本章中介绍一些最佳实践,我们希望使这个过程尽可能不痛苦。

在本章中,我们专注于如何寻找数据科学工作。首先,我们涵盖了你可以找到工作的所有地方,确保你不会无意中缩小你的选择范围。然后,我们向你展示如何解码这些描述,以了解你实际上需要哪些技能(剧透:不是所有技能),以及这些工作可能是什么样的。最后,我们展示如何利用你在前四章中获得的数据科学技能和公司原型知识来选择最适合你的职位。

5.1. 寻找工作

在担心如何制作“完美”的简历和求职信之前,你需要知道将它们发送到哪里!LinkedIn、Indeed 和 Glassdoor 等职位发布板是开始搜索的好地方。查看多个网站是值得的,因为并非所有公司都会在每个网站上发布职位。如果你是技术领域中的少数群体成员,你也应该寻找专门针对你的职位网站,例如 POCIT 和 Tech Ladies,分别针对有色人和技术领域的女性。你申请的职位类型也可能影响你寻找的地方;例如,有针对特定类型公司的职位发布板,如初创公司(AngelList)和技术公司(Dice)。

确保广泛浏览。如第一章所述,数据科学工作除了数据科学家之外还有许多不同的名称。不同的公司对类似职位使用不同的名称,甚至有些公司还在改变其职位名称的含义,所以去年是数据分析师的人,明年可能就是数据科学家了,而职责却没有变化!

你可能会遇到的某些职位名称示例(图 5.1)包括

  • 数据分析师—— 这个职位通常是一个初级职位,如果你没有科学、技术、工程或数学(STEM)学位,并且之前没有为公司进行过任何数据分析,那么这是一个进入该领域的绝佳起点。正如我们在第 5.1.1 节后面讨论的那样,你确实需要非常小心地对待数据分析师职位,以确保该职位将涉及编程、统计学或机器学习。

  • 定量、产品、研究或其他类型的分析师—— 与数据分析师相比,这些职位的职责多样性更大。你可能正在做与公司中的数据科学家完全相同类型的工作,或者你可能整天都在使用传统的微软 Excel 电子表格。

  • 机器学习工程师—— 如标题所暗示的,这些工作专注于数据科学的机器学习部分,通常需要强大的工程背景。如果你拥有计算机科学学位或者一直担任软件工程师,这个职位可能非常适合你。

  • 研究科学家—— 这些职位通常需要博士学位,尽管如果你拥有计算机科学、统计学或相关领域的硕士学位,可能会有一些协商空间。

图 5.1. 在搜索时可能遇到的某些不包含“数据科学”字样的职位名称

图片

当你开始搜索时,尝试在这些招聘网站上简单地搜索一下 数据,并花一个小时阅读职位帖子。这项工作将帮助你更好地了解你所在地区有哪些行业代表,以及哪些类型的职位是开放的。你将发现一些模式,这将让你更快地浏览新的职位列表。寻找与你匹配良好的工作,而不是所有可用的职位,将范围缩小到可管理的数量。不要过于担心职位的名称;使用描述来评估是否合适。

极力避免将求职视为一场数字游戏。如果你在像纽约或旧金山这样的大科技城市或多个城市寻找工作,你会找到数百个职位列表。检查职位列表可能会迅速成为一种痴迷,因为它是一种简单的方法来感觉有成效(“我今天阅读了 70 个职位描述!”)。就像使用 Twitter 和 Facebook 一样,不断检查更新可能会上瘾。每三天到五天检查一次通常不会增加价值。每月只检查一次可能会意味着你错过了一个好机会,但没有任何公司会在职位发布到招聘网站后的两天内填补这个职位。

如果你对特定的公司感兴趣,请查看他们网站上的职业页面。就像你应该搜索多个职位名称一样,检查不同的部门。一些公司可能会将数据科学放在金融、工程或其他部门,所以如果你不检查那里,你就找不到它们。

应届毕业生

当你寻找工作时,寻找具体标题为“应届毕业生”、“初级”、“助理”和“入门级”的职位。同时查看你的职业中心以获得帮助,并参加校园上的任何招聘会。

5.1.1. 解读描述

当你开始阅读职位描述时,数据科学职位发布可能似乎分为两类:

  • 商业智能分析师职位—— 在这类角色中,你将使用商业智能工具,如 Excel 和 Tableau,可能还会用到一点 SQL,但通常你不需要编写代码。如果你想提高你的编码技能、机器学习工具箱或统计学和数据工程知识,这些工作可能不适合你。

  • 独角兽—— 在极端的另一端,你有一个职位列表,要求应聘者拥有计算机科学博士学位,并且已经作为数据科学家工作了五年以上;是尖端统计学、深度学习和与商业伙伴沟通的专家;并且有处理从生产级机器学习到创建仪表板到运行 A/B 测试的广泛责任经验。这类职位描述通常意味着公司不知道它在寻找什么,并期望数据科学家在没有任何支持的情况下解决所有问题。

虽然如此,请放心:我们承诺这里不仅仅只有这两种类型的工作。更好的思考这些工作的方式是考虑经验。公司是否在寻找一个人来建立自己的部门,但目前还没有数据管道基础设施?或者它是否在寻找其目前高效的数据科学团队的第五位成员,希望这个新人能立即做出贡献,但并不期望他们同时成为数据操作、商务沟通和软件开发方面的专家?为了做到这一点,你需要仔细阅读职位描述,并弄清楚雇主真正在寻找什么。假设你正在查看领养猫的列表,而猫 Honeydew Melon 被描述为“喜欢询问你的日常生活。”你需要意识到这个描述实际上意味着她会不断地喵喵叫以吸引注意,这可能会对你的家庭造成不利。

在职位描述中,一些需要留意的著名短语包括“努力工作,尽情玩耍”,这意味着你需要长时间工作,并预期会参加非正式的公司活动(如去酒吧),以及“自我启动者且独立”,这意味着你不会得到很多支持。通过了解如何读出言外之意,你可以确保申请到正确的职位。

首先要记住的是,职位描述通常是带有一定灵活性的愿望清单。如果你满足了 60%的要求(也许你缺少一年的所需工作经验,或者没有与公司技术栈的一个组件合作过),但其他方面都很合适,你仍然应该申请这份工作。绝对不要过于担心加分项或“加分项”。此外,对工作经验年的要求只是必要技能的代理;如果你在研究生院编码过,这段经历可能也会被计算在内。但话虽如此,如果你是一个来自市场营销领域的有抱负的数据科学家,申请需要五年数据科学家工作经验、Spark 和 Hadoop 熟练度以及将机器学习模型部署到生产环境中的经验的资深数据科学家职位可能并不是最好的时间利用方式;公司正在寻找不同层次的经验和资质。

学位要求

许多数据科学家职位要求拥有“定量学科”学位(如统计学、工程学、计算机科学或经济学)。如果你没有这些学位之一,你还能申请这些工作吗?一般来说,可以。我们将在第六章(chapter 6)中更深入地讨论这个话题,但如果你在这些领域(包括在训练营或在线)上过课,你可以强调这一点。如果你遵循了第四章(chapter 4)中的建议,通过建立作品集和撰写博客文章,你可以将这些项目展示给雇主,作为你能完成工作的证据。

数据科学职位发布中的一个复杂问题是不同的词可能意味着相同的意思。机器学习和统计学因这一点而臭名昭著。一家公司可能要求有回归或分类的经验,而另一家则要求有监督学习的经验,但总体来说,这些术语是等效的。A/B 测试、在线实验和随机对照试验也是如此。如果你不熟悉某个术语,谷歌一下;你可能会发现你已经在不同的名称下做过这项工作!如果你没有在发布中提到的特定技术方面工作过,看看你是否做过类似的事情。例如,如果列表中提到了亚马逊网络服务(AWS),而你使用过微软 Azure 或谷歌云,那么你就有处理云计算服务的技能。

了解如何解码职位描述的另一个好处是能够检测到红旗(第 5.1.2 节)。没有公司会直接说在该公司工作不好。你越早识别出可能不好的工作环境,就越好,所以你会在职位描述中寻找任何警告信号。

5.1.2. 寻找红旗

找工作是一条双向的道路。在这个过程中,你可能觉得公司拥有所有权力,而你需要证明自己值得。但——是的,你——也可以有所选择。最终陷入一个有毒的工作场所或令人昏昏欲睡的工作,这是一个非常困难的情况。尽管你不可能总是仅从职位描述中就能判断出这种情况,但你可以留意一些警告信号:

  • 没有描述—— 第一个警告信号是公司或工作本身没有描述——只有要求列表。那些组织已经忘记了招聘是一个双向过程,并且没有考虑你。或者他们可能被数据科学炒作所吸引,只想拥有数据科学家,而不做任何设置,以便他们可以高效工作。

  • 广泛、广泛的要求—— 第二个警告信号是前面提到的独角兽描述(第 5.1.1 节)。尽管那个例子是极端的,但你应该对任何将决策科学、分析和机器学习中的两种或三种工作类型描述为主要职责的职位描述保持警惕。尽管期望每个角色都有基本能力是正常的,但没有人能够在专家级别上填补所有这些角色。即使有人能够做到,他们也没有时间做所有的事情。

  • 不匹配—— 最后,寻找职位要求和职位描述之间的不匹配。雇主是否要求有深度学习经验,但工作职能却是制作仪表板、与利益相关者沟通和进行实验?如果是这样,公司可能只是想要一个能够使用最新工具的人,或者是一个拥有斯坦福大学人工智能博士学位的“著名”数据科学家,而实际上他们无法使用这种专业知识。

5.1.3. 设定你的期望

虽然你应该对潜在的工作有一定的标准,但你不想要求完美。有志于成为数据科学家的年轻人有时会这样看待他们的道路:“步骤 1-98:学习 Python、R、深度学习、贝叶斯统计、云计算、A/B 测试、D3。步骤 99:获得数据科学工作。步骤 100:盈利。”这个例子是夸张的,但数据科学炒作的一部分是对该领域工作方式的理想化。毕竟,数据科学家是“美国最好的工作”(mng.bz/pyA2),拥有六位数的薪水和高工作满意度。你可能会想象每天都能与最聪明的同事一起解决该领域最有趣的问题。所需的数据将始终可用且已清洗,你遇到的任何问题都将立即由工程师团队解决。你的工作将完全如描述的那样,你将永远不会做那些你最不感兴趣的数据科学工作部分。

不幸的是,这种情景只是一个幻想。正如我们希望这本书的第一部分(part 1)能让你相信在进入这个领域之前不需要知道一切,公司也不可能是完美的独角兽。这本书没有以你找到数据科学工作作为结尾是有原因的。尽管成为数据科学家是一项伟大的成就,你应该为之自豪,但数据科学是一个你将永远在学习的领域。模型会失败,职场政治可能会破坏你过去一个月的工作,或者你可能需要花费数周时间与工程师和产品经理合作来收集所需的数据。

对于那些在数据科学领域广为人知或特别知名的公司,理想化它们特别容易。也许你参加过一场讲座,其中一位公司员工给你留下了深刻印象。也许你已经关注了那个人的博客数月,知道他们在该领域的最前沿。也许你阅读了一篇文章,说该公司有休息舱、美食和许多友好的办公犬。但无论是什么吸引了你,很可能也吸引了其他有志于成为数据科学家的年轻人;这些公司大多数对空缺职位都有数百份申请,并且可以设定比实际工作所需更高的标准。无论如何,你所了解的工作可能完全属于另一个部门,而空缺的职位实际上可能并不吸引人。

即使有现实的期望,你很可能在第一次数据科学职位上不会得到你梦想的工作。在行业内过渡或把数据科学带入你当前的角色更容易;即使你最终想离开你的领域,你可能也需要从一个可以发挥你其他技能的位置开始。这并不意味着你不应该有一些要求和偏好,但你将需要有一定的灵活性。在科技行业,即使一年或两年后换工作也是很正常的,所以你不会承诺签下接下来的 15 年。但你在进入这个领域之前,并不能确切知道你想要什么,而且你甚至可以从糟糕的工作中学到东西,所以不要过于焦虑。

5.1.4. 参加 Meetups

虽然职位发布板是寻找开放职位的一种常见方式,但它们通常不是最有效的申请地方。正如我们在第六章中讨论的那样,在线提交冷门申请通常响应率非常低。根据 2017 年 Kaggle 的调查(www.kaggle.com/surveys/2017),已经作为数据科学家就业的人寻找和获得工作的两种最常见方式是通过招聘人员和朋友、家人和同事。通过参加 Meetups 是建立这种网络的一个好方法。

Meetups 通常是在工作日晚上举行的面对面会议。通常会有一个演讲者、讨论小组或一系列演讲者就与活动相关的话题进行演讲。Meetups 应该是免费的或者只收取象征性的费用,有时这些费用会用于食物。有些 Meetups 可能只有 20 人参加;而有些可能让一个房间坐满 300 人。有些每月都会举行会议;而有些一年只开几次会。有些鼓励成员在会议结束后留在场地交谈或去附近的酒吧见面;而有些则专注于演讲本身。有些非常具体,例如 Python 中的高级自然语言处理;而有些可能一个月提供时间序列的介绍,下一个月则提供高级深度学习模型。尝试几个 Meetups 看看你最喜欢什么是有价值的。话题很重要,但你想找到一个让你感到受欢迎并且喜欢与其他参会者交谈的地方。几乎所有 Meetups 都有www.meetup.com上的账户,所以你可以搜索数据科学、机器学习、Python、R 或分析,以找到你所在地区的相关 Meetups。

许多数据科学 Meetups 在会议开始时留有时间让人们宣布他们是否在招聘。走上前去和这些人交谈;招聘是他们工作的一部分,即使他们当前的开职空缺不适合你,他们也可能能给你提供好的建议或建议其他地方去寻找。

你也可能遇到另一位在您感兴趣的公司或子行业工作的参会者。你可以询问他们是否有时间进行一次信息面试,这样你就可以了解更多关于该领域的知识。信息面试并不是(或者,更确切地说,不应该是一种)被动攻击性的寻找推荐的方式;相反,这是一种了解公司并获得在行业内部人士建议的极好方式。尽管我们在第六章中讨论了被推荐工作的优点,但我们不建议向刚刚认识的人请求推荐。这对他们来说是一个强烈的请求,没有人喜欢感觉自己被利用。如果有人告诉你在他们公司有一个空缺,并表示他们可以为你推荐,那是一个巨大的加分项,但即使他们不这样做,你也能从信息面试中获得很多收获。

参加聚会还有其他很多好处。首先,它们让你能够找到当地志同道合的人。如果你刚刚搬到新城市或刚刚从大学毕业,你可能会觉得自己在这个城镇是个陌生人。参加聚会是发展你的职业生涯和建立社交圈的好机会。你可以利用聚会来建立人脉或建立一些可能帮助你从具体的数据科学问题到求职推荐或一般指导的联系人。此外,虽然一些聚会会在网上发布他们的演讲记录,但其他聚会则不会,所以亲自参加是唯一听到那个演讲的方式。

不幸的是,聚会可能会有一些缺点。加入只有几个人的聚会可能会让人感到害怕,他们都是经验丰富且/或彼此认识的人。冒名顶替综合症肯定会悄悄出现,但你应该努力克服它,因为没有什么地方比一个良好的聚会更受欢迎了。最后,尽管聚会提供了了解当地数据科学场景的好机会,但它们可能会变得封闭或缺乏多样性,这取决于组织者的开放程度以及特定聚会与多元化社区的联系程度。

5.1.5. 使用社交媒体

如果你不住在或靠近城市,附近可能没有数据科学聚会。在这种情况下,Twitter 和 LinkedIn 是开始建立你网络的好地方。当你关注了几位知名数据科学家后,你经常会发现更多值得关注的人,因为你会看到谁经常被转发或提及。你也可以开始为自己树立名声。

我们喜欢以几种方式使用 Twitter:

  • 分享工作—— 当你写了一篇优秀的博客文章时,你希望人们能看到它!通过链接到你的作品并附上简短描述来自我推广是完全正常的。

  • 分享他人的工作—— 你是否读过一些精彩的内容?是否有一个包节省了你数小时的挫败感?是否在演讲中看到过一个特别有帮助的幻灯片?如果是这样,帮助其他人达到启迪也是一件好事。在第六章中,我们讨论了联系他人的最佳方法之一:提及你从他们的工作中获得了哪些益处。在帖子中提及创作者是一种很好的方式,可以让他们以积极的方式注意到你。如果你在分享一个演讲,检查会议或聚会是否有标签;在推文中使用该标签是一种很好的方式,可以让它获得更多的曝光。

  • 寻求帮助—— 你是否遇到了一个你(和谷歌)都无法解决的问题?很可能其他人也遇到了相同的问题。根据问题的类型,可能有一些特定的论坛或网站,你可以提问,或者你可以通过使用相关的标签来发出一个一般性的呼吁。

  • 分享技巧—— 并非所有事情都值得写一篇博客文章,但如果你有一个快速的技巧,分享它。这个话题可能感觉像是“每个人”都知道的,但请记住:刚开始的人并不了解所有事情。甚至那些已经使用某种语言多年的人可能也不知道有新的方法来做某事。

如果你能够公开你的求职过程,你还可以在社交媒体上发布你正在寻找工作,并询问是否有人有任何线索。即使你可能还没有强大的数据科学社交网络,你可能有朋友、前同学和同事,他们可能了解他们公司内的职位。这种方法在社交媒体平台上通常效果更好,比如 LinkedIn 或 Twitter,但即使是 Facebook 这样的社交媒体网络也可能与机会有所联系。

在职业生涯的早期,你可能会觉得还没有建立起自己的社交网络;看起来社交网络是那些已经拥有数据科学工作的人所拥有的!解决方案是在寻找工作的时候建立社交网络,甚至在之前就着手这样做。你越能跳出舒适区,在会议、聚会、学术机构、烧烤等活动场合与人交谈,你下一次寻找工作时就会越有准备。

保持管道充满活力

在求职过程中,一个常见的错误是将希望寄托在单一的机会上,而不在其他地方继续申请和面试。但如果那个机会失败了怎么办?你不想不得不从零开始再次开始求职过程。你希望在每个阶段都有多个机会:你发送的申请、人力资源筛选、带回家的案例研究和面对面面试。直到你接受了书面的工作邀请,不要认为这个过程已经结束。

拥有多个机会也有助于你应对拒绝。在求职过程中,拒绝几乎是不可避免的,而且很难不把它当作是对你个人价值的一种指示。在某些情况下,你可能甚至都没有收到拒绝的通知;你只是从未收到公司的回复。但导致你未能得到工作的许多原因都超出了你的控制范围。公司可能已经关闭了职位而没有招聘任何人,选择了内部候选人,或者在你还在早期阶段时就接受了其他人。拒绝会让人受伤,尤其是来自你非常感兴趣的公司,你应该花点时间来处理你的感受。但拥有其他选择将有助于保持你的动力和进步。

最后,拥有多个潜在的选择使你更容易拒绝一份工作。也许你已经通过了人力资源筛选和案例研究,却发现公司里没有数据工程师;尽管公司规模很大,但数据科学团队只有几个人;或者公司所寻找的与它所宣传的非常不同。尽管你不应该等待完美的数据科学职位(因为这样的职位不存在),但你可能有一些不可协商的要求,如果你看到这些要求可以在其他工作中得到满足,那么坚持这些要求会容易得多。

5.2. 决定申请哪些工作

到现在为止,你应该有一份至少包含 12 份你多少有些兴趣并且可能适合的工作列表。你是否会立即申请所有这些工作?

嗯,有些人确实会申请几十甚至上百份工作。他们试图玩概率游戏,认为如果对任何一份工作的回应概率是 10%,那么尽可能多地申请公司将给他们带来最多的回应。但他们是在一个谬误下运作:如果你有限量的精力和时间,将它们分散在 100 份申请上而不是 10 份上,会使每一份申请都变得更弱。我们在第六章中讨论了如何根据每个职位定制你的申请,但这只有在你有选择性地申请时才可能。为 50 家公司做这件事几乎是不可能的。

R 和 Python

如果公司要求你使用 Python 而你知道 R,或者反过来,你应该申请这份工作吗?虽然掌握一种语言确实会让学习另一种语言更容易,但你在第一份数据科学家的工作中已经学到了很多东西:与利益相关者合作、内部政治、统计学、数据集等等。即使你能得到这份工作,在学习新语言的同时还要学习其他东西可能会很困难。因此,我们通常建议只申请使用你主要语言的工作。如果知道其中一种语言是一个加分项,而另一种语言不是必需的,你可能需要谨慎一些;这份工作描述可能意味着你实际上不会编码。最后,一些工作要求两种语言。你在这里也想要小心一些;通常,这种要求意味着人们使用其中一种语言,而不是每个人都知道两种语言,这可能会使协作变得困难。这种类型的工作可以成功,但务必在面试中询问语言的使用比例。如果你是 20 人团队中唯一两个使用 Python 的人,提高你的编程技能将会很困难。

你可能想要回顾一下前两章中学到的关于数据科学公司类型和数据科学工作的内容。你想要尝试数据科学的各个方面,这个月调整推荐系统,下个月创建终身价值模型吗?如果是这样,你可能想要为一家最近开始做数据科学的公司工作,因为更成熟的公司会有专门的角色。另一方面,大型科技公司也有大量的数据工程师,所以获取常规数据既快又容易。

其中一些可以从公司的一些基本事实中明显看出;例如,一个 10 人的初创公司不太可能有一个成熟的数据科学系统。但你怎么能了解更多呢?

首先,看看公司是否有数据科学博客。通常只有科技公司才有这种类型的博客,但阅读这些帖子对于了解数据科学家实际做什么非常有价值。你对于公司博客上特定帖子的积极想法也可以包括在你对该公司的求职信中(在第六章中介绍)。如果你从未听说过这家公司,花些时间在其网站上看看。当你知道公司做什么以及它是如何赚钱的,你就可以开始猜测它需要什么样的数据科学工作了。最后,如果你对一家公司真的很感兴趣,看看该公司是否有数据科学家在博客中谈论他们的工作,或者是否就它发表过演讲。

在阅读关于一家公司的时候,记得要考虑对你来说通常重要的事情。是否有时在家工作的能力很重要?关于休假天数呢?如果你想参加会议,公司是否提供差旅预算和休假时间?此外,阅读公司对自己所说的内容可以告诉你它的价值观。它是否谈论桌球、办公室里的啤酒和提供的晚餐?这样的公司可能充满了年轻的员工。或者它是否强调灵活的工作时间或家庭休假?这样的公司可能更友好地对待父母。在第八章 Chapter 8 中,我们讨论了你可以协商的不仅仅是薪水,但在这个阶段,你至少可以看看公司是否宣传了与你的优先事项相符的福利。

现在你已经列出了一个可管理的潜在工作清单,是时候开始申请了!在第六章中,我们带你了解如何制作一份优秀的简历和求职信,包括如何针对每个职位进行定制。

5.3. 与 Kaggle 的开发倡导者贾斯汀·莫斯蒂帕克的访谈

贾斯汀·莫斯蒂帕克来自分子生物学背景,在成为非营利性数据科学爱好者之前,她曾是一名公立学校的教师。在这次采访的时候,她是教学信托的数据科学部主管。你可以在她的网站上找到关于非营利性数据科学、学习 R 的建议以及其他主题的文章,www.jessemaegan.com

你对开始找工作有什么建议?

想想你对数据科学家这个头衔有多依赖。如果你决定不关心你被称为什么,而是专注于你正在做的工作,你将会有更多的灵活性来寻找工作。一些非数据科学家的关键词包括分析分析师数据。虽然你可能需要筛选更多的信息,但你可能会找到一个像“研究和评估”这样的职位,你符合这个职位的资格,但如果你只是寻找数据科学家的工作,你可能永远不会遇到它。

在寻找工作时,关注你作为数据科学家想做什么。对我来说,我不太喜欢从网站点击中计算投资回报。我问自己,“我关心哪些事业?哪些组织与这些事业一致?”我非常关心女童子军,他们恰好在寻找分析师职位,所以我能够进入并做那份工作。当我想要更多地进入教育领域时,这种情况在教学信托也发生了。

你如何建立你的社交网络?

当我过渡到数据科学时,我做了很多长时间失败的事情。我是那个每天在 Twitter 上转发每篇看到的数据科学文章的人,每天发布 20 篇没有互动的文章。你应该考虑你想见的人,为什么,你为那种关系带来的价值,以及对你来说什么是真实的。考虑打造你的品牌,不一定是以严格的方式,但确保你在网上和社交媒体空间中的表现对你来说是真实的。对我来说,我意识到我不能成为一个完美的数据科学家,等到我知道数据科学的全部内容才上社交媒体,因为那将永远不会发生。我决定相反,我会谈论我正在学习的事情,并公开这个过程,这就是我建立我的网络的方式。

如果你觉得自己没有信心申请数据科学工作,你会怎么做?

如果你正在培养技能,可以用 Python 或 R 进行一些分析,并且掌握了基础知识,你应该专注于如何让自己适应承担风险和失败。作为数据科学家,你必须经历很多失败。如果你担心在求职过程中承担风险和失败,那么当你对一个模型承担风险而模型没有成功时会发生什么?你需要接受模糊性和迭代的概念。你必须申请并尝试;你将会被拒绝,但这很正常!我经常被拒绝,这只是经验的一部分。

如果有人认为“我没有达到任何工作的全部要求资格”,你会对他说什么?

一些研究表明,某些群体特别是觉得他们需要达到 100%的资格,而其他群体则说“我达到了 25%?我在申请!”争取那些 25%合格者的信心,然后去尝试。但你可能也在解码职位描述的语言上遇到了障碍。例如,假设列出了一个离散的技能,比如有 10 年使用 SQL 数据库的工作经验。你可能认为“我没有那个;我有 7 年使用 Microsoft Access 的工作经验。”但我认为那仍然是一种可转移的技能。作为申请者,你需要告诉自己“我可能没有这项具体技能,但我有一种与之非常相似的技能。我需要看看 SQL,看看我的技能的可转移性如何,并告诉这家公司我在 Microsoft Access 上取得的惊人成就,以及他们应该雇佣我,因为我知道我可以用 SQL 做到这一点,甚至更多。”

你对有志于成为数据科学家的人有什么最后的建议?

你需要培养你的沟通技巧和适应变化的能力。你应该能够以尊重你交谈的人的专业知识并展示你存在的目的是使他们的生活更轻松的方式,在组织的各个层面进行沟通。

我所说的“随遇而安”,是指能够说出类似这样的话:“我不会那样处理那个问题或这个项目,但我能理解你的观点。让我们那样尝试,也许我可以这样修改。”你也需要灵活,因为人们还在摸索数据科学。组织需要数据科学家,但他们不知道如何使用他们。你服务于组织的利益;如果他们的需求发生了变化,你需要发展和适应以满足这些需求。

最后,要知道你的工作描述可能会改变。你必须能够说,“这不是我想做的事情,但我该如何使它对我有利?”你不能说,“我是神经网络的最佳人选,但我没有在做神经网络,所以显然,这份工作很糟糕。”你需要知道你承担的任何职位都会随着公司需求的变化而变化和发展。

摘要

  • 在招聘板上搜索像数据这样的通用术语,并专注于描述,而不是标题。

  • 不要担心是否满足 100%的职位要求。

  • 记住,求职过程是双向的。留意红旗,并思考你想要做什么样的数据科学。

第六章:申请:简历和求职信

本章涵盖

  • 编写引人注目的简历和求职信

  • 针对每个职位定制你的申请

你有一份你感兴趣的空缺职位列表;现在是你让雇主知道你存在的时候了!几乎每个职位都会要求你提交一份简历:一份夸大了你的技能和经验的清单。大多数职位也会要求你提交一封求职信:一封一页纸的信件,说明你为什么应该被考虑这份工作。你可以快速记下你以前的工作,并写一封模板信说你对公司感兴趣,但在这个情况下,投入更多努力可能是你能否获得面试的决定性因素。

在本章中,我们首先确保你的基础简历和求职信尽可能有效,涵盖最佳实践和应避免的常见错误。然后我们向你展示如何将那份“完美”的简历和求职信针对每个职位进行精炼。最后,我们向你展示如何通过建立人脉,将你精心准备的应用送到招聘经理手中,而不是让简历堆成山。

注意

简历的唯一目标是说服一个只是粗略浏览你简历的人,你值得面试。

本章的关键主题是,你需要迅速说服一个人你有资格担任该职位。公司招聘人员通常为每个数据科学职位收到数百份简历。此外,由于数据科学涵盖了如此多的不同类型的工作,申请这些职位的人的技能范围也会很大。这一行为强化了这样一个观念:你的材料必须说“嘿,你正在阅读这个,你可以停止浏览这堆庞大的简历,因为你已经找到了你正在寻找的具有所需技能的人。”但能够证明你有资格并不是一件容易的事情。

尽管建立人脉和个性化你的申请需要时间,但它们比仅仅花一个小时写一份基本的求职信和简历,然后一键申请几十份工作要好得多。你更有可能得到面试机会,因为你的申请将与公司的要求相匹配。当你到达面试阶段(第七章的主题)时,你将能够给出一个很好的答案来回答常见的提问:“你为什么对这个职位感兴趣?”

6.1. 简历:基础知识

你的简历的目标不是让你得到工作;而是让你得到面试机会。负责面试流程的招聘人员如果引入明显不符合工作资格的人,会遇到麻烦,而当人们符合资格时,他们会受到赞扬。你的简历需要向读者展示你符合该职位的资格,以便招聘人员感到舒适地继续推进流程。

这个目标与创建一个包含你所有经历的目录截然不同,不幸的是,这是许多缺乏经验的简历作者的目标。虽然你确实想通过省略最近的工作来避免简历上的空白,但你可以在与数据科学无关的部分上花费较少的时间。即使你有大量的数据科学经验,你也应该专注于突出最相关的职位。如果你有一个多页的简历,大多数招聘人员没有时间阅读全部内容;他们也无法确定应该阅读哪些部分。没有人会告诉你:“嗯,我们本来会雇佣你的,但你没有在你的简历上写上高中时的救生员工作,所以我们不能雇佣你。”

在面试过程中,你将有足够的时间深入讨论你的工作、教育和数据科学项目。目前,你需要关注对你申请的职位最相关的信息。在整个过程中,你将专注于那些能让你在众多申请者中脱颖而出的优秀品质,但在第一步,关注符合招聘经理或招聘人员期望是很重要的。

考虑到这一点,我们将介绍简历的基本结构,如何在结构内创建良好的内容,以及如何考虑众多流传的简历规则。大量内容可以应用于工业界的任何技术职位,但我们将尽可能关注数据科学领域的独特之处。我们还为您制作了一份示例简历,供您作为参考使用(图 6.1)。

图 6.1. 数据科学求职者的示例简历

6.1.1. 结构

在本节中,我们将逐一分析示例简历的各个部分,并详细介绍您希望包含的内容。

Section: 联系信息

包括您的联系信息是必要的,这样招聘人员才能联系您!您至少需要包括您的名字、电话号码和电子邮件。除此之外,您还可以提供链接,以便他们可以找到更多关于您的信息,包括社交媒体资料,如 LinkedIn,在线代码库如 GitHub,以及个人网站和博客。为了确定要添加什么内容,请自问:“如果有人点击它,他们会对我有更高的评价吗?”例如,从第四章中的项目组合链接是一个非常好的选择。但一个 GitHub 资料库,除了克隆了一个教程项目外空无一物,则不是。如果您有任何公开可用的数据科学工作,请尝试找到一种方法在这里展示它。

通常,您还希望包括您居住的城市和州,这样招聘人员就会知道您就在附近,可以通勤到工作地点,或者如果您得到了这份工作,您可能需要搬迁。一些公司由于搬迁新员工的费用问题而犹豫不决,所以如果您不住在附近且不想承担这个风险,您可以考虑不提供您的位置信息。

如果您的法定姓名与您常用的姓名不匹配,您可以使用您的常用名。在流程的后期,您需要让公司知道您的法定姓名,用于背景调查等事宜,但在申请时您并不需要使用您的法定姓名。

最后,不要使用可能冒犯人的电子邮件地址(例如 i_hate_python @gmail.com)或可能过期的地址(如学校电子邮件地址)。

Section: 经验

这个部分是用来展示你通过之前的工作、实习或训练营证明自己适合这份工作的。如果你的过往工作与数据科学相关,例如软件工程,那很好:在你的简历中花相当一部分篇幅来描述这些工作。如果一份工作与数据科学无关,例如担任艺术史教授,你仍然应该列出这些工作,但不要花太多时间描述它们。对于你担任过的每一个职位,列出公司名称、开始和结束的月份和年份、你的职位名称,以及至少一个项目符号(对于最相关的职位,可以列出两个或三个)来描述你所做的工作。如果你是应届毕业生或近期毕业生,你可以包括实习和大学里的研究工作。

这个部分应该是你简历中最大的部分,可能占据一半的空间。它通常也是最重要的,因为这是招聘人员首先会查看的地方,以确定你是否具有与招聘职位相关的数据科学经验。由于正确处理这一部分的重要性,我们将在第 6.1.2 节中深入探讨如何为这一部分创建最佳内容。

部分:教育

图片

在这个部分,你列出你的教育经历,理想情况下,以展示你有一套对数据科学工作有用的技能。如果你在高中之后上学,即使你没有获得学位,也要列出你的学校(们)、日期(与你的工作经验相同的格式),以及你的研究领域。如果你是即将从学校毕业的第一份工作,并且你的平均成绩很高(高于 3.3),你可以列出它;否则,就省略它。如果你是近期毕业生,并且你学习了统计学、数学、计算机科学,或任何涉及它们的课程(如社会科学研究方法或工程),你可以列出这些课程。

招聘人员非常想知道你是否有一个与数据科学相关的学习领域,例如数据科学、统计学、计算机科学或数学学位。他们也会对你的学位水平感兴趣。由于许多数据科学主题直到研究生水平的项目才会涉及,拥有研究生学位会有帮助。招聘人员通常不会关心你上的学校,除非它非常著名或声望很高,即使如此,如果你毕业几年以上,这个证书也不会很重要。然而,如果招聘人员看到你有训练营、证书或在线课程,这会很好,因为它们表明你继续了你的教育。

尽管你的简历中的教育部分可以为招聘人员提供有价值的信息,但你不能通过做任何事情来改善这一部分,除非出去获得额外的学位或证书,这一点我们在第三章中已经讨论过了。

部分:技能

图片

这一部分是你可以明确列出所有在数据科学环境中可以贡献的相关技能的地方。理想情况下,招聘人员会看到这一部分,点头说“是的,很好”,因为你将列出与工作相关的技能。在数据科学简历中,在这一部分应列出两种类型的技能:

  • 编程/数据库技能—— 这些技能可以是编程语言,如 Python 和 SQL,框架和环境,如.NET 或 JVM,工具,如 Tableau 和 Excel,或生态系统,如 Azure 和亚马逊网络服务(AWS)。

  • 数据科学方法—— 第二种类型是数据科学方法,如回归和神经网络。因为你可以列出许多可能的方法,所以尽量专注于几个关键的技能,这些技能共同表明你掌握了基本技能和一些特殊技能。例如,“回归、聚类方法、神经网络、调查分析”等,这表明你掌握了基础和深度。

尽量不要列出七个或八个以上的技能,以免让人感到不知所措,也不要列出与工作无关的技能(例如,你在研究生期间使用的晦涩的学术编程语言)。

只列出你在工作中感到舒适的技能,而不是五年前就不再接触且不想再次学习的语言。如果你的简历上有所列出的技能,招聘人员有权询问这些技能。如果你查看的数据科学职位发布要求某些技能——这些技能你都有——确保列出它们!这些信息正是招聘人员所寻找的。

我们建议你不要使用星级评分、数字或其他方法来尝试表明你在每个技能上的强弱。一方面,评分没有任何意义:任何人都可以给自己打 5/5 分。如果你给自己打满分,招聘经理可能会认为你不诚实或自我反思能力差;如果你给自己打低分,他们可能会怀疑你的能力。此外,不清楚你如何看待每个等级。5/5 分是否意味着你认为自己是世界上最好的,知道如何完成高级任务,或者在某些技能上比同事更出色?如果招聘经理确实想让你自我评估不同技能的水平,他们会在面试中询问你。

不要列出软技能,如批判性思维和人际交往能力;尽管这些对于成为一名成功的数据科学家至关重要,但在简历上列出它们是没有意义的,因为任何人都可以做到。如果你确实想突出你在这些领域的技能,请在简历的经验部分讨论你如何在具体实例中使用这些技能。此外,你不需要列出申请者都应具备的基本技能,例如使用 Microsoft Office 套件。

部分:数据科学项目(可选)

如果您在工作之外进行了数据科学项目,您可以为此创建一个部分。这个部分非常适合那些工作经验较少但同时在一边或在学校或训练营中进行了项目的人。您基本上是在告诉招聘人员:“尽管我可能没有太多相关的工作经验,但这并不重要,因为我已经完成了整个数据科学过程。”

对于每个项目,您需要一个标题,描述您所做的工作以及您是如何做的,以及结果。实际上,数据科学项目在结构和内容上应该看起来像工作,因此第 6.1.2 节上生成内容的每一项都适用于它们。理想情况下,您将有一个指向博客文章或至少指向包含信息 README 文件的 GitHub 仓库的链接。数据科学是一个技术领域,其中仅展示您所做的工作就非常容易,而这个部分是这样做的一个绝佳地方。如果您有足够的相关工作经验,您可以跳过这个部分,但在面试中仍然可以谈论项目。

部分:出版物(可选)

如果您在硕士或博士课程中发表了与数据科学相关的论文,您应该包括它们。如果您在其他领域发表了论文,即使是定量领域,如物理学或计算生物学,您也可以包括它们,但只需简要提及。因为这些与数据科学没有直接关系,阅读它们的人除了知道您足够努力以获得发表机会外,不会从这些出版物中获得太多。您可以在经验部分列出您在研究期间完成的相关工作,例如“创建了一种每分钟分析数百万 RNA 序列的算法。”但即使是在您领域内享有盛誉的、招聘经理从未听说过的期刊上发表的论文,也不会单独走得很远。

其他部分

您可以添加其他部分,例如如果您赢得了 Kaggle 比赛或获得了奖学金或研究员职位,可以添加荣誉和奖项,但这些不是必需的。您不需要包括参考文献;与参考文献的交谈将在过程后期进行,并且如果您进展到那个阶段,您可以分享这些信息。目标陈述通常不需要,并且鉴于您的简历中的其他信息,它们是重复的。例如,“寻找开发 A/B 测试和建模技能的 Python 经验丰富的数据科学家”这样的说法不会让招聘人员更加兴奋!

整合信息

通常,您将联系信息放在顶部,然后是下一个最重要的部分。如果您在学校或刚刚毕业,您可能需要将教育信息放在顶部;如果您没有相关的工作或教育背景,请将数据科学项目放在顶部;否则,将工作经验放在那里。在您的工作和教育部分中,按逆时间顺序列出您的经验,从最近的到最远的。

我们已经看到了许多有效的数据科学简历格式。在这个领域,你在设计上有一点点自由;没有接近标准的格式。尽管如此,你始终希望专注于使你的简历易于快速扫描。因为招聘人员花在简历上的时间很少,你不想让他们花时间去弄清楚如何找到你的最新工作。不要让你的设计分散你的内容;考虑别人会如何看待它。一些好的做法包括

  • 清晰的章节标题,以便于在它们之间跳转

  • 更多空白,以便更容易阅读内容

  • 突出显示重要词汇,例如你在每家公司担任的职位名称

如果像空白和标题这样的想法让你感到不知所措,就坚持使用你在网上找到的简历模板,或者咨询一位设计专家。

通常,你希望将简历限制在一页之内。这种做法有两个目的:鉴于你的简历将被快速浏览,你希望确保招聘人员将这段时间花在你认为最有价值的信息上,并且这表明你能够简洁地表达,并了解哪些经验是你最想分享的。如果有人提交了一份 17 页的简历(我们确实见过),这强烈表明他们不知道自己过去的哪些经历使他们成为合适的候选人,并且他们认为别人有义务花时间阅读它。

最后,确保你在简历中保持一致性。如果你在教育部分缩写月份名称,那么在工作经验部分也要缩写。虽然你可以为标题和正文文本使用不同的字体和大小,但不要从项目符号切换到项目符号的格式。使用过去时态表示以前的位置,现在时态表示当前的位置。这些事情表明你注重细节,并且(再次)帮助读者快速处理你的内容,因为他们不会因为字体或风格的变化而分心。单一的不一致性不太可能让你失去面试机会,但有时,细节可以决定一切。

校对

仔细校对你的简历至关重要!几个拼写错误或语法错误可能会导致你的申请被(比喻性地)扔进垃圾桶。为什么这么严厉?当招聘人员正在筛选数百份简历时,有两种简历会脱颖而出:一种是明显出色的(罕见的),另一种是容易剔除的。后者需要一些经验法则,除了明显不符合要求的简历外,带有拼写错误的简历也是剔除申请人的一个简单理由。数据科学工作需要注重细节和检查你的工作;如果你在申请时连自己的最佳状态都无法做到这一点,那么这个事实说明了你工作中的什么?除了在文字处理软件中使用拼写检查功能外,至少让另一个人仔细阅读你的申请。

6.1.2. 深入到经验部分:生成内容

我们希望确定你的工作和教育历史的日期和标题是足够容易的。但你是如何想出那些简洁的项目符号来描述你的工作经验(或数据科学项目)的呢?

人们在他们简历上犯的常见错误是仅仅列出他们的工作职责,例如“使用 SQL 和 Tableau 为高管生成报告”或“为 30 名学生中的三个班次教授微积分。”这种方法的两个问题是:它只说明了你负责什么,而没有说明你取得了什么成就或你是如何做到的,并且可能没有以与数据科学相关的方式构建。对于前两个例子,你可以将同样的工作描述为“使用 Tableau 和 SQL 自动化生成销售预测报告,每周节省四小时的工作时间”或“为 90 名学生教授微积分,平均评分为 9.5/10,85%的学生在 BC 微积分 AP 考试中获得了 4 或 5 分。”

尽可能地,你希望用可以转移到数据科学领域的技能来解释你的经验。即使你没有在数据科学或分析领域工作,你是否处理过任何数据?招聘经理愿意考虑数据科学角色之外的经验仍然相关,但你必须解释为什么它们应该相关。如果你的任何工作可以与收集和理解数据相关联,你应该投入巨大的努力来创建一个简洁的故事,讲述你所做的事情。你是否为天体物理学博士分析了 100GB 的恒星数据?你是否管理了 30 个 Excel 文件来规划面包店的员工配置?许多活动都涉及使用数据来理解问题。

你是否使用过像 Google Analytics、Excel 或 Survey Monkey 这样的工具?即使这些工具可能不是这份工作所要求的,处理任何类型的数据都是相关的。你使用了哪些沟通技巧?你是否解释过技术或专业概念,比如在博士研究讨论中或向公司其他部门解释?如果提出可转移的技能有困难,不要担心;关于如何写好项目符号的其余建议仍然有帮助。但如果你还没有这样做,你应该考虑你的教育或副项目如何展示数据科学技能,尤其是如果你的工作经验无法做到这一点。

对于你几年前担任的相对不相关的职位,只列一个项目符号是可以的。但如果你不想在简历上留下几个月的空缺,通常你不想从简历中省略任何工作。如果你在职场工作了一段时间并且有很多工作,只列出最近的三到四个职位是可以的。

你可能会发现,这个过程对你目前的工作来说比五年前的工作要容易得多。一个很好的做法是保持一个你成就和主要项目的清单。当你每天在一份工作中,逐步取得进步时,当你退一步看时,可能会忘记整体是多么令人印象深刻。人们知道你的简历不是一个详尽的列表,所以他们不会想“她花了 15 个月时间建立了一个自动化的跟踪和评分销售线索的系统,为他们的销售团队每周节省了超过 20 小时的体力劳动。”他们会想“哇,我们需要这样一个系统!”

通常,要点可以分为两大类。第一类是重大成就,例如“创建了一个仪表板来监控所有正在进行的实验并执行功效计算。”第二类是平均数或总数,例如“实施了并分析了 60 多个实验,产生了超过 3000 万美元的额外收入。”

在任何情况下,每个要点都应该以动词开头,并且(理想情况下)应该是可量化的。与其说“我为客户做了演示”,不如写“为 500 强高管制作了 20 多个演示。”如果你能量化你产生的影响那就更好了。写“在电子邮件营销活动中进行了 20 次 A/B 测试,导致点击率提高了 35%,总体归因销售额提高了 5%。”比“在电子邮件营销活动中进行了 20 次 A/B 测试。”更有说服力。

6.2. 覆盖信:基本要点

尽管简历的目的是向招聘经理提供你工作经验和教育的相关事实,但求职信的目的是帮助他们了解你作为一个人。你的求职信是你解释你如何研究公司并强调你为什么是这份工作的绝佳人选的地方。如果你的简历没有显示一条直线路径,求职信可以汇总一切并解释这些部分是如何组合起来使你成为这份工作的优秀候选人的。即使只是表明你知道公司是什么,你读过它的关于页面,或者你使用过它的产品(如果它对个人可用),这也很有帮助。你的求职信是你帮助招聘经理理解那些不适合要点列表的事情的最好工具。

与简历不同,求职信可能是可选的。但如果公司有一个提交的地方,就提交;有些公司如果候选人没有写求职信,就会淘汰他们。公司要求你写一些特定的事情,比如你最喜欢的监督学习技术,这种情况并不少见。这样的要求通常是为了检查人们是否阅读并遵循了职位描述的要求,而不是发送一份通用的求职信。你肯定想让公司知道你能遵循指示。

了解求职信的目的是帮助公司更好地了解你,我们常见的一个错误是在求职信中只关注公司能为你做什么。不要说,“这对我的职业生涯将是一个巨大的进步。”招聘经理的工作不是帮助尽可能多的职业生涯,而是招聘那些能帮助公司的人。向他们展示你能如何做到这一点。即使这份工作将是你的第一个数据科学工作,你有什么相关经验?你能分享哪些成就记录(即使它们与数据科学无关),以便清楚地表明你工作努力并实现目标?不要贬低自己;尽量广泛地思考你如何让自己对公司有吸引力。

就像你的简历一样,你的求职信应该简短;通常是一页纸的三分之四到一页。专注于你的优势。如果工作描述列出了四种技能,而你擅长其中的两种,就谈谈这两种!不要为缺乏的技能找借口。

图 6.2 展示了一个求职信的例子。

图 6.2. 一个带有突出显示不同组件的求职信示例

6.2.1. 结构

求职信的规则不如简历明确。但话虽如此,这里有一个良好的通用结构供你参考:

  • 问候语—— 理想情况下,找出该职位的招聘经理或招聘人员是谁。首先看工作描述本身;那个人的名字可能已经列出。即使只列出了电子邮件地址,你也可以通过一些在线搜索来找出招聘人员。否则,检查领英和公司网站,看看是否其中之一是团队领导。即使你最终目标过高——可能是将成为你直接上级(经理的经理)的部门副总裁——你仍然表明你做了研究。最后,如果你找不到名字,将你的信件地址写为“尊敬的 部门名称招聘经理”(例如,“尊敬的数据分析招聘经理”)。“尊敬的先生或女士”这个说法是过时的,且过于笼统。

  • 开场段落—— 介绍你自己,说明你感兴趣的位置,并简要解释你对公司和角色的兴奋之处。如果公司有一个数据科学博客,或者其数据科学家在他们的工作中发表过演讲或撰写过博客文章,这个段落是提到你看过或读过那些内容的绝佳地方。将你从那些演讲中学到的内容与你为什么对这个职位或公司感到兴奋联系起来。

  • 一至两段关于数据科学工作的例子—— 将你之前的成就与这个角色联系起来。对你的简历中提到的事情添加细节,并深入探讨一个角色或副项目的具体例子。遵循“展示而非讲述”的原则;不要只是写你是一个“注重细节、有组织的问题解决者”,而是提供一个你在工作中展现这种品质的例子。

  • 结尾段落 感谢招聘人员的时间和考虑。通过解释为什么你适合该职位来总结你的资格。

  • 结束语 “此致敬礼”,“最好的祝愿”和“感谢您的考虑”都是很好的结束语。避免写得太随意或过于友好,例如“干杯”或“最温暖的问候”。

6.3. 量身定制

前两个部分概述了撰写有效求职信和简历的一般规则。但区分自己与其他候选人的最佳方式是根据你申请的职位定制这些文件。

首先筛选你的数据科学简历的人可能不是该职位的经理;甚至可能不是人!在大型公司中,申请跟踪系统会自动筛选简历中的关键词,突出包含这些单词的简历。这样的系统可能不会将“线性建模”视为满足“回归”经验要求,人类读者也可能不会;人力资源人员可能只得到了职位描述和寻找有希望的候选人的指示。你不想冒招聘人员不理解你使用“k-最近邻”的项目意味着你有聚类分析经验的风险,或者NLP自然语言处理的缩写。你希望有人能够轻松地在你的简历和职位描述之间来回查看,找到你经验中与要求完全匹配的内容。虽然你不想让你的简历充斥着技术术语,但你确实想使用几次关键词(如RPython)来帮助简历通过这些筛选。

我们建议你准备一份“主简历”和求职信,以便从中提取,而不是每次都从头开始。如果你正在申请不同类型的职位,这种方法尤其有帮助。如果有些工作强调机器学习,而另一些则强调探索性分析,那么如果你有现成的要点和相关关键词,就会容易得多。你的主简历和求职信可以超过一页,但请确保你提交的简历和求职信始终不超过一页。

量身定制你的申请以适应职位并不意味着你需要为每个要求都准备一个要点或技能。正如我们在第五章中讨论的那样,职位描述通常是愿望清单;试着找出哪些列出了工作的核心技能。有时,公司会方便地将技能和经验分为“要求”和“加分项”,即使他们没有这样做,你也可能从工作职责的描述中判断出哪些是哪些。尽管公司希望找到在所有方面都得到加分的人,但大多数公司不会对此抱有期待。

一个例外是大型科技公司以及知名且快速发展的初创公司。这些公司收到很多候选人,正在寻找拒绝人的理由。他们非常担心误判,即雇佣一个表现不佳或只是平均水平的人。他们并不真的关心误判——不雇佣一个优秀的人——因为他们有很多优秀的人才在管道中。对于这些公司,你通常确实需要满足 90%的要求,如果不是 100%。

6.4. 推荐信

公司网站和招聘网站都有一个可以申请的地方,有时如果你在招聘网站上保存了简历,甚至可以一键申请。不幸的是,因为这种方式申请太容易了,你的简历往往最终会堆成几百甚至几千份类似的冷门申请。这就是为什么我们建议在你用尽其他选项之前不要这样申请。阅读职位发布是一个了解有哪些工作可做的绝佳方式,但最好的方式是有人为你打开大门。

你想尝试使用大多数公司的隐藏后门:推荐信。推荐信意味着一名现任员工推荐某人担任某个职位,通常是通过一个特殊系统提交该人的申请和信息。许多公司提供推荐奖金,如果他们推荐的人接受了工作邀请,公司会支付员工几千美元。公司喜欢推荐的人,因为他们已经过筛选:一个已经在公司工作并且(据推测)表现良好的人认为这个人会是一个合适的候选人。即使某人没有正式推荐你,能够在你的求职信中写道“我和[明星员工 X]讨论了这个职位”,并且让那个人告诉招聘经理注意你的简历,这也是巨大的好处。

你如何找到可以为你推荐的人?首先,查看 LinkedIn 看看你是否认识在你想去的公司工作的人。即使你已经有一段时间没有和那个人说话了,用礼貌的信息联系也是完全可以的。接下来,寻找之前在同一公司工作过或去过同一所学校的人。如果你提到一些共同点,你更有可能收到冷消息的回复。最后,寻找二度联系人,看看你和谁有共同点。如果你和任何共同联系人关系良好,联系那个人看看他们是否愿意为你介绍。

如果你联系的是数据科学家,花点时间了解他们所做的工作。他们是否有博客、Twitter 账号或 GitHub 仓库,他们在那里分享了自己的工作?ServiceNow 的数据科学家 Mark Meloon 在他的博客帖子“攀登关系阶梯以获得数据科学工作”(mng.bz/O95o)中写道,最有效的信息是将对他已发布内容的赞美与提出更多问题相结合的请求。这样,你也会避免询问他们已经公开谈论过的事情,并可以专注于获取你在其他地方找不到的建议。

记住,不仅数据科学领域的人可以帮助你。虽然其他数据科学家最好能告诉你他们公司的工作情况,但任何职位的人都可以为你提供参考。如果你认识的人在你想要申请的公司工作,就联系他们!至少,他们还可以为你提供对公司文化的洞察。

撰写有效的信息

在他的博客帖子“你有时间进行简短聊天吗?”(mng.bz/YeaK)中,Indeed.com 的高级数据科学经理 Trey Causey 概述了一些有效联系不认识的人以讨论你的项目、求职或职业选择的建议。遵循这些指南,你更有可能得到回复,进行富有成效的会议,并为持续的关系打下良好的基础:

  • 为你想要讨论的内容制定一个议程,并将其包含在电子邮件中。

  • 提出几个时间(包括 30 分钟后的结束时间)和靠近对方工作地点的地点。

  • 买他们的午餐或咖啡。

  • 提前到达那里。

  • 根据你发送的议程,为你的对话设定具体的问题和目标。不要只是询问“你能给我什么建议”。

  • 注意时间,并在你用完请求的所有时间后通知他们;如果他们想继续交谈,他们会。

  • 感谢他们,并跟进你们讨论的任何内容。

下面是 Trey 如何将这些内容整合到一个示例信息中的方法:

“嗨,Trey。我读了你关于数据科学面试的博客帖子,希望这周能在派克广场的 Storyville 请你喝咖啡,向你提出一些关于你帖子的问题。

我目前正在接受采访,关于白板编码的部分对我来说非常有趣。我很想听听你对如何改进白板编码问题的看法,以及分享一些我自己的经验。

我目前正在接受采访,关于白板编码的部分对我来说非常有趣。我很想听听你对如何改进白板编码问题的看法,以及分享一些我自己的经验。

你能抽出 30 分钟的时间吗——比如说,下周的周二或周三?感谢你写那篇帖子!”

6.5. 对 Kristen Kehrer 的采访,数据科学讲师和课程创建者

克里斯滕·凯赫勒是加州大学伯克利分校扩展学院的数据科学讲师,Emeritus 管理学院教师,Data Moves Me, LLC 的创始人。Data Moves Me 帮助数据科学团队向利益相关者传达机器学习模型结果,以便业务可以自信地做出决策。她拥有应用统计学硕士学位,是即将出版的书籍《数据科学之母》(自出版)的合著者。

你估计自己修改过简历多少次?

哦,成千上万次!我来自一个蓝领家庭,我爸爸是消防员,我妈妈在家照顾家务,所以我从未学过如何为行业写一份优秀的简历。但当我从研究生院毕业时,我通过向他人求助做得还不错。我总是喜欢记录下我工作的任何新项目或我可以添加到简历中的任何有趣的事情。我不是那种两三年不更新简历的人。最近,我原来的公司在我被裁员时支付了一个职业教练的费用。我得以了解简历的最佳实践以及如何有效地定位自己以获得一份好工作。

我绝对建议人们经常更新简历。尤其是如果你在同一地方工作了一段时间,试图思考你可以添加到简历中的所有相关事情是非常困难的。例如,我合著了几篇在医疗保健行业获奖的海报。这并不是我申请的每个职位都相关的,但如果我申请的是医疗保健职位,我希望能够引用这项研究。如果我没有记录下来,我就无法记住我的合著者是谁,或者海报的标题是什么。

你看到人们常犯哪些错误?

太多了!有一份四页的简历,上面还写着他们曾是游泳教练。另一件是没意识到申请跟踪系统无法很好地解析某些内容。如果人们在简历上放图标或图表,那么在许多较老的自动化系统中可能会显示为一大团东西,最终可能导致你被自动拒绝。我也不喜欢人们放,比如说,三个星号代表 Python,因为你没有给人们提供任何背景信息,而且无论你为哪种技能放两个星号,你都是在说你不擅长那件事。

你会根据你申请的职位调整你的简历吗?

我对此并不痴迷。但现在几乎所有中等或大型公司都使用申请跟踪系统,你希望能够在匹配关键词方面排名很高。如果我看到某个特定的工作描述中提到了我做过的事情,但措辞略有不同,我就会修改几个词来匹配他们在工作描述中使用的话语。

你推荐哪些策略来描述简历上的工作?

我告诉人们优化他们的简历以匹配他们想要的工作,而不是他们已经拥有的工作。你不需要列出你曾经做过的所有事情。相反,想想你做了什么,你可以将其重新定位为数据科学。例如,如果你是一名数学老师,你一直在向非技术受众解释技术或数学材料。或者也许你在某个项目中工作过,尽管它不是在分析领域,但你不得不跨多个团队进行跨职能工作。总的来说,你想要能够展示你能够解决问题,自我管理,有效沟通,并取得成果。最后,你可以使用副项目来突出你的技术专长和所采取的主动性。

你对有志成为数据科学家的人有什么最终建议?

你需要开始申请数据科学职位。太多的人只是不断地上在线课程,因为他们认为他们需要知道成千上万的事情才能成为数据科学家,但事实是,你将开始一份工作,你仍然需要学习更多。即使十年后,我仍然有更多东西要学习。通过申请,你会从市场上获得反馈。如果你的简历没有人回应,可能是因为你没有很好地定位自己,或者可能是因为你的技能还不够。从几个人那里收集一些反馈,然后选择一个领域来专注,比如能够用 Python 自动化流程。专注于这个领域,将其添加到你的简历中,并申请更多。你需要申请,获得回应,迭代并前进,直到你找到工作。

摘要

  • 你的简历并不是你曾经做过的一切的详尽清单。你需要它来获得面试机会,而不是工作本身,所以请确保它与职位描述紧密匹配。

  • 求职信让你展示你对一个组织的兴趣以及你的经验如何使你能够做出有价值的贡献。

  • 与目前在该公司工作的人交谈,尤其是如果他们是数据科学家,是了解具体职位空缺和公司文化的最佳方式。

第七章. 面试:预期内容及应对策略

图片

本章涵盖

  • 面试官在寻找什么

  • 常见的面试问题类型

  • 与公司沟通时的适当礼仪

如果你停下来思考面试的过程,你可能会意识到它有多么棘手:你需要向完全陌生的人展示,你会在一个你只从职位描述中看过几段文字的角色中做得很好。在面试中,你可能会被问到关于不同技术的各种技术问题,其中一些你可能之前从未使用过。此外,在面试过程中,你需要了解足够多的公司信息,以便能够决定你是否想要在那里工作。你必须在短短几个小时里完成所有这些事情,同时还要表现得专业和得体。这足以让你感到严重的焦虑。

好消息是,有了正确的准备和心态,数据科学面试可以从引起恐慌到可管理、可忍受,甚至可能是一种愉快的体验。

在本章中,我们将向您介绍面试官在寻找什么,以及如何调整您的思维方式以符合他们的需求。我们讨论技术性和非技术性问题,以及一个数据科学案例研究。最后,我们讨论如何表现以及您应该向面试官提出哪些问题。有了这些信息,您应该为即将到来的挑战做好充分准备。

7.1. 公司想要什么?

当公司员工在面试空缺职位候选人时,他们寻找的是一个关键人物:

能够胜任这份工作的人

这就是他们唯一寻找的人。公司不是在寻找回答最多面试问题正确或拥有最多学位或年数的人。他们只想找到能够完成需要完成的工作并帮助团队实现其目标的人。

但要完成一项工作需要什么?嗯,有几件事:

  • 具备必要的技能— 必要的技能可以是技术性的,也可以是非技术性的。在技术方面,你需要理解我们在第一章中提到的技能:一些数学和统计学的组合,以及数据库和编程。在非技术方面,你需要具备一般商业洞察力,以及项目管理、人员管理、视觉设计和其他与角色相关的技能。

  • 易于合作— 如果你说了冒犯性的话,表现得防御性,或者有其他任何会使其他人难以与你互动或协作的性格缺陷,公司不会想雇佣你。这意味着在面试期间(实际上总是如此),你将想要表现得和善、有同情心和积极。这并不意味着你的面试官想要和你喝啤酒。这只是意味着你未来的团队成员需要看到你是一个他们愿意与之共事的人。

  • 能够完成任务— 拥有完成工作的技能是不够的;你必须能够使用它们!你需要能够在工作中找到问题的解决方案并实施这些解决方案。数据科学有很多地方可能会让人陷入困境,比如整理混乱的数据、思考问题、尝试不同的模型和整理结果。能够克服每一个这些挑战的人,在完成工作方面会比那些坐着等待帮助而不寻求帮助的人做得更好。那些试图让一切完美的人也会在这个部分遇到困难:永远无法称你的工作为完成意味着你永远无法将工作投入使用。

了解公司对候选人的这三项要求,你就准备好进入面试流程了。当我们探讨面试的工作流程和经常出现的问题时,我们将以这三个想法为框架进行讨论。

7.1.1. 面试过程

虽然不同公司的面试具体流程可能有所不同,但面试通常遵循一个基本的模式。这个模式旨在最大化公司从候选人那里获得的信息量,同时最小化公司内部人员运行面试所需的时间。进行面试的人通常很忙,有很多面试要安排,并希望允许对候选人进行公平的比较,因此流程被简化并保持一致。以下是面试过程中可以期待的基本概述(图 7.1):

  1. 初步电话筛选—— 这种筛选通常是一个 30 分钟(有时是 60 分钟)的电话面试,由技术招聘人员负责:这个人有很多筛选候选人的经验,了解技术术语,但自己并不从事技术工作。从公司的角度来看,这次面试的目标是检查你是否有可能符合这份工作的要求。招聘人员希望筛选掉那些显然不适合的人,比如那些根本不具备资格(没有所需的技能)或者听起来粗鲁或刻薄(无法与他人良好合作)的人。在技术方面,面试官正在检查你是否可能具备所需的最基本技能,而不是你在这些技能上是否最擅长。他们更有可能问“你之前使用过线性回归吗?”而不是“你是如何计算伽马分布的最大似然估计的?”第一次电话面试后,公司偶尔会要求进行另一轮电话面试,由更技术性的筛选人员进行。如果初步电话筛选进展顺利,几周内,你将……

  2. 现场面试—— 这种面试通常持续两到六个小时,构成了面试过程的主要部分。在这次访问中,你将有机会看到你将工作的地点,并见到你将一起工作的人。这次面试给公司提供了更多时间来深入了解你的背景、你的技能,以及作为数据科学家的你对希望和梦想。在访问期间,你将由多个人进行面试,每个人都会就不同的话题提问,有些是技术性的,有些是非技术性的。这次面试的目标是通过技术问题确保你具备必要的技能,以及通过行为问题以及你的表现来确保你是一个可以合作的人。如果这次面试进展顺利,那么是时候……

    图 7.1. 访谈过程的四个步骤

    图片

  3. 案例研究—— 你将得到一个关于现实世界问题的描述以及与之相关的数据。你将在周末的现场或家中得到时间来分析数据,尝试解决问题,并撰写一份关于它的报告。然后你将向招聘团队展示你的报告。这个练习向团队展示了你具备必要的技能(通过你的报告质量),以及你能够完成任务(通过你在报告中完成的工作量)。并非所有公司都需要这一步骤;有时,他们会用关于你过去工作的演示来代替。如果你的案例研究报告做得好,你将……

  4. 最终领导面试和录用通知—— 这场面试是与高级经理、总监或其他团队领导进行的。目的是让领导批准你适合这个职位和团队。如果领导面试一开始就发生了,这意味着数据科学团队认为你很合适,因此这种面试很少会推翻这种批准。请注意,这次面试通常在案例研究之后立即进行,但也可能在第一次现场面试的开始或结束时进行。假设一切顺利,你将在不到两周内得到录用通知!

当这个过程涉及所有这些步骤时,你通常会在提交简历后的三周到两个月之间收到录用通知书。正如你所看到的,面试过程的每个部分都是为了实现公司不同的目标而设计的。

在接下来的章节中,我们将深入探讨这个过程的每个部分,展示你如何在每种环境中展示你的技能和能力。

7.2. 第一步:初步电话筛选面试

你与公司的第一次互动很可能是与招聘人员进行的 30 分钟电话通话。给人留下良好的第一印象非常重要。然而,根据公司的规模,你将要交谈的人可能与你将要工作的数据科学团队无关,因此你的目标是向公司展示你能够胜任这项工作,而不仅仅是你是这份工作的最佳人选。

为什么?在这场电话面试中,你要与之交谈的人的工作是筛选掉不合格的候选人。当招聘人员与候选人交谈时,他们试图评估是否有必要让数据科学团队的成员与该候选人交谈。很多时候,人们申请的工作他们没有相应的技能(或者谎称拥有所需的技能),因此招聘人员想要阻止他们继续前进。作为候选人,你的目标是让招聘人员明白,你至少对这份职位有最基本的资格。

招聘人员可能会问你这类问题:

  • 请介绍一下你自己.—(这实际上不是一个问题,但通常被当作一个问题。)招聘人员要求你用一到两分钟的时间概述你的背景。他们想听你描述与手头工作相关的工作经验。例如,如果你申请的是决策科学职位,他们想了解你的学术背景以及你参与过的任何分析工作或项目。你的回答长度应该在一到两分钟之间。如果你的回答不到一分钟,你会显得没有足够的内容,而如果超过两分钟,你会显得不知道如何总结故事。

  • 你熟悉哪些技术?— 招聘人员正在检查你是否具备完成这项工作的技术经验。除了这个问题之外,你应该预料到会被问到关于你对数学和统计学的熟悉程度、数据库和编程以及商业领域的问题(参考第一章)。你还需要提到任何与职位或工作公告中提到的技术相关的技术。如果你没有完全符合工作公告的要求(比如 Python 而不是 R),那没关系;只需诚实地说明这一点。如果你恰好知道公司使用的更多技术栈,也许是从与那里工作的人交谈中得知的,那么尽量围绕这个事实来构建你的回答。

  • 你为什么对这个职位感兴趣?— 招聘人员试图了解最初是什么吸引了你加入这家公司。一个经过深思熟虑的回答表明你做了功课并且能够完成任务。如果你回答“我只是点击了 LinkedIn 上每个数据科学职位的‘申请’”,这会显示出你的判断力不足。不要过度思考这类问题;只需展示你了解公司做什么,并且对这个职位有真正的兴趣。尽可能地将这个职位与你自己的背景和兴趣联系起来。

尽管招聘人员会问你关于你自己和你的背景的问题,但这次通话也是你更好地了解该职位本身的一个机会。招聘人员至少应该花上 10 分钟来谈论你面试的职位和团队。在这段时间里,提出问题,以便你能确定你想要这份工作,并且可以展示你对这个职位的真诚兴趣。这些问题可以包括诸如出差、公司的文化、团队如何变化、团队的重点以及为什么这个职位会开放等问题。

在电话交谈中,招聘人员可能会试图了解你的薪资期望,无论是直接的(“你期望的薪资是多少?”)还是间接的(“你目前赚多少钱?”)。为了从积极的角度看待这种方法,招聘人员是在确保公司能够负担得起满足你的薪资期望,以免浪费时间面试那些不会接受公司提供的工作的人。从消极的角度来看,招聘人员可能试图将你的薪资锁定在低于公司所能提供的水平,因为你向他们提供了你的期望信息。尽可能避免在过程更深入之前讨论薪资。第八章涵盖了薪资谈判。

在电话中,确保询问下一步是什么以及时间表。招聘人员可能会说:“我们将会邀请你进行面试,我们将在一周内知道是否会发生。”询问“下一步是什么?”是完全正常和合适的事情。不要直接询问招聘人员你是否会进入下一轮面试。这个问题可能会让他们感到尴尬,并可能让他们感到不舒服——而且他们可能也没有做出决定的权限。

如果电话面试进展顺利,你将被要求进入现场面试。

7.3. 步骤 2:现场面试

这一步是面试过程的核心。公司邀请你到现场进行面试,并为此预订了数小时。你请了一天假,穿上了一些比平时更好的衣服,然后出发了。

面试时应穿什么

面试中的一个经常被讨论和辩论的方面是应该穿什么去面试。对于数据科学职位来说,这个问题由于工作可能属于各种行业,每个行业都有其独特的文化和着装规范而变得更加复杂。对某个面试来说完全合适的着装,可能对下一个面试来说就完全不合适了。

你最好的选择是在安排面试时询问你的招聘人员人们通常穿什么去面试,以及公司的总体着装规范。招聘人员希望你能成功,不应该误导你。否则,尝试与该公司或类似公司工作的人交谈。如果所有其他方法都失败了,假设官僚行业(金融、国防、医疗保健等)有严格的着装规范,而年轻的公司或科技公司(初创公司、大型科技公司)有宽松的着装规范。避免极端的着装(凉鞋、短裤、鸡尾酒礼服、高顶帽);穿一些让你感到舒适的衣服。

这次面试的目的是帮助公司了解你是否能够胜任他们招聘的工作,并且能否做得很好。根据公司和职位的不同,可能会有三到十个人来参加面试,每个人都有自己的优势和劣势。公司希望找到最合适的人选——或者第一个面试且对这份工作相当擅长的人。

在整个面试过程中,强化你能够胜任这份工作的观点。这个概念与成为最聪明的候选人、拥有最多年经验的候选人或使用过最多类型技术的候选人不同。相反,你希望成为一个既能合理合作、又有足够技能完成工作、又能完成任务的人。

在这些多个小时的面试中会发生什么?现场面试通常包括以下内容:

  • 参观工作场所和团队介绍—— 公司希望让你了解在那里工作的感受,并可能通过免费饮料和零食(如果有的话)给你留下深刻印象。这部分时间不到 15 分钟,但最好能四处看看,看看你是否会喜欢在那里工作。工作空间是否安静且易于工作?人们看起来是否合理地快乐和友好?笔记本电脑是否已经使用了八年?在这次参观过程中,你经常会和公司的人进行一些闲聊。注意!这次对话是面试的一部分;如果你表现得不好或刻薄,你可能会错失工作机会。目标是表现得和善,但最重要的是,做真实的自己(除非你的真实自我是个混蛋)。

  • 一个或多个技术面试—— 这部分时间可能从 30 分钟到数小时不等,取决于公司的严格程度。你将被问到许多问题,可能需要在白板上或电脑上完成工作。(我们将在第 7.4.1 节和附录中详细介绍这些问题。)这次面试的目的不是让面试官了解你了解的最深奥的话题或你是否能解决最棘手的问题。目的是看看你是否具备完成工作的最低必要技能,所以你的目标是展示你所需要的。

  • 一次或多次行为面试—— 行为面试的目的是了解你与他人的相处如何以及你完成任务的能力如何。你将被问到很多关于你的经历的问题,包括你如何处理困难的情况以及你如何确保项目顺利完成。你可能会被问到非常一般的工作问题,例如“告诉我你处理与困难同事相处的一次经历”,到更具体的数据科学问题,例如“你如何处理模型失败的数据科学项目?”这些问题不一定有正确或错误的答案;它们将留给面试官进行解释。

小贴士

在你的现场面试当天之前,你可以询问招聘人员或招聘经理面试将是什么样的。至少,他们应该给你一个日程表,显示你将和谁交谈以及他们将讨论哪些主题。如果你询问,他们可能能够提供一些关于面试的技术和行为部分的具体细节。这些信息将帮助你做好准备。

经历现场面试在情感上是非常消耗人的。你将不得不迅速从考虑技术问题切换到关于你自己和你的梦想的问题,同时以专业和友好的方式展示自己。根据公司的规模,可能有一人或多人会对你进行面试,你希望给每个人留下好印象。在面试期间管理紧张情绪的最好方法之一是记住,面试官也是人,他们也希望你能表现得很好,就像你希望的那样。他们是你的盟友,而不是你的对手。

在接下来的几节中,我们将深入探讨面试的不同部分。本章的这一部分将探讨现场面试的不同部分,但请查看附录以获取详细的面试问题和示例答案,以及如何思考这些问题。

7.3.1. 技术面试

对于许多数据科学家来说,技术面试是整个面试过程中最令人恐惧的部分。很容易想象自己站在白板前,面对一个你不知道如何回答的问题,并知道你将无法得到这份工作。(仅仅写下这句话就引发了作者的焦虑!)

要最好地理解如何处理技术面试,你需要重新思考你对它的看法。如果你已经阅读了这本书的第四章(kindle_split_014.html#ch04)并创建了一个数据科学作品集,那么你已经通过了技术面试。这次面试的目的是看看你是否具备成为数据科学家所需的技能,并且根据定义,你因为已经做了数据科学而具备这些技能!如果在面试中,你发现自己因为无法回答一个棘手的问题而被评判,那么这是一个迹象表明面试官做得不好,而不是你。你具备必要的技能,你有经验,这部分面试是为了让你表达这些事实。如果面试不允许你这样做,那不是你的错。

在这个过程中,你试图向面试官展示你具备完成这项工作所需的技能。展示你有一套技能与完美回答每一个问题是非常不同的活动。一个人可以给出面试官想听的准确答案,但在面试中表现不佳,或者他们可以给出错误的答案,但表现良好。考虑以下两个面试问题的答案:

面试官: 什么是k-折交叉验证?

答案 A: 你随机将数据分成k个均匀的组,并将其作为k个模型的测试数据。

答案 B: 你随机抽取一个数据样本,并将其作为模型测试数据k次。然后你取这些模型的平均值并使用它。这种方法实际上是一种处理过拟合的方法,因为你有一系列具有不同训练数据的模型。我在我的作品集的主要项目中使用了这种方法来预测房价。

技术上,答案 A 是正确的,而答案 B 则不是(这是交叉验证,但不是技术上的k-折,因为数据没有被分成均匀的组)。尽管如此,答案 A 只向面试官提供了面试者知道定义的信息,而答案 B 则显示了候选人知道这个术语,知道为什么使用它,并且有实际经验。这个例子说明了为什么在面试期间,考虑如何传达你具备这些技能的事实是如此重要。

具体来说,你可以在数据科学技术面试中做一些事情来向面试官传达你具备这些技能:

  • 解释你的思考过程— 尽可能不要只是给出答案;也要解释你为什么得到这个答案。给出解释可以展示面试官你是如何思考这个主题的,并且即使你没有给出正确答案,也可以表明你正在正确的轨道上。有一点需要注意:虽然大声重复问题可能感觉有帮助(比如“嗯……这里线性回归会起作用吗?”),但一些面试官可能会将这种行为视为你知识不足的迹象。练习直接回答问题,并练习如何从一开始就构建你的思考过程。

  • 参考你的经验— 通过谈论你完成的项目或工作,你反复将对话建立在你的现实世界实践技能上。这种方法可以使含糊的回答更加可信和具体,或者如果你的回答有些偏离,提供另一个谈话话题。然而,你必须适度地采取这种做法;如果你花太多时间谈论过去而不是谈论手头的问题,你可能会显得在回避问题。

  • 如果你不知道答案,要开放和诚实— 在面试中,完全有可能(也是正常的!)不知道每个问题的答案。尽量坦率地解释你关于答案的已知信息。例如,如果你被问到“什么是半连接?”而你不知道答案,你可以说:“我以前没听说过这种连接方式,但我怀疑它可能与内连接有关。”对于你不知道的事情保持开放的态度,比自信地给出错误答案要好;面试官通常对那些不知道自己不知道的人持谨慎态度。

TIP

在回答面试问题时,你的本能可能是尽可能快地回答。试着克服这种本能;等待给出一个强有力的回答比快速给出一个薄弱的回答要好得多。在面试的压力下,很难放慢你的说话速度,所以事先练习回答问题,以便更加自在。

以下是在技术面试中你可能会遇到的一般类型的问题。再次提醒,请查看附录中的示例面试问题和答案。

  • 数学和统计学— 这些问题测试你对学术主题的理解程度,这些学术主题是数据科学工作必要的基石。它们包括

    • 机器学习— 这个主题包括对不同机器学习算法(如 k 均值、线性回归、随机森林、主成分分析、支持向量机)的了解,不同使用机器学习算法的方法(如交叉验证、提升),以及在实践中使用它们的通用专业知识(例如,当某些算法倾向于失败时)。

    • 统计学— 你可能会被问到纯粹是统计学的问题,特别是如果你的工作是在回答这些问题的领域,比如实验。这些问题可以包括统计测试(如 t 检验)、术语的定义(如方差分析和p值),以及关于概率分布的问题(如找到指数随机变量的期望值)。

    • 组合数学— 这个数学领域涵盖了与计数相关的一切。这个领域中的逻辑问题包括像“如果一个袋子里有六个不同颜色的弹珠,如果你不替换地取出两个,有多少种组合?”这样的问题。这些问题与数据科学家的工作关系不大,但面试官有时认为这些答案可以提供对你解决问题的能力的洞察。

  • 数据库和编程— 这些问题测试你在数据科学工作中计算机相关部分的有效性。它们包括

    • SQL— 在几乎任何数据科学面试中,你都会被问到关于使用 SQL 查询数据库的问题。这种知识对于大多数工作都是必需的,熟悉 SQL 表明你应该能够快速开始你的新角色。预期会被问到关于如何为样本数据编写 SQL 查询的问题。例如,你可能会被给一个包含多个班级学生成绩的表格,并要求找出每个班级得分最高的学生。

    • R/Python— 根据公司不同,你可能会被要求通过编写伪代码来回答一般的编程问题,或者使用 R 或 Python(公司使用的任何一种语言)来解决特定问题。如果你知道 R 但公司使用 Python(或反之),请不要担心;通常,公司愿意在岗位上雇佣并培训新语言,因为很多知识是可以迁移的。预期会被问到需要编写代码的问题(例如:“你将如何使用 R/Python 过滤表格,只包含得分列高于 75 分位数的行?”)。

  • 商业领域专业知识— 这些问题高度依赖于你申请的公司。它们被用来了解你对公司所做工作的熟悉程度。尽管你可以在工作中获得这些知识,但公司更希望你已经具备这些知识。以下是一些在不同行业中使用的示例问题:

    • 电子商务公司— 电子邮件的点击率是多少?它与打开率相比如何,应该如何不同地考虑它们?

    • 物流— 如何优化生产队列?在运营工厂时需要考虑哪些因素?

    • 非营利组织— 非营利组织应如何尝试衡量捐赠者增长?你如何判断捐赠者过多且未续费的情况?

  • 棘手的逻辑问题— 除了与数据科学相关的问题之外,你可能在面试中遇到一些一般的脑筋急转弯问题。这些问题据称旨在测试你的智力和即兴思考的能力。实际上,这些问题并没有做到这一点。谷歌进行了一项大规模研究(mng.bz/G4PR),发现这类问题无法预测候选人将如何在职场上表现;它们只是让面试官感觉聪明。这些问题通常类似于“美国所有酒店中洗发水瓶的总数是多少?”你经常可以通过谷歌搜索来查看大型公司是否使用这类问题(以及哪些问题)。

恰确地说,你将被问哪些问题以及你能花多少时间在上面很难说;这些因素高度依赖于公司和面试你的人。尽力保持冷静和自信地回答问题,即使你不能回答其中的一些问题。如果面试官在你给出部分答案时与你交谈,他们可能认为你做得很好,并可能愿意为你指明正确的方向。通常,问题设计得覆盖了如此多的主题,以至于没有数据科学家能够回答所有问题,所以按照设计,你将有一些问题无法回答。

面试面试官

每次你在现场面试中遇到新人时,他们会在结束时说“你有什么问题要问我吗?”这个问题是你唯一获得关于工作坦率信息的机会之一,所以要明智地利用时间!你可以了解更多关于使用的技术和工作,以及团队如何运作。你的问题表明你对公司有真诚的兴趣,所以提前思考问题是值得的。以下是一些例子:

  • 你使用哪些技术,你是如何培训新员工的?” 如果面试还没有详细讨论技术栈,这个问题就很好。答案将让你了解公司是否有正式的培训流程,或者希望员工自己掌握知识。

  • “我们的团队的利益相关者是谁,他们之间的关系如何?” 你在问谁将决定工作的方向。如果关系不好,你可能会成为利益相关者需求的奴隶,即使这违背了你的判断。

  • “你如何对数据科学工作进行质量控制?” 因为团队不想发布含有错误的工作,所以在他们的流程中应该有一些检查。在实践中,许多数据科学团队没有进行检查,当事情出错时,他们会责怪工作的创作者。这种工作场所是有毒的,应该避免!

7.3.2. 行为面试

行为面试旨在测试你的人际交往能力,并让团队中的数据科学家更好地了解你和你背景。尽管技术问题通常集中在一段时间内的一两个块中,但行为问题可能会在整个现场面试过程中出现:在人力资源代表的一个小时会议中,技术面试官的十分钟结束问题,或者在你等待另一个人到来时与一个员工的闲聊。所以,随时准备回答行为问题。

这里有一些你应该预料到的面试问题的例子。你可以在附录的 A.4 节(section A.4)中找到更多行为问题及其答案:

  • “请告诉我你自己的情况。” 这个“问题”出现在电话筛选过程中,也可能在每次你与新人交谈时出现。再次强调,尽量给出一到两分钟的总结,但这次,根据你正在与之交谈的人来调整。

  • “你参与过什么项目,你从中学到了什么?” 这个问题旨在展示你是否能够回顾你历史上的一个项目,并对它进行反思。你是否处理了哪些做得好和哪些做得不好的地方?

  • “你最大的弱点是什么?” 这个问题很令人恼火,因为它似乎从博弈论的角度来看,你想要给出一个尽可能不显示弱点的答案。在实践中,面试试图做的是检查你是否了解自己的局限性,并且是否有你正在积极努力改进的领域。

注意,所有这些问题都非常开放,没有正确或错误的答案。但有一些表达方式可以显著改善你的答案被接受的方式。

对于这些问题中的大多数,特别是那些询问你的经历的问题,你的答案应该遵循一个一般的框架:

  1. 用你自己的话解释这个问题,以表明你理解了它。

  2. 解释一个发生这种情况的经历,重点关注问题存在的原因。

  3. 描述你采取的行动来解决该问题,以及结果。

  4. 总结一下你学到了什么。

考虑这个请求:“请告诉我一次你向利益相关者交付了某项成果,但得到了负面结果。”一个可能的回答可能是:“所以你是在问我一次我因为我的工作让某人失望的情况 [1. 回答问题]?那是在我上一份工作中发生的,我需要写一份关于客户增长的报告。我们的团队同时处理了很多不同的请求,所以我几乎没有时间专注于一个来自一位董事长的请求。当我提交了一份只花了一天时间完成的报告时,那位董事长对它非常失望 [2. 描述问题]。首先,我为没有达到她的期望而道歉;然后我和她一起商讨如何缩小请求的范围,同时仍然满足她的需求 [3. 提供解决方案]。从这个经历中,我学到了最好是在无法满足他们的请求时尽早通知他们,这样我们可以达成一个双方都满意的解决方案 [4. 你学到的]。”

行为面试问题的一个好处是它们都很相似,所以你可以提前准备答案!如果你有三个或四个故事,涵盖了在具有挑战性的环境中工作、处理困难同事和管理失败的情况,你可以利用这些故事来应对大多数面试问题。这种方法比即兴编故事要轻松得多。如果你有时间,你可以大声向朋友讲述这些职业故事,以学习如何最好地构建它们。

几乎在每一次面试中,你都会被要求描述一个过去的项目,因此做好充分的准备是值得的。一个理想的项目故事应涵盖本节列出的要点:这是一个充满挑战的情况,你在其中克服了困难,特别是难以相处的团队成员,然后找到了解决方案。理想情况下,这个故事还应符合四步回答风格。

诚然,找到一个包含每个有趣转折和转折的项目故事往往很困难,尤其是如果你是一个有抱负的数据科学家。如果你发现自己缺乏答案,试着讲述一个关于你项目组合中项目的简单故事。即使是“我想分析一个有趣的数据库会很有趣,所以我获得了它,清理了它,并发现了一个有趣的博客结果”这样的答案也能向面试官展示你能够完成分析任务。

回答行为问题最好的技巧是许多人已经探索过的。你可以思考到使用确切措辞的方法和每个答案花费的时间。尽管如此,大多数技巧并不特定于数据科学,因此你可以通过阅读关于面试的通用书籍和文章来轻松地深入探讨。我们在接下来的资源部分提供了建议第八章。

7.4. 第 3 步:案例研究

如果你现场面试表现良好,你将被要求完成一个案例研究:一个小型项目,展示你在实践中如何做好数据科学。数据科学团队中的人会给你一个数据集,一个用它解决的问题,以及一个解决它的时间期限。你可能被要求在现场面试期间解决这个问题,有几个小时的时间工作,或者你可能被给予更长的时间,比如一个周末,这样你可以在家里完成这项工作。你通常可以自由使用你最熟悉的编程语言或工具,尽管公司可能会限制你使用它所使用的工具。当你的时间结束时,你将向数据科学团队的一组人进行简短的展示或讨论你的结果。以下是一些案例研究的例子:

  • 给定一家公司发送的促销电子邮件数据和订单数据,确定哪些电子邮件营销活动表现最好,以及公司未来应该如何不同地营销。

  • 给定包含公司被提及的 20,000 条推文的文本,将这些推文分组到你认为对营销团队有用的主题中。

  • 在公司网站上运行了一个昂贵的 A/B 测试,但进行到一半时,数据收集不再持续。取实验数据看看是否能从中得出任何价值。

注意到在每个案例研究中,目标并不是直接的数据科学问题。例如,“哪个活动表现最好?”这类问题在商业环境中是有意义的,但并没有一个“哪个活动表现最好?”的算法可以应用。这些案例研究作为面试工具是有用的,因为它们要求你从问题的开始到解决方案的整个过程。

话虽如此,公司到底在好的案例研究中想看到什么呢?他们想知道以下几件事:

  • 你能将一个模糊的、开放式的问题找出一些解决方法吗? 很可能你不会解决这个问题,但只要你在合理的方向上做出尝试,你就表明了你拥有技术技能并且能够完成任务。

  • 你能处理杂乱的真实世界数据吗?你将获得的数据可能需要过滤、创建连接、特征工程和处理缺失元素。通过给你一个复杂的数据集,公司是在让你做那种你会在工作中做的事情。

  • 你能构建一个分析结构吗? 公司想知道你是否以有条理、深思熟虑的方式查看数据,或者调查与当前任务无关的事情。

  • 你能制作一份有用的报告吗? 你将不得不创建一份关于你工作的演示文稿,以及可能的 Jupyter 笔记本或 R markdown 报告。公司想知道你是否能制作出对业务有用的东西,并构建一个有用的叙事结构。

好消息是,制作优秀案例研究所需的技能和技术与制作优秀项目组合所需的技能和技术完全相同:从数据和一个模糊的问题中产生输出。如果你制作了一篇博客文章,那就更好了;这模仿了为面试案例研究创建演示文稿的过程!

你需要考虑项目组合和案例研究问题之间的一些细微差别:

  • 在案例研究中,你有限的时间来做分析。这个时间可以由日历来设定,比如从你得到材料的那天起的一周,或者由工作时间来设定,比如不超过 12 小时。这么短的时间意味着你需要策略性地考虑在哪里花费你的时间。一般来说,数据清洗和准备步骤比数据科学家预期的要长得多。仅仅是将表格连接起来,从字符串中过滤掉格式错误的字符,以及将数据加载到开发环境中就需要花费很多时间,而且通常这部分工作不会给公司留下深刻印象。如果你这意味着分析时间太少,尽量不要过分专注于以最佳方式准备数据。

  • 与案例研究的另一个不同之处在于,你将根据你的结果展示来评判,所以你希望有一个经过精心打磨的演示,展示真正有趣的结果。然而,创建演示的行为可能会感觉既无趣又不如分析本身重要,因此许多数据科学家都会推迟创建演示,直到最后一刻。推迟到最后一刻是错误的,因为你可能会发现时间不够,或者当你没有时间做出改变时,分析可能不像你希望的那样有趣。尽可能早地开始制作演示,并在分析进展的过程中构建它。

  • 与案例研究的一个不同之处在于,你有一个极其具体的受众:你向他们展示的那一小群人。在项目组合中,你实际上不知道谁会查看它,但在案例研究中,你可以针对你的分析进行高度定位。如果可能的话,当你第一次得到案例研究时,询问案例研究演示的受众是谁。如果受众成员都是数据科学家,你可以使你的演示更加技术化,例如包括你使用的机器学习方法的细节以及你为什么选择它们。如果受众是商业利益相关者,尽量减少技术组件,更多地关注你的发现如何影响商业决策。如果受众是数据科学家和商业利益相关者的混合体,尽量包含足够每种类型的细节,这样如果小组中的某位成员主导了讨论,你就有足够的材料来安抚他们。

演示本身通常包括 20 到 30 分钟的展示你的发现,以及 10 到 15 分钟来自观众对你方法和发现的问题。练习你的演示并计划在演示的每一部分你想说什么是个好主意。练习也有助于你遵守分配的时间;你不想只讲 5 分钟或连续讲 50 分钟。在问答环节,你将面临各种主题的问题。你可能从回答关于你模型中参数的问题直接跳到关于你发现业务影响的问题。一个好的做法是在回答问题之前花点时间思考,这样你可以找到自己的方向并思考你的回答。如果你没有确信的答案,通常最好给出某种形式的“我不确定,但……”然后提出一些你如何找到答案的想法。如果可能的话,添加你确实知道的相关背景。

7.5. 步骤 4:最后的面试

当案例研究结束后,很可能是在你进行案例研究的同一次办公室访问中,你将进行最后一次面试。这次面试将与做出最终决定的人进行,比如数据科学团队的经理或工程总监。根据公司如何运行面试流程,这个人可能已经准备好有关你在早期阶段表现的信息,或者他们可能对此一无所知。这次面试的目的是让这个人批准你的雇佣。

在最终面试中,你很难知道会被问到哪些问题,因为这些取决于将要面试你的人。一个技术型的人可能会关注你的技术经验和你拥有的技能,而一个商业人士可能会询问你的问题解决方法。无论面试你的人是哪种类型,你都应该期待一些与行为面试风格相同的问题,例如“你如何处理困难的情况和解决问题?”对于这些问题,保持开放、诚实和真诚将大有裨益。

跟进

在面试过程的每个阶段之后,你可能会倾向于以某种形式联系公司的人。跟进可以显示出你对所遇到的人的感激之情,同时也能让你更多地了解流程的进展。然而,如果你做得不好,联系可能会显得粗鲁或绝望,这可能会危及你获得工作的机会。你可以根据你在流程中的位置使用以下三种方法之一进行跟进:

  • 在公司任何人联系你之前—— 如果你已经发送了申请但还没有收到回复,不要跟进。没有回复是公司不感兴趣的迹象。

  • 在接触但尚未亲自见面之前—— 在电话面试之后,只有在你不确定自己在流程中的状态时,你才应该跟进。如果已经过了公司所说的下一步行动的时间,你只能发送一封电子邮件进行跟进。在这种情况下,只需要求更新状态即可。

  • 在亲自接触之后—— 你可以(但绝对不需要或应该)给面试过你的人发送一封简短的感谢信。如果你在他们所说的回复时间内没有收到回复,你也可以给招聘人员发送电子邮件,要求更新情况。

7.6. 报价

如果一切顺利,在你的最终面试后的一周或两周内,你将接到公司某人的电话,通知你公司将向你发出报价。恭喜你!

在第八章中,我们更详细地讨论了什么因素使一份工作机会变得优秀,如何比较不同数据科学工作的报价,以及如何要求公司提高其报价。

很不幸,也可能会有失望的情况;你可能会得不到公司的录用通知。在为失去这份潜在的工作感到悲伤一段时间后,你可以将这种情况视为一个学习的机会,了解你可以在哪些方面为下一次面试做出改进。如果你只通过了初步的电话筛选,这可能意味着你的基本资质不适合特定的职位。在这种情况下,你应该考虑调整你申请的职位。如果你参加了现场面试或案例研究,但没有更进一步,那么很可能有特定的原因说明你不适合该公司或该职位;尝试推断你下一次面试可以关注的点。如果你通过了最后的面试但没有得到工作,这通常意味着你非常适合这个职位,但有人恰好更适合。在这种情况下,你除了继续申请类似职位外,别无他法。你不应该联系公司询问为什么你没有被录用;你不太可能得到一个诚实的答案,这个问题会被视为不专业。

7.7. 与星巴克高级决策科学家瑞安·威廉姆斯的访谈

瑞安·威廉姆斯最近从一家营销和销售咨询公司的数据科学经理职位转型,在那里他负责数据科学面试流程。现在在星巴克,他作为公司分析和洞察团队的一部分,帮助星巴克奖励计划进行决策。他在华盛顿大学获得了统计学和经济学双学位。在加入星巴克之前,他的职业生涯专注于咨询行业。

你需要做些什么才能在面试中表现出色?

重要的是要充分准备。面试中涉及到的技能集非常具体。很多人认为他们可以随意走进面试,他们的经验自然会自然地展现出来。我自己也有过这种感觉,我也见过其他人带着这种心态走进面试。但是,对于像“请告诉我们你曾经遇到过的沟通困难”这样的问题,除非你真的准备好了,否则你可能会胡言乱语,绕圈子。面试中确实需要一定的技能,而准备这些技能的方法是查阅你将要面对的典型问题。无论你在哪里面试,你都会遇到一些行为问题,你都会遇到一些技术问题,你都会遇到一些商业案例问题。

所以要了解常见的面试行为问题。了解人们将要问的技术问题类型,并理解商业案例类型的问题。除非你以正确的方式准备好展示你的经验,否则你并不一定会在面试中获得那个机会。

你如何处理不知道答案的情况?

我记得的一个案例是,我在一家较大的科技公司面试,他们问了我很多越来越难的统计问题。到了他们问我一个超级学术问题的时候,我想是这样一个问题:给定一个特定的概率分布函数,你将如何使用它的矩生成函数来找到分布的峰度?我可能很……这可能是我在大学时可能回答的问题,但现在我肯定不能。

话虽如此,当我给出答案时,面试官显然很失望。我本可以对此大加抱怨,但我并不高兴,因为我觉得这类问题更多的是 trivia,而不是展示我思考能力的问题。拥有一份工作意味着你在解决未知问题的能力上的机智。这并不是关于你进入一个房间就已知所有需要知道的事情的能力。

如果你对你的回答得到负面反馈,你应该怎么做?

有情感因素,你会因为无法回答问题而不高兴,但你必须不要让这破坏你的面试。自然地,你会继续思考你本可以做些什么来正确解决这个问题,而不是思考你如何回答下一个问题。但你真的需要能够继续前进,并保持对将来将要遇到的问题的敏锐。

我想说,如果你遇到那种问题,你需要面试公司。他们在问你很多问题,但你应该利用他们问你的问题来推断这实际上是不是你想要工作的公司。对我来说,一个认为数据科学家能够三次推导出矩生成函数以获得峰度的公司,不一定是我觉得最适合我的工作环境。

进行面试教会了你关于作为面试官的一些什么?

当我被面试时,我对被问到的类型的问题以及我在面试中提出的问题的类型都更加深思熟虑。在我自己面试别人之前,我总是直接看待面试问题。被面试的感觉就像是在参加考试,因为面试官在提问,而我以为我只需要正确回答。我没有评估被问到的类型的问题,而现在我对此更加警觉。这位面试官问的问题是不是很多 trivia?他们是否希望我白板很多编程问题?他们是否关心我在数据科学角色中所关心的事情?

摘要

  • 对于数据科学来说,大多数公司的面试流程都是相似的。

  • 对于现场面试,预期会有技术和行为问题。

  • 准备好进行数据科学案例研究。

  • 抽出时间准备和练习常见面试主题的答案。

  • 在面试期间,了解你想要了解的公司和角色的信息。

第八章. 报价:了解什么可以接受

图片

本章涵盖

  • 处理初始报价

  • 有效谈判你的报价

  • 在两个“好”选项之间做出选择

恭喜!你得到了数据科学工作的报价。这是一个巨大的成就,你绝对应该花点时间来品味它。在过去几个月甚至几年里,你已经做了很多工作才达到这个阶段。

本章将帮助你回应和决定你收到的报价。尽管你可能非常兴奋,但在你得到报价时,你不应该立即说“是的!我什么时候可以开始?”并非所有数据科学工作都是相同的。你在申请时已经有所选择,但你可能在面试中发现了引起你关注的事情。或者,你可能有一个对你来说是硬性要求的福利,比如为你的家人提供良好的医疗保险,你需要仔细查看报价细节。即使你确信你想接受报价,你也不应该立即说“好”:你想要谈判!在你得到报价但尚未接受的时候,是你最有权力的时刻。现在,这个雇主终于找到了一个它非常兴奋的人(你!),公司希望关闭这笔交易。招聘是非常昂贵的;人力资源和数据科学团队评估申请人和面试他们需要花费大量时间,而且每个没有新员工加入的星期,公司都无法从那个(假设的)人的工作中受益。利用这个机会,要求对你重要的事情,无论是更高的薪水、每周一次在家工作,还是参加会议的更高预算。

8.1. 流程

通常,报价流程是这样的:

  1. 公司告诉你有一个报价即将到来。 它希望你能尽快了解报价,以免你先接受其他公司的报价。

  2. 公司提出报价。 通过电子邮件或电话(随后是电子邮件),公司会告诉你关于薪资、开始日期和其他对你决策必要的事项的细节。通常,它也会给你一个你必须接受或拒绝报价的日期。

  3. 你给出初步回应。 如第 8.2 节所述,除非你绝对确定你不想接受这份工作,否则我们建议你表达你的热情,并要求几天到一周的时间来考虑报价,而不是立即说“好”。当你与公司进行下一次对话时,你将开始谈判过程(第 8.3 节)。

  4. 争取你能得到的最佳报价。 当你谈判时,你可能立即得到答复,但通常,公司需要一些时间来告诉你是否可以给你更好的报价。

  5. 决定这个报价是否足够吸引你,并给出你的最终决定。

8.2. 接收工作邀请

您收到的电话或电子邮件,邀请您接受工作,通常来自您一直在合作的招聘经理、招聘人员或人力资源人员。然而,无论您此时与谁打交道,您的回复都应该是相同的。

首先表达您对这份工作邀请感到非常高兴和兴奋。如果您听起来对在那里工作不感兴趣,公司可能会担心即使您接受了这份工作,您也不会在那里待很长时间,也不会贡献您最好的工作。

当您非常失望时

尽管我们通常建议在您拥有所有书面细节并思考了几天之后再开始谈判,但如果您对这份工作邀请非常失望,您可能想要开始讨论这一点。假设薪资比您预期的低 25%。您可以从说类似这样的话开始:“非常感谢。我真的很兴奋能有机会在 Z 公司工作,并且从事我将会做的工作。但我想诚实地说我期望的薪资比实际低得多。我知道在纽约市,像我这样的硕士学位和五年工作经验的人的市场薪资范围在 X 到 Y 之间。我们能为这份工作做些什么,使薪资更接近这个范围?”您也可以使用更高的竞争性报价或更高的当前薪资作为要求更多薪资的理由。如果您认为薪资会立即让您拒绝这份工作,而不是您会接受但想要谈判 5%更多薪资的工作,那么保留这种策略。无论您是多么优秀的谈判者或候选人,获得 20%的加薪可能都是不可能的,而且最好是尽早而不是晚些时候发现这一点。

公司应该告诉您,您将通过电子邮件收到详细信息,如果没有这样做,您应该要求提供。这个请求有两个目的:

  • 您可以坐下来,花时间阅读所有内容并考虑整个套餐,而无需在电话中疯狂记笔记,并在之后试图辨认您的笔迹。

  • 您应该在收到书面文件之前,永远不要认为这份工作邀请是正式的。大多数情况下,您不会有问题,但您不希望因为电话中的误解而认为您接受了一定的薪资和福利套餐,后来却发现并非如此。

当您收到工作邀请时,它应该包括您的职位、薪资、提供的任何期权或股票单位,以及福利套餐。如果它没有包含您需要的详细信息,例如健康保险福利的完整说明,您也可以要求提供这些信息。

最后,你应该有一个指定的时间窗口来接受邀请。这个时间窗口至少应该是一周;如果少于这个时间,请要求一周。最好的做法是自信地说:“我需要几天时间来考虑这件事。”如果你无法如此坚定地表达你的信念,这是一个与某人讨论情况的好时机,比如伴侣、家庭成员或幸运的金鱼。有一个外部的决策者和约束力是有帮助的。这样,招聘人员或经理就知道他们不能立即给你施加压力。

有时候,公司会给你一个“爆炸性”的邀请,这意味着你必须在一周内做出回应;否则,邀请将被撤回。截止日期不应该是在那个最初的电话通话中需要立即做出回应,但可能只是 24 小时后。通常,你可以通过说“我知道我们都希望这是一个完美的匹配。选择我的下一家公司是一个重大的决定,我需要一周时间来仔细考虑。”来推迟截止日期。在最坏的情况下,公司可能会因为某些原因拒绝等待你完全评估邀请。如果你发现自己处于这种情况,那是一个巨大的红旗。一个不愿意尊重你在这一领域需求的公司,在其他领域也不会尊重你的需求。通过给你一个很短的时间窗口,公司知道它在给你施加压力,这会导致更多的焦虑,并可能导致你做出糟糕的决定。尽管许多人正在申请数据科学工作,但公司仍在努力寻找合适的人选,所以一个这样对待申请者的公司可能内部有些奇怪的事情发生。

如果你正在与其他公司面试,让那些公司知道你已经收到一份工作邀请以及你需要何时做出回应。如果你已经进入面试的最后阶段,那些公司可能会加快流程,以便在你需要决定当前工作邀请之前给你发送一份邀请。当你收到另一份工作邀请时更新其他公司是完全正常的;他们会感激你的。当你联系他们时,再次强调你对他们的兴奋以及你将在那里做的工作。有些公司可能无法采取任何行动,但至少你已经给了他们一个机会。再次强调,由于公司通常很难找到要雇佣的数据科学家,如果他们找到了一个他们喜欢的人,他们通常可以迅速行动。

8.3. 谈判

许多人不喜欢谈判工作邀请。一个原因是它被认为是一个零和游戏:如果你得到,他们就会失去。另一个原因是它感觉自私和贪婪,尤其是如果邀请比你的当前工作更好。很容易看待一个情况,并感觉你不需要比公司最初提供的更多钱,而且你很幸运能得到任何邀请。但当你处于这种情况时,你有责任尽你所能最大化你的邀请。

你——是的,就是你——是这份工作最适合的人选。我们都会面临冒牌货综合症,但公司看到的正是这份工作所需要的你。正如我们在本章开头提到的,此时,你处于谈判的最有利位置。而且公司期望你进行谈判!你需要做好准备。合适的薪水与你之前赚了多少或公司最初可能提供多少无关;相反,它取决于公司为你这样的技能集提供多少。确保你得到与你的同龄人相同的薪水,总薪酬符合你的期望,并且获得对你来说最重要的福利。你有机会在五分钟的电话中让你的薪水增加 5%;你可以忍受这种不适长达那么长时间。

在数据科学领域,谈判的需求尤其强烈,因为该领域的薪水差异巨大。因为这个领域非常新,而且许多不同类型的角色都包含在数据科学中,所以没有明确的标准来界定人们的薪水。当一个人称自己为数据科学家而另一个人称自己为机器学习工程师时,即使两个人的技能集相同,他们的薪水也可能差异很大。随着人们转向新的、薪水更高的工作,这种薪水差异会进一步放大。此时,一个人的收入与其资格和能力之间几乎没有相关性。

8.3.1. 什么是可以协商的?

在谈判工作报价时,许多人首先想到的是薪水。在你进入最终面试轮次之前,你应该研究的不只是数据科学家的一般薪水,还包括该行业、公司所在的城市,以及如果公司已有数据科学家,那么特定公司的薪水。尽管报价可能是一个很大的薪水跳跃,但请记住,你希望在新公司得到与你的同龄人相似的薪水。你在面试过程中没有义务让公司知道你的当前薪水,在一些城市和州,公司询问薪水是非法的。如果你在 Glassdoor 上发现平均数据科学家的薪水是你的一半,那真是太好了。

在面试过程中,如果你被问到你目前的收入或你的薪资期望,尽量避免给出答案,因为你可能会因为公司知道它可以满足你的期望而得到较低的报价。你可以尝试回答:“目前,我更专注于找到一个与我技能和经验相匹配的职位。我相信如果我们找到合适的匹配,我们可以就整体薪酬方案达成协议。”如果对方继续追问,比如通过说他们需要知道以确保你不会期望超出所提供范围的东西,你可以回答:“我理解你想要确保我的期望与你的薪酬范围相匹配。这个职位的薪酬范围是多少?”你也可以说:“我需要向招聘经理/高级数据科学家/任何你将在面试流程中遇到的人(你现在没有与之交谈的人)提出更多问题,以便在提供现实的期望之前更好地了解这个职位的内容。”如果对方拒绝给出范围,并且你不给出数字就不继续前进,这是一个不好的信号。如果你因为喜欢这家公司并且已经多次尝试回避而绝对需要给出答案,可以说些像这样的话:“虽然我当然很灵活,但根据整体方案,我知道根据我的研究和经验,X 美元到 Y 美元是像我这样经验和教育背景的人的标准。”

凯特琳·休顿:关于欺骗者综合征

进行重大的职业转变是许多人——甚至经验丰富的资深数据科学家!——感到欺骗者综合征痛苦的时候。欺骗者综合征是对你成就的怀疑和对被揭露为骗子的担忧。特别是薪资谈判尤其棘手:这是一个高风险的情况,是确定你价值的一个实际练习。你对自身价值的感受几乎肯定会影响到你的决策,因此,重要的是要克服欺骗者综合征的感觉,这样你才能对你带来的所有东西保持客观和自信。

欺骗者综合征在数据科学领域尤为常见。根据你询问的对象,数据科学家可能是分析师/统计学家/工程师/机器学习专家/可视化专家/数据库专家/商业专家的组合,每个角色本身都是一个深度的职位。它也是一个不断扩展的领域,其中可能存在很大的压力,需要跟上新技术的发展。因此,当我们把它简化一下,我们就有来自各种背景的人进入一个应用广泛的新领域,这个领域的边界并不明确(因此,他们在该领域的整体知识中不可避免地存在差距),而且技术变化的速度比一个人能够跟上得快。如果这感觉对于一个单个人来说压力很大,那是因为确实如此!

这使我们来到了我对抗冒名顶替综合症的方法,那就是专注于我的独特经验和它如何使我与众不同,而不是将自己与一个不可能实现的数据科学家理想进行比较。为了达到这个目标,我接受了这样一个事实:我永远无法学习到数据科学中所有需要知道的东西——我将永远不知道每一个算法、每一项技术、每一个酷炫的软件包,甚至不知道每一种语言——这是完全可以接受的。(在这个多元化和不断发展的领域中,没有人会知道所有这些事情——这也是完全可以接受的!)

此外,我和你都知道一些别人不知道的事情,并且有别人没有的经验。你所拥有的知识和经验既与其他人重叠,也使你区别于其他人,但并不是其他人的子集。专注于你自己的独特经验。毕竟,你必须为之努力,而且记住这一点对于使你区别于其他数据科学家来说很重要。

当你在进行薪资谈判的过程中,如果你发现自己面对自己的冒名顶替综合症,花一分钟时间想想你学到的所有技能、你解决的问题以及你将带给未来团队的宝贵资产。你的经验是有价值的,你应该为此得到合理的报酬。不要害怕要求你应得的。

你不应该因为要求得到你认为合理的报酬而感到难过。你认为合理的报酬不应该由你以前赚过多少钱来定义——而应该是你希望在新的职位上赚多少钱。公司通常会提供一个较低的金额,预计你会协商到他们预期支付新员工的金额,因此至少得到 5%的加薪是很常见的。

但你可以协商的不仅仅是薪水。首先,还有其他直接的经济利益,例如签字费、搬迁补贴和股票。签字费对公司来说比同样数额的加薪更容易给予,因为它是一次性的。搬迁补贴也是如此;如果你需要搬家,询问公司的搬迁政策。如果公司规模很大,可能有一个标准的搬迁套餐,甚至可能与特定的搬家公司合作以提供帮助。即使是小型公司也可能能给你一些东西;除非你询问,否则你不会知道。

但你可以比这更广泛地考虑。回顾一下你在求职过程中的想法。对你来说什么才是重要的?有些事情很难协商;例如,医疗保险选择和 401(k)匹配通常由人力资源部门设定,对同一职位上的每个人都是标准化的。你希望在选择申请和面试的公司时,更早地考虑这些事情。对于非初创公司,你通常可以在 Glassdoor 上找到员工评价,其中包含有关福利包的信息。但你现在可以要求很多东西,例如

  • 灵活或远程工作的时间表

  • 更早的评估(六个月而不是一年),这可能会让你更快地得到加薪

  • 教育福利

  • 参加会议的预算

当你这样做时,要记住组织的限制。例如,非营利组织可能没有太多空间协商薪水,但他们可能在工作时间或休假上更加灵活。如果一个公司的数据团队已经分布在全国各地,那么它更有可能让你每月在家工作几天,而不是一个所有员工都在同一个办公室的公司。确保你要求的内容是书面形式并且得到尊重。你不想协商一个早期审查,但当你开始工作时却从未得到。还要记住,这类非薪水谈判可能只会带来边际上的调整。如果薪水远远低于你想要的水平,这些变化不可能使报价变得可以接受。

8.3.2. 你可以协商多少

你最好的谈判筹码是竞争性报价。竞争性报价让公司知道你的服务在更高的价格上有市场,并且你有另一个去处。如果你发现自己有两个报价,最好是做出这样的陈述:“我非常愿意和你一起工作,但公司 ABC 给我提供了更多的报价。你们能匹配这个吗?”不要撒谎;如果你试图对两家公司都说同样的话,这可能会很容易让你陷入困境。

你拥有的另一个筹码是你的当前工作。大多数公司都知道你不会愿意接受减薪。如果你在公司相对满意或者有更好的福利,就要利用这个筹码。即使报价有更高的薪水,也要记住计算你从福利中获得的价值。假设你的当前雇主提供 3%的 401(k)匹配,而提供报价的公司则没有。这个匹配实际上将你的薪水提高了 3%,与新的公司提供的薪水相比。或者,也许你的公司支付你全部的健康保险保费,而在提供报价的公司,你需要每月支付 200 美元的健康保险费用给你的家人。这个事实在从收入较低的行业过渡到数据科学时可能特别有帮助,因此你的薪水将大幅增加,但你将失去当前工作中获得的一项福利。你可以提出这些观点作为你要求更高薪水的理由。

当评估你的技能价值时,考虑你的背景如何独特地适合你的新工作。你不必一定是经验丰富的数据科学家。如果你是今年在斯坦福大学获得人工智能博士学位的三个人之一,那将是非常棒的。但假设你的工作机会是成为帮助销售的数据科学家,而你之前就在销售行业工作。拥有这样的领域知识是一个巨大的优势,即使是经验更丰富的数据科学家也可能无法为这个职位带来。当你看到职位发布时,如果这个职位看起来像是为你量身定做的,那么你很可能拥有更大的议价能力。

有时候,很难完全理解一份工作邀请的全貌。例如,如果您需要搬家,您应该考虑搬家费用以及生活成本的变动。在休斯顿的 9 万美元年薪会比在纽约市的 9.5 万美元年薪走得更远。把所有额外的福利都算进去。像良好的医疗保险计划或 401(k)匹配这样的福利可能价值数千或数万美元。一般来说,不要为了薪水而忽视了整体情况。

如果你谈判并得到了你要求的一切,公司期望你接受!只有在你满足所有条件时会接受邀请的情况下,你才开始谈判过程。否则,为什么费那个劲?一个可能的原因是你有另一个你真的很想接受的邀请,而且这个邀请越好,你就能在谈判中争取到更多。然而,这种策略风险极高,你需要小心,以免破坏关系。即使你从未在用作杠杆的公司工作过,面试你的员工或发出邀请的人可能会记住。

一家公司因为谈判而撤回邀请的情况非常罕见。如果真的发生了,那可能是一个你绝对不想在那里工作的信号。尊重地谈判是完全正常的;因为这种原因拒绝候选人是一个巨大的红旗。把这看作是避免了一个糟糕的情况。

关于 RSU、期权和员工股票购买计划的简要入门

这个侧边栏故意被称作“简要入门”,而不是“全面概述”。我们强烈建议对您求职信中包含的任何内容进行更多研究。

通常,以下所有项目在四年内分摊,第一年有一个“悬崖期”。悬崖期意味着如果你在一年内离开公司,你将一无所获。相反,你将在一周年纪念日一次性获得一年的全部。在那之后,他们通常在接下来的三年中每季度或每月分摊:

  • 限制性股票单位 (RSUs)— 你会在提供的方案中看到分配给你的 RSU 的金额。如果你将你提供方案时的股票价格除以这个金额,你将得到随着时间的推移而实现的股票数量。如果股票的价值上升,你的薪酬也会上升。当股票实现时,你将获得当时作为股票的股票;你的公司通常会保留一部分作为税收的股票。假设你得到了一份价值 40,000 美元的方案,分四年实现,其中第一年有一个一年的 cliff。目前,股票的交易价格是每股 100 美元,所以一年后你将获得 100 股,之后每个季度获得 25 股。在你工作一年后,你将获得 65 股(35 股保留用于税收)。在那个时刻,只要你遵守公司规则,你可以用你的股票做任何你想做的事情。(通常,你只能在特定时期内出售股票,例如。)如果你在一家私营公司工作,实现的方式相同,但你通常无法出售你的股票,直到公司上市或被收购。

  • 股票期权— 期权赋予你以指定的行权价格购买一定数量股票的“选择权”,这个价格通常是期权授予时股票的公平市场价值。如果股票后来的交易价格远高于这个价格,那是个好消息;如果你能以每股 10 美元的价格购买股票,而它现在的交易价格是 30 美元,那么你只需立即买入和卖出这些股票,就能立刻赚取 200 美元!然而,如果股票的交易价格没有超过行权价格,那么它就一文不值;如果你可以在市场上以 5 美元的价格购买股票,你就不想以 10 美元的价格行使购买股票的期权。对于一家成长迅速的公司,期权对早期员工来说非常好,但它们也可能像彩票一样。只要你的公司保持私有,期权就有有限的价值,即使公司上市,股票的价格也可能低于你的期权价值。与 RSU 不同,RSU 通常是有价值的,期权可能永远不值钱。

  • 员工股票购买计划 (ESOPs)— 这些计划允许你以折扣价购买公司股票。你通过工资扣除向计划贡献资金,然后在购买日使用你的资金购买公司的股票。这些计划提供两个好处:

    • 股票价格的折扣,可能高达 15%。

    • 回顾条款。如果在提供期初和购买日期之间,股票价格已经上涨,你可以以较低的价格支付。假设在提供期初,公司的股票价值为 10 美元。你一年内贡献了 9,000 美元,然后达到了购买日期。以 10%的折扣率,你可以购买 1,000 股(9,000 美元/9 美元)。如果现在的股票价格是 20 美元,那么这 1,000 股的价值是 20,000 美元,这意味着你可以出售它们并获得 11,000 美元的利润!

8.4. 谈判策略

现在我们已经概述了大局,我们将逐一介绍一些具体的谈判技巧:

  • 记得首先表现出你的感激和兴奋之情。我们希望你们都是这样!你希望公司感受到你是站在它这一边的,并且你们正在共同努力寻找解决方案。感觉不到你们在一起工作是一个反对在那里工作的红旗。

  • 做好准备。在电话通话之前,准备关于你想要在提议中改变什么以及你想要的总体薪酬的笔记。在那一刻的热情中,很容易脱口而出一个比你想要的数字更低的数字,以使对方在那个时刻感到高兴。有笔记可以帮助你避免这种情况。

  • 倾听对方告诉你的内容。如果他们强调他们不谈判薪水,但薪酬对你来说很重要,你可以询问更多选项或签字奖金。尝试与他们合作找到解决方案,而不是在你的立场上一动不动。虽然谈判可能感觉像是一场零和游戏,但它不必是这样!对你来说非常重要的事情可能对公司来说并不那么重要,例如,所以公司很容易给予。记住,公司希望你在你的角色中取得成功并感到快乐。

  • 不要显得你只关注金钱(即使你确实是)。这种态度可能会给人留下不好的印象。你想要表现出你对将要从事的工作、公司的使命以及你的新同事感到有动力。看起来你只是为了钱可能会在招聘人员心中留下不好的印象,他们更有可能担心你会抓住机会跳槽到更高的薪水。

  • 尽量保持集体焦点。例如,不要说“我真的很需要更多的期权”,而是说“我真的很兴奋于贵公司的长期增长前景以及我如何能帮助你成功。这就是为什么我对通过拥有一些额外的期权来更加投入感兴趣。”

  • 将你的愿望打包在一起,而不是一点一点地提出。这样,招聘人员就能全面了解你想要什么,而不是每次你们解决一个问题,另一个问题可能就会出现。话虽如此,你可以保留你愿意接受的替代方案。你可能会要求更高的薪水、更多的期权以及一周有一天在家工作的能力,但如果公司无法提供薪水,你可以询问签字奖金。如果可能的话,也可以列出每项对你来说的重要性。

  • 避免自我贬低。你之前在这一章中读到过关于你很棒的部分?再读一遍。不要通过说“我知道我之前没有作为数据科学家工作过”或“我知道我没有博士学位,但……”来贬低自己。你正好拥有公司正在寻找的东西,否则它就不会给你提供工作机会了!

你可以在许多文章和书籍中找到更多关于如何有效谈判的建议和研究,我们也在附录中分享了一些我们最喜欢的。

女性谈判

一段时间里,普遍的研究理论是“女性不问”。这个理论是提出女性工资低于男性的原因之一:它认为女性不谈判工作机会或要求加薪。然而,最近的研究表明,至少在某些领域,女性和男性一样会谈判;她们只是不太可能成功。不幸的是,存在一些偏见。我们在这部分讨论的一些策略,例如具有集体焦点(例如,使用“我们”而不是“我”),对女性特别有益。

8.5. 如何在两个“好”的工作机会之间做出选择

收到两个(或更多!)好的工作机会是一个很好的问题!但你仍然必须做出选择。当然,拥有多个工作机会并不总是导致这个问题。有时,你更喜欢其中一个工作,所以决定很容易。但如果你不是这种情况,你会怎么做?

第一步是回到第 8.3 节。谈判!如果你更喜欢其中一个公司而不是另一个,但有一些对你来说是决定性的问题,看看公司是否可以改变这种情况。诚实地表达你的需求。如前所述,那个竞争性的报价是一个很好的杠杆,使你更有可能得到你想要的东西。

接下来,你可以要求再次与招聘经理或潜在同事见面,以获取更多信息。也许你没有询问一周平均有多少次会议,你将和多少个团队一起工作,请求是如何优先处理的,或者任何其他有助于评估这家公司是否是一个你愿意工作的地方的信息。

当你在考虑一个工作机会时,要考虑长远。你可能会有短期关注的问题:如果你有高额的学生贷款或者即将组建家庭,你可能想要接受薪酬最高的工作机会,这样你可以开始偿还债务或储蓄。但如果你足够幸运,能够超越眼前的财务问题,你想要专注于最大化长期潜力。你将在每家公司做什么样的工作?如果一份工作能给你提供培训,让你在下一份工作中晋升两级,而另一份工作则让你做你在训练营的第一天就学到的内容,你不应该仅仅因为公司有更好的休假套餐就接受后者。记住,数据科学领域的薪资可以从一个职位跳到另一个职位,涨幅高达 30%到 40%。如果你的简历略显单薄,而这个工作是一个很好的机会来给它加上一个知名的名字,你可能会为了一年或两年接受稍微低一点的薪水。

最后,不要害怕让较小的因素影响你。一份工作是否涉及更短的通勤或更宽敞的办公室?如果两家公司都满足你的最低标准,并且在最重要的决定因素上相似,你就可以开始考虑较小的因素。

在这种情况下,考虑多个生活选择可能是合理的。你是接受激动人心但风险较高的初创公司工作,还是坚持你合理的政府承包商工作?你是接受让你管理人员的提议,还是继续作为独立贡献者工作?

通常,你没有客观的方法来决定哪条路线更好。在你接受提议之前,你无法判断新工作是否适合你。在你成为经理之前,你无法知道你是否喜欢管理。这是生活中令人沮丧的事实。

如果你发现自己在这类决策上感到挣扎,反思这样一个事实可能会有所帮助:你只能尽你所能利用你拥有的信息。你不能期望自己能预知未来。如果你做出了决定,最终对结果不满意,你可以从中走出来。你可以辞职,在换城市后搬回来,或者回到独立贡献者的状态。生活很复杂,即使是从那些没有达到你期望的结果的道路中,你也可以学到很多东西。

当你做出决定时,优雅地拒绝其他任何提议。这是礼貌的做法,而且数据科学界很小。你不想因为说“我简直不能相信你给了我这么低的报价;你是一家糟糕的公司,完全不道德”而拒绝提议,然后发现你大声斥责的那个人五年后是你的梦想工作的招聘经理。

8.6. 布鲁克·沃森·马杜布翁武访谈,ACLU 高级数据科学家

布鲁克·沃森·马杜布翁武是美国公民自由联盟(ACLU)的高级数据科学家,她在那里为与民权相关的问题提供定量支持,为诉讼和倡导团队提供服务。她拥有流行病学硕士学位,之前曾担任研究科学家。

在考虑提议时,除了薪水之外,你还应该考虑什么?

在进入这个过程之前了解你的优先事项是有帮助的。比较薪水很容易,但你还想比较在各个地方工作的日常或月度体验。我倾向于将工作方面的考虑分为三个类别:生活方式、学习和价值观。

生活方式是指工作如何与你的生活其他部分互动的日常方式。我将住在哪里?我能远程办公吗?我会工作到晚上和周末吗?我能去旅行吗?我必须旅行吗?我能获得哪些医疗保健、儿童护理和退休投资选项?我是否有照顾家庭的灵活性?这就是生活方式的范畴。

还有学习这一块。我会在这个职位上成长吗?有什么系统可以确保我成长?我是否乐于从我的老板和团队那里学习?

最后,我会考虑公司或组织的价值观和使命以及具体的团队。这个组织和这个团队是否致力于与我价值观相符的事情?这个团队是否重视包容性?这是一个我想要继续构建的产品或团队吗?这三个桶中的每一个在不同的时间都可能具有不同的重要性水平。

我之前在另一个角色中已经谈判过职位名称的变更,你也可以为诸如教育资源和会议资源、在家办公日、旅行支持或股权等事项进行谈判。数据科学是一个不断发展的广阔领域,因此我认为保护你每天的时间来继续发展你的技能也很重要。

你有哪些准备谈判的方法?

在过去,我非常不习惯谈论自己的价值并为自己辩护。这是我整个职业生涯都在努力改变的事情。真正有帮助的是在你身边有盟友。让一个亲密的朋友与你一起练习谈判,让他们扮演你的角色。许多人,包括我自己,发现为朋友辩护比为自己辩护要容易得多。倾听别人如何描述你的优势和需求可以非常有动力,这真的有助于你进入那种心态。问问自己,“我会如何谈论一个我所爱的人,我知道他非常适合这个角色,并且我希望他成功?”这就是你应该谈论自己的方式。

如果你已经收到一个提议,但还在等待另一个,你会怎么做?

如果你已经与一家你等待的公司进行了所有或大部分的面试流程,那么告诉他们你有另一个提议通常不会造成伤害。你也可以通过要求一周或两周的时间来审查细节并与家人讨论提议来从提供方那里争取更多时间。进一步谈判、询问关于福利的详细问题,以及要求与团队成员讨论工作或文化都是你可以采取的行动,以实现收集更多关于该职位的信息和争取更多时间的双重目的。

但如果你在另一家公司的面试过程中还处于非常早期阶段,你可能无法加快进程,你必须将桌上的提议与你的当前情况进行比较。如果你刚刚毕业或处于求职状态,你可能没有等待的财务自由。但如果你目前有工作,并且对桌上的提议不感兴趣,那么在你找到更好的匹配之前留在当前职位可能对你来说是有价值的。我的第一个数据科学职位并不合适,尽管我非常渴望进入这个领域,但我还是值得等待一个更好的匹配。

你对有抱负和初级数据科学家有什么最后的建议?

我建议有抱负的初级数据科学家保持对头衔的开放态度。我认为数据科学家这个头衔对人们有一种吸引力,尤其是对于那些在大学时数据科学专业还不存在的情况下成长起来的人来说。他们可能会觉得,如果他们毕业后没有立即找到数据科学家的职位,他们就算失败了。但是,数据科学家的日常职能可能存在于数据分析师、研究员或许多其他类型的角色中,这可以成为你磨练技能的一个非常好的证明平台。我在成为数据科学家之前,作为研究助理,后来作为研究科学家,多年来一直在积累我的编码技能,而且这项工作同样有趣和吸引人。即使是作为本科生时的数据录入工作,也塑造了我对数据收集决策如何影响分析可能性的思考。只要你愿意边学边做,就没有什么工作太小。

摘要

  • 不要立即接受提议:将细节写成书面文件,并要求一些时间来仔细考虑这个提议。

  • 谈判,谈判,再谈判!你可以要求更高的薪水或其他货币福利,但不要忘记像灵活的工作时间表和会议预算这样的东西。

  • 当你在权衡两个不错的提议时,要记住考虑每个提议的长期潜力,而不仅仅是初始薪水。

第五章至第八章资源

书籍

《我会教你如何变得富有》,第 2 版, by Ramit Sethi (Workman Publishing Company)

这个系列包括博客、书籍、视频以及几种其他媒体,它们都有助于找工作。Sethi 提供了关于如何思考面试并给出受欢迎的回答的宝贵资源。这些资源还包括薪资谈判、要求加薪和其他可能在你为自己辩护时发生的棘手对话的工具。

《你的降落伞是什么颜色?2020:求职者和职业转变者的实用手册》, by Richard N. Bolles (Ten Speed Press)

这本书是寻找新工作的指南。就像本书的第五章到第八章一样,它涵盖了理解你想要的工作、进行搜索、制作简历、面试和谈判等内容。这本书为你提供了一个关于如何广泛思考寻找工作的好视角,尽管书中没有具体针对技术工作(更不用说数据科学工作了)。

《编码面试指南》, by Gayle Laakmann McDowell (CareerCup)

《编码面试指南》 是一本致力于帮助软件工程师找到工作的书,包括近 200 个面试问题和答案。尽管其中许多问题与数据科学不相关,但其中很多是相关的,尤其是如果你在寻找像机器学习工程师这样以编码为基础的工作。

博客文章和课程

“申请数据科学工作的建议”, by Jason Goodman

mng.bz/POlv

这是一篇关于从申请数据科学工作中学到的经验教训以及如何进行概括的精彩博客帖子。这篇帖子涵盖了第五章到第八章中的许多概念,但结合了他个人在过程中的感受。

“如何撰写求职信:永恒的最佳建议”,作者:Muse 编辑

mng.bz/Jzja

虽然第六章提供了撰写求职信的指导,但拥有多个视角是件好事。这篇博客帖子涵盖了那一章中没有涉及的话题,例如如何不担心自吹自擂。

“提升你的简历水平”,作者:Kristen Kehrer

datamovesme.com/course_description/up-level-your-resume

我们第六章的受访者创建了这个付费课程,旨在帮助有志于成为数据科学家的人优化他们的简历和求职信,以便通过申请跟踪系统(即机器人筛选器)和招聘人员。如果你在第一轮面试中得到的邀请不多,这个课程可能适合你。

“如何量化你的简历要点(当你不与数字打交道时)”,作者:Lily Zhang

www.themuse.com/advice/how-to-quantify-your-resume-bullets-when-you-dont-work-with-numbers

如果你正在为如何使你的简历经验要点量化而感到困扰,这篇帖子可以帮到你。它涵盖了三种量化经验的方法:范围、频率和规模。

“女性如何在谈判中获得她们想要的”,作者:Suzanne de Janasz 和 Beth Cabrera

hbr.org/2018/08/how-women-can-get-what-they-want-in-a-negotiation

这篇来自《哈佛商业评论》的博客帖子探讨了女性如何在谈判薪资和工作报价时克服针对她们的固有偏见。这个话题对于女性来说值得深思,因为更有效地谈判的价值会在整个职业生涯中累积。

“谈判工作报价的十项规则”,作者:Haseeb Qureshi

haseebq.com/my-ten-rules-for-negotiating-a-job-offer

这篇博客帖子深入探讨了如何成功谈判工作报价。当你处于求职的该阶段时,拥有正确的信息可能意味着数千美元的差异,所以当你接近这个阶段时,请查看这篇帖子。

第三部分。适应数据科学

开始你的第一份数据科学工作是一项相当大的成就,但这只是你数据科学职业生涯的开始。作为数据科学家在公司工作与作为爱好或课程的一部分进行数据科学工作有很大不同。你可能需要掌握各种其他概念,从公司礼仪到将代码正确部署到生产中的正确方法。你对这个角色期望与实际工作之间的巨大差异可能会让你感到震惊。本书的这一部分旨在提供一个舒适的缓冲区,以减轻这种冲击。通过阅读这部分,你将了解数据科学工作中的期望,并更好地为出色地完成工作做好准备。

第九章讲述了工作的前几个月,从最初的几天你可能感到完全迷茫,到随着你对角色、同事和数据的了解而逐渐适应。第十章通过在开始时制定和执行计划,提供了一份创建良好分析(大多数数据科学角色的大部分)的指南。第十一章讨论了将机器学习模型投入生产,介绍了对于更基于工程的数据科学角色至关重要的概念,如单元测试。第十二章深入探讨了与利益相关者合作这一极其相关的工作任务,这通常是数据科学工作中人们最难以应对的部分。

第九章。工作的前几个月

本章涵盖

  • 作为数据科学家,你前几周可以期待什么

  • 如何通过建立关系和提问来提高生产力

  • 如果你处于不良的工作环境中,应该怎么做

在本章中,我们将向您介绍您在前几个月可以期待什么,以及如何利用这些时间为自己设定成功的基础。这些月份将对工作的进展产生巨大影响;这是你建立一套系统和支持网络的机会,这将使你能够成功。尽管每个数据科学工作都不同,但一些广泛的模式和原则适用于任何工作。

当你开始工作时,你本能地想要尽可能多地完成任务。抵制这种本能。你需要确保你不仅完成了任务,而且是以正确的方式完成的。当你开始工作时,询问如何做某事是最容易的时候,因为你不需要了解你新公司中的流程。经理们有时会忘记你没有你前任可能拥有的制度知识,所以你可能被分配去做对你来说没有意义的事情。你可能能够通过欺骗的方式完成前几项任务,但通过早期提问并了解如何处理你的工作流程,你会得到更好的服务。

9.1. 第一个月

你在一家公司的前一个月与在另一类组织的前一个月将看起来非常不同。大型和小型公司对入职的态度几乎完全相反。图 9.1 比较了你可能期望在两家公司的情况:一家拥有大量数据科学家的巨型公司,以及一家没有或几乎没有数据科学团队的公司。(在第二章中,这些例子分别是 MTC 和 Seg-Metra。)这两个例子突出了光谱的两端,但你所工作的公司可能位于两者之间。

图 9.1. 在大型组织的入职就像通过一条生产线,而小型公司则更加随意。(来自 Twemoji 项目的 Twitter 表情符号)

图片描述

9.1.1. 大型组织的入职:一台运转良好的机器

你是本周开始工作的几十个人之一。在上周,你收到了一封电子邮件,告诉你去哪里、什么时候到达以及需要携带什么。现在,你开始了一个正式的多日入职流程,与来自不同部门的同事一起。你被发放了笔记本电脑,并开始设置它。你听取了关于公司文化、人力资源政策和公司组织结构的介绍。一切运行得像钟表一样精准;公司之前已经成功入职了成千上万的员工。

在数据科学方面,你将得到帮助来设置你的编码环境。很可能会有一份清单或详尽的文档,列出了你需要完成的所有步骤以获取数据访问权限。同时,还有一个中心存储库,包含旧报告和数据文档,供你阅读和吸收。没有人期望你立刻就能做出很多贡献;尽管你的同事很高兴你能加入团队,但他们知道你需要时间来适应。你将被期望花几周时间完成所有培训,并获得对系统的访问批准。你可能觉得这个过程太慢,难以感到有成效,但在这个环境中,缓慢的开始是自然的。

如果你被分配了一项待办事项列表或任务,你应该认真对待,但更多地关注过程而不是结果。成熟的数据科学团队通常有自己的独特之处,你需要去适应。在这个阶段提问不仅好,而且对于你以后的工作能力至关重要。前几个月是你了解之前的工作内容,了解同事节奏的机会。

9.1.2. 小公司的入职:什么是入职?

“哦,你今天开始?”如果你加入了一个小型初创公司,不要惊讶如果一切都没有准备好,包括你的笔记本电脑。你可能需要自己弄清楚如何访问数据。当你进入时,可能会发现数据并没有很好地针对你的工作进行了优化,在一个包含 10 万行的小表上执行 SQL 查询需要六分钟才能完成。了解公司的入职培训可能需要几周时间,如果有的话,因为可能一周内开始工作的人数不足以频繁地举办这些会议。

目前还没有关于数据科学的标准可以谈论。没有人会告诉你应该使用哪种编程语言,或者如何去接近和构建一个分析。然而,你将被要求迅速开始获得结果。与大型组织不同,你不必担心无法产生生产力;你将立即被要求这样做。但你确实需要担心的是,你可能会无意中做错事情,而没有人会告诉你,几个月后发现你的(错误)工作已经被依赖。这就是为什么在你不具备新手的退路之前,仍然迫切需要提问并努力站稳脚跟。从危机到危机会迅速让你筋疲力尽,所以努力建立自己的流程,这将使你能够长期成功。

9.1.3. 理解和设定期望

在你最初的几周里,你可以做的一件最重要的事情是与你的经理开会,讨论优先事项。这次会议很重要,因为它让你了解你应在工作中努力实现的目标。在一些数据科学工作中,优先事项是为特定的利益相关者提供分析,以帮助增长业务的某个部分。在其他数据科学工作中,目标是创建高性能的网站模型。在某些工作中,这两个目标可能都适用,也可能都不适用。

你可能会觉得你应该已经从职位发布和面试过程中知道了工作期望。尽管这有时是正确的,但在面试过程和开始工作之间可能会发生很多变化。面试官可能没有与你相同的进度,或者在你加入之前,组织可能已经发生了变化。通过尽早与你的经理交谈,你将获得最新的信息,并有时间进行讨论。

理想情况下,你的经理对你将要做的事情有一个愿景,但愿意听取你的优先事项和优势。一起,你们想要定义工作中的成功意味着什么。通常,你的成功与让你的团队和/或经理成功紧密相连;如果数据科学团队的成员没有共同努力实现同一个目标,那么相互支持可能会很困难。为了定义你自己的成功,你需要了解团队试图解决的问题以及绩效是如何评估的。你将通过进行实验来提高转化率,从而帮助产生更多收入,还是将创建一个机器学习模型来帮助客服代表预测客户的关注点,目标是减少每个请求的平均处理时间?

绩效目标通常并不意味着“创建一个 99%准确率的机器学习模型”或“在你的分析中使用最新的统计模型”。这些工具帮助你解决问题;它们本身不是目标。如果你的模型和分析处理的是人们不关心的问题,那么它们基本上是无用的。认为开发最高性能的模型是目标是那些进入第一份数据科学工作的人中常见的误解。这个误解之所以常见,是因为许多学术研究和教育课程涵盖了制作准确模型的各种方法。然而,最终,对于大多数数据科学工作来说,拥有高度准确的模型并不足以成功。模型的有用性、洞察力水平和可维护性通常更为重要。(第十章和第十一章更详细地讨论了这些观点。)

在你开始新工作的时候,你无法知道公司对工作职责的期望是什么。有些公司重视团队合作;你可能需要同时处理几个项目,但需要在接到通知的瞬间放下手中的工作去帮助同事。其他公司则要求你定期交付成果,忽略电子邮件或 Slack 消息以完成项目是可以接受的。了解你是否达到期望的方法是与直接上司定期开会。在大多数公司,你将每周进行一次一对一的会议,以便讨论你正在处理的工作或任何问题。这些会议的存在是为了让你了解你是否把时间花在了对老板来说重要的事情上。当你可以得到明确的反馈时,为什么还要猜测期望是什么?以短期块状思考将帮助你确保在大型绩效评估来临时,你走在正确的轨道上。

为成功做好准备

除非你在一个非常小的公司,否则将有一个正式的绩效评估流程,所以一定要询问这个流程包含哪些内容以及何时进行。一种常见的做法是每六个月进行一次评估,可能伴随着薪资增长和晋升。许多公司将这种评估作为 360 度评估过程,你不仅会从你的经理那里得到直接反馈,还会从你的同事那里得到反馈。如果情况是这样,找出你是否可以选择同事,或者你的经理选择他们,这样你就可以了解你的最重要的利益相关者是谁。

更成熟的数据科学团队可能有一个矩阵,显示你将被评估的领域以及在每个不同资历水平上对每个领域的期望。例如,一个领域可能是技术专长。初级数据科学家可能只需要具备基础知识并展示他们在学习;中级数据科学家可能有一个专长领域;而资深数据科学家可能是公司在某个领域(如 A/B 测试或编写大数据作业)的首选人员。如果不存在这样的矩阵,看看你是否可以和你的经理一起提出几个领域。

无论系统如何,都要和你的经理制定一个计划,在你第一个三个月结束时进行一次评估,如果这不是常规做法。这次评估将帮助你确保你和你的经理意见一致,提供更新,并规划你接下来的前六个月和一年。

定义成功的目的是不是你需要在你的前几个月里在每个领域都表现出色。事实上,大多数公司不会对在该公司工作不到六个月的人进行正式的绩效评估,因为大部分时间都花在了入门阶段。相反,定义成功是确保你在了解你的角色并开始工作时,带着大局观去行动。

9.1.4. 了解你的数据

当然,你也需要了解数据科学的部分。如果你的公司已经从事数据科学有一段时间了,一个很好的开始是阅读员工撰写的报告。报告不仅会告诉你公司保留的数据类型(并给你提供关键见解),还会告诉你应该如何沟通你的结果以及语气和风格。数据科学家的大部分工作是将信息传达给非技术同事,通过阅读报告,你会对那些同事的非技术程度有一个感觉。看看作者如何简化或复杂化某些概念,这样你在撰写自己的报告时就不太可能过度或不足解释。

然后,你需要了解数据存储的位置并获得访问权限。获得这种访问权限包括知道哪个表包含你想要的数据,也许还知道哪个数据系统拥有它。可能最常访问的数据生活在 SQL 数据库中,但两年前的活动数据生活在 HDFS(Hadoop 分布式文件系统)中,你需要使用另一种语言来访问。

仔细审视你将定期处理的数据,但要以开放的心态进入。一些表格可能有文档(可能是与数据打包在一起,或者是在关于数据的报告中)解释潜在的质量问题或古怪之处。首先阅读这些文档,因为它们会防止你调查那些后来证明已经被解决的问题的“神秘”问题。然后查看几行数据和汇总统计信息。这些信息可以帮助你避免“陷阱”,比如发现某些订阅将在未来开始,或者某个列经常有缺失值。当你发现未记录的惊喜时,通常最好的方法是向该表格的专家咨询。如果你们公司足够大,那个人可能是一位数据科学家,或者是一位收集数据的人。你可能会发现惊喜是一个需要修复的真实问题,或者它可能最终证明是预期的。例如,未来开始的订阅可能是那些被暂停并设定在那天重新启动的。或者,你在今年五月份发现的去年新年促销活动的优惠券可能是因为支持团队在五月份发放的。

一些公司在将用于测试的数据与真实数据分开方面做得比其他公司好,尽管其他人没有多想就将数据合并在一起。在后一种情况下,你想要四处询问是否应该排除某些订单或由测试账户或特殊商业合作伙伴产生的活动。同样,一些数据集包括具有截然不同行为的用户。例如,美国航空公司曾经提供一种包括同伴票的终身通行证。拥有通行证的人之一为陌生人、宠物或他的小提琴使用了同伴票,并且可能一天内多次飞行。虽然你可能没有这么极端的人,但新成立的企业提供后来看起来很愚蠢的优惠(如 100 美元十年的访问权限)并不罕见,并且可能需要在你的分析中考虑这些优惠。

在整个调查数据的过程中,你正在了解你的数据整体处于什么状态。如果你在一家较小的公司,你可能会发现你需要与工程师合作收集更多数据,这样整体数据才能变得有用。如果你在一家较大的公司,你将需要解读数十个表格,以查看你想要的东西是否存在。也许你正在寻找跨越 12 个数据库的具有“订单”列的表格。理想情况下,应该有关于核心业务指标(如交易或订阅)的详细记录、维护良好的表格。但其他不那么重要的数据集可能不会是这样,如果你打算专注于其中一个不太详细记录的领域,你应该尝试了解更多信息。

确保你了解数据是如何到达你的手中的。如果你正在处理像网站数据这样的东西,它很可能会通过多个系统从网站传输到你可以使用的数据库。这些系统中的每一个都可能以某种方式改变数据。当数据收集突然停止时,你想要知道在哪里尝试找到问题(而不是对此感到恐慌)。但是有些地方的数据是人们手动输入的,比如医院里的医生或调查结果。在这些情况下,你不必太担心管道,而更多的是要理解数据的许多属性以及人类可能输入错误的地方。几乎在任何地方,你都会不得不处理一些数据杂乱。

在你继续前进的过程中,尝试写下数据中的任何“陷阱”,并制作一个映射,显示一切所在的位置。在工作的过程中很难记住这些事实,而且许多公司都没有一个很好的文档或数据发现系统。正如注释代码有助于你未来的自己和他人理解其目的一样,记录数据提供了巨大的回报。尽管将这种文档保存在你的笔记本电脑上是可以的,但最好的做法是将它存储在一个公司中每个人都可以访问的地方。你将帮助未来的新员工,甚至那些不熟悉该特定领域的公司内的当前数据科学家。

Elin Farnell:从学术界到工业界的思考

在学术界担任数学家八年之后,当我意识到我最看重的我的工作的一些方面正是工业界数据科学职位的核心时,我开始考虑转向工业界。我的两个研究项目是在国防部和国防能源部的资助下与一家工程公司合作的。我喜欢这些项目的原因是我们研究小组得以解决有趣的数学问题,同时知道我们所开发的内容将用于解决现实世界中的问题。我也欣赏有机会学习新的数学内容以解决问题,并与跨学科团队合作。在我从学术界转向工业界的最近一次转变中,我的新职业道路的某些方面与我的先前经验形成鲜明对比:

  • 广度与深度权衡— 在学术界,对于早期职业研究人员来说,一个首要任务通常是建立一个以深度、狭窄子领域为中心的研究计划。另一方面,在工业界,目标通常是解决广泛的问题,这意味着了解和利用你领域内广泛的一系列工具。这两种环境都可以以不同的方式带来回报。这种广度与深度权衡在学术界的表现程度取决于机构和研究领域,或者在工业界的团队和项目焦点。你的个人偏好在这个广度与深度谱上的位置可以帮助你评估各种工作机会。

  • 自主性— 在学术界,你在选择要专注的研究项目方面拥有很大的自主性。在工业界,人们期望你解决雇主希望你解决的问题(通常在解决问题的方法上有很大的灵活性)。正如我在引言段落中提到的,这种自上而下的问题定义的好处是,它伴随着你所做的工作将对现实世界产生积极影响的认知。还应注意的是,工业界有增加自主性的机制;许多职位允许数据科学家提出未来工作的新领域,内部或外部的资助工作也可以为新项目开辟时间和资源。

  • 工作与生活平衡— 从那些在两个世界都工作过的人以及我到目前为止的个人经验来看,我认为在工业界工作与生活平衡通常更好。在学术界,通常很难设定界限,而且很自然地,你会在每个晚上和周末把工作带回家。虽然在工业界,超出标准工作时间的工作也很常见,但它更多地是由截止日期驱动的,并且往往分阶段进行。你所发现的工作与生活平衡极其依赖于特定机构或公司的文化,以及你个人如何参与和贡献这种文化。我认识在两种环境中都发现管理困难的人,也认识在两种环境中都成功找到健康平衡的人。

9.2. 变得高效

最终,你应该让你的经理看起来很好,减轻他们的工作量,但在开始时,你会使事情变得更难,这是预期的。达到完全高效需要比你想象的更长的时间。在这个时候感到沮丧是正常的,但请记住,你正在处理大量来自新环境的认知负荷。你试图了解(可能未明说的)关于人们午餐时间多长、工作时间是什么、使用哪种沟通方式、是否每个人都离开办公桌时关闭笔记本电脑等等的规范。除此之外,你还有一个整个数据系统需要了解。

需要强调的是,认为你必须快速且尽早证明自己的假设是一个容易犯的错误,例如“我需要更快地完成所有事情,否则他们会怀疑为什么雇佣我。”这是一个冒牌者综合症(第八章)的例子。除非你在一个真正功能失调的公司,否则它期望你有一些适应期。与其快速证明自己,不如专注于在更长的时间内(数月而非数周)定位自己以提供价值。一开始,你可能会向公司提出更多要求(“我能获得这个权限吗?为什么这个查询这么慢?”)而不是你给出的回报(以报告、分析和模型的形式)。

话虽如此,你仍然可以在早期提供一些价值。关注简单且完全描述性的问题,例如“我们客户的规模分布是怎样的?”或“我们每周有多少用户是活跃的?”在这个过程中,你会熟悉公司的数据,也会发现一些等待的陷阱。在与经理的会面中,展示一些你的正在进行中的工作,以便你可以看到你是否正在正确的方向上。投入大量时间却发现自己在回答错误的问题,使用老板讨厌的方法,或者使用错误的数据源,这是令人沮丧的。

关注简单的问题还可以防止你在试图回答一个复杂的问题而没有先学习所有数据细节的情况下得出错误的结论。这种情况可能具有挑战性,因为如果你的利益相关者对数据科学是新手,他们可能会问一些像“你能预测哪些销售交易会成交吗?”或“我们如何最大化用户保留率?”这样的问题。但正如我们将在第十二章中讨论的,作为数据科学家,你的一个工作就是深入挖掘业务问题,找到其背后的数据问题。如果人们对基本事实(例如,有多少用户进行了第二次购买或有多少人点击了广告)不了解或存在误解,他们就不会提出正确的问题。

两种策略可以帮助你更快地变得高效:提问和建立关系。提问有助于你更快地了解你的工作细节。建立关系使你能够理解你在组织中的角色背景。

9.2.1. 提问

在你的职业生涯中,最大的阻碍之一就是害怕提问或说“我不知道”。正如我们之前所说,数据科学是一个如此庞大的领域,没有人知道一切,甚至不知道 20%!而且你也不可能知道你公司数据的所有复杂性。你的经理更愿意你提问并占用几分钟别人的时间,而不是在原地打转几天。一个有用的问题可以是任何技术问题(例如,“我们在 A/B 测试中检测收入变化时使用哪种统计测试?”)或者业务问题(例如,“哪个团队负责这个产品?”)。

话虽如此,并不是所有问题都是平等的。以下是一些提出更好问题的建议:

  • 尝试观察公司的问题文化来学习。 人们是在现场、Slack 频道、论坛还是通过电子邮件提问?选择正确的渠道意味着你不太可能打扰到别人。你还可以向你的经理提出关于如何提问的元问题。

  • 表现出你的主动性是好的。 你可以说“我研究了这个问题,并找到了这三点”或者“这听起来像 X。是吗?”通过自己做一些研究,你可能能够自己回答问题,并且你将能够以更好的理解提出问题。

  • 当你能快速找到答案时,不要提问。 除非你在与某人一起工作或讨论问题时提到这个话题,否则你想要避免提出那些在谷歌的第一个 Stack Overflow 结果就能找到答案的问题(例如,“在 R 中,向量和列表有什么区别?”)。

  • 找到专家并考虑他们的时间。 虽然你的一些问题可能是通用的,但你可能也会有非常技术性的问题。找出谁是各种统计或编程方法的专家是很重要的,因为这些人是你通常需要从他们那里获得答案的人。你不希望成为这类人的负担(或任何人),所以如果你意识到你对某个人有很多问题,试着安排与他们见面。如果他们有几个时间限制的会议,而不是每隔几分钟就提问,人们不太可能感到被逼迫。了解那个人的风格也有帮助。公司里有些人有支持他人的角色,但如果那个人还需要有交付成果,看看他们是否有日历上标出某些他们无法联系的时间,并尊重这些时间。

  • 避免以提问的方式表达批评,例如,“你为什么用这种方式编写这个请求,而不是我在本科时学到的明显更好的方式?”试着真正理解事情为什么会这样做。如果公司已经存在了一段时间,那么会有很多技术债务。例如,如果一个大型公司有物理服务器,将那些数据迁移到云上可能需要几十个工程师超过半年的工作。当人们问“我们为什么不直接做 X?这很简单,可以节省我们很多时间”时,他们通常假设其他人不理解问题或者觉得它很紧急。但它们不这么做的原因可能是因为你不知道的事情,比如法律限制。

  • 与另一个人合作。一种很好的学习方式是与他人配对。你不仅可以提问并得到答案,还可以看到人们是如何找到这些答案的。对于技术问题,与某人配对也是一种了解他们的编码环境并学习新技术的途径。即使你的问题是如何获取数据,你也可以了解这些数据在哪个表中,他们是如何知道哪个表的,也许还有一些编码技巧。你的最终目标是尽可能多地通过了解在哪里查找来自己回答问题。

  • 列一个清单。最后,如果你有一些不需要立即回答的问题,试着保持一个可能有用知识的清单,比如数据更新的频率,查询的大小限制,以及某些数据在本地服务器上可以追溯到多远。然后与你的导师或经理一起讨论这些事项。这种方法可以防止你一次又一次地打扰某人,如果不小心,这可能会变得很烦人。

9.2.2. 建立关系

在你新的工作环境中感到舒适的一个重要部分是建立支持网络。有些人比其他人更容易做到这一点,但你要确保你与人们进行一些非技术性的交谈。在大多数情况下,这意味着与之前从未交谈过的人安排会议,以便了解他们及其工作。这段时间并没有浪费;如果你知道的不只是名字和职位,那么这让你和你的同事在相互依赖时感到更加舒适。

接触你认识的人可能会感到有些令人畏惧,但你可以利用你的问题作为与某人开始对话的方式。人们喜欢帮助他人并感到自己知识渊博,所以不要害怕在礼貌友好的提问中使用问题。当你认识了几个人,即使是最大的办公室也会显得不那么令人生畏。向将与你密切合作的人发消息询问是否可以安排一个 30 分钟的会议来相互了解也是正常的。如果你在一个大办公室工作,请你的经理列出你应该认识的人。

在任何规模的办公室中,了解谁可以回答特定问题都是一件好事。可能有人是公司 SQL 方面的最佳人选,而另一个人可能负责实验系统。当你面临技术难题时,知道该找谁求助非常有帮助,而那个人通常不是你的经理。你至少也应该向你的跳级上司自我介绍——不是为了让你说你上司的坏话,而是因为让自己被这个人认识,当他们在与你的上司讨论你时会更容易。

类似地,你应该尝试结识你将要与之共事的所有利益相关者。如果数据科学团队人数少于十人,尽量与他们每个人单独见面。如果你将与数据工程师或其他数据人员合作,与他们交谈。这些会议可以是非正式的,但对你来说,重要的是不要仅仅作为一个电子邮件签名存在。即使你主要远程工作,也尽量使用视频会议系统,这样人们可以看到你的脸。

在正式会议和社交机会,如午餐期间,都要多听。结识那些在数据相关领域工作的人(这可能是从工程到金融,再到销售运营和市场营销分析等一切领域),了解他们目前的工作方式。不要急于发表“我能做得更好”这样的声明,也不要过早做出承诺,比如“我们将为你建立一个机器学习平台来做这件事。”只需专注于收集信息和思想。而且别忘了,事情不总是和工作有关。了解他们的个人生活也很不错,无论是询问他们的周末计划、最喜欢的电视剧还是爱好。

最后一点建议:和办公室经理交朋友。办公室经理控制着许多能让你的一天变得更好的事情:零食、午餐订单、洗手间里有什么类型的护手霜等等。他们还拥有最艰难、最不受感激的工作之一,所以确保他们感到被感激。

导师和赞助

“寻找导师”是职业建议中最常见的一条,但它可能令人沮丧,难以付诸行动。确实,拥有一个导师——一个能为你提供职业建议的人——可以帮助你解决棘手的问题并做出更好的决定。但与学习编程或提高沟通技巧不同,获得导师的过程并不涉及你可以参加的课程或可以阅读的书籍。那么,你该如何找到一位导师呢?

幸运的是,导师关系不一定是长期的关系。安吉拉·巴萨(我们在第十六章中采访了她,链接)列出了一群愿意回答问题并指导数据科学新手的数据助手网站。导师可能不是你可以随时打电话寻求关于每个职业困境的人,但你可能会找到一个能帮助你解决特定问题的人,比如练习行为面试或制作你的第一个 R 包。

有一类人甚至可以对你的职业生涯产生更大的影响:赞助者。赞助者是那些给人机会的人,无论是通过资助他们的项目、为他们争取晋升、向他们介绍重要人物,还是确保他们被分配到有助于他们成长的有挑战性的项目。与导师相比,你需要向赞助者展示你将如何利用他们提供的机会。例如,如果有人推荐你在会议上发言,而你从未回应组织者或给出明显没有准备好的演讲,你的行为会反映出推荐者的不佳。你不必之前做过同样的事情,但如果你能展示你做过类似的事情(例如,发表过聚会演讲),并且在与赞助者的沟通中反应迅速、礼貌,你就可以建立他们对你的信心,相信你会把工作做好。

如果你希望某人成为长期的导师或赞助者,要让他们了解你如何遵循他们的建议或利用他们帮助你的机会。许多人之所以成为导师或赞助者,是因为他们想帮助他人,听到你从中受益的消息对他们来说是一种满足。而且,如果你除了需要东西时从不与他们沟通,他们可能会觉得你只是在利用他们,而没有人愿意这样。

许多关于赞助和指导的文章都是关于在公司内寻找那些人,这对于在大型组织中工作的人来说尤为重要。但是,数据科学家经常每隔几年就换工作,数据科学社区有足够的小子领域,你可以开始建立积极的声誉,并找到公司外的赞助者和导师,他们会在你换多份工作时一直支持你。

9.3. 如果你是最初的数据科学家

到目前为止本章的所有内容都适用于任何数据科学家职位的最初几个月,但成为组织中第一个数据科学家会带来自己独特的一套挑战。鉴于这个领域的新颖性和许多小公司缺乏数据科学家的情况,成为第一个并不罕见。出于这些原因,作为公司第一个数据科学家,你在开始时应该特别做好准备。

当你开始新的职位时,将完全没有先例。没有人决定是否使用 Python、R 或其他编程语言。没有人想出如何管理工作。是否应该使用敏捷等软件开发实践来决定要做什么工作,或者你应该随心所欲地做任何你想做的事情?代码应该如何管理?是否应该购买 GitHub 专业许可证或使用 Microsoft TFS 服务器,或者你可以在笔记本电脑上不备份地将所有文件保存在 My Documents 文件夹中?

因为没有先例,你做的每一件事都将隐含地成为先例。例如,如果你碰巧喜欢用晦涩的编程语言 F#来做工作,你就是在强迫下一个数据科学家去学习 F#。对你来说,最好的做法是做出对未来的团队有利的决定,这可能意味着使用比你最喜欢的编程语言更常见的编程语言。这种方法必须与过度关注未来可能对现在造成严重损害的事实相平衡。如果你花了三个月时间设置一个漂亮的管道,以便自动与其他数据科学家共享报告,但五年内都没有雇佣第二个数据科学家,那么这项工作就是徒劳的。每天,无论是直接还是间接,你都会做出具有重大影响的决策。

除了要自己弄清楚角色外,你还得向组织推销数据科学。因为公司之前没有数据科学家,大多数人不会理解你为什么在那里。人们越快理解你的角色,就越有可能想要与你合作并保留数据科学家的职位。这些对话也是关于管理期望的。正如我们之前讨论过的,有些人认为数据科学基本上就是魔法,他们认为他们的第一个数据科学家可以立即解决公司的一些最大问题。你需要设定关于(a)数据科学能够做什么以及(b)这些目标可以多快达到的切实可行的期望。因此,你的工作将需要你不断地向人们解释数据科学的一般情况,以及你具体能做些什么来帮助业务。如果你是团队中的第 20 个数据科学家,安静地坐在角落里工作几个月可能是可以接受的,但作为第一个数据科学家,你肯定不能这样做。

虽然成为第一个数据科学家的工作比其他职位要多得多,风险也更大,但它也有巨大的回报。通过做出技术决策,你可以选择更符合你意愿的事情。通过向组织推销数据科学,你可以获得更好的知名度和更大的影响力。随着数据科学团队的成长,你将有机会成为团队的负责人,这对职业发展大有裨益。

9.4. 当工作不是承诺的那样

进入数据科学工作并发现它与你预期的相去甚远可能会令人沮丧。经过数月的工作,你终于进入了这个领域,现在你可能不得不重新开始。更糟糕的是,你可能担心快速离职会在你的简历上留下糟糕的印象。这意味着你不得不投入一年时间吗?管理一个糟糕的环境和决定是否离职是具有挑战性的。在接下来的章节中,我们将讨论两个主要类别的问题:工作本身很糟糕,工作环境有毒。尽管没有灵丹妙药可以解决这些问题,但我们将探讨一些可能的缓解策略。

9.4.1. 工作本身很糟糕

首先,仔细审视你的期望。问题是否类似于“我的所有数据都没有清理!我仅仅在数据准备上就花了两天时间!数据工程师不可能立即修复所有问题!”这些问题将是每个数据科学角色的组成部分。即使是拥有数百名工程师的最大公司的数据科学家也会遇到这些问题;数据量如此之大,不可能全部都经过完美的审查。尽管核心表应该干净且文档齐全,但你很可能会在你的子领域中遇到需要改进或与他人合作收集的数据。

检查你的期望是否现实的另一种方法是与其他数据科学家进行交流。如果你获得了相关学位或参加了训练营,询问你的同龄人或校友网络中的人对你的工作环境有何看法。如果你还没有认识很多数据科学家,如果你在一个小镇或农村地区,尝试参加聚会或加入在线社区。(我们在第五章中深入讨论了这一主题。)如果你的公司中的其他数据科学家之前有数据科学工作,看看他们是否能给你一个这个工作与其他工作的比较想法。

另一种情况可能是工作单调乏味。你被雇佣来做的工作可能是预测,例如,但在实践中,你每个月只是按一下别人现有预测模型的重启按钮。在这种情况下,看看你能否在组织中开展一些副项目或自动化一些流程。如果工作无聊但并不耗时,利用这个机会做一些与数据科学相关的事情。继续通过副项目、撰写博客文章或参加在线课程来构建你的数据科学作品集。这些策略将帮助你为你的下一个角色定位。

最后,你甚至可以从糟糕的工作中学到东西。你能否调整你的工作,使其包含更多你可以从中学习的事情?你可以在哪些方面进行改进?也许你的同事不会帮助你学习如何编写更好的代码,但你能否了解在构建数据科学团队时容易犯的错误?在你公司里很可能有一些聪明且善良的人,那么是什么让工作变得糟糕?通过学习你不喜欢的东西,你将知道在下次求职时要注意什么,并更好地准备避免错误,如果你开始组建自己的数据科学团队的话。

9.4.2. 工作环境有毒

第 9.4.1 节 讨论了一个不好但可以管理的情况。但如果你遇到的是真正有毒的工作环境怎么办?如果你的经理和利益相关者对预期完全不切实际,并威胁要解雇你,因为你没有在预测终身价值上取得进展,而他们没有相关数据?或者当你的答案不符合公司的期望时,你会受到惩罚?对于数据科学新手的公司可能期望你撒点数据科学魔法来解决公司的核心问题。他们可能会告诉你“建立一个模型来判断文本是否写得很好”——这是一个领域内没有人接近解决的问题。在这种情况下,你需要调整公司的期望,否则你可能会觉得自己一直表现不佳。在这种情况下为自己发声是困难的,但通常任何公司都有合理且聪明的人在工作。如果他们说,“如果你是一个更好的数据科学家,你就能做到这一点”,那是一个巨大的红旗。即使一个经验更丰富的数据科学家能够解决这个问题,公司也应该在设计和招聘这个角色时就认识到这一点。

可能问题在于人们和团队没有协作。他们可能不是在寻找可以提供帮助的地方,而是试图相互破坏。他们只关注如何取得进步,甚至可能将公司在成功视为零和游戏:如果你或你的团队做得好,他们的就是输。除了创造一个不健康的环境外,这种情况通常会导致大量工作浪费,因为你可能最终会重复别人的项目,因为他们不会与你分享他们的数据或学习成果。

问题可能根本与数据科学部分无关;环境可能存在性别歧视、种族歧视、恐同或其它敌意。你没有理由每天去上班都感到不舒服。即使你没有受到公开的敌意骚扰,在会议中被忽视,被使用错误的代词,或者被问“但你真正来自哪里?”所有这些都会累积起来。

不幸的是,解决这类问题通常需要高层领导的参与和每个人的积极参与。但工作场所的恶劣环境往往表明领导层不存在,甚至可能积极加剧问题。如果问题根源在于一个人,理想情况下,其他人会认识到这一点,这个人将被移除。但如果问题是普遍存在的,那么改变它可能几乎是不可能的,作为一个初级员工尝试改变它可能会迅速导致疲惫不堪。在这些情况下,你需要仔细思考是否需要离职。

9.4.3. 决定离职

决定是否离职是一个非常个人化的决定。虽然没有人能给你一个简单的流程图,让你轻松地做出决定,但我们可以提供一些问题供你思考,以指导你的决定:

  • 你是否有足够的储蓄,有一个有第二收入的伴侣可以支持你,或者在你没有其他工作的情况下可以向你借款的家庭成员?

  • 你的工作是否影响了你的健康或工作之外的生活?

  • 如果问题是工作上的,你是否已经与你的经理讨论过这些问题,并尝试解决它们?

  • 是否有可能转换团队或角色——如果现在不行,那么在几个月内呢?

如果这些问题的答案让你觉得你需要离职,一个选择是立即开始寻找其他工作。但你可能担心简历上短暂的就业经历会看起来如何,或者你该如何向面试官解释。如果你只工作了几个星期,而且是从上一份工作直接过来的,考虑联系你的前经理。你的职位可能还没有被填补,如果你离开时留下了好印象,你可能能够回去。

如果你正在寻找新的工作,以下是一些在面试中谈论你短暂工作经历的小贴士:

  • 等待面试官提出这个话题。 不要觉得你需要主动谈论它;这可能不是问题,尤其是因为公司显然对此感兴趣。(你已经到达了面试阶段!)

  • 找出一些你可以谈论的积极经验和学习经历。 这些经验和教训可能是一个你参与的项目、对行业的接触,或者来自高级领导的指导。

  • 当被问及为什么这么快就离开时,保持简短和中立。 你处于一个困难的情况,因为你想要诚实地说明你离开的原因,以及这不是你自己的过错,但如果你过于坦率,面试官可能会不公平地认为你难以共事。因此,你的最佳选择是给出一个模糊的“我的工作要求与我预期的不同,我无法利用我的技能和专业知识为公司带来利益”并就此打住。如果你对想要的工作环境有所了解,可以分享。也许你是公司第一位数据科学家,你意识到你想要成为更大团队的一部分。

如果你已经决定离开,查看第十五章以获取如何优雅地离开的信息,包括在你全职工作的同时寻找新工作,并以良好的方式离开。

但也许你不能离开,因为你的签证与你的工作场所挂钩,或者在你所在的小镇上,只有这家公司在做数据科学。如果你处于这种情况,这里有一些提示:

  • 记住,你不是你的工作。 你不需要为公司做出的糟糕决定承担责任。除非你处于领导职位,否则你很可能对公司所做的事情几乎没有控制权。

  • 尽量保持健康。 不要牺牲睡眠、锻炼以及与朋友和家人的时间。

  • 与某人交谈。 可能那个人是你的伴侣、朋友或治疗师。他们可能会给你提供建议,但仅仅倾听你也会有所帮助。

  • 考虑一下是否要报告个人骚扰。 如果你被某个人骚扰,考虑向人力资源部门报告他们。确保你记录下你的报告。不要亲自去人力资源部门;发送电子邮件并收到回复,以便你有这个过程的相关记录。最终,你可能想要指出对你说过的一些特定的事情,书面记录将会很有帮助。如果你在美国,如果公司没有采取行动,你可以向平等就业机会委员会提起诉讼。不幸的是,报告骚扰并非没有风险:尽管这样做是非法的,但公司会通过拖延员工的职业发展或甚至解雇他们来报复报告骚扰。即使你不想报告骚扰,也考虑记录下你经历的任何骚扰,以防你以后决定报告。

  • 考虑一下是否可以跳出思维定势,考虑离开公司。 可能你觉得你不能离开,因为你唯一的选择是去一个不那么有威望的公司、获得一个较低的职位,或者暂时耗尽你的储蓄。但不要低估留在有毒环境中的负面影响:如果你可以做出短期牺牲来离开,从长远来看,离开可能是有价值的。

我们希望您永远不会遇到这种情况,但拥有一些“紧急情况破窗”的信息总归是方便的。请记住,在数据科学领域更换工作是很常见的(我们将在第十五章中进一步讨论),因此没有必要因为工作场所让您感到不舒服而留在那里。

9.5. Spotify 数据科学家 Jarvis Miller 的访谈

Jarvis Miller 在 Spotify 的个性化任务中担任数据科学家,专注于提高每位用户的收听体验。当这次采访进行时,他正在 BuzzFeed 担任数据科学家。他于 2018 年以统计学硕士学位毕业。

你在第一份数据科学工作中遇到了哪些让你惊讶的事情?

让我惊讶的两件事是,我作为一个作家可以提升多少,以及我需要在不使用行话的情况下向业务解释我的数据科学贡献。我有一种想法,因为利益相关者一直与数据科学家合作,他们已经学会了理解这种语言,因此我实际上不需要改变解释事物的方式。我意识到这绝对不是事实,我无法简单地说,“我对这些数据进行了逻辑回归以进行分类……”在成为一个更好的作家方面,我开始在撰写报告时充实故事;提高我的数据讲故事能力;并以一种产品经理、设计师和完全不接触技术利益相关者都能理解的方式解释事物。

我来自学术界,在那里我觉得一切关乎你是否在一天结束时找到了结果;你是在截止日期前开始工作还是提前很久规划,这并不重要。在工业界,你有一个大的整体目标,但你需要找出如何将其分解成版本。你让第一个版本运行起来,发布它,了解它是否表现良好,然后在未来的季度中可能对其进行改进。我习惯于一直做到完成。但在这里,我必须学习如何优先考虑项目的各个部分,然后将其完成。我学会了记录我所做的工作以及下一版本中需要完成的工作;然后使其可共享,无论是通过将报告放入共享文件夹,还是制作一个应用程序,让人们可以使用我的工作并了解它应该做什么。

你遇到了哪些问题?

发表意见是我真正感到困难的事情。当我开始的时候,我在做一个孤立的项目,我汇报的人在新泽西,而我自己在洛杉矶。如果我感到困惑,我不知道我是应该立即给他们发消息还是等到我们的会议。我知道我不想让阻碍我的工作的事情分散我的注意力,但我不确定什么时候某件事是阻碍。我认为这是数据科学家中一个普遍的问题,尤其是对于边缘化群体或从不同领域转换过来的人来说。他们可能觉得因为他们是新手或者不是专家,所以他们不能表达不满或者发表意见。如果我能回到过去,我会早点讨论我感到孤立以及我不确定在这个公司中沟通是如何进行的。

你能告诉我们你第一个项目的情况吗?

其中一个项目是重新设计我们的 A/B 测试平台,这是一个非常广泛的问题。我开始的时候,先列出一个名单,与这些人交谈,了解他们在 BuzzFeed 的工作内容、工作方式以及 A/B 测试如何融入这个工作流程。然后我们讨论了具体的工具:他们不喜欢它什么,为什么,以及他们使用它时的工作流程?不幸的是,这导致了承担过多的问题。很多人提出了多个建议,我给了它们相同的权重,最终导致了 50 件我需要做的事情。但我的经理让我将这些建议分成必需品和加分项,包括为什么这些被优先考虑。他建议列出项目的整体目标,并根据它们对目标的贡献以及它们需要的时间来给想法加权。

对于前几个月,你最大的建议会是什么?

记住,你被雇佣的原因:他们尊重你的观点,并且他们认为他们可以帮助你学习,同时也可以从你那里学到东西。如果你有意见,尽量让某人知道。如果你讨厌在大组里发言,也许可以给一个人发消息,和他们讨论一下,在你向更大的群体表达之前来回交换想法。

这不仅适用于工作的技术方面。对我来说,在我和经理的一对一会议的前几分钟,我不想立即跳入我已经做了什么。我想要几分钟时间进行轻松的交谈,以减轻压力并澄清我的思路。我知道这有助于我的生产力,我的公司希望我高效,所以我应该让他们知道。你的意见是被重视的,值得分享,尤其是如果你是关于你喜欢如何被对待或者你如何在这个角色中发挥最大效能并茁壮成长,因为他们不知道你像你自己一样了解你,你的高效将使每个人受益。

摘要

  • 不要担心立即变得完全高效。相反,专注于建立关系、工具以及你对数据的理解,这将使你在长期内变得高效。

  • 如果你处于一个糟糕的工作环境中,尽量努力争取控制权以减轻对健康和职业的影响。

第十章. 制作有效的分析

图片

本章涵盖

  • 规划分析

  • 思考代码、数据和项目结构

  • 将分析结果交付给客户

本章是在关注决策科学和数据分析的数据科学家背景下编写的——这些人使用数据为业务提供想法和建议。尽管机器学习工程师在构建和部署模型之前也需要进行分析,但围绕利益相关者管理和精美可视化的一些内容不太相关。如果你是机器学习工程师并且正在阅读这本书,请不要担心;本章对你仍然非常有用,你将喜欢第十一章,它涵盖了将模型部署到生产中的内容。

许多数据科学工作的核心是制作分析:使用数据尝试解释业务状况或解决业务问题的简短文档。现代公司建立在报告和分析的基础上。做出决策的人如果没有数据支持他们的选择,会感到不舒服,而数据科学家是找到数据意义中最好的人之一。分析对于构建机器学习工具也很重要,因为在一个机器学习模型可以构建之前,需要理解数据集的上下文。制作一个能够将大量公司数据转化为简洁结果,从而阐明当前问题的分析是非常困难的,实际上是一门艺术。一个人如何能够期望自然地知道如何从包含数百万条历史信息的表格中找出有意义的数学关系,业务关心的是什么,以及如何弥合两者之间的差距呢?确定什么是数学上有意义的,业务关心的是什么,以及如何弥合两者之间的差距,不是你应该期望自然知道如何做的事情。

在本章中,我们将介绍如何构建分析的基础知识,以便你了解如何为公司提供有意义的分析。通过使用本章中的技能,你应该能够更快地在你数据科学职业生涯中成长。

究竟什么是分析?分析通常是一套 PowerPoint 演示文稿、PDF 或 Word 文件,或者 Excel 电子表格,可以与非数据科学家共享,包含从数据中得出的见解和展示这些见解的视觉化。图 10.1 是分析中可能找到的幻灯片的一个示例。分析通常需要一到四周的时间来完成,数据科学家需要收集数据,对其运行统计方法的代码,并制作最终结果。完成之后,代码直到几个月后分析必须重新运行,或者可能永远不会被再次触及。以下是一些分析的示例:

  • 分析客户调查数据,以查看哪些产品满意度最高

  • 查看订单来源地的数据,以挑选出新建工厂的位置

  • 使用历史航空业数据来预测哪些城市需要更多通往它们的航线

图 10.1。分析 PowerPoint 演示文稿的一个示例幻灯片

这些例子具有不同的技术复杂度;一些只需要总结和可视化数据,而另一些则需要优化方法或机器学习模型,但所有这些都能回答一个一次性的问题。

报告与进行分析的区别

报告和分析相似但不相同。报告是定期生成的东西,版本之间没有太多结构性的变化。例如,月度财务报告可能是一个大型 Excel 电子表格,每月更新新的数字。报告的目的是让人们了解指标是如何变化的。分析是一次性进行的,用于回答更深层次的问题。客户获取分析可能是在 R 上完成的工作,研究新客户如何购买产品,结果放入 PowerPoint 演示文稿中。报告通常充满数字和指标,而分析则侧重于提供单一的主要结果。大多数好的分析的特点也适用于好的报告,因此在本章中,我们使用分析一词来指代两者,除非明确说明否则。

那么,什么是一个好的分析?一个好的分析具有以下五个特点:

  • 它回答了问题。 分析始于有人提出问题,因此为了使分析有意义,它需要提供答案。如果提出的问题是“这两个网站哪个导致更多客户购买产品?”,分析应该显示哪个网站导致更多销售。这个答案甚至可以是“我们没有足够的信息来告诉您”,但它必须是直接回答问题的。

  • 它做得快。 对商业问题的回答将影响有截止日期的决定。如果分析花费的时间太长,决策将不会基于分析做出。一个常见的期望是分析将在一个月内完成。

  • 它可以被分享。 分析需要被分享,不仅是要分析的人,还要分享给其他人。例如,如果分析涉及图表,图表不能仅仅存在于 R 或 Python 脚本中;它必须是一种人们可以理解的形式,比如 PowerPoint。

  • 它是自包含的。 因为无法预测谁会看到分析结果,所以它需要独立理解。图表和表格必须有清晰的描述,坐标轴应该有标签,分析中的解释应该写下来,并且分析应尽可能避免引用其他工作。

  • 可以重新访问。 大多数问题将来还会被再次提出。有时,回答这些问题意味着要再次做完全相同的工作,比如重新运行聚类。有时,你需要在其他地方使用这种方法,比如将输入数据从欧洲客户更改为亚洲客户。

这些特质汇总成一般主题“一个好的分析是帮助非数据科学家完成工作的东西。”

本章的其余部分按时间顺序组织,从分析初始请求开始,以提交的报告结束。尽管并非每个分析都会遵循这些步骤,但大多数都会(或应该会)。随着你对制作分析越来越熟悉,你可能倾向于跳过一些步骤,但那些捷径正是资深数据科学家犯错误的原因。

不同类型数据科学家的分析

根据你的数据科学家角色,你将进行分析的情况会有很大差异:

  • 决策科学家—— 对于这类数据科学家来说,制作分析是工作的核心功能。决策科学家不断深入数据以回答问题,并且这些问题需要传达给业务。分析是实现这一目标的关键工具。

  • 机器学习工程师—— 虽然机器学习工程师专注于创建和部署模型,但分析仍然是分享模型表现如何的有用工具。分析用于展示构建新模型的价值或模型随时间的变化。

  • 分析师—— 分析师,他们是专注于业务指标和 KPI 的数据科学家,通常发现自己要制作很多报告。他们为公司创建了一系列重复的数据,通常在 Excel、SQL、R 或 Python 中。尽管这些分析专家会制作分析,但他们需要比其他角色更多地考虑工作的可维护性,因为他们必须频繁地重复这些工作。

10.1. 请求

分析始于对回答一个业务问题的请求。来自业务不同部门的人或你的经理会向你提出类似的问题,比如“你能看看为什么 12 月份欧洲的 widget 销量低吗?”或者“我们的中小企业客户的行为是否与我们的大型客户不同?”根据提问者的技术专长水平,你可能得到一个定义不明确的要求(“为什么销量下降?”)或一个精确的要求(“哪些属性与较低的订单平均价值相关?”)。

分析是围绕业务问题构建的,但你不能在业务问题上进行数据科学。数据科学问题是诸如“你如何聚类这些数据点?”和“我们如何预测销售额?”之类的问题。数据科学家必须将那个业务问题转化为数据科学问题,回答数据科学问题,并给出业务答案。这项工作很棘手。理解数据科学问题和业务问题之间的关系需要结合对当前问题的经验以及理解不同统计方法的结果可能如何有用。这个从业务问题到数据科学问题问答再到最终回到业务答案的工作流程是由 Renee Teate 设计的,她也在本书的第十四章([kindle_split_027.html#ch14])中接受了采访。

图 10.2 展示了这个过程,图形化地展示了业务问题来自利益相关者,他们想知道如何针对不同客户进行市场营销。数据科学家必须弄清楚这个请求在数学意义上的含义——在这个例子中,是客户数据的聚类。当这个过程完成后,数据科学家有一个数据科学答案(例如一组聚类的数据点)。最后,数据科学家必须将这个答案转换成业务能够理解的东西,比如“新客户”或“高消费群体”这样的分组。

图 10.2. 由 Renee Teate 设计的用数据科学回答业务问题的过程

图 10.2

在你开始查看数据和编写代码来解决数据科学问题之前,你必须做一些基础工作,以便最好地理解业务问题。你需要了解分析背景,以便最好地提供有用的东西。谁在请求进行这项分析,他们与团队的关系是什么?他们的动机是什么?他们是否有非常具体的问题想要得到解答,或者有一个模糊的、一般的问题,并希望数据可能对它有用?看起来你甚至可能拥有解决这个问题的数据吗?如果不是,需要什么才能获得它?提问不仅有助于你理解如何解决问题,还有助于你理解它将用于什么目的。许多数据科学家花费了数周时间进行数据分析,结果却发现根本不需要它,因为利益相关者只是“好奇”。

这些问题通常在与提出请求的人以及任何参与工作的人举行的 30 至 60 分钟的启动会议上得到解答。作为进行分析的人,你可能不是组织会议的人,但如果你的日程上似乎没有安排会议,那么安排一次会议是值得的。如果你之前还没有见过提出分析请求的人,这次会议是介绍自己和了解他们工作的好时机。

一个假设的基础知识示例可能如下:

  • 谁请求分析? 小部件产品团队的 Julia 请求的。

  • 动机是什么? 本月小部件销售额下降了 10%,业务团队不知道原因。

  • 请求是什么? 团队希望使用数据来查看小部件销售额下降是否集中在国家的一个部分。

  • 将做出什么决定? 决定是是否应该停止小部件产品的销售。

  • 我们是否有所需的数据? 是的,分析需要客户订单的邮寄编码,这在订单数据库中是可用的。

知道你是否拥有能够合理回答问题的数据非常重要。你最不希望做的事情就是花几周时间进行数据分析,结果却发现没有任何东西可以用作成果。

在没有数据的情况下,一个例子可能如下:在一家零售公司,股东想知道每个客户下了多少订单,但由于客户用现金支付,无法使用现有数据来确定每个订单的制作者。在这种情况下,最好对所有相关人员坦诚,并告知他们他们所要求的内容是不可能的。其他人可能会提出使用数据的替代方法,这些方法可能足够接近你希望的结果,或者你可能需要解释为什么这些替代方案也不可行。如果可能的话,提出一个计划,以便将来能够获取所需的数据。在前面的例子中,一个忠诚度计划可以使订单与特定客户相关联,从而解决数据问题,尽管创建该计划需要时间。

其他问题,例如请求者是谁以及他们为什么提出请求,对于制定分析计划是有用的。

10.2. 分析计划

对于数据科学家来说,没有什么比直接深入数据来回答问题更有趣的了。让我们加载数据!分组!总结!拟合模型并绘制结果!不幸的是,由于有无限种总结和建模数据的方法,你可能会花几周时间与数据打交道,结果却发现你产生的任何东西都无法回答提出的商业问题。意识到你没有做任何相关的事情是最糟糕的。而且这种情况经常发生在数据科学家身上,尤其是那些还没有被烧过几次的初级数据科学家。

解决这个问题的方法之一是设置一个护栏,以确保你保持在正确的轨道上并从事相关的工作。分析计划就是这个护栏。其理念是在你开始查看数据之前,写下你计划用数据做的一切。然后,随着分析进程的推进,你记录下你完成了计划中的多少。当你完成了计划上的所有事项,你就完成了!你不仅有一种方法知道你是否偏离了计划,而且还有一个跟踪进度和自我监督的工具。你甚至可以在与经理的会议中使用它来讨论事情进展情况。

制定分析计划时,你希望计划中的工作是可以执行的。“按地区进行线性回归销售”是你可以编写代码来执行的事情,而“找出销售下降的原因”则不是你可以直接做的事情;它是做其他事情的结果。如果计划中的任务是可执行的,那么判断你是否在取得进展会很容易。它也会使分析工作更容易,因为你不必担心下一步要做什么。相反,你将能够查看分析计划并选择下一个要完成的任务。

对于制定你最初的几个分析计划,我们强烈建议使用以下模板:

  • 顶部—— 列出分析的标题、你是谁(以防分析将被与他人分享),以及分析的目标。

  • 部分—— 每个部分应该是分析中的一个大主题。每个部分内完成的分析工作应该是自包含的(不依赖于其他部分的工作),因此应该有可能让不同的人完成每个部分。每个部分都应该有一个任务列表。

  • 一级列表项—— 一级列表项应该是每个提出的问题。这个部分将帮助每个人记住你为什么要做那项具体工作,如果所有问题都得到了成功回答,那么主部分的题目应该被认为是已被理解。

  • 二级列表项—— 二级列表应包含实际要完成的任务,这些任务可以在工作过程中勾选。例如,这些任务可以是运行模型的类型,描述应该足够具体,以便在任何时候都能具体地说出工作是否已完成。

图 10.3 展示了一个分析计划的例子,在这种情况下是评估北美地区客户流失的原因。在顶部是标题、目标和数据科学家的联系信息,以防材料被传阅。计划的每个部分都涵盖分析的不同组成部分(例如,要么在北美进行分析,要么与其他地区进行比较)。子部分(编号)是分析中的问题,最低部分(字母编号)是要完成的特定任务。

图 10.3。一个分析计划的例子

图 10.3 的替代文本

当你制定分析计划时,应与你的经理和提出请求的利益相关者分享。他们应该提出改进建议或批准这项工作。一个批准的分析计划为工作提供了一个达成共识的基础。如果你在分析后,利益相关者询问你为什么那样做,你可以参考分析计划和原始目标。

很可能在你进行分析的过程中,你会意识到你在分析计划中遗漏了一些重要内容,或者有一个你之前没有考虑过的新想法。这完全没问题;只需更新计划,并让利益相关者知道你正在做出更改。由于你有时间限制,你可能不得不从现有计划中删除一个不太重要的任务。但再次强调,分析计划是有用的,因为它围绕要删除的内容进行对话,而不是让你尝试完成不可能的大量工作。

10.3. 进行分析

在分析计划获得批准后,你就可以开始进行实际的分析工作了!这项工作从导入数据开始,以便你可以对其进行操作和清理。然后你通过汇总、聚合、修改、可视化和建模数据来反复转换数据。当数据准备就绪时,你将这项工作传达给其他人。

在以下章节中,我们将简要介绍你在工作环境中进行数据分析时应注意的一些考虑因素。也有专门针对这个主题的整本书,也可以教你如何使用你选择的编程语言进行数据分析。

10.3.1. 导入和清理数据

在你能够处理分析计划中的问题之前,你需要将数据放在你可以操作的地方,并且以你可以使用的格式。这通常意味着能够将其加载到 R 或 Python 中,但也可能包括使用 SQL 或其他语言。几乎总是,这项任务会花费你比预期更长的时间。在这个过程中可能会出现许多惊喜。其中一些许多恐怖的事情包括

  • 在你特定的集成开发环境(IDE)中连接公司数据库的问题

  • 不正确的数据类型问题(例如,数字作为字符串)

  • 奇怪的时间格式问题(例如,“年-日-月”而不是“年-月-日”)

  • 需要格式化的数据(也许每个订单 ID 都以“ID-”开头,你需要将其删除)

  • 数据中缺失的记录

更糟糕的是,这些工作对非技术人员来说看起来都没有生产力;你无法向利益相关者展示一个如何使数据库驱动程序工作的令人信服的图表,他们也不会理解字符串操作如何帮助他们解决业务问题。所以尽管这项任务很繁琐,你仍然希望尽快开始进行数据探索。

在处理导入和整理数据的过程中,考虑你有一个双重任务:尽可能少花时间在不需要的事情上,尽可能多花时间在将来有帮助的工作上。如果你有一列存储为字符串的日期,并且怀疑你永远不会需要这一列,那么不要浪费时间将其转换为正确的日期和时间格式。另一方面,如果你确实认为你需要这一列,那么请尽快完成这项工作,因为你希望为分析准备一套干净的数据。事先很难判断什么是有用的,但如果你发现自己花了很多时间在某个事情上,问问自己你是否真的需要它。

在导入和整理数据时,你可能会发现自己因为某个问题,比如连接数据库,而陷入困境长达数日。如果你发现自己处于这种情况,你有三个选择:(1)寻求帮助,(2)找到一种方法将问题完全避免,或者(3)继续尝试自己解决问题。如果你能这样做,选择(1)是很好的:一个资深人士可能能够快速找到解决方案,并且你可以从他们的做法中学习。选择(2)也很好;比如使用平面.csv 文件而不是数据库连接,这样你就可以开始分析,从而提供商业价值。选择(3)——不断尝试——是你应该尽量避免的。如果你在单个问题上花费了数日,你会看起来无法提供价值。如果你遇到无法克服的问题,与你的经理讨论应该怎么做;不要只是不断尝试并希望问题会自行解决。

在加载数据并格式化后,你可能会开始使用它,并发现奇怪的数据。“奇怪的数据”是指任何超出基本假设的数据。例如,如果你正在查看历史航空航班数据,并发现一些航班在起飞前降落,这将是奇怪的,因为通常飞机是先起飞的!其他奇怪之处可能包括从商店销售价格负数的商品到显示一个工厂生产的物品数量是另一个类似工厂的千倍以上的制造数据。这些类型的奇怪异常在现实世界的数据中经常出现,而且在你亲自查看数据之前,无法预测它们。

如果你发现自己处于一个有奇怪数据的情况,不要忽视它!最糟糕的事情就是假设数据是好的,然后在经过数周的分析工作后,发现数据并不好,你的工作就白费了。相反,与你的利益相关者或负责你使用的数据的人交谈,询问他们是否意识到这些奇怪之处。在许多情况下,他们已经知道这些情况,并建议你忽略它们。在航空数据示例中,你可能只需删除起飞前降落的航班数据。

如果最终发现这种奇怪现象是未知的并且可能危及分析,你需要调查如何挽救它。如果你要进行一个比较收入和成本的分析,并且奇怪的是,你的一半数据缺失了成本,你需要看看你是否可以仅使用现有的成本或仅使用收入来工作。从某种意义上说,这种方法变成了一种分析中的分析;你正在做一个迷你分析,看看原始分析是否甚至可行。

10.3.2. 数据探索和建模

在分析的数据探索和建模部分,你一点一点地通过分析计划并尝试完成工作。以下各节提供了一个处理每个点的通用框架。

使用通用的摘要和转换

大多数分析工作可以通过摘要和转换数据来完成。例如,“我们每个月有多少客户?”这样的问题可以通过获取客户数据,按月分组,然后计算每个月的独特客户数量来回答。这项技术不需要统计方法或机器学习模型——只需要转换。

很容易认为这并不是真正的数据科学,因为它不需要任何超出大量算术的东西,但通常正确地进行转换是非常有价值的。公司中的大多数其他人最初都没有访问数据,没有有效地进行转换的能力,或者不知道应该进行哪些转换。

根据数据,你可能想加入一些统计方法,比如找到不同百分位数水平上的值或计算标准差。

可视化数据或创建摘要表格

在进行适当的转换后,创建可视化或摘要表格以更好地了解数据中正在发生的事情。继续前面的例子,如果你有每个月的客户数量,你可以创建一个条形图来查看它们是如何变化的。这个图可以让你很容易地看到数据中的模式,而不仅仅是将数据框打印到屏幕上。

图 10.4 展示了一个示例摘要可视化,显示了每个月的整体客户数量。通过这个图表,人们可以很容易地看到客户数量略有上升趋势。

图 10.4. 一个示例摘要表格

图片

你选择的实际可视化很大程度上取决于手头的数据。你可能想使用折线图、箱线图或许多其他选择之一。根据你试图理解的内容,你还可以创建数据表而不是图表。请参考本书本部分的资源部分,以获取可以帮助你为数据选择正确类型图表的资源。请注意,当你制作可视化时,你可能会意识到你需要改变转换步骤中的某些步骤。你可能会在步骤之间来回多次。

因为你会迭代可视化并持续转换数据,所以你必须平衡你删除平庸的以保持代码清洁的愿望和保存一切以防万一的愿望。最佳实践是尽可能多地保存,前提是(1)你在进行进一步更改后,旧代码不会出错,并且(2)你可以清楚地标明哪些结果是“好的”。避免在分析中保留无效的代码或大量被注释掉的代码区域;这些情况使代码维护变得极其困难。使用版本控制(如 git 和 GitHub)可以进一步增强这种方法;通过每次向分析添加新内容时持续提交,你将能够记录你所做的工作,并在代码突然出错时回滚代码。

需要时创建模型

如果你发现数据中存在表明建模是个好主意的模式,那就去做吧!例如,可能需要对客户数量应用时间序列模型来预测下一年度的客户数量。在创建模型时,你将希望输出结果并可视化它们,以了解模型的准确性和有用性。你可能创建出比较预测结果与实际值的图表,或者展示诸如准确度得分和特征重要性值等指标。

如果你创建了可能用于分析之外的机器学习模型,例如可能被投入生产(第十一章[kindle_split_023.html#ch11]有所涉及),请确保你将构建模型的代码与一般分析工作隔离开。因为将来,你只想使用模型,你需要能够轻松地从制作一般可视化图表的代码中提取出那段代码。

重复

你应该为分析计划的每个点完成这些步骤。在这些步骤中,你可能会有关于要分析的新想法,或者意识到你原本认为合理的问题实际上并不合理。这时,你应该调整你的分析计划并继续你的工作。

很可能不同的分析计划点之间是相关的,所以你在某个点使用的代码将在另一个点重复。投入精力构建你的分析计划,以便你可以重复运行相同的代码,并且计划的一部分更新可以即时推广到其他部分。你的目标是创建一套你可以维护的代码;你可以轻松修改它,而无需花费大量时间跟踪复杂的代码。

10.3.3. 探索和建模的重要要点

数据探索和建模工作极其依赖于你试图解决的问题。你用于尝试聚类数据的数学和统计技术与你用于预测或尝试优化决策的技术大不相同。尽管如此,遵循一些广泛的指导方针可以在一个不错的分析和一个出色的分析之间产生差异。

专注于回答问题

如在第 10.2 节讨论中所述,通过做不支持目标的工作来浪费时间是非常容易的。如果你正在分析客户订单以查看你是否可以预测一个客户永远不会回来,你可能会让一个神经网络模型工作得相当不错,然后花上几周时间调整超参数。如果利益相关者只想知道模型最初是否可行,那么调整超参数以使模型略微更有效率是没有帮助的。在超参数调整上花费的几周时间本可以用来做更相关的事情。

在进行分析时,保持专注于分析计划和回答商业提出的问题非常重要。这意味着不断地问自己“这相关吗?”这个问题应该是你每次制作图表或表格时都要考虑的。如果你发现自己反复认为你正在做的事情是相关的,那很好。在更可能的情况中,你偶尔会发现自己认为“这个图表(或表格)没有用”,你可能需要调整你的工作。首先,尝试停止你正在做的事情,以不同的方法来处理问题。如果你试图根据客户的消费来分组客户,尝试进行聚类。通过采取截然不同的方法,你更有可能成功,而不是仅仅稍微改变你正在做的事情。其次,与你的经理或项目利益相关者交谈;可能你正在使用的数据对于解决当前的问题并不有效。

在你进行分析的那几周里,你应该稳步建立一个真正相关且(理想情况下)遵循分析计划的成果集合。

使用简单的方法而不是复杂的方法

复杂的方法是如此令人兴奋!为什么要在可以使用随机森林时使用线性回归?为什么要在可以使用神经网络时使用随机森林?这些方法已被证明比普通的回归或k-均值聚类表现更好,而且更有趣。所以当人们要求你用数据解决商业问题时,当然你应该提供尽可能最好的方法。

不幸的是,复杂的方法伴随着许多缺点,而这些缺点仅从关注其准确性是看不到的。当你进行数据分析时,目标不是获得最佳可能的准确度或预测;而是以业务人员能够理解的方式回答问题。这意味着你需要解释你得到的结果的原因。使用简单的线性回归,很容易提供每个特征对结果贡献的图表,而使用其他方法,描述模型如何产生结果可能非常困难,这使得业务人员更难相信你的结果。更复杂的方法在设置上也更加耗时;调整和运行神经网络需要一段时间,而线性回归则相对快速。

因此,当你进行数据分析时,尽可能选择简单的方法,无论是在模型中还是在转换和聚合中。例如,与其剪除一定比例的异常值,不如进行对数变换或取中位数而不是平均值。如果线性回归效果合理,就没有必要花费时间构建神经网络来略微提高准确度。尽可能坚持使用简单方法可以使结果更容易被其他人理解,也更容易为你自己辩护和调试。

考虑探索性图表与共享图表

数据科学家选择可视化数据有两个不同的原因:用于探索和用于共享。当你制作探索性图表时,目的是帮助数据科学家理解数据中正在发生的事情。只要数据科学家能理解,一个复杂且标签不佳的图表是可以接受的。当你制作共享图表时,目标是让对数据不太了解的人能够得到数据科学家试图传达的具体观点。在这里,图表必须简单明了才能有效。在进行分析时,你应该使用大量的探索性图表,但这些图表不应用于共享。

考虑一个基于虚构数据的城市宠物名字的例子:一位数据科学家想要了解宠物名字开头的字母是否与宠物的种类(猫或狗)有关。数据科学家加载了数据并制作了这个可视化,显示了每个字母对应的以该字母开头的猫和狗的数量分布(图 10.5)。

图 10.5. 分析前清理的示例可视化

10fig05_alt.jpg

如果你仔细观察图 10.5,你会注意到 T 条上的猫的数量比狗的数量多得多——这对数据科学家来说是一个有意义的发现。然而,这个图表并不是你想要展示给利益相关者的;图表中有很多内容,乍一看并不清楚其目的。

图 10.6 展示了以不同、更易于分享的方式绘制相同的数据。在这个版本中,很明显,猫有 12%的几率拥有以 T 开头的名字,而狗只有 5%的几率。现在,这些相同的数据可以分享。

图 10.6。与图 10.5 相同的数据,绘制以突出字母 T 的重要性

图片

持续准备分享

分析的结果可以采取不同的形式,选择哪种形式通常取决于目标受众。如果分析是要提交给商业人士,通常使用幻灯片或可编辑文档。PowerPoint 或 Word(或 Google Slides 或 Google Docs)是一个不错的选择,因为任何人都可以查看它(只要他们有 Microsoft Office 套件的前两者),并且它可以包含大量的图表、表格和文本描述。如果分析是针对技术人员的,您可以提供 Jupyter Notebook 或 R Markdown 输出 HTML 文件。这些方法很好,因为它们通常需要较少的工作来润色(也就是说,您不需要花费时间在幻灯片上对齐图表)。如果分析需要向财务人员提交大量数据表格,Excel 可能是最佳选择。当最终用户需要从结果中提取数字并对其进行进一步计算时,Excel 是一个伟大的工具。您应该在分析制作过程的早期就决定您期望提供哪种类型的输出,以避免后续的返工。

根据分析范围的大小,您需要定期与您正在为其进行分析的人沟通,并向他们展示您的工作。这种方法可以防止出现这种情况:您独自花费数周时间进行一项分析,而当交付的时候,利益相关者指出了一些使您所有工作无效的问题(例如,“您看了客户销售数据,但忘记了考虑退货。”)。在这种情况下,如果这项问题在开始时就已指出,您就能避免浪费大量工作。除了避免不良情况外,利益相关者通常可以通过建议可能的关注领域或尝试的方法来做出贡献。从某种意义上说,在整个分析过程中与利益相关者保持沟通类似于软件开发中的敏捷概念:持续改进工作,而不是发布一个巨大的软件版本。

与利益相关者进行频繁的检查是个好主意,但数据科学家往往忽视这一点。与某人进行检查的缺点是工作必须能够展示给非数据科学家;它必须达到足够的完善程度,以便展示时不尴尬。需要的东西包括带有清晰标签和意义的图表、错误最少的代码,以及关于正在发生的事情的基本故事。因此,数据科学家很容易认为“我会推迟分享我的工作,直到我把它完善,然后我会推迟完善它直到以后。”不要这样做!从长远来看,这几乎总是会导致更多的工作。通过持续保持一定的完善程度,以便你可以分享你的代码,你最终会得到一个更好的产品。

单键运行

正如只运行一个脚本就可以加载数据并准备数据一样,你的分析应该只需要一键即可运行。在 Python 中,这意味着拥有一个 Jupyter Notebook,它可以自动加载数据并进行分析而不会出错。在 R 中,有一个 R Markdown 文件,它可以加载数据,进行分析,并输出 HTML 文件、Word 文档或 PowerPoint 演示文稿。

在进行分析时,你希望避免在脚本之外运行过多的代码或以错误的顺序运行脚本。这些做法使得当你重新运行整个脚本时,它更有可能出现错误。进行一些临时的编码是可以的,但请确保你可以无错误地重新运行你的文件。这种做法将帮助你保持你的结果可以持续与他人分享,并确保你在分析结束时花费更少的时间修复脚本。

10.4. 总结

根据分析的利益相关者,你的代码输出可能足以满足要求,或者你可能需要进一步工作并制作最终版本。如果需要经过精心打磨的最终版本,例如 PowerPoint 演示文稿,你可能需要在制作分析时进行最终级别的打磨,以确保遵循公司风格指南。最重要的是,你需要为最终文档构思一个叙述,以便未参与工作的人可以完全理解工作的结论、所做的工作以及为什么这样做。

构建这个叙述是制作良好最终文档的第一步。你打算讲述什么样的故事?你将如何介绍问题,解释你的工作如何提供解决方案(或没有提供),以及讨论下一步?有无数种方式可以构建一个叙述,但一种简单的方法是考虑你将如何向一个以前从未见过这项工作的人大声解释工作。考虑你要告诉他们的故事,并尝试通过你的文档讲述这个故事。反复问自己这些问题:“我所展示的内容是否会被我的观众理解?”和“我能做些什么来改进这个?”最终,你会达到一个你对自己的内容感到满意的程度。

你还需要在你的文档中添加文本——通常是为了解释你的叙述或为什么每个图表值得分享。再次强调,尽量让没有你那样背景的人也能理解。让文本回答“我所展示的内容对业务有何帮助?”这个问题。不同的公司对包含多少文本有不同的标准;有些公司希望有详细的描述来解释一切,而其他公司则对几句话感到满意。尽量多解释一些,因为你可以稍后删减内容。

当你认为你的材料准备好了,你将想要进行一些同行评审,以检查在发送给利益相关者之前是否有小错误。考虑让熟悉工作背景的团队成员检查它,看看是否一切都合理。根据你的公司,你的经理可能要求你与他们一起这样做,以便他们可以给你一个认可。

10.4.1. 最终演示

当你的分析得到经理的认可后,你应该与利益相关者安排一次会议,亲自交付你的分析。在这次会议中,你将想要引导他们了解每个组成部分,描述你所做的工作、你所学到的以及你选择不去探究的内容。你将花费大量时间与数据一起创建分析,因此你应该很舒服地解释它并回答问题。

根据利益相关者的不同,你可能会在整个演示过程中被问及问题,或者他们可能会把问题留到会议结束。问题可能从平静好奇(“为什么你使用数据集 X 而不是数据集 Y?”)到批评和担忧(“为什么这些结果与其他团队的工作不一致?你的代码中是否有错误?”)。如何处理这些问题在很多方面与在面试中回答问题(第七章)相似:坦率地说明你所知道的和不知道的。说你需要调查某事是可以的。尽可能开放地说明你的理由(“我们使用数据集 X 是因为它涵盖了我们所关心的时间段”),当你不知道某事时(“我不确定为什么它们与其他团队不一致;我会调查一下”)。尽管如此,大多数时候,这些会议都是平静且没有冲突的!

无论您的分析有多好,您不可避免地会遇到形式为“嗯,关于 _____ 怎么样?”的问题,其中空白处是您在分析中没有考虑到的。有人可能会问“嗯,如果在分析中只使用上个月的数据会怎么样?”这是人们由于数据科学性质的自然反应:您总能找到更多切割数据的方法和可能有用的想法。这在分析结果不确定的情况下尤其常见。在这些情况下,提出请求的人通常希望介入,希望某些东西可能会突然证明是决定性的。

作为数据科学家,在这些情况下,您能做的最好的事情是尝试温和地抵制这些请求。尽管这些请求有时证明是有用的,但它们也可能导致没有得出新的结论,让您在尝试解决这些问题时浪费数天时间。作为数据科学家,您应该对什么可能是有价值的信息有最好的了解,如果您认为某件事没有用,您可以坚持这个结论。通常,当您进行数据分析时,您试图解决的商业问题非常抽象,您永远无法给出一个真正确定的答案。就像您在进行分析时不得不避免尝试一种方法又一种方法以找到结果一样,在分析之后,您必须知道何时停止。

10.4.2. 将工作封存

当最终的分析交付并获得批准后,您将被要求快速转向下一组工作,例如另一项分析。然而,在这样做之前,采取一些小步骤将使您未来的生活更加容易。有很大可能性,在未来的某个时候,几个月或几年后,您将被要求使用更新的数据重新进行这项分析。如果您花时间记录您的工作,完成重复分析将会容易得多。步骤如下:

  • 双重检查您是否可以重新运行整个分析。 之前,我们讨论了使您的分析成为一个一键运行;在这个时候,您应该进行最后一次检查,以验证分析仍然有效。

  • 注释您的代码。 因为您可能多年都不会再次查看您的代码,即使是轻量级的注释也能帮助您记住如何使用或修改您的代码。

  • 添加一个 README 文件。 README 文件是一个简单的文本文件,概述了分析的目的、为什么进行这项分析以及如何运行它。

  • 安全存储您的代码。 如果您正在使用 git 和 GitHub,您已经完成了这项工作,但如果不是的话,考虑一下有人如何在很长时间后访问代码。

  • 确保数据安全存储。 确认所有数据文件都存储在安全的地方,除了您的笔记本电脑之外,例如云服务(例如 OneDrive、共享网络驱动器或 AWS S3)。此外,存储在数据库中的数据集应理想地检查以确保它们不会被删除。

  • 输出存储在共享位置。人们共享分析的最常见方式是作为电子邮件附件,但这并不是存档的好方法。将你的结果放在其他团队成员和业务其他部分的人都可以访问的地方。

当这项工作全部完成时,你可以说分析真正完成了。随着你进行越来越多的分析,你会发现最适合你的方法和技巧,并且你会越来越擅长快速完成它们。

10.5. 与希尔丽·帕克(Hilary Parker)的访谈,Stitch Fix 的数据科学家

希尔丽·帕克(Hilary Parker)在 Stitch Fix 工作,这是一家在线个性化服装服务公司,她创建机器学习模型来帮助向客户推荐服装。此前,她曾在 Etsy 担任高级数据分析师。她拥有约翰霍普金斯大学布隆伯格公共卫生学院生物统计学博士学位。

思考他人如何帮助你的分析?

几乎每次分析我都是从试图理解“谁想要什么?”开始的。例如,这项工作是否是因为产品经理需要做出决定,而他们觉得自己在没有得到这个实验的分析之前无法做出决定?或者是因为我们试图推动一个战略愿景,为了让人们感到舒适,我们需要展示我们认为这将使 X 美元在 Y 年内增加?我确保坐下来与最终的分析消费者交谈,了解他们的背景。

当你进行展示时,最重要的是理解观众和他们所处的位置以及他们的目标。他们是否想要了解细节?对他们来说什么最有说服力?如果他们渴望更多信息,你可以提供更多统计细节,但如果他们开始分心,你想要减少这些细节。

你是如何构建你的分析的?

我认为以易于接近的方式构建分析很重要。我确保我在顶部有一个简短的摘要,并且我不会制作复杂的图表,因为大多数人无法快速吸收它们。我也不会为分析制作意识流笔记本,我在行业环境中看到很多人这样做。笔记本中的注释看起来像文本,所以你添加越来越多的注释并交付它。你最终交付的是一个“这是我的起点,这是我的终点”的东西。但实际上,你实际上想要将其颠倒为“这是结论,而在附录中,你可以看到我是如何开始的。”记住,有人会阅读它,而最容易被快速制作出来的东西可能不是最易读的。我非常关注最终格式,以至于它成为了过程的一部分。我永远不需要翻译一个大笔记本并使其变得漂亮;我一直在制作这个漂亮的东西。

在最终版本中,你进行什么样的润色?

我认为颜色主题可以走得很远。许多公司都会有他们的企业颜色主题;Stitch Fix 在我们的品牌中有一个颜色主题。我们有一些 ggplot2 模板,可以从我们的调色板中导入颜色。像这样的事情非常有效,因为它让公司的人感到熟悉。我们还有与 Google Slides 演示文稿相同的事情。人们使用 Google Slides 模板,因为当你这样做的时候,它看起来很漂亮。

我还认为“不要过度”。我在 Stitch Fix 的早期项目中,负责推出我们的加大码服装线。我们需要进行一些快速分析,以了解我们是否发出了正确的尺码。我花了很多时间构建我的小系统,来展示我们将如何交付分析。我对开发一个每x小时动态更新以显示变化的可重复网站感到非常兴奋。但最终,与我合作的人并没有太多地查看它。我过于兴奋地构建网站,而没有与合作伙伴保持联系。分析的美学很容易过度。做你需要做的,但不要做得太多。

你如何处理人们要求调整分析的情况?

最近我读了很多关于设计思维的文章,这在设计环境中经常发生。那里的态度是我自己采取的:人们不擅长沟通,他们不会退后一步进行抽象思考。在设计界,人们会来告诉你他们想要什么,你不能字面理解他们的话。你必须帮助他们界定问题。这就是设计师增值的一部分:他们从整体和系统性的角度思考问题,并以不同的方式构建框架,直到找到有意义的框架。

我认为数据科学家和统计学家也是这样。有人会要求一些特征,因为他们试图表达不安,这是表达的一种方式。但你必须弄清楚这种不安的原因。你是说你不希望做出这个决定吗?这是否导致了犹豫?这个决定的最终结果会是什么?几乎每次作为数据科学家,你都在与消费者互动。你必须不断地不仅仅是做他们说的,而是要弄清楚这个人实际上想说什么。他们所说的事情的根本原因是什么?这是否是分析应该解决的问题?可能会有很多事情发生,真正重要的是对整个情况有一个鸟瞰视角,而不是一直迭代到永远。

摘要

  • 分析是突出结论并封装数据科学应用于解决商业问题的重要特征的文档。它们对于数据科学家至关重要。

  • 一个优秀的分析需要理解业务问题和数据如何解决它。

  • 在进行分析时,始终考虑最终目标,使用简单的方法和清晰的视觉呈现,并准备好分享你的工作。

  • 管理创建分析的过程对于保持工作专注于目标并确保有一个明确的终点非常重要。

第十一章. 将模型部署到生产环境中

本章涵盖

  • 构建用于生产的机器学习模型

  • 理解 API 是什么以及它们如何有帮助

  • 部署机器学习模型

本章旨在涵盖机器学习工程师的工作的基本概念——这个人创建机器学习模型并将它们部署给业务使用。如果你的工作涉及创建分析和报告,可能会觉得这些材料很可怕。不要害怕!决策科学家和机器学习工程师之间的差距比看起来要小,本章将有助于介绍这些概念。

有时候,数据科学项目的目的并不是用数据来回答问题;而是创建一个使用机器学习模型来完成有用工作的工具。虽然你可以进行一个分析来了解人们倾向于一起购买哪些商品,但制作一个向网站上的客户推荐最佳商品的程序是不同的任务。将机器学习模型转化为可以被业务的其他部分(如网站或呼叫中心)使用的模型的工作通常很复杂,涉及到数据科学家、软件工程师和产品经理。

在本章中,我们将讨论如何思考如何制作产品的一部分模型,以及如何将它们从你的笔记本电脑上移到它们可以运行的地方。

在我们深入这个主题之前,有两个小注解:

  • 由于创建在生产环境中运行的代码的任务相当技术性,本章比其他章节更技术性。由于我们希望这些主题对不太熟悉软件开发概念的读者来说更容易理解,我们将更多地关注概念和想法,而不是技术细节。

  • 由于我们更关注概念,有时我们会做出一些可能不是 100%正确的概括性陈述。这个决定是一个有意为之的决定,旨在帮助提高可读性。如果你已经熟悉这些主题,并能想到一个反驳我们所写内容的反例——你可能是对的!

11.1. 什么是部署到生产环境?

当人们说“部署到生产环境”时,他们的意思是将代码放入某种系统,使其能够持续运行,通常作为面向客户的产品的一部分。部署是一个动词;它是将代码移动到不同系统的行为。而生产是一个名词;它是产品代码运行的地方。处于生产状态的代码需要能够以最小的错误或问题运行,因为如果代码停止工作,客户会注意到。

尽管软件开发者已经将代码部署到生产环境中几十年了,但数据科学家,特别是机器学习工程师,训练机器学习模型并将其部署到生产环境中的情况越来越普遍。将机器学习模型训练用于生产与将模型作为分析的一部分进行训练相似,但在模型训练完成后,还需要进行大量步骤才能使其准备好投入生产。通常,为生产构建模型的行为始于分析。首先,你需要理解数据并获得业务支持;然后你才能考虑部署到生产环境。因此,这两个行为是相当交织在一起的。

为了更好地理解将代码部署到生产环境意味着什么,这里有一个简短的例子。假设一家公司的业务利益相关者认为客户流失太多,并要求数据科学家分析客户流失情况。作为分析的一部分,数据科学家构建了一个模型,并显示有几个关键指标可以指示流失。业务利益相关者非常喜欢这个分析,并意识到如果客服代表知道哪些客户可能流失,他们可以提供折扣以尝试留住他们。

在这一点上,数据科学家需要将模型部署到生产环境。在数据科学家笔记本电脑上运行的模型必须以某种方式在客户每次联系支持时运行,以计算流失的可能性。在笔记本电脑上,模型需要几分钟的时间来评估许多客户,但在生产环境中,这个模型必须在客户拨打电话的那一刻运行,从公司的其他部分拉取客户数据,并使用这些数据进行评级。

大多数生产中的机器学习模型都是相似的:它们需要几乎实时地工作来做出预测或根据提供的数据对某物进行分类。著名的例子包括 Netflix 的电影推荐模型,它预测一个人会喜欢哪些电影;Facebook 的人脸识别模型,它接受一个图像,在其中找到面孔,并将这些面孔与身份匹配;以及 Google 的 Gmail 自动完成模型,它接受你正在撰写的文本,并预测下一个单词。

用于生产的模型需要经过几个重要的步骤。首先,模型需要被编码以处理代码运行时可能发生的任何场景,这样它们就较少出错。当你进行分析时,可以过滤掉少量奇怪的数据,不将其输入模型,而不会影响分析结果。在生产模型中,代码需要运行,无论输入数据多么奇怪。例如,如果自然语言处理模型在运行表情符号时崩溃,这可能对分析目的来说是完全可以接受的,因为你只需忽略带有表情符号的输入数据。对于生产模型,如果代码在出现表情符号时崩溃,这可能会使机器学习模型支持的产品也崩溃。想象一下,如果你每次输入表情符号时,Gmail 网页都会崩溃,会发生什么。生产模型需要能够自行处理奇怪的情况,或者代码需要在模型之前修复特殊的奇怪情况。

生产模型也必须是可维护的。因为它们在产品中持续使用,有时需要在新数据上重新训练,或者以某种方式编码,以便它们能够自动重新训练。它们需要方法来监控它们的工作效果,以便公司的人可以判断它们是否不再工作得很好,或者突然完全停止工作。而且因为它们可能会运行多年,它们需要以符合其他模型标准的方式编码,并且可以随着时间的推移进行更新。在一个长时间不再使用的编程语言中编码一个模型,而几乎没有人知道这种语言,这对分析来说是不好的,对生产模型来说则是灾难性的。查看图 11.1,以了解创建和部署生产级机器学习模型的示例流程。

图 11.1. 创建生产级机器学习产品的示例流程

本章的其余部分涵盖了三个概念:如何创建适合生产环境的机器学习模型,如何将其部署到生产环境,以及如何保持其长期运行。

不同类型数据科学家的生产

你需要考虑生产系统的程度因数据科学家的类型而异:

  • 机器学习工程师—— 这基本上就是你的整个工作。当你作为机器学习工程师的角色感到舒适时,你应该对这一章中讨论的所有内容都感到舒适。

  • 分析师—— 分析师可能必须根据他们报告的复杂性处理生产系统。如果分析团队定期创建一致的报告,最好是使报告系统实现生产化。通过使其报告能够自动刷新,分析团队就可以自由地做其他工作。这对于仪表板尤其如此,预期系统处于生产状态,并自行更新。

  • 决策科学家—— 由于决策科学家的工作大多是临时的,因此创建生产系统的机会并不多。但如果决策科学家创建的模型被转交给机器学习工程师进行生产化,那么对生产系统的更好理解将有所帮助。决策科学家还可以从 Shiny 或 Dash 等库中创建交互式工具,这些工具需要在生产系统中部署和维护。

11.2. 制作生产系统

基于机器学习模型的生成系统开始于为分析创建机器学习模型的相同步骤;你需要找到合适的数据,进行特征选择,训练模型,并获得业务支持。当这些步骤完成后,还需要进行更多的工作:

  1. 模型需要转换为其他程序可以使用的格式。通常,这是通过创建代码来实现的,该代码允许模型作为 API 从公司中的其他系统中访问,就像访问一个网站一样。

  2. 模型需要添加代码来处理可能被输入的许多可能输入。这确保了模型不会因为意外输入而崩溃,并且尽可能减少停机时间。这一步骤需要向模型添加测试,以确保其正确处理所有可能需要处理的数据。

  3. 该模型被部署到测试环境中以确保其正确运行。API 被测试以确保其工作正常,并且能够处理当其上线时可能遇到的流量量。

当所有这些步骤都完成后,模型最终被部署到生产环境中。

11.2.1. 收集数据

当你收集数据以训练用于分析的模型时,你需要找到一组合适的历史数据,其中包含良好的信号。尽管这对于生成模型也是必要的,但通常这还不够,因为模型的实时组件需要被考虑。考虑之前的例子,其中一家公司需要一个在生产中实时预测客户是否会离开的模型。如果将客户流失模型用于分析,几个月前收集的客户属性(购买次数、首次购买以来的年数等)对于模型来说是非常好的。因为生产模型需要实时预测客户是否会离开,所以需要编写代码来找出在模型被调用时客户属性是什么。如果客户 #25194 正在联系客户支持,模型的代码需要知道在那个确切时刻客户下了多少订单,以便模型可以做出判断。

使用历史数据训练模型和运行时向模型提供实时数据之间的差异可能非常显著。由于数据收集的技术原因,数据可能需要数小时或数天才能被放入数据科学家可以访问的数据库或存储位置。或者,可能存在数据实时可用但历史值未存储的情况。例如,可能有一种方法可以查询客户是否目前在海外,但关于客户是否曾经是国际客户的数据并未存储。

当你在寻找数据以创建用于生产的模型时,考虑模型运行时需要哪些实时数据。这些数据是否足够新鲜以供使用?是否可以通过数据库连接或其他某人可以设置的方法访问?由于数据集问题,机器学习项目失败并不罕见。

11.2.2. 构建模型

当你拥有合适的数据集时,你可以开始构建机器学习模型。这是一个广泛的话题;如果你想学习如何构建机器学习模型,从特征工程到模型训练和验证,有很多书籍和互联网资源可供参考。然而,当制作专门用于生产的模型时,你需要记住以下几点。

重视模型性能

因为其他系统将依赖于你的模型在传递给它的任何数据上有效工作,你需要了解模型在所有情况下将如何工作。假设你正在制作一个机器学习模型,作为分析客户感兴趣的产品的一部分,例如预测客户将购买的产品。如果你构建的模型正确预测了 99%的购买,但 1%的时间预测客户会订购尼古拉斯·凯奇临时纹身,那么这个模型将是一个巨大的成功。通过理解大多数客户,你可以帮助业务做出明智的营销决策。另一方面,如果你打算将此模型部署到公司网站上显示推荐产品,那么这 1%可能会造成灾难性后果,导致你失去客户(至少是那些不欣赏尼古拉斯·凯奇无与伦比的魅力的客户)。在生产系统中,边缘情况发生的情况非常重要,但在分析中则不然。

构建一个简单的模型

一旦模型部署到生产环境中并运行,以便客户与之互动,你不可避免地会遇到模型做一些奇怪的事情,而你又想了解原因的情况。如果模型是客户流失模型,它可能会预测阿拉斯加的每个客户都会因为某些未知原因流失。或者,一个户外产品网站的推荐引擎可能只会推荐皮划艇。在这种情况下,你需要深入挖掘以试图弄清楚发生了什么,以及模型是否需要以某种方式更改。

如果你使用一个简单的模型,如线性回归,那么追踪用于做出预测的计算应该是相当直接的。如果你使用一个复杂的模型,如集成或提升模型,那么理解正在发生的事情就变得困难得多。尽管你应该使用足够复杂的模型来解决你的问题,但你应该尽可能使用最简单的可接受模型,即使是以牺牲准确性为代价。

一个有趣的现实世界的故事涉及 Netflix Prize。Netflix 举办了一场比赛,看看是否有团队能够创建一个算法,将其电影推荐结果提高 10%,2009 年,该公司为此颁发了 100 万美元的奖金。正如一篇《Wired》文章所述(www.wired.com/2012/04/netflix-prize-costs),Netflix 最终并没有真正使用获奖算法。该算法是一种结合了许多模型的集成方法,运行和调试它的工程复杂性非常高,以至于使用它并不值得提高的准确性。尽管 Netflix 为拥有一个准确模型付出了高昂的代价,但公司意识到,有些事情比准确性更重要。如果 Netflix 拥有其庞大的数据科学家和工程师团队,不维护一个高度复杂的模型,很难说许多公司应该这样做。

11.2.3. 使用 API 提供模型服务

到本书写作之时,大多数机器学习模型都是以应用程序编程接口(API)的形式提供服务。这意味着机器学习模型代码可以在一个计算机系统上运行,而其他系统在需要模型在其数据上运行时可以连接到它。如果一个公司有一个运行购物网站的系统,并希望添加一个机器学习模型以预测客户可能取消订阅时提供折扣,那么它不必试图将机器学习代码放入网站代码中,而是可以设置一个包含机器学习模型的第二个系统,并且网站可以定期查询它。

将一个系统的不同部分拆分成小型微服务在软件工程中非常流行,这在许多书中都有深入探讨。对于数据科学家来说,重要的概念是设置一个仅运行模型的计算机系统,以便其他系统可以使用它。

现代 API 是通过网络服务实现的——通俗地说就是 REST API。REST API 基本上是一个微型网站,但与网站返回 HTML 在浏览器中渲染不同,它返回数据,通常是格式化的文本。这些请求使用 HTTP 协议,这与网络浏览器使用的协议相同(这也是为什么网站地址以 http://或 https://开头)。例如,一个天气 API 可以设置成,如果你访问 URL http://exampleweather.com/seattle_temperature,该网站会返回西雅图的温度(45)。对于一个机器学习模型 API,你想要访问特定的网站并获取预测。在机器学习模型的情况下,在公司网络中某个地方可能有一个网站可以预测客户是否会离开。像 http://internalcompany.com/predict?customer=1234 这样的网站会返回一个介于01之间的数字,代表该客户离开的概率。

设计 API 涉及做出决策,例如哪些 URL 返回什么数据以及使用什么类型的请求。使设计对用户易懂是让人们真正使用它的重要部分,因此,在思考界面和创建模型时,往往需要投入同样多的精力。

将机器学习模型作为 API 网络服务运行有几个好处:

  • 因为它是一个网络 API,公司中的任何东西都可以使用该模型,包括运行分析的生命系统和其他数据科学家。在网站上使用的相同的客户流失预测模型可以被进行决策科学的人查询。

  • 因为它的工作方式就像网站一样,几乎任何现代技术都可以连接模型,无论技术平台如何。如果模型是用 R 编写的,它仍然可以被 Node.js 编写的网站或使用 Python 的另一位分析师使用。此外,因为它作为自己的网站托管,如果模型由于某种原因停止工作,它不太可能拖累其他产品。如果公司的购物网站使用该模型,突然无法连接,购物网站仍然应该运行。

11.2.4. 构建 API

API 非常适合机器学习模型,但需要一些额外的编码。R 和 Python 都有相应的包——分别是 Plumber 和 Flask,它们会为您完成这些编码工作。当您使用这些包运行 R 或 Python 脚本时,该脚本会将您的函数暴露在您计算机上的一个端点上。您可以指定,访问 URL http://yourwebsite.com/predict 将运行您的机器学习 R 或 Python 函数,并返回函数的结果。然后您可以通过网页浏览器调用您的代码!假设您在笔记本电脑或台式计算机上运行此代码,如果您通过调整防火墙允许外部流量,其他人就可以调用您的 API。但一旦您停止运行 API 托管程序(R 或 Python),就没有人能够运行您的模型了。

虽然 R 和 Python 都使得将模型作为 API 提供服务变得容易,但需要做出一些设计决策,例如在 API 请求中需要传递哪些数据给模型。假设您正在创建一个模型,根据客户与公司的服务年限、他们在公司花费的金额以及他们联系客户服务中心的次数来预测客户流失的可能性。一个可能的 API 设计是让用户在 URL 中提供客户的唯一 ID 进行请求。例如,要查找 ID 为 1234 的客户,您可以访问 http://yourwebsite.com/predict?customer_id=1234。另一种选择是让用户自己查找所有客户信息,然后将这些信息作为请求的主体。因此,对于一个服务年限为 1.7 年、总花费为 1,257 美元、联系客户服务中心三次的客户,您可以发送一个请求到 http://yourwebsite.com/predict,其中请求的主体为{"tenure":1.7,"spend":1257,"calls":3}

这两种选项对于 API 设计都是有效的,但一种需要您的 API 完成查找客户详细信息的工作,而另一种则让 API 用户去查找这些信息。单独做出这些决定通常不是一个好主意;您能将可能使用您的 API 的人更多地纳入决策过程,他们就越有可能对 API 感到满意。

在您设计完 API 后,去和将要使用它的人交谈,并向他们展示它是如何工作的。他们应该能够对您的设计提供反馈。理想情况下,您还应该与他们分享 API 的文档。

关于 Plumber:一个将 R 代码作为 Web API 提供的 R 包(杰夫·艾伦

杰夫·艾伦在 RStudio 工作,是 R 包 plumber 的创建者,该包允许人们使用 R 创建 Web API,以便机器学习模型可以在整个组织中使用。

plumber 不是由一个决定投入大量工程师和资金来创建它的公司开始的;它的起源更加朴素。2012 年,我在一个研究中心的生物统计学小组工作。这个小组在他们的分析中大量使用 R,并邀请我来帮助他们创建更好的软件。主要来说,我们有三个不同的受众:

  • 其他使用 R 并希望利用或评估我们所开发方法的生物统计学家

  • 非技术用户,例如临床医生,他们只需要我们的分析结果来回答像“哪种药物对这个患者最有效?”这样的问题

  • 想要利用我们的分析但对其不感兴趣或没有计算资源来运行我们的 R 代码的技术用户

第一组受众是最容易服务的;R 自带了一个强大的打包系统,允许你将代码和数据打包成其他人可以共享和使用的包。当时,第二组受众的服务稍微有些困难。如今,Shiny 是解决这个问题的明显解决方案,并为 R 用户提供了一个方便的方式,继续在 R 中工作,构建丰富的交互式网络应用程序,这些应用程序可以被非技术用户消费。

这第三组受众一直很难满足。一些用户已经用另一种语言(如 Java)编写了现有的应用程序,但希望从他们的服务中调用我们的一些 R 函数。其他人有一个简单的自动化流程,并希望利用我们定义的一些计算密集型的 R 函数。在所有这些情况下,他们真正想要的是可以远程调用并依赖我们内部进行所有 R 处理,然后将结果发送给他们的东西。简而言之,他们想要一个 R 的远程 API。

实际上,过了几年我才有机会开始开发将成为 plumber 的包,但我带着这种动力。在大多数组织中,有一群人不知道 R,但会从他们的数据科学家在 R 中创建的分析中受益。对于许多人来说,需要一个程序化和结构化的接口,而网络 API 提供了一个优雅的解决方案。幸运的是,Shiny 包的作者已经解决了创建一个高性能网络服务器的大部分难题,该服务器可以被 R 包用来服务 HTTP 请求。剩下的部分是创建一个接口,用户可以通过它定义他们 API 的结构和行为。

我希望 plumber 为那些技术受众提供解决方案,这样这些程序化用户就能像其他上述受众一样有效地从 R 中受益。随着我多年来观察 plumber 在功能和用途上的增长,我认为它已经能够触动 R 用户的心弦。因为 R 可以方便地通过 API 表现出来,它现在已经在其他更熟悉传统 IT 组织的编程语言中赢得了一席之地。看着人们使用 plumber 完成我从未能做的事情,这很有趣。

11.2.5. 文档

当你有一个工作的 API 时,是编写其文档的好时机。在流程的早期就拥有文档,随着时间的推移维护 API 会更容易。事实上,在编写第一行代码之前就编写关于 API 的文档是一种很好的实践。在这种情况下,文档就是创建 API 的蓝图,而将使用你的模型的人有足够的时间为此做好准备。

API 文档的核心是对 API 请求的规范:可以向哪些端点发送什么数据,以及期望得到什么反馈?这份文档允许其他人编写调用 API 的代码,并了解可以期待什么。这份文档应包含大量细节,例如

这份文档可以存储在任何文本文档中,但也有一些标准的模板来存储它,例如 OpenAPI 文档。一个 OpenAPI 文档 是编写 API 规范文件的规范,可以很容易地被用户或计算机系统理解。

理想情况下,你不会是永远维护 API 运行的人,因此你还需要记录 API 在你的系统上运行的要求以及如何在其他地方安装它。这份文档将允许接手的人自己使代码工作,并根据需要做出更改。

最后,你希望有一些文档说明模型存在的原因以及其背后的基本方法。当你不再从事产品开发工作时,这份文档对于了解为什么创建它非常有用。

11.2.6. 测试

在将机器学习模型投入生产并让客户依赖它之前,确保模型能够正常工作是非常重要的。当机器学习模型被训练时,其中的一个过程是检查模型输出并确保准确性,这很有帮助,但并不足以完全确定模型是否能够工作。相反,模型需要经过测试,以确保它能够处理可能收到的任何输入而不会失败。如果一个即将投入生产的流失率模型有一个接受数字客户 ID 作为输入的 API,如果客户 ID 为空?或者是一个负数?或者是一个单词customer?如果在这些情况下 API 返回用户不期望的响应,那可能会很糟糕。如果不良输入导致 API 崩溃,那可能是灾难性的。因此,提前发现的问题越多,越好。

测试有很多种类型,但为了创建生产级的机器学习模型,一种特别重要的类型是单元测试——测试代码的每个小组件以确保系统在实际中能够工作。在机器学习 API 的情况下,这通常意味着测试 API 的每个端点在不同条件下是否按预期行为。这种测试可以包括接收作为输入的极大数值、负数或包含奇怪单词的字符串。每个场景都被转换为一个测试。对于一个将文本分类为正面或负面情绪的机器学习模型,测试可能是“当输入是 I love you 时,我们期望 API 响应为正面。”另一个测试可能是,如果输入是一个数字,比如 27.5,代码返回一个无法计算的结果而不是崩溃。

除了测试 API 端点之外,你还可以单独测试代码中的函数。目标是实现 100%的覆盖率,这意味着 API 中的每一行代码都已被测试以确保其正确运行。每次模型即将部署时,都会检查测试,如果任何测试失败,就必须解决这些问题。

人们很容易将测试视为没有时间去做的事情,但通常它是捕捉模型在客户面前之前重大问题的唯一方法。与构建机器学习模型的任务相比,编写大量检查似乎是一种忙碌的工作,但它极其重要,不应被忽视。

11.2.7. 部署 API

如果你有一个可以在你的笔记本电脑上运行的机器学习模型,将其转换为在笔记本电脑上运行的 API 并不费多少功夫。不幸的是,有时你可能想关掉笔记本电脑或用它来看 Netflix,所以让 API 在笔记本电脑上持续运行并不是一个长期策略。为了让 API 以稳定的方式持续运行,它需要存在于某个服务器上,这样它才能始终运行。将代码移动到服务器上运行的过程就是我们所说的部署。设置服务器以使代码始终运行需要比仅仅创建 API 更多的工作。

术语服务器

当你听到“服务器”这个词时,它可能会让你感到害怕,就像是一种普通人不懂的特殊电脑。实际上,服务器只是一台普通的电脑,比如笔记本电脑,但它运行在没有屏幕的地方。人们不会走到服务器前登录,而是通过其他电脑远程连接,这就像站在它面前一样。服务器几乎运行着与笔记本电脑相同的操作系统——Windows 或经过轻微调整的 Linux。如果你远程连接到服务器,它看起来应该非常熟悉,有 Windows 的相同开始菜单或 Linux 的终端。

服务器的优点是人们通常会让它们运行,而且它们往往存在于比家庭办公室更安全的地方。但没有任何理由你不能拿一台旧的家庭 PC,把它放在你的壁橱里,并把它当作服务器来对待;许多软件工程爱好者就是这样做的。

当人们谈论使用像亚马逊网络服务(AWS)、微软 Azure 和谷歌云平台(GCP)这样的云服务时,他们的意思是他们正在使用从亚马逊、微软和谷歌租用的服务器。但仅仅因为你为这些服务支付了大公司,并不意味着电脑是不同的。你可以把它们想象成昂贵的天空笔记本电脑。

你有两种基本方式将 API 部署到服务器:在虚拟机上运行或在容器中放置。

部署到虚拟机

企业级服务器通常是既非常强大又非常昂贵的机器。很少有必要让这些强大的机器专门用于单一任务,因为对于大多数任务来说,这将是过度配置。相反,服务器将同时执行许多任务,但如果一个任务崩溃导致电脑崩溃,进而导致其他无关任务也崩溃,那将是灾难性的。虚拟机是解决这个问题的方法,因为它们是电脑的模拟。大型昂贵的电脑将同时运行许多其他电脑的模拟。如果一个模拟崩溃了,没问题;其他的还在工作。在几乎所有情况下,虚拟机都可以像普通电脑一样对待;如果你登录到一台电脑,除非你在寻找它,否则你无法分辨出那是一台虚拟机。每次你使用 AWS、Azure 或 GCP 访问电脑时,你都是在连接到一个虚拟机。如果你要求你的 IT 部门为你获取服务器,他们可能会为你创建一个本地虚拟机。

虚拟机很棒,因为它们是模拟:你可以轻松地打开或关闭它们。你还可以拍摄快照,这样你就可以回到早期版本,或者同时运行多个副本。你可以与他人分享快照,他们也可以运行它。或者,你可以闭上眼睛,假装虚拟机是一台普通的旧笔记本电脑,并且通常过得很好(假设你闭着眼睛使用笔记本电脑)。

由于虚拟机是一台普通的计算机,将你的代码部署到机器的最简单方法是安装 R 或 Python,安装你需要的库,将你的代码复制到其中,然后运行你的代码。这些步骤与你在笔记本电脑上运行你的 API 时使用的步骤相同!如果你想对 API 进行更改,只需将代码的新版本复制到虚拟机中,然后运行你的代码。确实,你只需遵循这些步骤就可以将系统部署到生产环境中:

  1. 启动一个虚拟机。

  2. 安装运行机器学习模型 API 所需的程序和代码。

  3. 开始运行你的 API。

考虑到人们经常谈论制作生产系统的复杂性,你能够如此轻易地以最基本的方式完成它,这真是令人震惊。

使用这种简单的方法将代码复制粘贴到虚拟机并按下运行按钮,一个主要的问题是你每次进行更改时都必须手动移动代码。这个过程既费时又容易出错。很容易忘记移动代码,或者失去对虚拟机上哪个版本的控制。

持续集成(CI)是指在代码提交到代码库时自动重新编译代码的实践。CI 工具可以监控 Git 代码库,查看何时进行了更改,然后根据这些信息重新构建软件。如果你使用 R 或 Python,重新编译可能不是必要的,但构建过程可以运行诸如重新运行单元测试等步骤。持续部署(CD)是指将持续集成工具的输出自动部署到生产系统中的实践。CI/CD 指的是同时使用这两种实践。

因此,CI/CD 工具会检查你的代码库是否有更改,如果发现一些更改,就会运行你的构建过程(例如检查单元测试),然后将生成的代码移动到虚拟机。作为数据科学家,你不必担心对虚拟机进行更改;CI/CD 工具会为你完成这项工作。自己设置 CI/CD 工具并不是一件容易的事情,但如果你的公司有一个软件开发团队,那么他们很可能已经设置了这些工具,你可以使用它们。

使用虚拟机的另一个改进是同时运行多个虚拟机。如果你预计你的 API 将会获得大量流量,你可以复制虚拟机,同时运行所有这些虚拟机,并将流量随机分配到一台机器。此外,你可以监控每个虚拟机的活跃程度,根据需要启动和停止额外的机器副本。这种技术被称为 自动扩展。尽管这对于大型系统来说很实用,但自动扩展的设置可能有些麻烦,如果你需要它,你也很可能处于需要软件开发人员帮助的情况。

部署到 Docker 容器

设置和运行虚拟机可能相当麻烦。因为每个虚拟机都是一台计算机的模拟,设置起来就像设置一台普通计算机一样令人烦恼。你必须安装每个程序,更改每个驱动程序,并确保机器配置正确。记录所有必要的步骤真的很困难,如果其他人重复这个过程,很容易出错。另一个问题是,由于每个虚拟机都是一台计算机的模拟,因此这些机器需要占用大量空间,因为它们必须包含一台普通计算机所做的一切。

Docker 是解决这些问题的方案。使用 Mike Coleman 在 Docker 博客中的比喻(www.docker.com/blog/containers-are-not-vms):如果一个充满虚拟机的服务器是一个社区的房子,那么 Docker 容器就是一栋楼里的公寓。尽管每个公寓都是一个完全可居住的单位,但公寓共享诸如热水器等服务。与虚拟机相比,Docker 容器的设置要容易得多,运行效率也更高。

Docker 允许你轻松地指定机器的设置方式,并且通过在不同的机器之间共享规范,你可以共享资源。这使得生产系统的创建和维护比使用虚拟机要容易得多,这也是 Docker 为什么能横扫软件开发世界的原因。

要理解 Docker,重要的是要了解三个概念:

  • dockerfile 是一个包含设置模拟机器所需所有步骤的文本文件。这些步骤可以包括“安装 Python 3”或“将保存的模型文件复制到机器上”。大多数步骤与 Linux bash 命令完全相同,所以如果你习惯于阅读这些命令,那么 dockerfile 应该会感觉熟悉。

  • Docker 镜像 是 Docker 按照 dockerfile 的步骤构建和存储计算机状态快照的结果。

  • 当 Docker 从镜像中取出并开始运行时,就创建了一个 容器。一个正在运行的容器可以连接并像使用正常物理计算机一样使用镜像中指定的程序和数据。

Docker 相比传统的部署方法有很多优势,但使用 Docker 将机器学习模型部署到生产中可能只有在组织中的其他人也在使用 Docker 容器的情况下才会有效。如果是这样,公司将会有知道如何创建 Docker 容器、部署它并监控它是否持续工作的人。如果不是这样,很可能会因为机器学习模型以非标准方式部署而受到抵制。

由于 Docker 容器比虚拟机更复杂,如果您以前从未部署过代码,那么从虚拟机开始可能更容易。即使您不能使用 Docker 将模型部署到生产环境中,使用 Docker 进行可重复分析也有很多好处。在某个时候至少获得一些使用该工具的经验绝对是值得的,即使您现在不清楚您是否有职业上的需求。

11.2.8. 压力测试

如果许多系统将要使用您的模型,或者如果某个系统将要同时多次使用您的模型,您需要确保 API 在压力下不会失败。这种失败可能是因为 API 运行的系统耗尽了内存,因为系统处理每个请求需要太长时间,导致队列越来越长,或者因为任何其他可怕的事情。

确保这种情况不会发生的最简单方法是运行一个压力测试——这是一种同时向 API 发送大量请求并观察 API 表现的方式。通常,您会运行至少是您预期看到数量的两倍的请求。如果 API 能够优雅地处理这些请求,那么您就成功了。但如果它崩溃了,那么您就会知道您需要使代码更高效,扩大系统规模,或进行其他更改。

11.3. 保持系统运行

即使您的 API 成功部署并投入使用,这也不够。(永远都不够。)要么您,要么组织中的其他人将负责继续确保 API 正常工作。一些公司有一个开发运维(DevOps)团队,其宗旨是确保 API 始终正常工作。即使 API 运行良好,您可能仍希望出于其他原因进行调整。以下几节讨论了 API 维护过程中的三个重要考虑因素。

11.3.1. 监控系统

持续监控模型的表现是个好主意。每小时它接收多少请求?模型的预测是否仍然准确?是否有任何错误发生?跟踪这些指标的最简单方法是让您的 API 包含日志记录和遥测功能。日志记录是记录工具内部问题的数据——例如,每次模型出现错误时。遥测是记录发生的事件,例如每次请求或特定预测时。此外,还可以设置在出现问题时发出警报。

日志记录可以简单到每次事件发生时 API 将信息写入文件。然后,要检查日志,您只需进入 Docker 容器或虚拟机。遥测通常涉及将事件信息发送到远程位置(例如集中式服务器),这样许多系统的遥测数据就集中在一个地方。然后您可以创建一个仪表板,以便实时查看和监控遥测数据。

警报工具被用来确保当出现问题时,公司的人会知道。这些警报可以是当特定事件发生时自动发送的电子邮件或 Slack 消息。如果模型 API 有一个用于请求接收时的遥测事件,并且整个一天都没有请求发生,可以发送一个警报电子邮件通知某人系统没有接收流量,但可能应该接收。

这些不同的监控系统通常会被联合使用,公司试图标准化以便能够以相同的方式监控所有公司的 API。正如本章的大部分内容,你能够更多地利用你组织的标准,你的工具就会更有用。

11.3.2. 重新训练模型

通常情况下,在机器学习模型投入生产一段时间后,它可能会开始表现不佳。机器学习模型是在数据上训练的,随着时间的推移,这些数据变得不那么相关。例如,用于预测客户流失的机器学习模型可能会因为新地区的客户开始与公司互动而表现不佳。当模型表现不佳时,就需要重新训练。

重新训练的最简单解决方案是,当模型表现不佳时,重复最初训练模型时采取的步骤,但加载更新的数据版本。这个过程可能意味着在计算机上加载 R 或 Python 中的数据,重新运行脚本,然后将模型以相同的方式投入生产。这种方法很棒,因为如果你做了一次,你可以再次做。事实上,许多重要的生产级机器学习系统在大公司中都是这样处理的。

你可以采取的一项措施是为此过程创建一个标准的工作时间表。而不是试图关注模型指标并依靠直觉来决定何时重新训练,设定一个每n周或每月进行一次的标准做法。这种做法消除了选择何时执行重要行为时的猜测。

更重要的是,按照标准时间表进行重新训练意味着你可以自动化这个过程。如果你有一个 Python 或 R 脚本,可以加载数据,构建模型,然后将其保存到某个地方,你可以设置一个系统自动按计划执行这些操作。事实上,这个重新训练系统本身也可以投入生产,这样你就不必花时间做这项工作了。这样的系统还可以测试新重新训练的模型是否与之前的模型表现一样好,或者更好;如果不是,它应该向数据科学家发送警报。像这样的高级重新训练过程越来越常见,云工具如 AWS SageMaker 也支持这些功能。

自动重新训练管道复杂且流行,但最终,只要你在重新训练模型,你就做得很好。数据科学家在构建模型、将其部署到生产环境中,并且随着时间的推移模型表现越来越差时停止关注,就会遇到麻烦。如果不继续监控模型的表现并在必要时进行修复,你就有可能对你的工作造成损害而不是帮助。要密切关注它。

11.3.3. 进行改动

如果你的生产模型对业务成功,你不可避免地想要对模型进行改动以改进它。你可能想要引入更多数据集或更改机器学习方法来提高 API 的性能,例如。你还会听到来自业务周围的人关于他们希望在模型中看到的功能或他们发现的模型问题的反馈。

正如在第十章讨论分析时提到的,这类“再加一点”的改动可能会带来真正的问题。即使这项工作很有趣或似乎对某人来说很重要,但做这项工作是否值得花费时间并不明确。如果将模型从 84% 准确率提高到 86% 需要三个月时间,那么你将失去三个月本可以用于其他事情的时间。或者,某个特定利益相关者认为重要的功能可能实际上并没有影响许多客户。在生产中的成功机器学习模型会吸引许多人的注意,作为帮助创建该模型的数据科学家,你应该努力确保用于改进模型的时间是值得的。

11.4. 总结

本章涵盖了关于部署模型的大量概念,其中一些你可能已经熟悉,而另一些可能不熟悉。尽管并非所有这些主题都与你的工作相关,但了解它们的基本概念在将来可能需要时是非常有用的。你可以在书籍和网络上找到大量关于这些主题的好资源,特别是由于这些主题与软件工程有很多重叠。随着数据科学作为一个领域的持续变化,这些主题将保持重要性,并且值得继续学习。

11.5. 与 T-Mobile 机器学习工程师 Heather Nolis 的访谈

Heather Nolis 是 T-Mobile AI 团队的一名机器学习工程师,在那里她帮助将 R 和 Python 模型投入生产,这些模型每周被点击数百万次。她拥有计算机科学硕士学位,以及神经科学和法语学士学位。

在你们团队中,“机器学习工程师”是什么意思?

我将数据科学家创建的模型转化为团队维护的产品。长期以来,T-Mobile 有数据科学家会坐下来构建漂亮的模型和进行酷炫的分析,然后他们会将它们发送到软件工程部门以投入生产。这个想法是让这项工作产生真正的商业影响,但工程师实际上很难使用这项工作,因为数据科学家和工程师之间存在巨大的语言障碍。我的目标是坐在中间,这样我就可以理解分析中所有投入的东西或对给定模型重要的事情,然后将其传达给工程师。

部署你的第一段代码是什么感觉?

我第一次部署是在我作为软件开发者的第一周。那是在一个已经存在的产品上,起初,我不明白为什么这会有风险。当你在一个电脑上编码时,如果你运行代码 50 次来测试它,那是可以的。但在生产环境中,如果一段代码有 bug,它可能会给公司造成巨大的问题,所以不仅仅是你在你的笔记本电脑上运行不工作的代码会给你带来不便。在我第一次发布时,我以为我已经完成了,实际上我不得不进行三个小时的集成测试,然后才允许发布。

如果你在生产环境中遇到问题,会发生什么?

早期,我开发了一个基于 Twitter 的工具,它会推荐你在社交媒体上最近的 T-Mobile 商店。我用 Node.js 编写的,而我们团队根本不支持它,但我想,“我会为自己解决这个问题,并让人们知道这是可以做到的,然后有人更有资格的人可以将其工程化。”这就是我学到“有人更有资格的人可以将其工程化”实际上从未真正发生;我的代码是投入生产的代码。

我们发布了它,而且——由于我是 Node.js 的新手——它绝对不是漂亮的代码。它运行正常且安全,但由于生产经验有限,我缺乏信心认为它能在生产环境中运行。其他工程师也很紧张,因为这是一种我们尚未支持的语言。接下来的两个月,每次任何服务出现故障时,我都会被叫去。我必须在那里,因为我冒险在一个新的平台上用不同的语言发布了一些东西;人们认为任何奇怪的问题都来自我。

在那整整两个月里,每次我被通知时,我都觉得这是我的问题。但事实上,生产中出问题的从来不是我的代码!我认为这是要记住的事情:当你第一次将东西投入生产时,你可能会破坏一切,但别人的东西也可能不工作。这不仅仅是你的代码。当事情出错时,你不必害怕。

我还想谈谈将事物投入生产的问题:当然,我总是希望构建最漂亮的模型,拥有所有最酷的功能和特性,但这并不总是有助于构建我们想要的产品。最终,我们必须牺牲许多这些事物,以拥有能够持续运行的健壮代码。作为机器学习工程师,我的工作是理解这些权衡并推动产品的创建。

你对与工程师合作的数据科学家有什么最终建议?

共同工作的两个关键是理解他们的语言并欣赏他们关心的事情。为了理解他们的语言,考虑一下,对你来说可能像正常句子一样的事情,对机器学习工程师来说就像他们走进你的房子,你有一个大型的、古老的 CRT 电视。他们在想:“我是不是回到了过去?”我最喜欢的例子之一是我们第一次在 T-Mobile 的 AI 团队中聘请数据科学家。有一次我问数据科学家:“我们不能把 R 模型作为 API 部署到生产中吗?”她问:“你想让我把 R 作为 Web 服务器运行吗?”我不得不退后一步,因为当我听到“Web 服务器”这个词时,我会听到“你好——我来自 20 世纪 80 年代!”我对此感到完全反感,尽管她的意思完全一样。

对于后者,最终,当数据科学家在构建准确模型时,他们会对自己的工作感到满意。让我,一个工程师,感到满意的是将东西投入生产,让其他人可以接触它。我真正看重的是可工作的代码。如果你可以去找一个工程师说,我设计了一个 API,并创建了一个指定所有输入和输出的文档,这表明你在考虑他们遇到的问题。

摘要

  • 将模型部署到生产中是使模型持续运行的做法。

  • 将模型放入 REST API 中允许其他系统使用它。

  • API 可以部署到虚拟机或作为 Docker 容器。

  • 仔细观察贵公司如何管理代码、测试和生产系统的部署。

第十二章:与利益相关者合作

本章涵盖

  • 与不同类型的利益相关者合作

  • 与数据科学团队外的人交流

  • 倾听以确保你的工作得到最佳利用

似乎数据科学家的工作主要是关于数据的,但大部分工作都围绕着人。数据科学家花费数小时倾听公司里的人谈论他们遇到的问题以及数据如何解决这些问题。数据科学家必须向人们展示他们的工作,以便他们可以使用从分析中获得的知识,或者信任机器学习模型。当出现问题时,例如项目延迟或数据不可用,就需要与人交谈,以确定下一步应该做什么。

卡尔·维格拉斯和乔伊·贝蒂在《软件需求》中将“利益相关者”定义为“一个积极参与项目、受其结果影响或可以影响其结果的个人、团体或组织。”对于数据科学家来说,利益相关者可以是那些在营销、产品开发或其他业务领域工作,并使用数据科学来做出决策的商人。利益相关者也可以是依赖数据科学家创建的机器学习模型来驱动他们的软件或确保数据正确收集的工程师。在某些情况下,利益相关者可能是高级管理人员。利益相关者可能来自公司各个部门,不同的利益相关者有不同的行为和需求。

在本章中,我们将探讨在数据科学项目中你将遇到的不同类型利益相关者的期望。然后,我们将介绍如何有效地与利益相关者合作,以及你应该如何思考与数据科学团队外的人的沟通。最后,我们将介绍优先处理利益相关者分配给你的工作的过程。

12.1. 类型化的利益相关者

在数据科学项目中,你可能会遇到的各种利益相关者都有他们自己的背景和动机。尽管利益相关者可以是几乎任何人,但根据你的项目有多奇怪,大多数利益相关者都会落入以下四个类别之一:商业、工程、领导和你的经理(图 12.1)。

图 12.1. 本节涵盖的利益相关者类型

12fig01

12.1.1. 商业利益相关者

商业利益相关者是来自营销、客户服务或产品等部门的个人,他们负责监督商业决策。这些人就是那些要求分析以帮助他们做出更好的决策或机器学习模型以提高效率的人。这些角色中的人有着不同的背景:营销部门的人可能拥有 MBA 学位并来自广告公司,尽管客户服务部门的经理可能从社区大学的护理代理开始,拥有社区大学学位,然后逐步晋升。这些不同的职业路径将给每个人带来不同的与您合作的角度。

通常,商业利益相关者技术背景有限。他们可能擅长使用 Microsoft Excel,但除了一些例外,这也就是他们分析专长的极限。大多数商业利益相关者不知道如何使用 R 或 Python,或不同机器学习模型的优点。但如果有在过去十年中读过任何新闻文章,他们反复听到数据在决策中的价值以及数据科学的重要性。因此,商业利益相关者处于一个棘手的情况:他们必须依赖数据科学家提供他们做出决策或发布机器学习工具所需的关键信息,但他们没有自己的技术专长,因此必须相信数据科学家所说的内容是正确的。

通常,商业利益相关者会高度参与数据科学项目。他们在那里帮助启动项目并定义项目的目标。在项目进行期间,他们会查看中间结果并从业务角度提供反馈。在项目结束时,无论是交付最终分析还是部署模型,他们都会在场。因为他们是确保业务从数据科学工作中获得价值的人,所以他们必须始终参与其中。

作为数据科学家,你的工作是向他们提供他们业务部分所需的东西,比如分析、仪表盘,或者(偶尔)机器学习模型。你不仅要为他们做这项工作,还需要确保他们理解和信任它。如果你给他们一个带有复杂统计数据的表格而没有解释,他们就不会理解它,因此无法使用它。通过成为他们的可信赖的商业伙伴,你使他们能够使用数据,而他们则为你提供了在组织内部进行更多数据科学工作的途径。

与商业利益相关者最困难的情况往往是当他们不接受数据科学结果时,例如当一个数据科学家进行分析,而利益相关者回应说“哦,那不可能是对的。”当数据科学工作的事实和前提受到质疑时,利益相关者可能会切断数据科学家的工作循环。在这些情况下,你能做的最好的事情就是帮助他们理解你所做的一切以及你是如何做到的。通常,缺乏信念源于缺乏理解,通过讨论事情是如何完成的,你可能需要改变分析中的假设。

12.1.2. 工程利益相关者

工程团队负责维护公司交付的代码(以及可能的产品),当这些产品需要机器学习算法或数据科学分析时,他们就成了利益相关者。在某种程度上,与其它类型的利益相关者相比,工程师更容易合作,因为从文化上讲,他们与数据科学家有很多相似之处。就像数据科学家一样,他们从学校、训练营或在线课程中获得了技术背景。

尽管工程师拥有广泛的技术背景,但他们通常在数据科学工作的关键部分缺乏经验。尽管软件工程师编写代码,但他们通常有一个非常具体的目标,比如创建一个查询特定数据库的 API。软件开发者的工作并不具备数据科学家工作的探索性成分,因此花费数周时间试图理解数据和获得见解的想法对他们来说是陌生的。

当需要机器学习模型作为工程项目的部分时,工程师们往往会与数据科学家合作。这种合作通常是通过将机器学习模型转换为工程师在生产中使用的 API 来完成的(参见第十一章 chapter 11)。工程师们依赖数据科学家和机器学习工程师创建一个具有明确输入和输出、可靠使用且在生产中不会让他们感到惊讶的产品。作为一名数据科学家,你的任务是向工程利益相关者交付这些产品。你必须像工程师一样思考,并试图理解什么才是他们所需的最佳产品。

工程师们也依赖数据科学家来进行分析,这些分析有助于推动他们所构建的工具。数据科学家可以分析数据以帮助优先考虑功能,诊断工程系统中的错误,并评估面向客户的产品的性能,例如网站。在这些情况下,工程师们更接近业务利益相关者,因为他们需要数据科学家提供知识,以便做出正确的决策。

围绕数据科学工作的不确定性,工程师利益相关者往往会遇到困难。在开发软件产品时,你通常开始设计一个 API 或流程,然后去实施它。在设计过程中,你有明确的任务和对其应做什么的要求。然而,在数据科学方面,你进入产品创建时几乎没有期望。你不知道最终需要什么数据,因为你可能不知道对模型来说什么才是重要的。输出也不明确,因为输出通常取决于模型及其性能。甚至是否可行也不明确,因为你可能会发现没有模型足够准确以满足业务期望。

由于数据科学项目在开始时往往是不确定的,工程利益相关者常常对数据科学家早期能承诺的很少感到惊讶。因此,作为一名数据科学家,你需要格外小心地沟通过程,以便工程师在事情发生变化时不会感到太惊讶。确保尽早并经常地沟通数据科学过程以及你是如何遵循它的。当你让工程师了解数据科学的模糊性时,他们就不太可能对它们感到惊讶。

12.1.3. 企业领导

公司的执行人员背景与商业利益相关者(或者如果他们领导一个技术组织,则是工程师)相似,但影响力范围要大得多。这些董事、副总裁和首席企业官员正在指导组织,他们需要数据来完成这项工作。数据科学家通常负责筛选数据,为执行人员提供他们完成工作所需洞见。如果数据科学家参与了一个机器学习是关键组成部分的大型项目,他们也可能对他们负责。

企业领导者非常忙碌,几乎没有时间去了解那些不影响他们的细节。这一事实导致与他们取得任何时间的难度极大,而且一旦获得时间,通常也很短暂。当你与高级执行人员会面时,他们通常希望直接切入要点并立即理解其影响。这是有道理的:他们是非常忙碌的人,他们需要做的越少去理解别人试图表达的意思,他们就能越专注于做出决策。

企业领导者通常在需要数据做出重大决策或希望更好地了解公司某部分时与数据科学家合作。有时,为商业利益相关者或其他人员完成的工作会展示给组织中的高级人员,直到顶层人员看到。在这些情况下,分析和报告可能需要反复打磨,随着级别的提高。在其他时候,执行人员可能要求进行特定的分析或完成特定的工作,而数据科学家的任务是创建一个即使是对第一次看到结果的人来说也能立即理解的东西。

根据组织的规模和文化,数据科学家在向执行利益相关者分享结果之前可能需要做大量工作。在一些组织中,团队会审查结果以确保它们与商业目标和组织信念一致。在更加轻松或规模较小的组织中,数据科学家可以直接为领导者创建工作。无论公司如何,工作都应该始终干净且无错误。

当工作呈现不清楚或不完整时,问题往往会出现。如果执行人员无法理解他们面前展示的内容,他们将没有耐心等待事情自行变得清晰。如果他们提出数据科学家无法回答的问题,他们可能会觉得这项工作不可靠。如果与执行人员的合作非常糟糕,并且执行人员无法原谅,这可能会对团队造成严重打击。

另一方面,如果执行人员喜欢结果或认为它们有价值,这可以成为数据科学家的一大福音。通过成为执行人员的信任伙伴,数据科学团队可以在组织中获得更多使用数据和机器学习的地方和理由的杠杆作用。

12.1.4. 你的经理

根据手头的项目,你的经理有时也是利益相关者。如果你的经理分配给你一项任务,持续检查进度,并提出建议,那么他们实际上就是项目中的利益相关者。经理希望项目成功,因为(1)他们的工作是让你成功,(2)如果他们团队分配的项目做得好,这对他们来说是个好事情,(3)项目可能与经理为团队设定的更广泛目标相一致。

通常情况下,你的经理应该在你项目上给予指导和辅导。当你遇到困难时,你应该能够与你的经理讨论这些问题,你的经理应该帮助你找到最佳的行动方案。经理会帮助你把工作做到最好,通过告诉人们关于它的事情,通过帮助工作融入现有流程,以及通过思考新的机会来改进你的工作。

但经理也是利益相关者,因为他们依赖你完成工作。他们需要你交付你能做到的最好的工作,因为你的报告、模型和分析是经理分享的内容。因此,经理在双重角色中,既是你可以依赖寻求帮助的人,也是你必须为其工作的那个人。

由于这种双重角色,本章剩余部分的内容也与你经理相关。主要区别在于,与你的经理相处时,你可以放下防备,表现出更多的脆弱。对经理说“哇,我真的很困难地完成这项分析”是合理的,但你可能无法向一个高管利益相关者透露这样的信息。经理能够把你当作一个更有人性的人来对待,并提供建议,而其他利益相关者只是你工作的客户。

总体而言,对待经理就像对待你工作中的其他人一样:提供清晰的更新,持续沟通,并交付可展示的工作。但当你遇到麻烦时,首先向经理敞开心扉,因为他们想帮助你并了解何时需要帮助。

12.2. 工作与利益相关者合作

在你的数据科学项目中与利益相关者有效沟通时,有四个核心原则需要考虑:

  • 理解利益相关者的目标

  • 持续沟通

  • 保持一致性

  • 建立关系

以下章节将详细介绍这些原则。

12.2.1. 理解利益相关者的目标

每个人在工作时都有自己的目标——他们每天去工作时想要实现的目标。这些目标既由一个人所从事的工作决定,也由他们的个人特质,如雄心和事业与生活的平衡愿望所决定。例如,一个高级工程师可能专注于完成当前项目,以便他们能够获得晋升。或者,一个高级管理人员可能知道他们很快就会离开公司,并希望在那时之前避免引起不必要的麻烦。这些目标塑造了人们在工作中的行为以及他们如何回应他人的行为。一个比预期花费更多时间的项目可能对以晋升为导向的工程师来说是个灾难,但对不想做任何事情的高级管理人员来说却是个大好事。

当你作为数据科学家与利益相关者合作时,了解他们的目标是至关重要的。同样的分析可能会得到好的或差的反应,这取决于利益相关者的视角。考虑一下对公司网站上销售的产品性能的分析。假设利益相关者是管理该产品的人,而你的分析发现该产品在南美洲的销量不佳。如果利益相关者的目标是让公司认为这个产品很棒,因为它是由他们提出的,那么分析可能会得到非常差的反应,因为它揭示了问题。另一方面,如果利益相关者的目标是保持整个产品组合的良好表现,知道哪个可能需要被砍掉是非常有帮助的。

当与利益相关者合作时,你应该尽快了解他们的目标和动机。你越快了解这些事情,就越不可能交付一些不必要的、反应不佳的东西。你有几种方法可以发现一个人的动机:

  • 直接询问他们。 通过向利益相关者询问“对你来说什么最重要?”,你实际上是在为他们打开一扇门,让他们展示自己。人们公开说出的事情并不完整,但你通常可以通过这种方式抓住关键。此外,在初次见面时提出这个问题是完全正常的。

  • 四处询问。 看看你的同事之前是否与该利益相关者合作过。向你的团队成员提出像“那么告诉我关于这个利益相关者的事情:他们有什么特点?”这样的问题可以让同事告诉你一些情况。记住,你想要避免八卦;不要在没有思考的情况下将同事告诉你的秘密告诉其他人。

  • 从利益相关者的行为中推断其动机。有时,从利益相关者的行为中可以很清楚地看出他们的动机。例如,如果你展示的分析反映了他们管理的某个产品的不足,而他们表现得过于防御,这可能表明该产品对他们来说非常重要。这种方法的不利之处在于你必须通过互动来学习,因此你很容易犯错,但如果你无论如何都要与他们互动,你不妨花时间从这些错误中学习。

通过参与这些任务,你应该能够构建一个关于利益相关者的心理模型。他们会如何对不同分析结果或模型延迟做出反应?如果你能提前思考结果,你可以在沟通中更加周到。

注意,理解利益相关者的动机并不意味着你必须迎合他们。虽然理解他们的目标有助于你预测他们的反应,但可能存在你的目标与利益相关者的目标不一致的情况,你必须忽略他们的目标。例如,如果你的目标是成为最好的数据科学家,在分析显示某个产品表现不佳的情况下,诚实地分析并不要隐瞒你的发现对你最有利。了解利益相关者的需求可以为你提供帮助。

如果你发现自己不得不传达利益相关者不太可能接受的消息,通常的第一步是寻求支援。你的经理或团队中的资深成员能帮忙吗?通过让某人帮助你传达这个信息,他们可以处理任何政治上的后果或问题,而不是让你来处理。一个初级数据科学家并不需要成为公司政治和全局的专家。

当你必须独自处理一场棘手的对话时,最好尝试将其框架化为一次合作。想想你如何能与利益相关者站在同一阵线。消息可能很难听,但你可以尝试说服他们,你不是有意造成痛苦,而是试图从他们的角度看待情况,寻找克服当前问题的机会。在这种情况下,对话更多的是一种传统的商业谈判和讨论,而不是技术性的;它是关于让不同的方面达成共识。

关键绩效指标 (KPIs)

关键绩效指标(KPIs)和目标关键结果(OKRs)是团队或组织关注的指标,因为它们推动业务价值。例如,一个在线零售团队可能会将每月订单数量作为一个想要提高的数字。对于数据科学家来说,KPIs 非常有用,因为它们提供了对团队目标的具体量化。如果你能找到团队的 KPIs,你就能以如何影响他们的 KPIs 为依据来构建所有的分析和其它工作。如果一个分析或方法与 KPI 无关,团队可能不会感兴趣。

并非每个团队都有核心关键绩效指标(KPIs),有时它们会不断变化或定义不清,但如果你确实被赋予了 KPIs,最好不要忽视它们。它们通常是快速理解利益相关者目标的最简单方式。

12.2.2. 持续沟通

对于数据科学家来说,担心自己要么沟通过多要么沟通不足是很常见的情况。“一天之内第三次给利益相关者发邮件是不是太多了?”当你再次按下发送按钮时,这样的想法可能会闪过你的脑海。或者,同样容易地,你可能会想,“我已经有一段时间没和我们的利益相关者谈过了。我想知道他们在想什么?”或者最糟糕的情况:你可能根本不考虑如何让利益相关者了解项目进展,导致利益相关者完全不知道项目进展如何。

对于数据科学家来说,几乎总是沟通不足。利益相关者依赖于沟通。电子邮件、会议和电话是利益相关者了解项目进展的唯一方式。如果没有足够的沟通,利益相关者可能会认为自己被排除在外,担心自己对项目进展的理解不够好。而且如果沟通不足,当数据科学家最终与利益相关者交谈时,利益相关者可能会因为他们的期望与现实相差甚远而感到震惊。

数据科学家应该向利益相关者传达几个信息:

  • 数据科学家应该让利益相关者了解项目如何满足预期的进度。如果在项目开始时,看起来需要一个月来找到和清理数据,然后又需要一个月来构建模型,告诉利益相关者这个进度是否仍然是预期的。理想情况下,这是一个数据科学家在变化和延误发生时分享的系统。一个糟糕的情况是,利益相关者预期项目已经完成,但数据科学家还有数周或数月的工作要做,而他们没有分享这些信息。当利益相关者最终发现时,他们可能会感到沮丧,这是完全合理的。

  • 数据科学家应该沟通项目进展情况,例如在项目中发现的数据科学家发现的结果,或者他们发现比预期更困难的地方。例如,由于数据库访问受限而陷入困境的问题,可能需要利益相关者的帮助才能解决。分享分析进展顺利的地方可能有助于利益相关者改进项目范围。如果项目似乎进展得非常糟糕,这也应该被传达出去。(第十三章提供了更多关于失败项目的信息。)

  • 与项目进展情况不同,数据科学家应持续更新利益相关者关于工作如何影响业务以及接下来会发生什么的信息。数据科学家应该对到目前为止所做的工作如何改变项目轨迹有看法。例如,如果数据科学家在进行分析时发现了一些全新的东西,他们应该为业务制定一套关于如何处理这一发现的建议。

通常,创建这种持续沟通的最好方式是将它作为项目工作的默认方式。没有什么比数据科学家和利益相关者之间日历上的定期会议做得更好了。通过每周或每两周举行一次会议,你确保了必要的沟通。这种例行公事是一个强制函数:通过将其放在日历上,你迫使自己在每次会议中分享一些内容。对于每一次这样的会议,你应该准备好一份更新时间表、关于进展顺利或不好的笔记、要分享的工作部分以及建议的下一步行动。

作为数据科学家,你也应该养成在需要时直接给利益相关者发邮件的习惯。作为一名有抱负或初级数据科学家,你可能觉得向组织中资深人士提问非常令人畏惧。然而,大多数情况下,利益相关者乐于回答问题,如果这意味着你的工作会做得更好;这是他们在组织中的角色。如果你担心对方地位很高,邮件需要特别精心打磨,或者你认为问题听起来足够明显,以至于他们认为你不太懂,可以先让经理过目;这是经理的职责。根据利益相关者和项目的情况,你应该每周或大约一周左右给他们发一次邮件。

如果你的项目(比如你本以为存在的数据集)突然发生变化,你需要利益相关者的输入,有时,正确的做法是与他们安排一次电话或即兴会议。这类快速会议在需要时获取即时输入非常有用。在日历上安排此类会议之前,你需要问自己一个问题:“我真的需要利益相关者的输入吗?”如果发生变化,但你已知下一步该怎么做,你可能不需要占用他人的时间。如果你确实需要输入,那就去做吧。初级数据科学家容易犯的一个错误是默认认为其他人会安排会议,而不是他们自己。但你能越积极主动地推动项目进展,项目就会进行得越好。此外,这种情况是针对更高级别角色的良好培训,在这些角色中,这些行为是预期的。

通信的方法和原因应根据利益相关者的类型而变化。一般来说,商业利益相关者对能够提供指导和合作的会议感到满意。他们可能不是能够提供实际数据或帮助解决技术障碍的人。工程师可能对你有技术答案,但在决定项目或工作方向时,他们和你一样不确定。高管非常忙碌,通常只能在项目开始时设定宏伟目标,在项目结束时看到结论。

12.2.3. 保持一致性

想象一下你家附近的一家餐厅。有一天,你在那里点了一份墨西哥卷饼,他们很快端出了你吃过的最好的墨西哥卷饼。一个月后,你再次点墨西哥卷饼,但这次他们完全忘记了给肉调味。你去第三次,食物味道不错,但上来花了超过一个小时——比你预期的要长得多。你会想在这家餐厅吃饭吗?

企业依靠提供一致的产品来繁荣发展,作为数据科学家,你是在组织中的一个小型企业。利益相关者是你们的客户,如果你不能很好地为他们服务,他们就会停止向你寻求帮助。在你们的关系中提供一致性的一个方法是通过标准化你的工作。

在分析和报告的情况下,通过创建一个一致的框架来共享它们,你可以为你的利益相关者提供极大的帮助。如果你能尽可能保持从分析到分析的内容尽可能一致,利益相关者将能够专注于发现。以下是一些需要考虑标准化的方面:

  • 分析的结构—— 尽可能地,尝试为分析制定一个格式。从相同风格的“目标”和“数据”开始,并以类似的“结论”和“下一步行动”结束。你正在训练利益相关者如何阅读和思考这些材料。

  • 分析的交付方式— 虽然你不必完全坚持这一点,但如果你的分析有一个文件类型,事情往往会更加顺利。这些文件可以是 PowerPoint、PDF、HTML 或其他类型。每次都应该将它们存储在同一个地方。你可以为你的分析创建一个 Dropbox、网络文件夹或其他共享工具。确保这个工具是利益相关者可以使用的;GitHub 仓库可能不太适用,尽管你可以为自己创建一个以保持版本控制。

  • 分析的风格— 这个点可能看起来很小,但视觉的一致性可以走得很远。尽可能使用相同的颜色和模板(如果你的公司有颜色,那将加分)。

当你交付仪表板时,许多分析的一致性规则都适用于此处。你希望保持多个仪表板之间的样式和格式一致,并将它们全部存储在共享位置,以便人们能够记住如何访问它们。

对于 API 和机器学习成果,一致性体现在产品的设计上。随着数据科学团队 API 和模型的组合不断增长,跟踪每个模型的工作方式可能会变得极其困难。API 越一致,使用起来就越容易。一致性规则包括

  • 输入的一致性— 你的模型和 API 如何接收数据应尽可能遵循相同的格式。例如,所有这些都可以接收具有相同参数名称的 JSON 对象。

  • 输出的 consistency— 输出的结构应该与输入的结构以及团队创建的其他 API 的工作方式相一致。如果模型以 JSON 作为输入,它应该以 JSON 作为输出。

  • 认证的一致性— 模型和 API 可能需要某种形式的认证以保障安全。无论你使用什么方法,都应该尽可能多地与 API 保持一致,特别是因为很容易忘记哪些凭证属于哪个 API。

除了帮助你的利益相关者外,所有这些一致性对你自己也会很有用!你越能标准化数据科学工作的所有这些部分,你就越不需要考虑它们(并且你就能更多地关注有趣的部分)。数据科学团队能够标准化的越多,工作在不同人之间传递就越容易。标准化对每个人都有好处。

伊丽莎白·亨特,T-Mobile 技术战略实施高级副总裁:管理关系

人与人之间的关系在任何商业互动中都扮演着重要但有时被忽视的角色。人们在潜意识中寻找社会和情感线索来建立稳定性、舒适感和联系,当他们找到这些线索时,他们往往更愿意接受新想法和经验。这种与个人的联系为你向他们展示任何信息提供了一个欢迎的环境。与某人建立良好关系的过程比大多数与工作相关任务的过程更不线性。有些人基于一般友好与人们迅速建立联系。而有些人则需要更长的时间,并且需要与人们进行多次深入的个性讨论。

这些年来,我发现我在职业生涯中的许多成功都取决于我花时间建立的关系,无论是某人在重要会议上的支持,还是一位高管倾听我的想法,或者有人为我提供新的机会。我职业成长的一个很大部分是努力工作和展示我工作的价值,但与人们建立个人联系为他们提供了很多关于我的背景信息,他们可以期待什么,他们愿意给予多少宽容,以及他们愿意从我相信而不是证据中接受多少。

作为一名内向者,建立关系对我来说不如其他人自然,我不得不努力去学习如何去做。回顾过去,我现在意识到我进行了一系列的小实验——我根据我所知道或观察到的如何与他人建立联系形成假设,测试这些假设是否有效,根据我了解到的关于他们的新信息进行调整,并在与他们互动中重复这个过程,直到我弄清楚是什么让他们兴奋,并能与他们建立良好的关系。这并不是说你应该为了别人改变自己,但对他人的舒适感有一些同理心会出奇地走得很远。

12.3. 工作优先级

作为一名试图支持组织的数据科学家,你经常需要决定你应该做什么任务。尽管有些团队有项目经理决定每个数据科学家应该做什么工作,但你仍然应该推荐下一个任务应该是什么。这些任务在主题和范围上可能会有很大的不同,每个任务可能来自不同的利益相关者。你可以将这些任务分为三个类别:

  • 直接来自利益相关者的快速任务—— 这些任务往往是小请求,例如“制作随时间变化的销售图表。”它们通常很紧急,因为它们不花太多时间,所以很难拒绝。但每个任务都会分散你更重要的工作注意力,随着请求的积累,进行有成效的工作变得越来越困难。

  • 对业务有长期影响的项目—— 这些项目是数据科学家工作的核心。构建仪表板、进行长篇分析以及创建投入生产的模型都属于这一类别。这些任务通常非常重要,但由于它们可能需要数周或数月才能完成,因此它们并不总是紧急的。

  • 你认为具有长期效益的想法—— 由于数据科学的性质,这些想法通常更技术性,例如创建一个机器学习模型来预测客户在主动联系支持之前会做什么。这一类别还包括使你更高效的工作,例如创建函数甚至库来更快地解决常见问题。如果某个手动流程每周需要花费数小时来运行,你可以自动化这个任务,虽然这对业务没有直接的好处,但间接地让你有更多时间去做其他事情。没有人要求你做这项工作,但感觉它很重要。

确定最重要的任务以及你可以推迟的任务可能很困难,尤其是在有多个人向你请求工作时。同时,对利益相关者非常重要的工作可能对整个业务并不重要。作为数据科学家,你很少有能力拒绝利益相关者的请求,因为他们通常是推动业务方向的人。所有这些都创造了一个环境,在这个环境中,你决定做什么可以极大地影响业务;它也限制了你可以选择做什么。

这个领域是许多数据科学家都感到困难的地方。当利益相关者提出请求时,自然希望取悦他们,不让他们失望。此外,他们提出的请求在智力上可能很有趣。然而,试图满足每一个请求是不切实际的,因为对答案的请求是无穷无尽的。此外,用数据回答一个问题通常会导致新的问题,因此满足请求通常会产生额外的工作,而不是减少剩余的工作量。

当你考虑要处理的可能任务时,关注两个问题是有帮助的:

  • 这项工作会有影响吗? 知道这项分析的结果会对公司产生实质性的影响吗?任何结果会改变决策吗?这个机器学习模型会增加利润吗?

  • 这项工作会做些新的事情吗? 你会反复应用现有的流程,还是会尝试不同的方法?

这两个问题的答案创造了四种工作类型的组合:

  • 创新且具有影响力

  • 不创新但具有影响力

  • 创新但无影响力

  • 既不创新也不具有影响力

在接下来的几节中,我们将详细探讨这些组合中的每一个。

12.3.1. 创新且具有影响力的工作

改变业务流程的创新工作,是大多数数据科学家希望在整个职业生涯中从事的工作。一个例子项目可能是这样的:从未被数据科学家触及的库存数据,使用最先进的机器学习模型来优化产品订购,为公司节省数百万美元。这类项目在最佳状态下,能让你在《哈佛商业评论》或《连线》等杂志上获得关注。

不幸的是,很少有公司项目属于这一类别。为了生存,这些项目需要具备许多有利条件:

  • 必须有足够的数据,以便数据科学方法有用。

  • 数据中必须有模型能够捕捉到的有趣信号。

  • 业务部分必须足够大或重要,以至于变化能够对底线产生影响(因此项目可能不是优化办公室的干擦笔库存)。

  • 问题必须足够复杂或独特,以至于人们以前没有尝试过。

符合所有这些条件的公司问题集非常小。

这些项目很棒,因为它们在利益相关者和数据科学家中创造了兴奋感。利益相关者感到非常高兴,因为他们能看到项目明显的价值。数据科学家渴望尝试新的方法在新数据上,并看到结果。如果你找到一个属于这个类别的项目,尽你所能去培养它。这些项目可以定义一个人的职业生涯,但由于它们有很多要求,它们非常罕见,而且并不经常成功。

12.3.2. 不创新但仍有影响力的工作

这些项目并不创新,但可以改变业务,例如说服团队推出产品的非常平凡的数据分析。通常,这种说服相当于提供证据,证明每个人都怀疑是真实的事情;这并不特别创新,但它会有帮助。在工程领域,这些项目可能是将已经在公司一个部门部署的模型重新部署到另一个部门。属于这一类别的另一种工作是简化耗时的工作。这类工作并不创新,但它确实改善了业务。

虽然这项工作并不光鲜,但重要的是它有助于业务。帮助利益相关者看到数据科学工作的价值,对于获得支持是非常好的。如果你有更多的支持,那么下次项目超预算或未能成功时,人们更有可能继续信任你。所以尽可能多地承担这些项目。

最终,数据科学家的职责是为公司提供价值,而不是去做那些对他们来说最迷人的工作。对于数据科学家来说,一项宝贵的技能是能够忍受这种有价值但并不有趣的工作。话虽如此,如果一份工作完全由你不喜欢且无法让你学到任何东西的项目组成,那么寻找另一份工作是完全合适的。在优先考虑工作时考虑工作满意度是完全可以接受的;只是确保这不是唯一的考虑因素。

12.3.3. 具有创新性但无影响力的工作

这项工作虽然具有创新性,但对业务没有用处,例如研究那些使用可能性很低的新的理论数据科学算法和方法。这些项目可以是象牙塔式的,人们可能会花几个月甚至几年时间闭门造车,这些工作不与其他团队互动,最终也不会被使用。这些项目可能会成为数据科学团队的巨大时间陷阱,最终花费数百万美元,却几乎没有什么成果可以展示。尽管有这些事实,这些项目仍然像飞蛾扑火一样吸引着数据科学家。

这些项目往往始于数据科学团队,关注的是方法论上的有趣性,而不是对业务有用的内容。数据科学家可能会阅读一篇概述新理论技术的论文,并说服团队的其他成员他们“必须”在自己的数据上尝试使用它。六个月后,很明显,这种方法并不像论文中所建议的那样好,即使它确实如此,业务中也没有人对算法将提供的结果有特别的需求。更糟糕的是,数据科学家已经转向了新的论文,这个过程又重复了。

通常,利益相关者甚至都不知道这些项目。最多,他们注意到团队中的某些数据科学家似乎在忙于做一些听起来非常困难的事情,但没有人解释过这是怎么回事。作为数据科学家,很容易觉得当你完成一个项目时,人们会发现它的用途。实际上,如果你不能立即看到项目的用途,利益相关者可能也不会。尽可能避免陷入这些可能对业务没有贡献的项目,这可能会让人们质疑你的价值。

12.3.4. 既不创新也不具有影响力的工作

不幸的是,数据科学家被要求做的许多工作既不创新也不具有影响力。最经典的例子是那些频繁更新且未自动化的报告,制作它们需要花费大量时间和精力,但没有人会在每次发布时都去阅读。这种工作需要大量的时间和精力来完成,但如果交付给许多利益相关者,没有人愿意站出来表示这项工作不再需要做了。随着时间的推移,随着企业收集越来越多的必要报告,生成所有这些报告所需的时间最终可能会压垮数据科学团队。

虽然报告是一种可能既不创新也不具有影响力的工作类型,但许多小型的单次请求都可能属于这一类别。喜欢数据和图表的行政人员可能会反复向数据科学团队提出请求,例如“为我制作一张按周划分的欧洲销售图表”或“找出过去 12 周订单下降最大的产品”。这些请求中的任何一个可能都不特别困难,但加在一起,它们会占用大量的带宽,并且可能不会为业务提供很大的价值。

这种情况之所以困难,是因为没有简单的答案。你可以尝试自动化那些耗时较多的报告和流程,但这项任务本身也需要很多时间,而且根据所使用的技术的不同,你可能只能获得有限的改进。例如,如果高级利益相关者反复提出请求,那么很难说不,否则可能会损害数据科学团队的地位。

尽管这些情况很困难,但作为数据科学家,你有责任尝试为你的时间得到有效利用进行辩护。如果许多这样的任务正在进行,你应该通过与管理层或利益相关者进行对话,明确表示这些任务可能不值得花费时间。他们可能已经知道这项工作并不特别有用,但通过持续讨论流程以及你认为应该如何改进,人们将不太愿意接受现状。如果不这样做,有时你能做的最好的事情就是首先尝试实施你的建议,然后再展示它们。

12.4. 结论

在项目进行的过程中,与利益相关者的合作是一个持续的过程。你需要理解他们的需求以及他们为什么提出这些需求。项目始于利益相关者的请求,但他们在项目过程中提出的要求很可能会发生变化,而你的责任就是跟上这些变化。你越能将你的项目与利益相关者的需求对齐,项目失败的可能性就越小。在第十三章中,我们讨论了数据科学项目失败时会发生什么,例如当利益相关者沟通出现问题时。

Sam Barrows,Airbnb 的数据科学家:将请求转化为对话

与利益相关者合作的一个有用工具是将请求转化为对话。你可能会经常有同事要求你完成特定的任务。而不要立即接受或拒绝这些请求,而是开始一个关于为什么提出这个请求的对话。这个请求旨在解决什么业务需求?是否有更好的方法来实现预期的结果?通过理解你收到的请求背后的动机,你更有可能做有意义的工作。

这种策略是实践基于利益的谈判,在谈判中,参与者关注的是解决他们潜在的利益,而不仅仅是他们更直接的需求。在这种情况下,直接需求是你收到的请求,而潜在利益是这些请求背后的商业动机,以及数据科学团队的目标。

12.5. Etsy 数据科学家 Sade Snowden-Akintunde 采访

Sade Snowden-Akintunde 在 Etsy 工作,她在实验设计和分析方面专长,旨在改善国际消费者的购物体验。她的专业领域包括 A/B 测试和实验、实施可靠的数据实践以及扩展数据基础设施。

管理利益相关者为什么很重要?

很遗憾,如果你不能与非技术性的利益相关者沟通概念,那么你有多聪明都不重要。最终,许多公司是由可能没有你那样技术水平的人经营的。你需要能够用一种方式与他们沟通,既让他们觉得自己有能力,又在你需要的时候为你自己辩护。管理利益相关者可能是数据科学最重要的方面之一,但往往是最不被重视的。

你是如何学会管理利益相关者的?

尝试和错误:我遇到过有效的情况和无效的情况,我注意到了。我认为我学到最重要的东西是,尽早沟通并重复自己非常重要,以确保人们理解你在说什么。在我的数据科学职业生涯早期,我假设如果我提了一次,有人同意,那么他们就知道我具体在说什么,但人们可能甚至不知道他们不理解你在说什么。

你是否曾经遇到过与利益相关者难以相处的情况?

在我的职业生涯早期,我害怕为自己辩护,从我的实验设计者的角度来看。其他人会做我不理解的实验,但我没有说什么。然后我会在实验结束后尝试分析这些实验,但由于实验设计,结果很难解释。我应该从一开始就与利益相关者合作,沟通我如何最好地分析他们的工作,以及他们通过适当的实验设计能得到什么。我意识到,如果我想在最后能做得最好,我必须从一开始就说出自己的想法。

初级数据科学家经常犯哪些错误?

我认为初级数据科学家认为人们会自动认识到他们工作的价值。这在来自学术背景的数据科学家中尤为常见。我们往往非常注重一切都要非常彻底,遵循科学方法。虽然这在学术界很重要,但仅仅努力工作并不一定能让人们认识到你工作的价值。你沟通的方式才是让人们认识到你工作价值的关键。

你是否总是尝试解释数据科学中的技术部分?

这取决于利益相关者想要参与多少。我曾与不想参与任何技术工作的项目经理合作。如果我只是说“现在这个不工作”,他们会直接接受这个说法。我也曾与想要了解每个细节的项目经理合作,我发现他们确实会感到有些不知所措。有些人希望你能定期检查并告诉他们发生了什么,即使他们知道他们不理解,他们只是想感到自己是其中一员。所以我会确保他们感到自己是其中一员。

你对初级或正在努力成为数据科学家的人有什么最后的建议?

我认为人们倾向于想要进入像数据科学这样的技术职业,因为他们认为你可以只关注逻辑元素,而不必处理人文元素。但事实并非如此。当人们考虑数据科学职业时,他们应该真正思考自己是否愿意为了沟通和做好工作而稍微放下一些自我。说“我想学习如何构建这个模型,我想学习 A/B 测试,我想学习所有这些技术事物”很容易,虽然这很好,但软技能才是你职业生涯中能让你走得更远的因素。

摘要

  • 利益相关者以多种形式出现,有各种各样的需求。

  • 与利益相关者建立关系,这样他们可以持续地依赖你。

  • 保持持续的沟通,让利益相关者了解项目的时间表和困难。

第 9-12 章资源

书籍

由 Eduard Tufte 著的《美丽证据》(Graphics Press)

爱德华·图费在数据可视化领域是一位传奇人物,他的书籍充满了关于如何思考图表和表格的详细指导。他还有其他书籍;你可以成套购买,或者更好的是,参加他作为巡回讲师举办的一日课程。不过,有一个警告:他的建议有时过于学术化。几乎不可能完成他建议的所有事情,同时还有时间做其他工作,除了制作可视化。

数据可视化基础:制作信息丰富且引人入胜的图形的入门指南》,作者 Claus O. Wilke(O’Reilly Media)

如果爱德华·图费提供了关于通过可视化进行思考的学术概述,那么威尔克提供了实际应用的版本。这本书通过日常如何考虑可视化决策来引导读者。何时箱线图是好的?饼图是否真的像人们说的那样糟糕?这本书将引导你通过这些决策。

金字塔原理:写作与思考的逻辑》,作者 Barbara Minto(Trans-Atlantic Publications)

这本书已经绝版多年(尽管你可以找到二手副本),但仍然被视为沟通技巧的基础之作。明托阐述了如何思考报告或演示的结构,以便与观众产生共鸣,提供了诸如按有意义的方式而不是按创建顺序排列内容等关键指导。明托曾是著名咨询公司麦肯锡的咨询顾问,书中充满了顾问们掌握的教训。

Web API 的设计》,作者 Arnaud Lauret(Manning)

通过经验学习如何设计 API 是很常见的;最终,你会设计出足够的 API,设计开始变得合理。这本书就像是通过这个过程的一个捷径。它首先阐述了 API 是什么以及它们的结构;然后,它探讨了它们的 设计和最佳实践。它甚至涵盖了诸如 OpenAPI 文档等主题,以便你可以为你的 API 编写可共享的规范。

Amazon Web Services in Action》,第 2 版,作者 Michael Wittig 和 Andreas Wittig(Manning)

Azure in Action》,作者 Chris Hay 和 Brian H. Prince(Manning)

Google Cloud Platform in Action》,作者 JJ Geewax(Manning)

这三本书分别介绍了如何使用亚马逊云服务、微软 Azure 和谷歌云平台。当你学习部署机器学习模型时,你会需要一个托管它们的地方,而这三个云服务提供商是主要的选择。你可以选择对你最有用的平台,然后使用相应的书籍来学习基础知识。

艰难对话:如何讨论最重要的事情》,作者 Douglas Stone 等(Penguin Publishing)

沟通总是棘手的,但当话题激烈或人们投入很深时,就更加困难。这本书主要关于进行人们通常避免的对话。这本书为数据科学家提供了一套很好的技能,因为通常,数据科学家必须向他们合作的人提供不满意的结果。

《达成一致:不妥协的谈判》,由罗杰·费希尔、威廉·L·尤里和布鲁斯·帕顿(企鹅出版社)著

成为数据科学家需要大量的谈判,从说服团队给你数据访问权到敦促高管注意你的发现。在这些时刻能够成功地说服和谈判可能比任何技术技能都对你的成功更重要。“达成一致”是学习如何与利益相关者谈判并获得你想要的结果的绝佳资源。

《软件需求》,第三版,由卡尔·威格尔斯和乔伊·贝蒂(微软出版社)著

以一种业务可以理解的方式定义项目所需的内容是一项困难的任务。这本备受推崇的书籍涵盖了如何在项目过程中创建和管理需求。虽然需求收集不是数据科学中最光彩夺目的部分,但它可以决定项目的成败。

博客

《生产中的 R》由杰克琳·诺利斯和希瑟·诺利斯著

mng.bz/YrAA

这个三部分系列涵盖了使用 plumber 包在 R 中创建 API,将其作为 Docker 容器部署,然后使其企业化。提供的开源 R Docker 容器正在 T-Mobile 使用。

“给新和初级数据科学家的建议:我会几年前告诉自己什么”,由罗伯特·张著

mng.bz/zlyX

在这篇受欢迎的文章中,我们的第一章访谈者罗伯特·张,概述了他在成为 Airbnb 高级数据科学家旅程中学习的六个核心原则。这些重要的见解可能需要你花费数年时间去学习,所以请走捷径,现在就开始应用它们。

“数据科学基础:了解你的数据。真的,真的了解它”,由兰迪·奥著

mng.bz/07Pl

兰迪·奥,我们的第二章访谈者,给每个新数据人员提供以下建议:“了解你的数据,它的来源,它包含的内容,它的含义。一切从这里开始。”在这篇文章中,他概述了如何了解你的数据,从数据布局开始,到了解正在做出的收集决策。

“作为数据科学家如何与利益相关者合作:当我开始时我会告诉自己什么”,由山姆·巴罗斯著

mng.bz/KEPZ

我们在第十二章(“将请求转化为对话”)的边栏中分享了山姆关于作为数据科学家与利益相关者高效工作的七个技巧中的第一个,但其他六个也值得一读。

第四部分:在数据科学角色中成长

本书最后一部分是在你适应数据科学职位后可以使用的材料;它全部关于接下来会发生什么。这部分的主题最终会影响每一位数据科学家,但并不经常被讨论。很容易认为,如果你有一个稳定的数据科学工作,你就成功了,但你总有更多东西要学习。最后一部分的目标是提供材料,帮助你从初级数据科学家成长为高级数据科学家,并继续前进。

第十三章 讲述了如何处理失败的数据科学项目。这个话题对于经验丰富的数据科学家来说至关重要,因为随着你的职业生涯发展,你肯定会遇到失败。第十四章 讲述了如何加入数据科学社区,从撰写博客文章到参加会议。尽管这不是数据科学家的必要要求,但参与社区活动对于建立人脉和获得未来工作机会可以带来巨大的好处。第十五章 讨论了以最佳方式离开数据科学职位这一棘手任务。作为本书的最后一章,第十六章 讨论了高级数据科学家之后的一些主要职业道路,例如成为经理或技术负责人。

第十三章:当你的数据科学项目失败时

本章涵盖的内容

  • 为什么数据科学项目往往会失败

  • 当你的项目失败时你可以做什么

  • 如何处理失败的负面情绪

大多数数据科学项目都是高风险的冒险。你试图预测别人从未预测过的事情,优化别人从未优化过的事情,或者理解别人从未看过的数据。无论你在做什么,你都是第一个做的人;这项工作几乎总是探索性的。因为数据科学家一直在做新的事情,你不可避免地会遇到一个发现你所希望的事情根本不可能的点。我们都必须面对我们的想法没有成功。失败是心碎和痛苦的;你想要停止思考数据科学,梦想着完全离开这个领域。

以一个公司为例,该公司正在构建一个机器学习模型,以在网站上推荐产品。可能的事件进程始于一系列会议,数据科学团队说服高管这个项目是个好主意。团队相信,通过使用关于客户及其交易的信息,他们可以预测客户接下来想买什么。高管们接受了这个想法,并批准了项目。许多其他公司都有这些模型,看起来很简单,所以项目应该会成功。

不幸的是,一旦团队开始工作,现实就会显现。也许他们会发现,由于公司最近更换了系统,交易数据仅限于过去几个月。或者也许团队运行了一个实验,发现看到推荐引擎的人并没有比没有看到的人购买更多东西。这些问题逐渐积累;最终,团队会因沮丧而放弃项目。

在本章中,我们将项目未能实现其目标定义为失败。在分析的情况下,项目可能会失败,因为它没有帮助利益相关者回答业务问题。对于生产机器学习问题,项目可能会失败,因为它没有被部署或者部署后不起作用。项目可以通过许多方式失败。

数据科学家往往不谈论项目失败,尽管这种情况极其常见。当项目失败时,数据科学家可能会感到脆弱。如果你的项目失败了,你可能会想:“如果我是更好的数据科学家,这种情况就不会发生了。”很少有人愿意分享质疑自己能力的经历。

从本质上讲,数据科学是研究和开发。每天,数据科学家都在分析以前从未分析过的数据,寻找可能存在也可能不存在的趋势。数据科学家试图在可能没有信号的数据上建立机器学习模型。这些任务不可能总是成功,因为新趋势和信号在任何领域都很少被发现。然而,在软件工程这样的领域,通常可以完成任务(尽管可能需要比计划更多的时间和资源)。

理解数据科学项目失败的原因以及失败时应该做什么很重要。你对失败项目的理解越深入,你就能避免更多的未来失败。通过调查哪些部分的项目是成功的,失败的项目也可以让你洞察到哪些部分会成功。你可能只需稍作努力,就能将一个失败的项目调整为组织内可能有用的东西。

在本章中,我们讨论了三个主题:为什么数据科学项目会失败,如何考虑项目风险,以及项目失败时应该做什么。我们讨论了大多数项目失败的主要原因,如何处理项目,以及如何处理你可能感受到的情绪。

13.1. 为什么数据科学项目会失败

数据科学项目似乎因为无数的原因而失败。从预算到技术,以及那些完成时间远超预期的任务,失败的原因有很多。最终,这些多种类型的失败可以归结为几个核心主题。

13.1.1. 数据不是你想要的数据

在开始项目之前,你无法查看每个可能的数据来源。根据你对公司的了解,必须基于已知信息做出关于可用性的明智假设。当项目开始时,你通常会发现自己许多假设都是不成立的。也许数据不存在,没有以有用的格式存储,或者没有存储在你能够访问的地方。例如,如果你正在分析一个客户的年龄如何影响他们对忠诚度计划的使用,你可能会发现客户在加入计划时从未被询问过他们的年龄。这种失败可能会迅速结束一个项目。

示例失败:忠诚度计划状态分析

一家大型连锁餐厅市场部门的总监想要了解随着客户在公司忠诚度计划中的等级提升,他们的消费是否会有所不同。该计划有银、金和白金三个等级,总监想知道一个达到白金等级的人,在他们仅仅是银等级时是否以同样的方式购买。

数据科学团队同意调查这个请求,因为这个任务应该相当直接,而且他们之前从未处理过忠诚度数据。他们震惊地发现,过时的忠诚度计划数据库没有跟踪历史计划等级——只记录客户现在的等级。如果一个客户目前处于白金等级,就无法知道他们以前是银等级还是金等级。因此,分析变得不可能进行。

数据科学团队建议调整系统,但改变忠诚度计划数据库架构需要数百万美元,而且公司对此需求很小,因此没有进行任何更改,分析想法被放弃。

因为在你能做任何事情之前都需要数据,所以这些类型的问题是首先出现的主要问题。遇到这类问题时,常见的反应是内部协商,你试图通过数据中的漏洞来设计解决方案。你可能会说:“好吧,我们没有我们想要的十年数据,但也许一年的数据对模型来说足够了”并寄希望于最好的结果。有时,这种方法可能有效,但替代方案并不总是足够使项目可行。

当你提出一个项目时,你并不总是能访问到数据,甚至可能连对它的全面理解都没有(在咨询行业中,你只有在项目工作被销售后才能获取数据,这是一个特殊的问题)。此外,数据可能存在,但有一个关键的缺陷使其变得无用。数据可能存在于数据库表中,但客户 ID 可能已损坏,无法使用。数据集可能存在许多问题,因此在项目开始前检查所有这些问题都极其困难。因此,数据科学项目通常连启动阶段都难以通过。

你能越快获取数据并对其进行探索,就能越快地减轻数据不足的风险。避免这种错误的最佳情况是在开始项目之前获取数据样本。如果这不可行,那么次佳情况是在项目时间表中考虑到数据可能不佳的可能性。通过在项目早期设置一个“进行/不进行”的步骤,让利益相关者同意重新评估项目可行性,那么利益相关者对数据可能不佳感到惊讶的可能性就会降低。

如果你发现自己正苦于缺乏优质数据,你的选择有限。你可以尝试寻找替代数据源来替代,例如。也许你没有关于哪些产品被购买的数据,但你确实知道生产了多少产品,你可以用这个数据来代替。问题通常在于这些替代品与原始数据差异足够大,以至于会导致分析中出现真正的问题。

当你找不到可行的替代品时,有时你所能做的就是启动一个独立的项目来开始收集更好的数据。向网站和应用程序添加仪器和遥测,创建数据库来存储数据而不是将其丢弃,以及执行其他任务,可以帮助团队在未来收集到更好的数据后承担这项任务。

13.1.2. 数据没有信号

假设一个赌徒雇佣了一名数据科学家,希望利用统计学来赢得骰子游戏。赌徒掷一个六面的骰子 10,000 次并记录下结果;然后他支付数据科学家创建一个模型,该模型可以预测下一次掷骰子的结果。尽管数据科学家拥有大量数据,但无法预测下一次掷出的面,除非假设骰子是公平的(每个面有 1/6 的概率)。尽管数据科学家拥有大量数据,但其中没有信号表明下一次掷出的面。

这种数据中没有信号的问题在数据科学中非常普遍。假设你正在运营一个电子商务网站,并希望创建一个模型来预测哪些客户会根据他们的浏览器、设备和操作系统订购产品。在开始项目之前,你无法知道这些数据点是否真的可以用来预测客户是否会订购,或者数据是否缺乏信号,就像掷骰子数据那样。创建机器学习模型进行预测的行为是在测试数据,看它内部是否有信号,而且很可能没有信号。实际上,在许多情况下,有信号比没有信号更令人惊讶。

示例失败:检测包含销售数据的网站上的错误

一个假设的电子商务公司有一个问题:网站不断出现错误和漏洞。更糟糕的是,错误并不总是被 DevOps 或软件工程团队发现。有一次,错误是由市场营销团队发现的,他们注意到每日收入过低。当市场营销团队而不是 DevOps 或工程团队发现错误时,那是一个糟糕的情况。

数据科学团队着手在销售数据上使用统计质量控制技术,以便在收入如此低以至于网站上肯定存在错误时发出警报。他们有一份检测到错误的日期列表和历史上的收入数据。使用销售数据来预测错误似乎很简单。

不幸的是,收入每天可能变化的原因数量使得检测错误几乎不可能。收入可能因为星期几、一年中的哪个时期、市场营销的促销活动、全球事件或其他无数其他原因而降低。尽管市场营销曾经能够看到错误,但这个事实并不具有普遍性,因为数据中没有关于它的信号。

不幸的是,数据中没有信号可能会导致项目失败。如果一个项目是围绕在数据中寻找关系并据此做出预测来构建的,而那里没有关系,那么预测就无法进行。分析可能不会发现任何新的或有趣的东西,或者机器学习模型可能无法产生比随机机会更好的结果。

如果你似乎无法在噪声中找到信号,你有几种可能的出路:

  • 重新定义问题。 你可以尝试重新定义问题,看看是否可以找到不同的信号。假设你有一系列文章,你正在尝试预测与用户最相关的文章。你可以将问题定义为一个分类问题,试图分类一组文章中哪一篇文章是最相关的。

  • 更换数据源。 如果似乎没有什么能从数据中拉出信号,你可以尝试更换数据源。与之前没有好数据的失败点一样,向问题中添加新的数据源有时会创造出意外的信号。不幸的是,你通常从最有可能是有用的数据集开始,所以这种策略能救你的机会相当有限。

对于陷入这种困境的数据科学家来说,通常的做法是尝试使用更强大的模型来寻找信号。如果一个逻辑回归无法做出有意义的预测,他们就会尝试随机森林模型。如果一个随机森林模型不起作用,他们就会尝试神经网络。每种方法最终都会更加耗时和复杂。虽然这些方法对于获得更准确的预测可能是有用的,但它们不能从无中生有。

最常见的情况是,如果最简单的方法都无法检测到任何信号,那么更复杂的方法也同样无法做到。因此,最好是从简单的建模方法开始,以验证项目的可行性,然后再转向更复杂且耗时的方法,而不是一开始就使用复杂的方法然后逐渐简化。不要浪费几个月的时间构建越来越复杂的模型,希望下一个模型可能就是能拯救项目的那个。

13.1.3. 客户最终并不需要它

无论模型或分析有多准确,重要的是它能为利益相关者提供价值。一项分析可能对数据科学家来说非常有趣,但对请求它的商业人士来说则不然。机器学习模型可以做出高度准确的预测,但如果该模型没有被部署和使用,它就不会提供太多价值。许多数据科学项目在数据科学工作完成后也失败了。

最终,数据科学分析、模型或仪表板都是一个产品。设计和创建产品是一种许多人都投入了数百年集体思考的实践。尽管如此,每年仍有数十亿美元被用于创建人们最终并不需要的产品。从新可口可乐到谷歌眼镜,一些高调的产品并没有赢得客户,一些低调的产品也没有。正如微软和诺基亚可以投入大量精力创建 Windows Phone,但客户最终并没有购买,数据科学家也可以创建出没有人使用的产品。

示例失败:销售和营销活动价值预测

一家零售公司启动了一个项目,旨在创建一个机器学习模型来预测未来广告活动将带来的投资回报率(ROI)。数据科学团队在看到市场和销售团队在制作预测整体价值的 Excel 电子表格方面遇到的困难后,决定构建这个模型。假设数据科学团队通过在客户层面使用机器学习和建模,创建了一个基于 Python 的模型,该模型可以更准确地预测活动的 ROI。

后来,数据科学团队发现,市场和销售团队创建带有 ROI 预测的 Excel 电子表格的唯一原因是为了让财务部门批准。财务团队只愿意与 Excel 合作;Python 对他们来说太过复杂。因此,这个工具没有被使用,因为数据科学团队没有考虑到客户的需求。需求不是最准确的预测,而是能够说服财务团队认为活动在财务上是可行的预测。

关于创建客户喜欢的产品的通用指导原则是花大量时间与客户交谈和合作。你越了解他们的需求、愿望和问题,你就越有可能制作出他们想要的产品。市场研究和用户体验研究是理解客户的不同方式,市场研究通过调查和焦点小组,用户体验研究通过用户故事、角色和测试。

尽管人们已经做了很多好的思考,但数据科学作为一个领域,由于没有理解客户需求而特别容易失败。无论什么原因,数据科学家在查看表格和图表时比他们走出去与人交谈要舒服得多。许多数据科学项目失败,因为数据科学家没有投入足够的精力与客户和利益相关者交谈,以了解他们真正的问题。相反,数据科学家跳入构建有趣的模型和探索数据。事实上,这种情况是我们选择将第十二章用于管理利益相关者的主要原因之一。我们希望你已经通过阅读那一章更好地理解了如何思考利益相关者关系,但如果你跳过了它,也许你应该去看看。

如果你发现自己处于产品似乎无法得到市场认可的情况,你能做的最好的事情就是与你的客户交谈。与客户交谈永远不会太晚。无论你的客户是商业利益相关者还是你公司的客户,沟通和理解都是有益的。如果你的产品对他们没有用处,他们能否告诉你为什么?你能否通过向产品添加新功能来潜在地解决问题?也许你可以通过将其与不同的数据集相结合来改变分析。也许你可以通过调整输出格式或运行速度来改进机器学习模型。除非你与人交谈,否则你永远不会知道。

这也涉及到最小可行产品(MVP)的概念,它在软件开发中被广泛使用。这个想法是,你越快能让产品工作并推向市场,你就越快能得到关于什么有效或无效的反馈,然后在此基础上进行迭代。在数据科学中,你越快让任何模型工作或完成任何分析,你就越快能向客户或利益相关者展示并得到他们的反馈。在模型上花费数月进行迭代会阻止你得到这种反馈。

在你的工作和设计构建过程中更好地理解客户,你就越不可能因为客户不想购买产品而失败。如果你最终以这种方式失败,最好的前进方式是开始沟通,试图找到解决方案。

13.2. 管理风险

有些项目比其他项目风险更大。使用团队之前已经处理过的数据,并以标准方式制作标准仪表板,成功的可能性相当高。在公司找到新的数据集,围绕它构建一个实时运行的机器学习模型,并以令人愉悦的用户界面向客户展示,这是一个风险较高的项目。作为数据科学家,你可以在任何时刻控制你承担的风险量。

风险的一个重要考虑因素是你在同一时间正在处理多少个项目。如果你正在处理一个风险较高的单一项目,并且该项目失败,从职业角度来看处理这个失败可能会非常困难。然而,如果你能够同时处理多个项目,你将能够降低风险。如果其中一个项目失败,你还有其他项目可以依靠。如果一个项目是一个极其复杂的机器学习模型,成功的可能性有限,你可以在同时进行更简单的仪表板和报告工作;那么,如果机器学习项目失败,你的利益相关者可能仍然会对报告感到满意。

拥有多个项目从利用角度来说也可能是有益的。数据科学项目有很多起止,从等待数据到等待利益相关者响应,甚至等待模型拟合。如果你因为某种原因在某一个项目上遇到了瓶颈,你将有机会在其他项目上取得进展。这甚至可以帮助你克服心理障碍;当你遇到瓶颈时,分散注意力可以是一种很好的刷新思维的方法。

另一种降低风险的方法是在项目中嵌入早期停止点。理想情况下,一个看起来可能失败的项目应该设计成如果到了某个点还没有成功,就会停止。例如,在一个数据是否存在尚不清楚的项目中,项目范围可以设定为如果经过一个月的搜索,找不到好的数据,则认为该项目不可行并取消。如果提前提出可能不会成功的预期,结束项目就不会那么令人惊讶,也不会那么昂贵。

从某种意义上说,项目提前结束也体现了数据科学是研究和开发的事实。因为数据科学充满了许多未知数,所以有计划地考虑在探索性工作中学习到更多,想法可能不会实现,这是有道理的。

虽然在项目组合中降低风险是值得的,但你不想完全去除它。数据科学就是关于承担风险的:几乎任何足够有趣的项目都会有大量的不确定性和未知因素。这些风险未知因素可能是因为没有人使用过新的数据集,公司中没有人在之前尝试过某种方法,或者利益相关者来自从未使用过数据科学的公司的某个部分。公司中许多有价值的数据科学贡献都来自尝试新事物的人,如果你作为一个数据科学家试图避免可能失败的项目,你也在避免可能的大成功。

尽管本章涵盖了数据科学项目失败的各种方式,但数据科学团队最终可能会因为承担的风险不足而集体失败。考虑一个提出了一些新项目想法和报告的数据科学团队,并发现它们是成功的,然后只通过更新和刷新以前的工作而停滞不前。尽管那些项目可能没有失败,因为它们正在向公司交付工作,但那个团队会错过数据科学的新领域。

13.3. 当你的项目失败时你能做什么

如果你的数据科学项目失败了,这并不意味着你投入的所有时间都是浪费的。在第 13.2 节中,我们概述了一些你可以采取的潜在行动来扭转项目。但即使项目没有成功的可能性,你仍然可以采取一些步骤来最大限度地利用剩余的部分。在接下来的章节中,我们将为你提供一些处理项目失败时情绪的策略。

13.3.1. 如何处理项目

尽管项目可能失败了,但从中仍然可以学到很多知识和技术。以下步骤可以帮助你保留许多这些收益。

记录经验教训

处理失败项目的第一步是评估你可以从中学习到什么。你需要向自己和团队提出一些重要的问题。

  • 为什么失败了? 这个问题看起来几乎很明显,然而,通常情况下,直到你退后一步,从更大的角度来看待问题,你才能理解一个项目为什么会失败。通过与所有参与项目的相关人员讨论,你可以更好地诊断出了什么问题。公司 Etsy 流行了“无责后事”的概念——在某个项目失败后,团队可以讨论问题而不指责任何人的讨论。通过将问题视为团队工作方式中的缺陷(而不是个人的错误)造成的,你更有可能找到解决方案。没有惩罚的恐惧,人们会更愿意公开谈论所发生的事情。

  • 如何防止失败? 当你理解导致失败的因素时,你可以了解如何避免未来类似的情况。例如,如果项目所需的数据不够好,那么通过更长的探索阶段可能就能防止失败。这些类型的教训有助于你的团队成长和成熟。

  • 你从数据和问题中学到了什么? 即使项目失败了,你通常也会学到一些对未来有价值的东西。也许数据中没有信号,但为了达到那个点,你仍然需要合并一些新的数据集;现在你可以在其他项目中更容易地执行这些相同的合并。这些问题可以帮助你思考可以从项目中挽救的可能事物,并帮助你提出替代项目想法。

通过在会议中让团队讨论这些问题,并将结果保存在共享位置,你将能从失败的项目中获得更多价值。

考虑调整项目

尽管项目本身可能失败了,但可能存在将其转变为有用事物的途径。例如,如果你试图建立一个检测公司收入异常的工具,并且失败了,你可能仍然能够使用相同的模型作为相当不错的预测工具。整个公司都是基于将一个失败的想法重新用于成功的事物而建立的。

调整产品需要与利益相关者和客户进行大量沟通。你实际上回到了产品设计过程的开始,试图弄清楚你的工作的良好用途。通过与利益相关者和客户交谈,你可以了解他们的问题,并看看你的工作是否对任何新事物有用。

结束项目(切断并逃跑)

如果你无法调整项目,最好的办法就是结束它。通过明确取消项目,你让自己和团队能够转移到新的、更有希望的工作上。数据科学家永远想要继续工作在一个项目上,希望有一天它会成功,这是极其容易的。(那里有成千上万的算法;最终总会有一个起作用,对吧?)但如果你陷入试图让某件事起作用的困境,你最终会浪费不必要的努力。此外,一直做同样的事情直到永远也不是一件有趣的事情!虽然切断项目很困难,因为它需要你承认它不再值得努力,但从长远来看,这是值得的。

与利益相关者沟通

数据科学家应该在数据科学项目的整个过程中与利益相关者进行沟通(参见第十二章),但如果项目失败,他们应该增加沟通的频率。尽管隐藏风险和问题以避免让利益相关者失望可能感觉更舒服,但遇到利益相关者惊讶地发现项目已经失败的情况可能会对职业生涯造成灾难。通过让利益相关者知道问题正在发生或项目无法继续前进,你是在向他们展示透明度并赢得信任。在帮助他们了解项目状态后,你们可以一起决定下一步行动。

如果你不确定如何与利益相关者沟通问题,你的经理应该是一个很好的资源。他们可以提出传达信息的方法,或者可能亲自带头传达。不同的人和组织喜欢以不同的方式传达信息,从用绿色/黄色/红色编码列出问题的电子表格到咖啡时间的对话。你的经理或团队中的其他人应该了解什么最有效。

对于你作为一个数据科学家来说,在传达项目失败时感到焦虑是很常见的;你感到非常情绪脆弱,并认为你处于弱势地位。尽管有时消息被接收得不好,但其他人通常愿意帮助你一起解决问题并决定下一步行动。在传达项目失败后,你可能会感到解脱,而不是痛苦。

13.3.2. 处理负面情绪

先暂时忘记项目和公司:你还需要考虑自己的福祉。项目失败在情感上是非常困难的!这是最糟糕的!如果不小心,一个失败的项目可能会真正地消耗你,并在项目结束后长时间困扰你。通过深思熟虑你对失败的反应以及你构建的故事,你可以为自己设定更长期的成功。

项目失败后的自然内心独白是:“如果我只是成为一个更好的数据科学家,项目就不会失败了。”这种想法是谬误:大多数数据科学项目失败是因为数据科学本质上基于尝试那些永远不可能成功的事情。大多数伟大的数据科学家都参与过,甚至领导过没有成功的项目。通过将失败项目的责任归咎于自己以及可能的数据科学不足,你是在将整个项目的重量都放在自己身上。但正如本章前面讨论的,数据科学项目失败有许多原因,而且很少是因为数据科学家的能力问题。担心项目失败是因为你,这种焦虑只是你心中的想法,并不是现实的反映。

如果你允许自己失败,并接受失败不是弱点的标志,你将更有能力从经验中学习。对自己和自己的技能有信心,会使你更容易思考失败及其原因,因为这样不会那么痛苦。话虽如此,自信和接受失败的能力需要时间、耐心和实践来获得,所以如果你发现自己很难建立信心,请不要感到惊讶。这是正常的!

这里关键的一点是,当项目失败时,你能为自己做的最好的事情就是理解失败不是对你技能的反映。项目失败的原因超出了你的控制范围,你将能够从失败中走出来。你越能将这些事情放在心上,失败就越容易接受。

我们将以数据科学的隐喻来结束这一章。对于有抱负的初级数据科学家来说,将专业数据科学家比作建筑师是很常见的。一个新手建筑师可能会设计简单的住宅,而一个经验丰富的建筑师可以建造摩天大楼,但如果其中任何一个建筑师的建筑倒塌,那将是职业生涯的终结。同样,看待数据科学家的一种方式是,他们构建越来越复杂的模型,但如果其中一个失败,他们的职业生涯就会受到威胁。在你阅读这一章之后,我们希望你能认识到这并不是专业数据科学家的一个准确模型

一个更好的隐喻是,数据科学家就像一个寻宝者(图 13.1)。寻宝者出发寻找丢失的贵重物品,如果他们幸运的话,他们可能会找到一些!新手寻宝者可能会寻找标准商品,但经验丰富的猎人会找到最传奇的宝藏。数据科学家更像是一个寻宝者;他们寻找成功的模型,偶尔,他们的模型和分析是有效的!尽管资深数据科学家可能会处理更复杂或棘手的项目,但每个人都会不断失败,而这只是工作的一部分。

图 13.1. 数据科学的两种隐喻:建筑和寻宝

图片

13.4. 与 Pluralsight 数据科学和机器学习负责人 Michelle Keim 的访谈

Michelle Keim 领导着 Pluralsight 的数据科学和机器学习团队,Pluralsight 是一个企业技术学习平台,其使命是普及技术技能。她在波音、T-Mobile 和 Bridgepoint Education 等公司担任过数据科学团队的成长和领导工作,对数据科学项目为什么会失败以及如何处理失败有着深刻的理解。

你在职业生涯中什么时候经历过失败?

我被拉去领导一个项目,目的是构建一套客户保留模型。我以为我已经与所有相关利益相关者交谈过,并理解了业务需求、团队的工作方式以及为什么这些模型是必要的。我们构建了模型,但很快发现没有人对它们感兴趣。问题是我们没有与实际使用输出的客户服务代表坐下来讨论;我之前只和领导层交谈过。我们提供了一份关于客户是否会离开的概率列表,但客户服务代表不知道如何处理这些信息。他们需要知道当客户面临离开的风险时,他们应该做什么,这与我们解决的问题非常不同。对我来说,最大的教训是,你真的需要深入到细节中,理解问题的用例。使用输出的人正在解决什么问题?

在项目开始之前,你能看到哪些红旗?

我认为这部分是来自经验的本能。你看到的事情越多,你从失败中学习的机会越多,你就越知道要寻找哪些红旗。关键是保持你的周期短,这样你就有机会早点看到它们;你需要以频繁的速度引入反馈。

数据科学家往往会对他们的工作感到兴奋,却忘记了抬头看看。在一天结束时,不仅要理解你想要达到的目标,还要了解在不同阶段成功是什么样子,这非常重要。这样,你可以将你的工作与之对照,获取反馈,并在必要时进行转变。检查点让你能迅速知道你是否遗漏或误解了某些内容,并纠正方向,而不是在最后学习并不得不回溯。

公司之间处理失败的方式有何不同?

这与公司的文化紧密相关。我建议求职者在寻找工作时,尽量了解公司是否有学习和持续反馈的文化。当你面试时,你有机会问面试官:你自己正在学习什么?这个机会是如何出现的?如果我要接受这个角色,我将如何获得反馈?这是否需要你主动寻求,还是已经规范化了?了解员工如何回应这些问题是非常有启发性的。

当你已经在一家公司工作时,你可以尝试回答一些问题,以了解是否存在健康的文化。项目完成后,是否有机会暂停并回顾?你是否在项目结束时尝试进行回顾性学习?你是否看到领导层在公司的各个层面使用开放沟通并承担责任?当强大的文化不存在时,你也会感受到恐惧。你会开始看到更多以自我为中心而不是以使命为中心的行为,这种不健康的行为会让你感到冲击。

你如何判断你参与的项目是否正在失败?

如果你没有从一开始就定义什么是成功,你就无法知道你是否在失败。你试图达到的目标是什么,通往成功的道路上的检查点是什么样的?如果你不知道这些,你只是在猜测项目是否进展顺利。为了设定成功,你必须确保你已经与利益相关者合作,对这些问题有一个明确的答案。你需要知道你为什么要做这个项目,你试图解决什么问题,否则你将不知道你交付的价值,也不知道你的方法是否正确。数据科学家角色的一部分是带来你的专业知识,帮助界定问题和定义成功指标。

你如何克服对失败的恐惧?

你需要记住,你实际上希望有一些失败;如果一切都很完美,你就永远学不到任何东西。你将如何成长?那些经历是必要的,因为没有替代品可以用来处理失败并接受它。确实,失败可能会很痛苦,你可能会问“哦,天哪,我该怎么办?”但当你看到自己反弹回来,从中学习,并将其转化为下一件事时,你获得的韧性将滚雪球般地转化为自信。如果你知道要期待某些事情出错,那么下次就会更容易。而且,如果你确保你经常得到反馈,你将能够在它们变得破坏性之前捕捉到你的失败。没有人期望完美。人们期望的是,你要诚实地承认你所不知道的,并通过提问和寻找反馈来不断学习。

摘要

  • 数据科学项目通常因为数据不足、信号缺失或不符合客户需求而失败。

  • 项目失败后,列出失败原因并考虑转型或结束项目。

  • 项目失败并不反映数据科学家的质量。

  • 数据科学家并不完全对项目失败负责。

第十四章 加入数据科学社区

图片

本章涵盖

  • 扩展你的项目集和博客文章

  • 寻找并充分利用会议

  • 在聚会或会议上发表出色的数据科学演讲

  • 贡献开源项目

当你在数据科学工作中时,做得好可能会感觉是提升职业的唯一方式。但还有许多其他方式可以提升你的技能,特别是通过参与数据科学社区。在工作之外花时间进行活动,如发表演讲或贡献开源项目,对你的职业生涯可能非常有帮助。

在本章中,我们介绍了四种你可以加入社区的方式:扩大你的投资组合、参加会议、发表演讲以及为开源项目做贡献。我们提出了四种活动,以便你可以选择你最感兴趣的活动;很少有人有时间和精力做所有这些。尽管这些事情会占用你正常工作日之外的时间,但这并不意味着它们应该占据你的生活。在本章中,我们提供了关于如何有效地利用时间的建议,例如重用演讲、将博客文章转化为演讲,以及撰写关于你第一次开源贡献的博客文章。

虽然这些活动可能很有帮助并且极具回报,但你不必做这些事情才能拥有充实的数据科学职业生涯。许多数据科学家,包括那些在顶级公司担任高级职位的人,都不做这些事情。但我们都(作者)认为,成为社区的一部分在我们职业生涯的许多时候都帮助我们,包括获得工作机会和晋升。公开工作是你在其中投入的时间可以加倍回报的领域。

我们看到加入更广泛的数据科学社区有四个主要好处(图 14.1):

  • 获得技能—— 通过参与社区,你可以学习到如果你仅仅依赖你的日常工作,就不会接触到的新的技术。创建开源项目是直接发展你的技术技能的活动,因为你将编写供他人使用的代码,并在一个技术项目上进行协作。但每个活动都有其益处。写博客是一个很好的方式,可以让你意识到自己知识的不足并获得反馈。发表演讲可以帮助你磨练你的演讲技巧,这可能会帮助你说服利益相关者你需要资金,或者他们应该支持你的项目。在会议上听到正确的演讲可能会解开一个重要项目,并为你节省数小时的工作时间。

  • 扩大你的网络—— 与社区建立联系是找到一群理解你困境的支持性同伴的绝佳方式。即使你在公司里有同伴,你也可能缺乏某个特定领域的专业知识,而社区成员的建议可以填补这一空白。你还可以了解在不同公司工作数据科学的情况。

  • 获得机会—— 你在社区中的参与度越高,你被要求帮助的项目、发表演讲或参与播客的机会就越多。你甚至可能因为有人通过你的在线工作找到你,或者在会议上遇到你而得到下一份工作。这是一个巨大的正反馈循环:演讲导致更多的演讲,项目导致更多的项目。这些机会可以提供信息、有趣且令人愉快。

  • 回馈—— 这对你个人的直接好处较少,但对社区的福祉更为重要。当你向导师询问如何回报他们的支持时,许多人会说:“将爱传递下去。帮助他人,并成为他们的导师。”成为社区的一部分可以使数据科学工作变得更加充实。通过完成帮助他人的任务,你会感到有价值,就像你不仅仅是为了工资而工作一样。

图 14.1. 本章中介绍的一些加入社区的方法

14.1. 扩展你的作品集

现在你有了工作,并不意味着你可以忘记你为了得到这份工作而培养的所有优秀习惯。在第四章中,你学习了如何撰写博客文章和建立作品集。有工作并不意味着继续维护和扩展它们没有价值。在博客或副项目中工作不必成为负担;在本章中,我们讨论了新的主题和回收利用你的工作以从同一努力中获得多重用途的方法。

14.1.1. 更多博客文章

我们希望你在作为数据科学家的工作中学习到很多新东西。你如何在包含 30 亿行数据的表中优化 SQL 查询?你如何与营销人员有效地合作?有哪些策略可以开始导航数百张表格?

如果你在一个雇佣其他数据科学家的公司工作,你将直接从他们那里学习,无论是通过阅读他们的代码还是结对编程。在这个过程中做笔记是个好主意,因为你将获得大量新信息,而且你不太可能在几个月内全部记住。当你这样做的时候,为什么不和全班同学(在这种情况下,整个互联网)分享你的笔记呢?互联网上的陌生人并不是唯一会从中受益的人;撰写博客文章是巩固你学习的一个很好的方式。你甚至可能会在多年后参考你之前写的早期教程。

如果你遵循了我们在第四章中的建议,你应该已经有一个运行中的博客,上面有几篇文章。如果你没有,但你对开始一个博客感兴趣,我们建议你回到那一章并遵循那里的步骤。我们那里写的一切仍然适用;当你寻找第一份数据科学工作时使博客文章有效的相同策略,在你进入该领域工作后仍然有效。唯一的重大变化是,如果你在撰写关于你在工作中完成的项目(而不是你学到的通用编程、统计或人员管理技能)的文章时,你需要确保你没有分享任何机密或专有信息,并且遵循你公司对员工个人博客的任何其他规则(例如,首先通过公关部门发布帖子)。

如果你不想有自己的博客,看看你的公司是否有技术博客。即使过去的帖子都是围绕工程主题的,你也可以写一篇数据科学帖子。这可能需要一段时间才能获得批准,但走这条路的一个好处是,你可以在工作时间写下你的想法。即使你的公司没有公开的博客,它也应该有一些内部文档和培训。如果你发现你必须通过询问多个人或翻阅过时的说明来学习某些东西,你可以创建或更新一个带有清晰说明的资源,供未来的新员工使用。如果主题是会对公司外的人有帮助的(例如,不是专有内部工具或你的数据的描述),你以后可以将其变成博客文章或演讲。

14.1.2. 更多项目

数据科学项目(我们也在第四章中讨论过)是你选择或创建一个数据集,然后分析它以回答问题的项目。例如,你可以使用 Twitter API 来分析关于数据科学会议的用户推文。在某些情况下,一个项目甚至不需要是一个分析;也许你可以通过构建一个 Slack 机器人来展示你的工程技能,允许用户互相“打分”,并在你设置的数据库中跟踪总分。

项目可能比博客文章更难跟上。根据你的行业,你的公司可能愿意甚至鼓励你用概括的方式描述你的工作。即使不是这样,你也可以写一些非技术性的帖子,比如如何处理商业利益相关者或你在就业市场的经验。然而,很少有公司会公开分享他们的数据,所以即使你能分享你做的某个精彩分析的代码,也没有太大意义,因为你无法分享数据或结果。如果你想分享你做的分析,你必须作为一个副项目,在完全属于自己的时间里完成。

话虽如此,偶尔做一些副项目是好的。一方面,当你想要换到下一份工作时,公司可能会要求你提供一个你做过数据分析的例子。如果你在公司工作了几年,你不想展示你在训练营或 MOOC 注册期间做的项目,因为你想要展示你在作为数据科学家工作期间技能是如何发展的。然而,寻找主题和撰写良好分析的原则与第四章中相同。

好消息是,一个项目不需要花费太多时间。我们在第四章中采访的 David Robinson,每周都会进行一次屏幕录制,记录他对一个他之前从未见过的数据集进行分析(来自 Tidy Tuesday 项目github.com/rfordatascience/tidytuesday/)。这项分析花了他大约一个小时,因为他没有做任何准备,但当他将代码上传到 GitHub 时,它可以作为一个示例分析项目。现在,确实需要相当有经验的数据科学家才能如此快速地做出好的分析,但任何人都可以尝试为他们的分析设定时间限制,以帮助他们保持专注在分享结果(而不是在一个他们从未向任何人展示的项目上花费 14 个小时)。

14.2. 参加会议

有时候,成为社区的一部分意味着不得不离开家。大部分情况下,这意味着要参加会议,在那里,处于(或希望处于)相似行业或领域的人们聚集在一起讨论他们的工作。

会议通常是每年一次的活动,遍布全国乃至世界各地。数据科学领域有许多会议。Strata、rstudio::conf、PyData、EARL 和开放数据科学会议只是其中一些较大的会议,其中许多都有地区性的分支。你也许还会对与数据科学重叠的更广泛的技术会议感兴趣,例如 Write/Speak/Code、PyCon、Grace Hopper 和 SciPy。

会议通常持续两到四天,从早上早起到晚上都有安排,之后还有社交活动。它们可能是单轨(同一时间只进行一个演讲)或多轨,但它们都有多个演讲者。它们也可能非常昂贵——通常每天的票价在 300 到 700 美元之间。一些会议还提供半天到两天的研讨会,额外收费通常在每天 750 美元左右。

我们给出大致价格的一个原因是,有很多方式可以以低于全价的价格购买门票。如果你是某个代表性不足的群体的一员,寻找提供给 R-Ladies 或 PyLadies 等群体所有成员的奖学金或折扣代码。如果你在非营利组织或学术界工作,你也可能支付更少的费用,许多主要会议在提前购票时提供折扣。降低费用的另一个绝佳方式是发表演讲,因为会议通常会给你一张免费门票。最后,一些会议提供你可以申请的奖学金,这些奖学金可以覆盖你的门票费用,甚至可能覆盖你的全部费用,包括交通和住宿。

考虑到这种可能的高昂代价,你为什么要花时间和金钱(或者你雇主的钱)去参加,尤其是如果会议记录并将演讲放在网上?在这里,我们回到我们在本章开头讨论的主要好处之一:人脉。人脉可能有一个负面含义:有人四处走动,与房间里每个人都握手,希望遇到一个重要人物并从中获得一些东西。但最好的人脉是找到一群支持你的人。这种支持可能以非常具体的方式出现,比如有人把你介绍给你申请的公司里工作的人,或者无形中,比如终于进入一个房间里,大多数技术专家都是女性的感觉。

建立人脉最好是长期进行,所以即使你现在没有觉得需要帮助的事情,在你寻找新工作或开源项目的合作伙伴之前,打下这个基础也是极好的。

着装规范

对于第一次参加的人来说,一个常见的问题是该穿什么。一般来说,会议是休闲装。对于特定的会议,看看你能否在 Twitter 或会议网站上找到会议的照片。但有一点需要注意,演讲者可能比观众穿得更正式;并不是所有演讲者都穿商务休闲装就意味着观众也是如此。如果你真的很困惑,带一些可以居中的东西,比如休闲装或 Polo 衫和深色牛仔裤。会议很少极端到你需要穿西装或 T 恤短裤才能融入,通常人们的着装会有一定的范围,所以你不太可能成为另类!

在这么多会议可供选择的情况下,你如何确定哪些会议值得参加?会议各不相同,但以下是一些需要考虑的轴:

  • 学术方面— 一些会议,如 useR!、NeurIPS 和 JSM,在学术界或研究密集型行业工作中拥有大量参与者。在极端情况下,有些会议几乎所有的与会者都是研究生或教授。如果你在工业界,你可能不会发现很多演讲对你适用;尽管工业界的人可能在进行演讲,但这些演讲可能关于前沿的机器学习算法,只有在你是一家大型电子商务公司时才有用。

  • 规模— 会议的规模可以从 150 人到数万人不等。我们建议从小型到中型会议开始——200 到 1500 人之间。较小的规模意味着导航起来不那么令人畏惧,你更有可能多次遇到同一个人,从而建立更牢固的联系。

  • 招聘公司— 另一方面,你可能想去大型会议,因为你正在寻找工作。虽然你可以在任何会议上遇到招聘人员,但一些大型会议有招聘会,雇主会支付费用来设立展位并与潜在员工交谈。

  • 会议级别— 大多数会议通常是面向在该领域工作或学习的人。例如,如果你对 R 语言一无所知,你可能不会从 rstudio::conf 中得到太多收获,这是一个由开发 R 的主要交互式开发环境(IDE)的公司举办的会议。会议演讲通常针对一般知识的中级水平,但具体知识的预期水平有所不同。例如,rstudio::conf 可能会有一场介绍时间序列包的演讲。你需要了解一些 R 语言才能理解演讲内容,但演讲者不会期望你有很多使用时间序列的经验。或者,关于在线实验的会议演讲可能是对定性研究如何补充定量方法的介绍。

  • 多样性和包容性— 不幸的是,并非所有组织者都关心确保他们的会议对所有人都友好。如果你看到所有 45 位演讲者都是男性,你可以合理猜测参会者的群体可能看起来很相似。除了演讲者阵容,还要在网站上查看是否有行为准则。如果你需要某些便利设施,例如无障碍设施,可以在会议网站上查找电子邮件地址,并发送电子邮件询问。

  • 专业领域— 正如数据科学有许多专业领域一样,会议也是如此。无论你是在寻找特定的语言还是领域,可能都有一场适合你的会议。

当你决定你感兴趣的会议类型后,在决定参加之前先查找会议的评论。如果你认识的人中没有去过的人,可以在 Twitter 或 LinkedIn 上询问。还可以查看会议的日程安排,如果尚未公布,可以查看上一年的日程安排。如果有演讲的录音,可以观看几场。你想要确保你的投资是值得的。不幸的是,一些会议没有很多优秀的演讲者。

参加这些会议对你的职业生涯和雇主都有帮助,雇主可以让你代表他们学习有助于你更好地完成工作的东西。因此,你可能能够说服你的公司全额或部分支付会议费用。一些公司有正式的会议或培训预算,这很好,因为这笔钱是为你的目的预留的,但如果你想要超出这个预算,将很难让公司为你破例。

除了成本之外,大多数会议至少部分发生在工作日,所以你将不得不请假一两天。你不想这从你的假期中扣除,对吧?你需要向你的经理证明,花一天时间在会议上而不是做你正常的工作是有价值的。一些公司可能有关于你可以参加多少天会议的政策,这可能是有形的,也可能不是。在科技公司,至少参加一个会议是很正常的,但其他行业可能没有这样的系统。

如果你需要向你的经理争取参加会议,以下是一些你应该关注的益处:

  • 招聘—— 招聘数据科学家可能需要花费数千美元甚至数万美元。最大的问题之一是让优秀的候选人首先申请。像谷歌和亚马逊这样的大科技公司以及热门初创公司可能会有优秀的候选人排队等候,但大多数公司没有那样的知名度。如果你在会议上遇到人,你就可以让你的公司名字出去。如果你在演讲,这种宣传效果会放大很多,我们在第 14.3 节中会讨论这一点。

  • 知识—— 你的经理想知道你在会议之后能做什么,这是你之前做不到的。如果你能通过撰写文章(这也可以成为博客文章!)或演示文稿与团队分享这些知识,那就更好了。首先,查看会议日程,并向你的经理报告那些将立即适用于解决你问题的演讲。但请记住,会议还有走廊路线:在演示之外发生的非正式对话。你可能会在那里遇到解决你面临问题的那个人!与正确的人交谈五到十分钟,可能就能抵消你门票的费用。

如果你住在或靠近大城市,寻找那里的会议,这样你就不必支付旅行或住宿费用。总的来说,当你向公司要求资金时,最好的策略是展示你在会议上学到的知识将如何帮助你实现业务胜利或产生影响。

14.2.1. 应对社交焦虑

工程师和科学家是社交笨拙的内向者,这是一个陈词滥调,但大多数人都会在某个时候经历社交焦虑。即使是最自信的人,走进一个满是陌生人的房间也不会感到完全自在。如果你紧张到在会议上躲在角落里整场会议都在看手机,你应该怎么办?

幸运的是,参加会议的优势在于你有一些现成的话题可以谈论!一般来说,一个有效的策略是提问;人们喜欢谈论自己。你可以问他们为什么参加这个讲座,他们在 X 编程有多长时间,或者他们是否以前来过这个会议。记住,很多人都会感到尴尬,不仅仅是你自己。如果你感到紧张,一个尝试与人交谈的好时机是在讲座开始前的几分钟,当你坐在座位上时。坐在某人旁边,开始交谈。如果你的担忧变成了糟糕的对话,你知道对话只能持续几分钟,因为讲座即将开始!

当你身处一个有很多人的房间时,寻找那些站在类似吃豆人形状的人:一个带有开口的圆圈。走到开口处站立,并尝试移动以使更多人有地方加入。你不必一到场就自我介绍;你可以等待对话中的间隙,甚至在没有介绍的情况下加入对话,尤其是如果群体很大。

我们在第八章中讨论了冒名顶替综合症,这也是它可能出现的另一个领域。你可能会遇到一个超出你理解能力的讲座。要记住的最重要的事情是,你不应该感到自己像冒名顶替者。如果人们对待你好像你不值得他们花时间,或者如果你不知道一个术语而感到震惊,或者他们做出贬低性的评论,那都是他们的责任。一些其他会议会非常欢迎。许多人喜欢帮助他人,并记得自己作为新人的感受。如果你发现自己不喜欢某个会议,尽量不要让这次经历阻止你再次参加。

尽管我们在本章中介绍了一些与人相识的策略,但在会议期间安排个人时间是完全正常的。与陌生人社交数日可能会感到疲惫。认为在会议的每一刻都需要做些有成效的事情是一种常见的错误,无论是参加讲座还是建立人脉。但事实并非如此!不要因为在一节会议期间选择独自散步而不是参加讲座而感到内疚;如果你花时间充电,整体上你会从会议中获得更多。

14.3. 演讲

演讲可以为你提供很多成长的机会,并为你参加更多演讲和会议提供优势。你可能面临的一个挑战是争取足够的时间去参加会议以提升技能和拓展人脉,但演讲是代表公司(除了演讲带来的经济利益,这可以减轻雇主的压力)的一个很好的方式。虽然你可能觉得你需要成为一个行业专家、一个出色的演讲者或一个社交达人才能进行演讲,但实际上并非如此。对内向的人来说,演讲实际上是一个很好的策略。在你演讲之后,人们会过来向你表示赞扬、提出后续问题,或者只是自我介绍。让你的演讲成为对话的主题是关于会议主题讨论的一般优势的增强版。

这一节本身可能就是一本书,实际上,在第十三章–第十六章的资源部分,我们推荐了一本关于公共演讲的书。我们想强调的是,进行良好演讲的标准比你想象的要低。你在这里不是在做一个 TED 演讲或在一个大型会议上做主题演讲。这些人有大量的经验,并且可能聘请了演讲教练。我们相信,如果你想做一个好的演讲,你应该专注于两件事:娱乐听众和激励他们。如果你在演讲时人们不感兴趣,将很难向他们传授任何东西。此外,人们可以从 20 分钟、30 分钟甚至 60 分钟的演讲中获得有限的数量收获。但如果你能激发人们进一步学习的欲望,并为观众提供开始学习的工具,你将传递了很多价值。

14.3.1. 获得机会

你如何找到演讲的机会?最好的开始是寻找有提案征集(CFP)的会议。你可以提交你演讲的简要总结,称为摘要,会议组织者将从提交的摘要中选择演讲者。一些会议进行盲审,即他们选择摘要时不知道任何关于演讲者的情况,尽管其他会议要求了解更多关于你的信息。

当你在寻找演讲的会议时,应用与寻找参加的会议时相同的标准。如果你觉得参加一个有 10,000 人的会议听起来像是一场噩梦,你可能不想申请在那里演讲。此外,演讲是降低参加会议成本的一种很好的方式,所以为什么不在你真正想听其他演讲的会议上获得这种好处呢?确保询问你在网上或聚会中认识的人他们推荐哪些会议;优秀的较小型会议很容易被忽视。

一个好的摘要的第一部分是注意会议要求的内容。即使您写了一个最佳的 500 字摘要,如果组织者要求的是 150 字的摘要,您也不会被接受。同样,如果您向一个专注于统计学的会议提交关于数据工程的演讲,也会遇到这种情况。

总的来说,一个好的摘要有一个吸引人的开头句子:它吸引读者了解更多。然后您应该解释您正在解决的问题,并概述听众将学到什么。以下是从 Jacqueline 的一次演讲中的一个例子:

深度学习听起来复杂且困难,但实际上并非如此。多亏了像 Keras 这样的包,您只需几行代码就可以开始。一旦您理解了基本概念,您就能使用深度学习来制作 AI 生成的幽默内容!在这个演讲中,我将通过展示如何使用它来制作一个生成奇怪宠物名字的模型(如 Shurper、Tunkin Pike 和 Jack Odins)来介绍深度学习。如果您理解了如何进行线性回归,您就能理解如何创建有趣的深度学习项目。

当您在构思摘要的想法时,一个很好的开始方式是思考您三个月、六个月或一年前是谁。您现在知道什么,当时希望知道?很容易觉得每个人都已经知道这些事情,但即使是您认为很基础的东西,比如如何使用 git 和 GitHub 或如何进行网络爬取,世界上有成千上万的人不知道这些,并且会从中受益。您也可以选择进入您的子领域,如果这对广大受众来说很有趣。也许您可以教如何制作交互式地图,使用针对快速数据分析的包,或解释广义线性模型是什么。您不需要是该领域的专家;事实上,刚刚学到一些东西的人往往是最好的老师。那些很久以前学到东西的人忘记了他们曾经是如何挣扎的,以及他们曾经有哪些误解。

另一个开始做演讲的绝佳方式是在当地的聚会中发言。看看是否有任何聚会正在举办闪电演讲活动,这些活动是一系列简短(通常五分钟)的演讲。这些活动的准备压力要小得多,因为一个晚上可能会有五到十位演讲者。这些活动通常明确欢迎第一次演讲者。如果没有计划闪电演讲之夜,但您忠实地参加了一个当地聚会,可以向组织者推荐一个闪电演讲活动!

加布里埃拉·德·基罗兹:启动 R-Ladies

当我在 2012 年从巴西搬到旧金山时,我对找到的资源数量感到惊讶。我很快发现了聚会场景,在接下来的几个月里,我几乎每晚都会参加聚会。免费学习和用餐:这是一个完美的组合,尤其是对于一个没有太多钱的学生来说。但大多数聚会都没有多元化的观众。我没有看到像我这样的人,也感觉不到受欢迎,所以我通常会待在角落里,不太与人互动。

过了一段时间,我觉得是时候回馈社区,并开始自己的聚会了。我对 R 语言充满热情,但我不想创建一个普通的 R 语言团体;我想创建一个(我和参与者)都能感到安全和受欢迎的团体,没有评判,我们能在观众中看到自己。这就是 R-Ladies 的诞生。2012 年 10 月,我举办了第一次活动,即 R 语言的介绍(bit.ly/rladies-first),只有八个人出席。我有点失望,但很高兴能创造这个空间,并且有勇气用外语教授编程语言。

四年来,我是 R-Ladies 唯一的负责人。我负责组织、主持、教学、宣传、管理网站,寻找场地和赞助商。我会参加各种会议和活动,并介绍这个团体。我在社交网络上非常活跃,试图建立尽可能多的联系。不幸的是,我的大多数雇主都不会赞助我的工作,所以 R-Ladies 成了我的副业,这意味着我会在夜晚和周末花时间在上面。

领导 R-Ladies 给了我机会结识许多我从未想过在现实生活中会遇到的人。而且因为我在活动中需要教学,我在公众面前讲话变得更加自在。

对于想要创建自己社区的人来说,我建议以下几点:

  • 定义一个目标,并创建一个使命宣言。这个社区的目标是什么?你试图实现什么?你为什么要创建它?社区的使命是什么?目标受众是谁?思考这些问题将帮助未来的成员理解他们为什么应该关心并加入。这也有助于影响决策,比如你是否想专注于特定的子群体,例如 R-Ladies 针对女性和性别少数群体所做的那样,或者你是否想吸引对这个话题感兴趣的所有人。

  • 建立社交渠道、网站和电子邮件。建立一个 Twitter 账号、Facebook 页面、LinkedIn 群组、Instagram 个人资料,以及任何拥有大量用户的社交渠道。你还需要一个网站和电子邮件,这样人们可以轻松地联系你并了解更多关于这个团体的信息。

  • 创建一个标志。拥有一个标志可以提高你的品牌和社区的认知度。有些人有更好的视觉记忆力,他们会记住你的标志。有了标志,你可以制作笔记本电脑贴纸,例如。笔记本电脑贴纸是表达自己、自己的信仰和所属社区的一种方式。这是一个大热门!

  • 考虑格式。这将是主要演讲还是研讨会?所有活动都是现场进行,还是你将是一个拥有现场直播活动或咖啡聊天的在线社区?如果你的社区是一个技术社区,你希望赋予你的观众力量,那么研讨会将是一个很好的格式。主动学习是学习某物的最佳方式。

  • 使用一个平台 (meetup.comeventbrite.com,例如)。你希望让人们容易找到并注册你的活动。一个集中的网站,如 www.meetup.comwww.eventbrite.com,当人们在搜索相关主题时,可以带来一些有机流量,并帮助你跟踪预期的出席人数。

建立社区需要时间和努力。你可能需要在下班后和周末工作,所以请确保这是一件你热衷于并相信其使命的事情。尽管工作很辛苦,但这是值得的。听到成功的故事,看到你的社区如何改变全球各地的当地社区,尤其是在服务不足的地方,是非常有回报的,也是极大的快乐来源。你感觉自己在为使世界变得更好而做出贡献。祝你在旅程中好运!

最后,你可能会通过你的博客吸引人们来你这里。对于邀请演讲者的会议,如果组织者中的一人阅读了一篇与会议主题完美契合的博客文章,他们可能会联系你,看看你是否可以就同一主题设计一场演讲。即使这种情况没有发生,博客文章也是向会议组织者展示你在没有先前演讲可指的情况下有效沟通的好方法。

就像最初的数据科学工作一样,最初的演讲机会是最难获得的。之后,你通常会经历一个滚雪球效应,尤其是如果你的演讲被录制了。录制演讲很棒,因为人们可能会看到你的演讲并联系你,而且一些会议邀请函(CFP)会要求提供先前演讲的录制视频。

14.3.2. 准备工作

当你有一个演讲活动时,你将想要花大量时间准备你的演讲。如果你以前从未公开演讲过,很容易低估这需要多少时间。是的,你可以在最后一刻拼凑一场演讲,通过制作每个幻灯片上只有五个要点,这些要点只是你对主题的想法,并在活动当天即兴发挥,但这是对你的观众不尊重,并且没有展示你最好的自己。这也不是建立成功的演讲副业的道路。

你想要对着真人练习演讲,而不仅仅是自己阅读幻灯片。找一个你信任其批评意见的人,向他们进行演讲。除非你是在进行一个非常技术性的演讲,否则你的评审员是否具备你所在主题的背景可能并不重要。他们可以提出一些使你的演讲更好的建议,例如使用更少的填充词或不要过多地挥动你的手臂。

你通常会得到一个演讲的时间框架,但这个时间框架可能会根据是否会有随后的问答环节而变得复杂。为了计算你需要准备多长时间,你通常应该为问答预留五分钟,然后倒推回去,但给自己计时进行演讲是个好主意。小心,因为当你在众人面前演讲时,有加快速度的诱惑。你可能还希望在额外时间的情况下在后面添加一些额外的幻灯片,因为你可能会发现自己在主要演讲中走得有点快。不过,如果你稍微超时几分钟,那通常是可以接受的;在下一场演讲之前,只是会有一个稍微长一点的休息时间。最坏的结果是,你的演讲时间过长,你可能会在结束之前被截断,或者超时结束,从而打乱下一场演讲者的时间。

由于任何演讲都需要做大量的工作,我们强烈建议重复使用演讲。在观众中不太可能存在重叠,尤其是在演讲在不同的城市或在一个多轨道会议(参会者可以选择去听同时进行的另一场演讲)的情况下。虽然认为每个人都观看了你的演讲记录可能会让你感到受宠若惊,但大多数人不会这么做。

在演讲当天,召集你的支持者。这个群体不需要仅限于你在数据科学领域的亲朋好友;邀请你的家人、伴侣以及你楼里的那位友好人士。如果活动是付费的,看看组织者是否会为家庭成员或伴侣提供入场券来参加你的演讲。艾米丽的祖父已经免费参加过她好几次演讲(这让其他观众感到非常高兴)。知道至少有一部分观众是站在你这边的是一件好事。

14.4. 贡献开源

对于那些喜欢成为社区一部分但不喜欢站在其他社区成员的房间里的人来说,开源可以满足这种需求。贡献开源可以共享想法,并在有相同热情的人之间培养社区感。在开源中创建一个项目可以引起很多兴趣,因为人们会推动你未曾考虑的新方向。同样,你也许能够扩展他人的工作,从而产生一个全新的项目。

R 和 Python 之所以繁荣,是因为志愿者不断地扩展和改进它们。在接下来的章节中,我们将讨论你如何成为那些志愿者之一;你也可以向赞助一些核心开发的组织提供财务支持。尽管 R 和 Python 可能免费使用,但维护和开发它们并不免费。R 基金会、Python 软件基金会和 NumFOCUS 是三个你可以捐赠以支持语言持续发展的组织(后两者在美国注册为慈善机构)。

14.4.1. 为他人的工作做出贡献

加入开源项目可能感觉像是窥视别人的衣柜。那是他们的空间,你感觉像是一个入侵者,但开源就是为了这个目的而建立的,你必须克服这种感觉。相反,想象一下开源项目就像是在举办一场大型晚宴。你可能还不愿意负责准备主菜,但还有很多工作要做;你可以帮忙摆桌子,确保每个人都喝到水,或者事后收拾餐具。如果你尊重并热情,大多数创造者和维护者都会欢迎你的帮助。

开始贡献的一个好地方是文档。看看你喜欢的包的文档是否完善。你可能看到一些不完整、不清楚或误导性的内容。即使是修正一个错别字,在 GitHub 上发起一个 pull request 也是值得的。包和库的创造者喜欢看到更多关于它们的工作。这项工作可以节省他们的时间,而且作为一个刚刚学会使用这些工具的人,你将会有更好的视角来了解什么会激励和教导新用户。

如果你想要贡献代码,不要直接跳进去重写东西或提交一个新的函数。如果项目很大,可能有一个关于如何贡献或行为准则的指南。如果没有,观察一下仓库一段时间,以了解其流程。观察仓库也会告诉你项目是否被积极维护,还是长时间处于休眠状态。如果你决定你确实想要开始贡献代码,首先通过创建一个 issue 分享你想要添加或更改的内容。这样,你可以在做很多工作之前从维护者那里获得反馈。

在开源工作中工作是提高你的技术技能的最好方式之一,尤其是如果你在工作中不需要与一大群人合作的话。也许在你的工作 GitHub 仓库中,你不需要使用分支、信息性提交消息或标记。这没关系,但当你进入一个有数百个问题和数十人在同时工作的项目时,这些额外的工作开始变得更有意义。这些类型的实践确实增加了额外的约束,无论你是遵循风格指南还是维护者没有添加你创建的功能,因为它不够高效。最终,他们将是最终的决策者,直到你创建自己的项目。虽然这可能会令人沮丧,但你将学会许多你可以应用到自己的工作中的最佳实践。

Reshama Shaikh: 奔跑者

贡献开源可能看起来神秘且令人畏惧。开源冲刺,有时被称为黑客马拉松,是有组织的活动,为初学者提供了一个欢迎的空间。冲刺通常是持续一两天的事件,参与者会在 Python 或 R 库的 GitHub 仓库中处理提交的开源问题。这些问题可能与文档、错误修复、测试、功能请求等相关。

参与开源冲刺的好处有很多:

  • 大多数开源贡献者是志愿者,因此社区参与是必不可少的,也是受欢迎的。

  • 这是一个积极、动手实践的活动,旨在培养工程和编码技能。

  • 贡献开源是一个极好的学习机会,可以提升你的数据科学技能并建立你的作品集。

  • 这为与其他数据科学家和经验丰富的贡献者提供了宝贵的网络机会。

一个组织良好的冲刺将有效地利用人们的时间。准备工作确保初学者贡献者能够在冲刺结束时有所成就。寻找可用的资源集中存储库和准备工作,包括贡献文档、R 或 Python 安装说明、在活动前注册的工具(如 GitHub 账户或消息平台),以及为冲刺参与者特别准备的开源问题列表。记住,组织这些冲刺的人是志愿者;如果你发现其中一些项目缺失,请提出帮助。组织开源冲刺也是对开源的贡献。

开源冲刺的目标是提交拉取请求(PR),以解决开源问题。提交 PR 是一个来回的过程,通常需要几周时间才能合并。在冲刺后(通常是 5 到 10 小时)分配一些时间来跟进工作,并确保 PR 达到合并状态,这在 GitHub 仓库中表现为一个漂亮的紫色图标。

如果你感兴趣自己组织一个冲刺,我在我的博客上写了一个详细的指南,网址是reshamas.github.io/how-to-organize-a-scikit-learn-sprint

14.4.2. 创建自己的包或库

当你发现自己正在在项目之间复制函数或将它们发送给你的同事时,可能就是时候创建一个包或库了。一个包允许你将函数存储在一个地方,轻松地共享它们,并强制执行最佳实践,例如测试代码。许多公司都有内部包,包含用于使你的绘图颜色符合公司颜色的函数、访问数据或解决常见问题的函数。如果你认为其他人可能面临相同的问题,你可以在 GitHub 上分享你的包,这样其他人就可以下载和使用它。

在你尝试让公众使用某样东西之前,你需要确保你的所有代码都是有序的。仅仅因为某样东西在你运行一个任务时表现良好,并不意味着它在公众使用的压力下也能保持稳定。如果你的代码是你随意拼凑的,但你又不确定它是如何工作的,那么请不要邀请人们使用它。让你的包更广泛地有用可能需要更高级的编程,随着你改进或调整包以适应通用情况。确保你的基础工作已经被你信任的人阅读过。用户不会查看内部,所以如果你告诉他们这是一辆法拉利,当它一半时间是一辆高尔夫球车时,他们会感到失望。

当你已经测试了你的代码并且有人对其进行审查后,你仍然需要做一些工作来让人们了解它。你可以在社交媒体或你的博客上推广它,但即使如此,也可能进展缓慢。不要期望一夜之间成为明星;与其立即成功然后意识到你在基础代码中犯了一个错误,不如早点投入工作,使用户数量较少。如果某物最终被采用,这可能需要一段时间,但即使尝试传播好的工作也是一种善行。当然,成功的回报也是一种诅咒:如果人们开始依赖你的项目,那么停止开发它就变得非常困难。你会收到错误报告和功能请求,你必须认真考虑你是否会做出一个改变,这将破坏使用旧版本函数的报告。

开源中的毒性

开源社区可能是有毒的。人们有过负面经历,他们因为种族、性别、民族或性取向而受到歧视、骚扰、轻视,或者只是感到不受欢迎。幸运的是,许多社区正在认识到这一事实,并积极努力使环境更具包容性。Python 的创造者 Guido van Rossum 承诺只指导女性和代表性不足的少数群体(mng.bz/9wPo)。一些项目创建者将问题标记为“适合初学者”或“新手”,以鼓励那些刚开始接触开源的人做出贡献。虽然你应该始终优先考虑你的心理和情感健康,但包括来自代表性不足群体的人在内,许多人都在开源中有了积极的经历;一个负面经历并不是不可避免的。

14.5. 认识和避免燃尽

我们不是健康专家,所以我们参考世界卫生组织对燃尽的定义:一种“被概念化为由于长期工作场所压力没有得到成功管理而导致的综合症。”它列出的三个症状是“能量耗尽或疲劳感”、“与工作或与工作相关的负面或犬儒主义情绪”以及“工作效率降低”(www.who.int/mental_health/evidence/burn-out/en)。目前,我们关注的是来自你全职工作之外的压力,而不是来自你额外做的与职业相关的工作。

写这本书是我们两人完全独立于全职工作(对 Jacqueline 来说,也是独立于抚养幼儿)的事情。我们有时确实会嫉妒同事下班后什么也不做与数据科学相关的事情。对我们来说,回到我们决定承担这项额外工作的原因,看看我们是否仍在朝着我们的目标努力,是有帮助的。对于这本书来说,从来都不是为了赚钱。(用这些写作时间做咨询会更有利可图。)相反,我们想写这本书来帮助有抱负的和初级数据科学家,而这个使命一直激励着我们。随着我们发布章节,看到正面的影响特别有帮助。

如果你觉得自己快要燃尽了,首先问问自己是否有减少负担的方法。有一点值得记住的是,一旦你创造了某样东西,你不必保持那么活跃。如果你经营博客,你可能偶尔会想写一篇新文章,但你不必像最初那样频繁地写。来访问的人更有可能说“哇,这六篇文章对我真的很有帮助”,而不是“哦,她现在每六个月才发一次帖。”

在今天的兼职工作和忙碌被赞扬的文化中,感觉任何没有花在生产性工作上的时间都是浪费时间。这是非常有害的!我们都需要时间来重置。像去健身房和与朋友聚会这样的活动对这一点很有好处,但花时间看电视或以其他方式放松也是可以的。继续为那些与数据科学或赚钱无关的爱好留出时间,这样你就不会觉得你的整个生活都围绕着工作。

通过试图跟上别人,你会给自己增加很多压力。有句俗语说,社交媒体是别人的高光时刻,你不应该拿你的完整生活与之比较。同样,仅仅因为某人是大量制作软件包或博客文章的人,并不意味着你需要跟上那个人。对一些人来说,制作软件包、发表演讲或写博客文章是他们工作的一部分,甚至是全部职责!你能为你的职业生涯做的最好的事情就是确保你工作得足够可持续,以便长期坚持下去。

14.6. HelioCampus 数据科学总监 Renee Teate 采访

Renee Teate 在 Twitter 上以其超过 50,000 名粉丝而闻名,她是 @becomingdatasci 的数据科学 Renee。她还创建了一个播客、博客 (www.becomingadatascientist.com) 和 www.datasciguide.com,这是一个在线数据科学学习目录。她经常参加并组织会议。

在社交媒体上,成为其中的主要好处是什么?

Twitter 在很多方面都给了我帮助。我播客上的所有嘉宾实际上都是通过 Twitter 认识的。我发现了一些我认为在推特上谈论有趣事情的人,并认为如果他们能写有趣的事情,他们也能谈论有趣的事情。我列了一个名单,一次性发送了很多条直接消息,心想也许一半的人可能会感兴趣,我可以在将来安排。结果,他们每个人都答应了!

我经常被邀请通过 Twitter 在会议和聚会上发表演讲。当我发布内容时,我知道有观众,并且会得到回应。我遇到了很多很酷的人。除了建立人脉,我还用它来学习。我实际上在早期写了一篇关于我是如何使用 Twitter 来学习东西的博客文章,它主要关注的是掌握行业的术语。如果你开始关注某个行业的人并阅读他们链接的文章,你就会学到所有这些术语。如果有人说了我不知道的事情,我就会去查一下,弄清楚那是什么东西。通常,会有一个关于这个主题的教程或论文的链接,这真的有助于学习。

你会怎么对那些说他们没有时间参与社区的人说?

我真的理解这一点,尤其是对于那些在工作之外有责任的人,比如照顾孩子或其他亲属。当我还在攻读硕士学位并全职工作时,我没有做其他任何事情。在这种情况下,我会建议找到一个你可以异步参与的在线社区。无论何时你有那么一点时间,比如你在某个地方的候诊室,你都可以阅读并回复一些推文,或者将有趣的文章标记为稍后阅读。即使你一年只能参加一次活动,也请选择一个与数据科学或你特定行业相关的会议,并努力参加。你可以在 LinkedIn 或其他社交媒体上继续与你在那里遇到的人保持联系,最终他们可以成为一个小团体,你们可以相互监督学习并分享资源。

只生产少量内容是否有价值?

绝对有。我认为即使你只发布一篇博客文章,也会帮助你巩固这个主题,因为通过帮助他人理解某事,你就能学到东西。我多年来一直引用我的一些旧博客文章。当我写博客时,我会尽量让它对学习者普遍适用且有益,这样我就可以多次引用它,而不会很快过时。对于我的播客,我在过去一年半里只录制了两集。我忙于生活,开始在 HelioCampus 工作,就把播客放下了,一旦我承诺了其他事情,就很难再回到播客上了。它还在那里,我仍然计划制作更多集。但我已经不再为长时间的休息感到内疚了。我意识到,那些已经发布的集数对人们仍然有帮助,我总是可以在以后再捡起来。

你第一次发布博客文章或发表演讲时担心过吗?

是的,我第一次发布博客文章或发表演讲时确实很担心,因为当人们查找你的名字时,他们会找到它,并将其与你联系起来。当然,这有点令人紧张。但有一件事我意识到,那些我已经从中获得价值的博客文章并不总是最技术先进、最完美无瑕的作品。我会阅读描述我想学习的内容的博客,以一种与我之前听到的方式略有不同,突然,材料就变得容易理解了。总会有人从你发布的内容中受益。

我还学会了不要过于在意那些持否定态度的人。无论发生什么,他们都会存在。我见过有人对已经从事数据科学多年的人发表负面评论。分析的方法有很多种,也许在某些原因下,某一种方法比另一种方法更好,但这并不意味着你的方法不是好方法。有时候,你只需要停止听那些批评者的话。

摘要

  • 我们推荐四种方式来参与数据科学社区:建立你的博客和数据科学作品集,参加会议,发表演讲,以及为开源项目做贡献。

  • 记住,你不需要参加任何社区活动就能拥有一个成功的职业生涯;选择对你有效的方法,并且不要担心跟上其他人。

第十五章:优雅地离职

本章涵盖

  • 决定何时离职

  • 理解求职与第一次数据科学工作的不同

  • 通知离职和管理过渡

在一家公司工作 40 年,退休时带着金表和养老金的日子已经过去了。在大多数领域,现在在职业生涯中至少换几次公司是很常见的,在技术领域,人们可能每隔几年就换一次工作。离职有很多好的理由:你可能是在寻找加薪,不同的责任,加速学习,或者仅仅是想要尝试新鲜事物。决定你可能对一份新工作感兴趣是第一步,但你在这一步和真正采取行动之间还有额外的心理障碍需要克服。

总是会有一些不确定性,当你离开已知的工作去尝试新的角色时。无论你做了多少研究,无论你在面试中问了多少问题,你都无法真正知道那会是什么样子,直到你开始那份工作。你可以理解大的方面——薪水、公司规模和数据团队的架构——但你不会知道你每天的感受,直到你真正生活在其中。此外,你的当前工作可能并不完全糟糕。(如果真的很糟糕,我们建议回到第九章,在那里我们讨论了如果工作很糟糕或环境有毒时应该做什么。)你可能喜欢一些同事,知道在哪里寻求帮助,并且对在数据中导航感到舒适。你可以想出一些可能更好的事情。但有什么保证你认为会更好的新工作实际上会更好——或者它不会是更糟糕的事情?找到新工作真的值得承担风险和花费时间吗?

即使你决定想要离职,这些令人烦恼的疑虑也可能减缓你的求职进度。你可能还在处理很多不确定性。你应该如何进行第二次数据科学工作的求职?如果你得到了一个你想要接受的工作机会,你该如何告诉你的经理?你是否需要与每个你合作过的同事单独见面告诉他们你要离职?如果你得到了一份反要约,你应该接受吗?在你通知离职后的那最后几周你应该做什么?但如果你知道仅仅寻找更好的工作机会并不会阻止你改变主意,那么你的第二次(或第三次、第四次)工作的寻找就不必感到害怕。

我们提出了许多我们在考虑寻找新工作时问自己的问题。这种不确定性的数量可能会使所有但最坚韧的求职者瘫痪,但不用担心:我们在这里是为了帮助你成为这些人中的一员。

在本章中,我们将离职过程分为三个部分:决定离职、开始求职和提出辞职。其中一些指导适用于任何工作,但我们还讨论了一些更独特于数据科学的事情。转换数据科学工作是一个常见且通常有益的经历;许多人每一年到三年就会换一次工作,这让他们能够尝试数据科学的新领域,并大幅提高他们的薪资和其他福利。本章将帮助你使这一过渡尽可能轻松和无忧。

15.1. 决定离职

很遗憾,大多数时候你不会知道何时离职是正确的,有 100%的确定性。没有魔球可以告诉你该做什么,甚至没有一套你可以回答的问题来帮助你做出最终决定。在第八章中,我们讨论了在决定接受工作 offer 时,如何在两个好的生活选择之间做出选择,同样的推理方式也适用于这里。最终,你只能尽你所能利用你拥有的信息,而且很少有决定是完全不可逆转的。你也可以随时从新地方转换;你并没有签署一份 100 年的合同。

15.1.1. 评估你的学习进度

什么信号表明是时候寻找新工作了?我们最大的建议是确保你一直在学习。不幸的是,当你在一个职位上停留时,你的学习可能会变得缓慢。在你最初的几个月里,你就像是在喝消防水龙带。几乎不可能学到任何东西;至少,你正在了解公司的数据,从同事那里获得新的技术技能,并与商业利益相关者合作。但是,如果你在一年或两年后继续做同样的事情,你可能会达到一个平台期。

当你对工作的日常方面越来越熟悉时,看看你能做些什么来提高你的非技术技能。看看你是否能负责一个团队(或者至少一个实习生)并提高你的管理能力。虽然公司需要你做的工作可能有限制,但随着你在其中的经验积累,你通常可以找到更多时间来拓宽你的技能组合。也许你可以与数据工程团队合作,学习如何自己构建一些管道,而不是完全依赖工程师。虽然采取这种主动来推动自己并不适合每个人,但有时人们需要公司从外部激励他们接受新的挑战。如果你发现自己陷入了困境,无法摆脱,这可能意味着是时候改变环境了。

数据科学的一个令人兴奋之处在于,总有更多东西可以学习,但这个事实也使得工作具有挑战性。如果你不成长,找到你下一个职位将会更难。同时,高级数据科学家被期望在广度和深度上与初级数据科学家有显著不同的技能。我们在整本书中都强调,你不需要也不可能知道数据科学领域下的所有知识,但随着经验的积累,你被期望知道得更多。

15.1.2. 检查你与经理的一致性

在你切断联系并离开之前,确保你已经尽你所能告诉你的经理你想要改变的事情。在你看来可能无法解决的问题实际上可能有一个解决方案。也许你被一些可以自动化但不再具有挑战性的例行任务所困扰。你的经理可能会说你可以雇佣一个实习生来做这些工作。这个实习生可以得到一个学习经验,而你则可以稍微减轻一些工作负担并获得指导经验。或者也许数据科学团队主要做分析工作,而你真正想开始做生产机器学习。你的经理可能会为你安排与工程团队一起进行几个月的“训练营”;你可以在贡献你的分析知识的同时学习一些工程基础。

另一个问题是你自己的目标与你的经理的目标是否一致。加州大学圣地亚哥分校认知科学助理教授菲利普·郭(Philip Guo)写了一篇名为“你在哪条关键路径上?”的博客文章(www.pgbovine.net/critical-path.htm),在其中他讨论了了解你老板(或导师)的关键路径以及它是否与你的一致的重要性。“关键路径”意味着“对他们在特定时间点的职业发展或满足感至关重要的工作路径。”这关乎他们的成功与你的成功紧密相连。经理的时间和精力有限,如果你的关键路径重叠,他们更有可能关注你。

了解你与你的经理的目标一致性需要知道你自己的职业目标是什么。我们不是在谈论十年或甚至五年的计划;在这样的一个新且快速发展的领域,很难预知未来那么久的机会。但你想要如何度过接下来的几年?我们希望你在第一次求职时已经对此问题深思熟虑,但也许情况已经改变。你可能希望加入一个大型数据科学团队,但现在你发现几年后你更希望能够参与不同类型的项目,而不是被局限在一个领域。或者你可能专注于家庭,寻找一个允许你更多地进行朝九晚五工作的工作,而不是一个需要投入大量时间的初创公司工作。

总结来说,在考虑寻找新工作时需要考虑的一些关键因素是

  • 你在你的当前职位上是否在学习?

  • 你是否尝试过通过与你的经理讨论你的问题来改善你的日常体验?

  • 你的经理是否专注于你的需求,并推动你的职业发展?

  • 你是否花时间思考过你下一份工作中你想要和不需要的东西?

在没有找到下一份工作的情况下离职

你可能想在两次工作之间休息很长时间。大多数新雇主都希望你尽快开始工作;尽管你通常可以在离开当前工作和新工作开始之间得到一周或两周的时间(尤其是如果你已经计划了假期),但你不太可能得到更多。如果你梦想着在亚洲进行三个月的背包旅行,你可能需要在没有其他安排的情况下离职。

没有找到下一份工作就离职是冒险的。有财务风险,那就是在没有收入的情况下,你可能没有足够的储蓄度过不确定的时间。你愿意(或能够)依靠家庭成员的短期贷款或伴侣的收入吗?另一方面,当你目前有工作时,找工作更容易。其中一个原因是招聘经理对失业者的不公平偏见。另一个原因是你的谈判地位较弱:无论新雇主提供的是什么,都会比你现在的收入高,所以要求更高的薪酬更难。还有一个原因是,如果你已经休息了几个月,你可能没有保持你的技能,可能在技术面试中显得生疏。

如果你确实想休息一段时间,拥有一个强大的数据科学网络非常有帮助:熟悉你的工作并能帮你进入面试并和招聘经理交谈的人。你还想为面试前的时间制定计划,以复习你的技术技能。总的来说,除非你处于一个有毒的工作环境,否则我们建议在没有其他工作的情况下不要离职,除非你有计划在可能的长达数月的工作间隙中享受你感兴趣的时间。

15.2. 第一次工作后的求职差异

寻找第二份数据科学工作的许多基本步骤与第一次相同。但你现在有一些重要的优势,因为你已经拥有在数据科学领域工作的经验:

  • 你将吸引更多的招聘人员主动来找你。为了增加招聘人员的兴趣,你可以进入你的 LinkedIn 个人资料,并选择显示招聘人员你愿意接受工作机会(而且不用担心——LinkedIn 会采取措施确保你的雇主看不到这一点)。

  • 你已经更多地了解了你喜欢和不喜欢的工作方面。在你的职业生涯早期,你有机会转换专业:如果你做了很多数据工程工作但不喜欢,你可以去一个有数据工程师的大公司做这项工作。

  • 进入第一轮招聘筛选会更容易。许多雇主使用某人是否持有相同的职位(或之前非常相似)作为快速筛选工具。

  • 理想情况下,你在数据科学领域的网络更加发达。(如果不是,请回到第十四章。)

  • 如果你仍然在职,你可能不想在 LinkedIn 或 Twitter 上发布你正在寻找新工作,但你可以开始悄悄地发出试探,让几个信任的人知道你在寻找工作。他们可能能够将你推荐到他们公司的职位,或者他们可能能够将你与他们认识正在招聘的人联系起来。

不要害怕申请工作,即使你在当前的工作中相当满意。有很多理由你可以说服自己不要改变。也许你担心你可能没有你认为其他人拥有的技能(“如果我有很多年的经验,但我没有通过技术带回家的案例研究怎么办?”)这仅仅是冒名顶替综合症在作祟(而且如果你从这个书中学到了什么,那就是要对抗那个不断告诉你你不如别人好的声音)。如果你没有通过技术筛选,那并不意味着你是失败者或“冒牌”数据科学家。外面有很多糟糕的面试问题并不能准确判断能力。此外,数据科学如此广泛,也许这些问题是在你之前没有工作过的领域。

你可能也会担心与工作朋友们的社交生活受到影响,或者担心新工作可能会让你离家更远。但无论你的担忧是什么,如果你不对可能改善你职业生涯的申请过程持开放态度,那都是对你自己的一种伤害。

15.2.1. 决定你想要什么

你求职的第一步是列出你在当前工作中喜欢的事情。《设计你的生活:如何构建充实、快乐的生活》,比尔·伯内特和戴夫·伊万斯著(Knopf,2016 年),建议你在一周内,在每次活动前后都记下你预计会喜欢它的程度以及你实际上喜欢它的程度。你是否讨厌每天花几个小时开会,或者你实际上喜欢开会,因为它们给你的日子带来了结构?如果你在一个分布式数据科学团队中,你是否希望向数据科学经理汇报?你可以用这个列表来设计你的搜索。找到一个与你价值观相同或具有你所寻找的结构的公司。你不想申请一个你可能会遇到你现在不快乐的问题的公司。

在你的求职过程中,你可能会遇到职位名称的问题。在第五章中,我们讨论了不要过于关注职位名称。数据科学家有很多不同的职位名称,包括数据分析师、研究科学家、机器学习工程师和产品分析师。数据分析师是最常见的职位名称,可以被视为一个初级角色。如果你是数据科学家,你是否愿意接受高级数据分析师的职位?如果你是数据分析师,你是否应该专注于在你新的角色中晋升到数据科学家?

学习仍然是你寻找工作过程中最重要的因素。在你的新角色中,你会做什么?从五年的角度来思考,而不是仅仅关注接下来的两年。什么能让你在长期内取得成功?例如,能否从高级数据分析师的角色开始,然后过渡到数据科学家?在一家较小的科技公司工作能否让你学会如何处理网络数据,从而为你进入一家大型科技公司打下基础?

当你在考虑你的选择时,你必须保护你的市场价值。无论公平与否,数据科学家通常被认为比数据分析师更受尊敬,高级数据分析师的职位可能比数据科学家的职位薪酬要低。在你考虑下一个角色时,你需要平衡这些考虑因素。

15.2.2. 面试

在你开始申请公司并接受面试后,你将不得不回答“你为什么离职?”如果你是从学校或训练营毕业后得到你当前的工作,你根本就没有被问过这个问题。

一个好的回答是你正在寻找挑战。另一个好的策略是假装这个问题是“你为什么想为我们工作?”如果你这样想象,你的回答将会是积极的(“我听说过你们机器学习团队的精彩事迹,非常渴望学习”)而不是消极的(“我之前的老板坚持用饼图展示我们的实验结果”)。如果你给出更具体的回答,确保它符合新雇主的要求。如果你面试的公司没有任何高级数据科学家,你不想说“我正在寻找一个我可以与之合作的拥有高级数据科学家的团队”。无论如何都要避免诋毁你当前的工作,一些雇主认为这种行为是不合格的,无论你在当前公司受到怎样的对待。

只因为你即将离开公司,并不意味着你不应该为在那里所做的工作感到自豪。你应该绝对谈论你参与过的项目或学到的技能。你可能会受到某些保密协议的约束,所以你不能直接展示你的代码或谈论你构建的推荐算法的参数,但你应该以一般的方式讨论你的贡献。一个很好的非具体回答是:“我用 Python 创建了一个聊天机器人,它可以生成对客户常见问题的回答,将客户服务代表与每位客户所需花费的平均时间减少了五分钟,并将客户满意度提高了 20%。”另一方面,如果你在一家私营公司工作,“我进行了 A/B 测试,将公司的总收入从 2000 万美元增加到 2300 万美元”是一个不好的回答,因为你正在披露私人财务信息。

你可能正在寻找使用不同技术的职位,无论是不同的云服务提供商、SQL 方言还是主要编程语言。在这种情况下,你想要使用与你在将工作经验以可迁移到数据科学的技能来表述时使用的策略相似的方法。假设你一直在使用 R 工作,而该公司使用 Python。你可以说:“我知道我需要一点时间来熟悉 Python 的语法,我已经开始通过在线课程来做这件事。但在我的四年 R 编程生涯中,我开发了网络应用程序,构建了软件包,并分析了大型数据集,所有这些都将使我迅速成为一名强大的 Python 程序员。”

我们在本章前面提到了冒名顶替综合症,但在准备面试时你必须对此格外小心。当你从大学毕业寻找第一份工作或转向数据科学的新职业时,很容易说“我还没有学到那一点。”(至少,如果你说服自己那很容易的话,是这样的。)然而,当你已经建立了一定的基础后,不知道某些东西可能会感到尴尬。如果你在面试中不知道某些东西,不要害怕承认。你可以说你还没有找到机会使用它,或者你希望了解更多关于它的信息,但那还不是你工作的一部分。假设你被问及机器学习算法,但你一直在从事统计建模、SQL、数据清洗和与利益相关者合作的工作,因为数据规模如此之大,机器学习是由专门的机器学习工程师完成的。没有人知道一切,我们希望到目前为止你作为一个数据科学家已经做得相当不错;对此要有信心。你可以展示你所做的工作,如果你之前研究过某个特定主题,即使你最近没有使用过这些知识,你也能更快地掌握。总是展示愿意学习比试图蒙混过关要好。

15.3. 在职期间寻找新工作

如果你成为数据科学家的道路包括参加训练营,你可能在失业期间进行工作搜索。如果你在学校,人们预期你可能需要为面试请假,并且你可能需要花时间准备简历或求职信(第六章)。然而,如果你是全职员工,你的经理通常不希望听到你需要请假去寻找新工作。那么你如何安排时间来做这件事呢?

任何时间都可以做的事情——比如更新你的简历和求职信、研究工作、提交申请以及处理带回家的作业——你应该利用自己的时间来做。你不想让别人看到你在做什么,而且你有责任继续在你当前的公司里做好你的工作。但是面试几乎总是在你的正常工作时间进行。如果面试是通过电话进行的,我们建议你在电话亭、会议室或你不会被偷听的地方接听电话。

然而,后续阶段的面试通常需要在现场进行。如果面试持续一个小时或两个小时,并且靠近你的办公室,你可以声称有医生预约。如果时间更长,而且你的公司允许你在家工作,你可以这样做,并且只工作半天(或者尝试稍后工作更多),但你需要确保在你面试期间不会有人期望你接电话或快速回应。你也可以尝试在一天快结束时安排面试,并在早上工作半天。

如果你在一个城市内寻找工作,安排面试当然更容易。如果你打算搬家,大多数公司会在工作日安排你进行面对面的面试。在这种情况下,很难避免请一天的全假,大多数人通常会在那天请病假。但正如你可以想象的那样,如果你有很多最终轮面试,这会很困难。

这也是我们建议有策略地申请工作的原因之一。如果你一周内有十二个电话面试和两个现场面试,很难在不被人注意到的情况下安排这些时间,而且你的工作表现几乎肯定会受到负面影响。你应该在两个阶段进行选择:首先申请,然后在初次电话之后推进。如果你在初创公司工作,但想在大公司工作,不要申请其他初创公司,即使工作描述看起来很棒。如果在初步电话筛选过程中,你发现这个职位更偏向数据工程,而你想做分析工作,即使面试官想继续,你也可以停止这个过程。

虽然你可以用面试来练习你不会接受的职位,但你不想做太多。经验丰富的数据科学家非常受欢迎,这意味着当你宣布你在寻找新工作时,你可能会从招聘人员和经理那里得到很多兴趣。这是一种很好的感觉:人们喜欢你!虽然享受这种感觉是可以的,但不要让自己在一个你知道不适合的公司面试过程中浪费时间。即使这很令人高兴,但这并不是一个好的时间利用方式。

当你在找工作时,很容易让当前的工作变得松懈。为了感觉良好地过渡到下一件事,你通常会思考你不喜欢的工作内容,这可能会消耗你的动力。但尽量继续做好工作;你有一天可能需要你经理的推荐,而且公司仍在支付你的工资。

在你的求职过程中,你可能会意识到,另一边的草地并不总是更绿。换句话说,你并没有找到任何你宁愿做当前工作的事情,或者所有的工资都低得多,提供的福利也更差,或者这些工作不会给你你目前享受的灵活性。决定取消你的求职是完全可以的!如果它让你对你的当前工作有了新的认识,那么它就不是浪费时间。如果你决定留下,我们建议回到我们在第 15.1.2 节中的建议:确保你已经尝试解决你当前工作中可以解决的问题。

攻读研究生学位

在从事数据科学工作后,你可能会决定想要回到学校接受更正式的学术培训,无论是继续全职工作并在晚上和周末上学,还是转而全职攻读学位。如果你正在考虑这件事,我们建议你回到第三章,在那里我们讨论了如何找到一个好的项目。

我们确实想提醒你,仔细考虑时间和金钱的投资是否值得,考虑到你已经证明你可以得到一个数据科学的工作。以下是一些回到学校可能合理的理由:你已经决定想要从事一个非常研究密集的职位,需要博士学位;你从你想要工作的公司得到了明确的反馈,你需要硕士学位(而不仅仅是你在职位描述中看到了它),或者你发现你的进步受到了某些技能缺乏的限制(例如算法的深入知识),而免费的在线选项对你不起作用。

如果你决定想要全职回学校学习,你通常可以比离职去另一份工作更开放地与你的经理讨论这一点。如果你在一家大公司工作,如果你的公司同意在你继续全职工作的同时兼职学习,或者在获得全职学位后同意回来工作,公司甚至可能支付你部分学费。即使不是这样,你的经理也可能为你写一封非常好的推荐信。一个好的经理知道学校为你提供了与工作完全不同的东西,并且应该支持你的选择。

15.4. 给出通知

如果你已经决定离职并接受了工作邀请,你需要通知你的经理。通常,除非情况非常紧急,否则你应该至少提前两周通知。尽管不太可能,但一旦你提出辞职,你的经理可能会告诉你你的最后一天就是今天。你应该为此做好准备,并确保你已经将工作电脑上的任何个人文件转发给了自己。

你的老板应该是第一个知道你要离开的人。与他们安排一次会议(称之为“职业讨论”,而不是“两周通知”),或者利用你每周的一对一时间。如果你与他们同处一地,你应该亲自通知他们;如果你不在同一地点,可以通过电话或视频通话通知他们;不要通过电子邮件通知。开始对话时,表达对他们帮助你以及你在公司拥有的机会的感激之情。向他们保证,你会尽你所能帮助他们过渡;你可以列出你的一些想法,比如注释你的代码或建议某人接管你的一部分工作,但确定这一点需要与你的经理合作。告诉你经理你要离开可能会让你感到焦虑,但请记住,换工作是职业生涯的正常部分。

15.4.1. 考虑反提案

你的经理可能会试图通过提出反提案来劝说你留下,因为雇佣新人是昂贵且风险较高的。他们可能会要求你与你的跳级经理见面,这位经理有权力给你加薪、额外的股票期权、一次性奖金、加速审查或其他激励措施以留住你。

关于你是否应该接受当前公司的反提案,人们的意见不一。一方面,公司现在知道你是一个潜在的跳槽风险,可能不愿意给你重大的责任。这种情况也可能影响你与经理的关系。另一方面,公司可能愿意解决你离职的主要原因。解决方案可能是金钱上的,也可能是将你调到不同的团队工作。

我们希望我们已经向你强调了与经理保持开放沟通的重要性。如果你已经对你的经理坦诚,但仍觉得需要换一份新工作,那么通过反要约来实现你想要的改变的可能性不大。尽管我们不赞成将换工作作为最后的手段,并认为你应该在那时之前就做出离职的决定,但我们已经强调了在不满增长之前沟通你愿望的重要性。如果你已经做到了这一点,你应该知道最后一刻的变化不太可能改变整体的工作环境。

你的经理可能会强调你对团队的价值以及如果你离开,团队成员将面临多么困难的局面。这可能会让你感到内疚,尤其是如果你的老板或团队一直对你很好。但请记住,离开他们并不是背叛。毕竟,工作就是工作,尽管一些初创公司可能会说公司是你的家庭,但公司并不是你的家庭。尽管你应该始终尊重工作并尽力而为,但你没有义务无限期地在那家公司工作。而且,你只是离开一家公司,并不是死亡!如果你与同事关系亲密,你仍然可以社交,也许有一天甚至可以再次一起工作。

15.4.2. 告知你的团队

与你的经理讨论他们希望如何让其他团队成员知道。他们可能会要求你等待几天,以便他们制定一个过渡计划,这样他们就可以在你告诉他们你要离开时与团队分享这个信息。他们可能会问你更喜欢在常规团队会议上告诉每个人,还是想与每个人单独见面。我们建议在考虑这个问题时考虑你团队的大小。如果你多年来一直与同五个人合作,你可能想分别告诉他们。另一方面,如果你在一个 20 人的数据科学家团队中工作,并与一打利益相关者合作,那么每个人单独见面半小时将会在情感上非常疲惫。

需要避免的一个错误是在与经理谈话之前就安排与人的会议,即使你安排这些会议是在与经理谈话之后。如果你的同事对你突然想要与他们见面表示怀疑,并询问这是否是因为你要离开,那将会非常尴尬:你将不得不在经理知道之前撒谎或告诉他们。

大多数人都会问为什么你要离开。确保你有一些话要说,并尽量保持积极,关注新的机会以及你在当前公司感激的事物。即使你已经和同事成为朋友,也要小心不要过于消极。记住,你可能在某个时候想回来,你不想被贴上离开时毁掉这个地方的标签。有些人与他们的经理关系非常亲密,但即使如此,你也不希望过多地谈论你当前工作的负面方面,因为这可能会损害你的友谊,通常也是不必要的。优雅离职的其他良好理由之一是,保持与过去同事和经理的良好关系在职业上可能非常有价值,因为你可能会再次遇到他们,或者以后需要他们的推荐。

当你说再见时,给人们一个在你离开后联系你的方式(电子邮件、LinkedIn、Twitter 等等)。对于同事来说,能够保持联系是件好事,这也是确保你成为自己和他人的功能性网络的好方法。

离职前的清单

在你离开之前,你想要确保你有几个行政事项:

  • 如果你需要,例如关于你的股票期权的信息,人力资源的联系信息。

  • 你只在公司电脑上有的任何个人照片、密码或文件。

  • 员工福利和股票补偿门户登录信息。

  • 员工协议、录用函和终止协议的副本。

  • 如果你有剩余的假期,关于如何支付你的假期信息。

  • 如果你不是立即开始新工作,你可以继续你的健康保险的选项。

  • 如果你为健康或依赖护理的灵活储蓄账户做出了贡献,你可以在哪一天使用它(通常是你的最后一天或你最后一个月工作的最后一天)。这些资金是“用或失去”的资金,所以如果你不使用它们,它们就会消失。

15.4.3. 使过渡更容易

最好的离职方式是尽可能使过渡过程变得容易。你可能找不到替代者,但在他们填补这个角色期间(如果他们选择这样做),你可以为团队的成功做好准备。为你的经理制作一个过渡文档,列出你的职责,哪些可以完成,哪些需要移交(以及关于谁可以接手的建议),以及哪些需要等到有人接替这个角色才能完成。除了通知接手项目的人之外,你可能还需要向外部合作伙伴或客户介绍,或者让他们知道你将不再处理这个项目。

尝试清理任何悬而未决的事情。如果你有一些可能对他人有用的工作,但只保存在你的电脑上,请将其添加到 git 仓库或与他人共享 Google 文档。在最后几周,你可能会得到很少的工作,因为人们知道你不会待很久。这给了你时间去做一些你可能之前因为过于繁忙而无法做的事情,比如记录你创建的所有流程。你可以做的事情还包括

  • 添加教程— 你是否一直是某个特定主题的“求助”对象,比如如何组织财务数据或 A/B 测试的最佳实践?你的存在无法替代,但通过制作演示文稿、内部帖子或文档,你可以帮助填补你留下的部分空白。

  • 整理你的文件— 即使你把所有东西都添加到 GitHub 上,如果“所有东西”是 100 个名为 random_stuff 和 misc_analyses 的文件,那也不会对任何人有帮助。虽然你可能最终需要在额外文件夹中存放一些文件,但尽量使文件易于导航,并在必要时添加解释。

  • 为分析添加注释和解释— 理想情况下,对于任何有影响力的分析,你已经在报告中写下了发现,并链接到注释过的代码。如果你没有时间完成一些发现,但认为对某人继续这项工作有价值,你可以完善你的注释。虽然你不需要注释每一行代码,但解释数据中的某些意外(以及你是如何解决的)、你已经尝试过的事情,以及为什么选择分析方法,这些都可以是有帮助的。

你能做的最糟糕的事情就是忘记你是公司唯一知道如何做x的人,并且没有将其分配给其他人。如果你这样做,当你试图适应新工作时,你可能会接到关于如何完成工作的紧急电话和电子邮件。忘记你是特定系统的唯一密码持有者,即使在离开后,这也是一个容易陷入麻烦的方法。一些雇主不知道如何说“再见,祝你好运”,可能会打电话询问你正在工作的项目。为了你的精神健康,最好是能够将他们引到你的离职文档上,直到他们得到你不再在那里的暗示。即使他们没有跟进,如果你给他们留下了大量需要处理的事务,那么你在那里建立的社交网络对你来说也不会有很大的价值。

我们希望这一章使你清楚,尽管离职的不确定性可能会带来压力,但这个过程是正常的,并且有方法可以使它更加顺利。正如我们在本书中多次讨论的那样,你做出的少数决定是最终的。仅仅因为你开始寻找工作,并不意味着你必须离开,即使你离开了公司,几年后你可能会回来。在这个过程中最重要的事情是确保你专注于如何使你的工作最适合你的职业目标。

15.5. 谷歌工程经理安德玛·卡萨里的访谈

安德玛·卡萨里是谷歌云开发者关系团队的工程经理。之前,她在 SAP Concur 担任高级产品经理和数据科学家。她还在美国海军服役了五年,并拥有电子工程硕士学位。

你怎么知道是时候开始寻找新工作了?

我对人们的建议是,了解他们想要做什么样的工作,以及这是否符合角色、产品、团队和公司的现状。对我来说,我在变革时期表现得非常好。我喜欢在项目启动阶段和构思阶段工作,但我同样喜欢看到产品走向衰落。另一方面,如果我花大部分时间优化模型以实现个位数百分比的增长或进行超参数调整的数据科学工作,那么效果可能不会很好。我还考虑团队凝聚力的阶段。你是想加入一个已经拥有强大纽带和文化的团队,还是想加入一个刚刚形成的团队?总的来说,我的角色、产品在这个产品生命周期中的位置,以及团队在形成文化还是适应文化中的位置,都会影响这个角色是否仍然适合我,或者我应该寻找更具挑战性的东西。

你是否曾经开始寻找工作,然后决定留下来?

总是如此。当我审视其他角色时,我可能会发现我实际上可以在我的当前公司做的事情。出去寻找那些机会,而不是等待别人给我,这让我感到很兴奋。这符合我更广泛的哲学,即你的当前工作职责应该是一次与你的经理的对话。对于我管理的工程师,我试图进行开放和诚实的对话,让他们告诉我他们正在寻找的机会。然后我可以判断,这些机会是否存在于当前团队中,或者如果我们找不到,是否可以在团队之外找到一个 20%的项目。这样,他们就可以探索一下,看看这实际上是不是他们真正想做的事情。

你看到人们在一个职位上待得太久了吗?

哦,是的。我见过一些人有一种英雄情结,他们觉得自己是唯一能做这份工作的人。真正的答案是,没有人会像你那样精确地执行你的工作,但这并不意味着别人不能做。有时候,某些人留在团队中可能会非常有害,因为他们记得团队曾经遇到的所有问题和小的决定。他们可能会指出:“我们两年前尝试过那个想法,但失败了,所以你不可能尝试。”但这可能会阻碍团队,因为他们没有专注于当前可能的事情——只是关注过去的决策。

我还见过一些人,他们对管理相当失望,他们花了很多时间只是在抱怨。当有关于事情进展的八卦时,他们总是敞开大门,这对公司来说是非常消极的。你不想让那些会把不满转化为影响整个团队的人存在。

最后,我见过一些人,他们的当前角色没有挑战性,只是简单地做他们被要求做的事情。当你刚开始时,这可能没问题,但对于有经验的人和领导者来说,我期望更多。我希望看到有经验的人产生更大的影响和改变。如果你看到一个问题,你应该考虑以可扩展、可重复和解决组织问题的方式解决它,而不仅仅是某种一次性修复。

你能否换工作太频繁?

当我查看求职者时,我可能会质疑一个人是否工作不到一年。作为招聘经理,通过查看人们的职业任期,你试图了解的是他们是否会几个月后离开,因为招聘和入职是一个漫长且昂贵的流程。但尽管在其他行业中,你可能会看到两到三年作为最低标准,在技术领域,我认为这已经是很长时间了。两到三年在技术领域意味着多个项目和多轮周期,所以那时离开对我来说是有意义的;实际上,任何超过一年的情况都是如此。如果你必须因为你的心理或情感健康在一年前离开,这也是有道理的;任何工作都不值得冒险那些。

你对有抱负和新的数据科学家有什么最后的建议?

找到你的社区和可以帮助你的人。我非常受益于有一个亲爱的朋友,他通过推荐我参加演讲机会和帮我分析工作机会来支持我。有一个有经验的人来讨论这些细节是无价的,并且真的帮助我理解了自己的价值,并让我在进入新职位时感到自信。对于寻找社区,有那么多你可以归属的地方,但可能也有一些地方你不会感到归属感。你不必待在一个让你感到不舒服的地方,无论是由于语言、聚集在那里的人,还是群体的焦点。如果你找不到让你感到舒适的空间,寻找一个你希望成为那种群体的一员的人,并询问他们是否可以帮助你组建一个。

摘要

  • 在决定你是否应该寻找新工作的时候,你可以问自己四个问题:你是否仍在学习,你是否已经与你的经理交谈过,看看你的职责是否可以改变,你的经理的职业目标是否与你的一致,以及你是否考虑过你在下一角色中寻找(和不寻找)的东西。

  • 虽然许多在成功的第一份数据科学工作搜索中的原则(你可以在本书的第二部分 part 2 中找到)仍然适用,但对于你的第二份工作,你也应该反思你在第一次工作中的喜好(以及不喜欢的地方)。准备好以尊重隐私的方式分享你的经验,并计划如何平衡面试和全职工作。

  • 在你向你的经理提前两周通知后,专注于如何通过解决任何悬而未决的问题、记录任何目前只存在于你头脑中的内容以及分享任何有用的代码,使过渡对团队成员来说尽可能容易。

第十六章. 向上攀登

图片

本章涵盖

  • 高级数据科学家之外的不同路径

  • 可能职业轨迹的机会和风险

通过本书的最后部分,我们讨论了如何充实你的职业生涯:学会应对失败、加入社区和换工作。随着你的职业生涯加强,你最终会想要决定你的职业将走向何方。数据科学家随着职业的上升会有哪些选择并不明显;成为管理者是一种可能性,但并非唯一。

在本章中,我们讨论了数据科学家常见的三种职业发展路径——转向管理、成为技术领导者以及转向独立咨询,以及每种路径的利弊。

管理选项是人们在考虑职业发展时首先想到的。管理者是领导团队的人,包括招聘和晋升、制定战略和提供职业指导。首席数据科学家是掌握自己领域的人,公司依赖他们来解决复杂的技术问题。独立顾问是拥有足够技能和足够大网络的数据科学家,能够以自由职业为生。参见图 16.1 以了解本章路径的极高层次总结。

图 16.1. 本章的路径

图片

随着你继续构建你的职业生涯,你将想要专注于选择这些路径之一。通过设定明确的目标,你更有可能实现你想要的东西。然而,当你越来越接近实现你想要的机会时,你可能会意识到这并不是你真正想要的东西。幸运的是,改变像成为管理者然后决定你不喜欢它,或者从行业到咨询然后再回到行业,并不罕见。尽管逆转你做出的决定可能很困难,但从中学习错误是个人快速成长的一种方式!

了解你的水平

随着你作为数据科学家的成长,你将获得宝贵的技能(如前 15 章所讨论的)。但随着你的技能集和专业成熟度的增长,在某个时刻,你将不再像初级数据科学家那样工作。确切知道何时发生这种转变很难,这使得决定何时争取晋升或新的职位名称变得困难。请记住,每家公司都有自己的级别和期望,所以相同的头衔在不同的公司可能意味着非常不同的事情。在公司内部,甚至可能有一个技能矩阵详细说明不同级别之间的差异,但人们可能对矩阵有不同的解读,而且总是存在模糊性。为了帮助您,以下是关于数据科学家不同级别期望的高层次指南:

  • 初级数据科学家—— 能够在明确任务方向的情况下完成数据科学任务的人。如果被告知使用聚类算法根据购买属性对新客户进行细分,初级数据科学家应该在经理的指导下完成这项任务。如果出现技术问题,例如代码中的错误或数据系统无法连接,他们可能需要咨询其他团队成员来解决这些问题。

  • 高级数据科学家—— 能够不仅完成数据科学任务,还能想出其他需要完成的任务的人。他们不仅能够通过聚类(如前所述)完成示例细分,还会意识到像相同的算法也可以用于现有客户(然后去做)这样的事实。他们擅长解决技术问题,是当其他人遇到问题时被引入的人。

  • 高级数据科学家—— 在高级数据科学家以上的级别,角色更多地转变为帮助他人。因此,当一个人持续地指导他人、制定策略并看到更大的图景时,他们通常会超越高级数据科学家。

16.1. 管理路径

随着数据科学家职业生涯的深入,进入管理层似乎成了默认选项。这合乎逻辑,因为每个人都有一个他们要向其汇报的人。尽管如此,经理的日常任务仍然可能让人感到神秘。

经理是负责一个团队成功完成其目标的人。以下五项基本任务通常是,但不总是数据科学经理的工作:

  • 确定团队的工作—— 这项工作可以在战略层面进行,例如决定应该承担哪些大型项目。它也可以在更战术的层面进行,例如决定应该将哪些功能包含在产品中。

  • 确定团队人员—— 经理通常在人力资源和其他相关方的批准下决定谁应该被雇佣,谁应该被解雇。他们协调面试流程并在其中发表意见。

  • 指导团队成员—— 团队中的每个人都面临着独特的挑战,管理者帮助他们克服这些挑战。管理者会定期与每个人沟通,并提供建议和推荐,帮助他们解决问题。

  • 解决团队问题—— 如果团队遇到的问题阻碍了工作的进行(例如,如果另一个团队不愿意提供必要的数据访问),那么找到解决方案以便团队可以继续工作是管理者的职责。

  • 管理项目—— 管理者必须跟踪团队内部正在进行的工作,并确保一切按计划进行。尽管许多团队专门指派了项目经理来负责这项任务,但管理者仍然需要保持对工作的监督。

这些任务共同覆盖了广泛的工作范围,并涉及大量的责任。管理者需要与团队内外的人持续沟通。他们需要了解团队成员的表现、项目的进展以及即将发生的事情。这些任务累积起来是一份巨大的工作量,如果其中任何一项任务没有做好,整个团队都会受到影响。

需要注意的是,管理者的基本任务不是技术性的;管理者通常不会创建机器学习模型或提供帮助公司做决策的分析。管理者没有时间做这类工作——即使他们有时间,让向管理者汇报的数据科学家来做会更好。成为管理者意味着放弃许多最初驱动人们成为数据科学家的原因:使用数据解决有趣问题的愿望。相反,工作变成了支持其他人做这项工作。

16.1.1. 管理者的益处

成为管理者有很多好处。首先,如果你是一个讨厌别人做你认为愚蠢的工作的人,那么成为管理者意味着你可以影响情况,让更少愚蠢的工作被做。例如,如果你认为某个机器学习模型对公司有帮助,你可以指派团队去制作它;如果你认为这不是一个好主意,你可以确保团队避免它。能够选择团队的方向并看到团队成功是非常有成就感的。虽然你并不拥有完全的控制权——有时,上级要求做一些事情,或者你团队的人强烈建议做一些事情——但你有很大的发言权。

向管理层晋升通常会从独立贡献者那里获得最初的加薪。管理还打开了通往进一步角色的门:高级经理、总监或副总裁。每个角色都伴随着更高的薪酬和公司在更广泛的领导范围内。你甚至可能达到一个级别,在那里你监督的领域不仅仅是数据科学,比如客户研究或软件开发。你最终可能完全脱离数据科学领域,并在其他领域领导。

如果你喜欢教学和帮助他人,管理是一个非常适合你的角色。你工作中的大部分是帮助你的团队成员成功,通过与他们合作,教授你在职业生涯中学到的知识,并帮助他们解决困难。一位优秀的经理就像一位商业治疗师:他们会与一个人坐下来 60 分钟,帮助他们解决他们的问题。

最后,作为管理者,你可以拥有巨大的影响力范围。作为决定是否开发新产品或扩展到新国家的人,这真的很有趣!随着你在公司中的职位越来越高,你将能够影响越来越多的事情。如果你遵循这条道路,你有一天可能会管理一个公司。

16.1.2. 管理的缺点

管理的最大缺点是你没有时间做数据科学。你的工作将充满诸如讨论数据科学、指导数据科学家和思考数据科学策略等活动,但你不会亲自进行数据科学。你的日子可能会被 30 分钟的会议填满,从决定团队战略到取悦利益相关者以获得资金,再到一对一的会议,帮助表现不佳的员工学习如何改进。

不再以数据科学为职业是一种缺点,原因有两个:

  • 你可能成为数据科学家是因为你喜欢与数据工作,所以你正在放弃你长期训练的工作。

  • 当你不从事数据科学时,随着时间的推移,你将变得缺乏实践,并脱离了最新的变化。如果你决定不喜欢管理并想回到个人贡献者的角色,你可能会发现你的数据科学技能已经退化。

另一个缺点是,你仍然受到上级管理的限制。你可能对你的团队战略有很好的想法,但这些想法可能会被你的上司否定。然后你必须带领你的团队走上司设定的道路,即使你并不认同。为了你团队中的人的利益,不得不保持对你不认同的工作的积极态度,这可能会非常令人沮丧。如果你让你的下属感受到你的挫折,你可能会降低他们的工作满意度。

成为管理者会让你有更多的事情要担心。你必须担心自己的表现,就像你作为一个个人贡献者时一样,但你还得担心你团队其他人的表现。你必须担心他们的职业满意度,你必须担心在你之上的政治环境。你必须担心团队是否会获得资金,以及一个进展缓慢的项目是否会取消。拥有这么多担忧,其中大多数都不在你的直接控制范围内,对于某些性格类型的人来说可能会非常具有压力。如果你有工作带回家的困难,那么管理可能不适合你。

最后,管理人与作为数据科学家所需的技能完全不同。当你转变为管理者时,你必须学习这些新技能,并回到工作的初学者状态。从工作出色转变为新手可能会很压力很大,也很痛苦。尽管你最终会掌握它,但成为一名优秀管理者的旅程是漫长的。

16.1.3. 如何成为一名管理者

如果你是一名独立贡献者并想成为一名管理者,你需要找到机会发展和练习领导技能。这些技能包括与比你更年轻和年长的其他人良好合作,看到更大的图景,以及管理项目的时间表。

很遗憾,没有单一的途径可以学习这些技能;你所能做的最好的事情就是在你当前的工作中找到可以成长的机会。一个例子是在你的团队中启动一个小型倡议,需要有人负责,比如设置新的软件栈或协调新模型的推出。这些情况的重要部分在于你是领导者,是做出决策的人。一开始这可能感觉非常不自然;这种感觉是完全正常的,会逐渐消失。关于管理和商业的书籍可能会有所帮助,但只有在你有机会使用你所学到的知识时。

当你觉得自己已经具备了成为一名管理者的技能时,下一步就是寻找一个职位。

在公司内部获得晋升

通常,成为管理者的最直接途径是在公司内部获得晋升。这种方式可能最容易,因为决定让你担任管理者角色的人是那些已经观察你在当前工作中技能增长的人。这条途径的困难之处在于公司需要新的管理者:要么你的当前管理者必须辞职或晋升,要么相关团队需要开放一个管理者职位。根据你的公司,这些情况可能很少发生,甚至从未发生。

自己培养一个新的团队

另一条途径是通过自己培养团队来成为一名管理者。你可以在当前公司启动一个项目,最终需要更多的人手,或者成为一家新公司的首位数据科学家,然后在该公司培养团队。这条途径可以非常令人满足,因为通过自己培养团队,你可以在团队的人员构成和运作方式上拥有强大的影响力。这项工作要求你在正确的时间和地点,并且要成为一个足够强大的领导者,能够迅速发展整个团队的基础设施。有时,采取这种做法的人被称为球员-教练,因为他们既是团队的第一位独立贡献者,又成为他人的教练。不幸的是,创建自己团队的机会甚至比之前提到的路径还要稀少。

在新公司获得管理者职位

最后一种方法是加入另一家公司的开放管理职位。这条途径依赖于能够证明你拥有管理技能,而之前并没有真正担任过管理者。在你的求职信和面试中,你需要谈论你作为独立贡献者所领导的所有项目和所指导的所有人。你应该能够通过分享你的简历时得到的关注程度来判断你是否有机会走这条路;公司急需优秀的数据科学管理者,所以如果你的简历看起来不错,你应该会得到回应。

罗布·斯塔姆,负责监督 T-Mobile AI 团队的总监:学习管理

在我的第一次全职管理角色经历中,我学到了很多关于如何成为一名管理者的知识。在那之前,我是一名产品经理,这意味着指导产品的方向和发展(但不涉及人员)。然后,作为一名新聘的高级经理,我必须监督几位不同的产品经理并帮助他们完成工作。我最终在这个角色中彻底失败了。我想成为一名高级经理并领导一个团队,但我没有停止做产品管理的工作。我没有让团队完成他们的工作;我一直在为他们做。

四个月的工作后,一位产品经理走进办公室告诉我,他们打算辞职,而我所做的事情就是原因。这对我是一个非常大的启示,那就是你不能既是管理者又继续尝试成为个人贡献者。这是第一次有人指出,管理者必须让他们的团队能够做出决策,这一点对我影响深远。

最终,我从那次经历中学习和成长,开始领导更大的团队和更大的项目。成为一名领导者是非常有回报的:我的工作是帮助我的团队发挥最佳水平,当我看到结果时,我感到非常满足。在 T-Mobile 的一个特别令人满意的项目是帮助 AI 团队从一个想法和一些资金开始,发展到一支大型团队的资助。虽然我没有设计产品或编写代码,但当团队遇到困难或需要资源,如资金或人员时,我能够帮助他们。这本身就是一种回报。

16.2. 主要数据科学家职位

主要数据科学家(或根据公司情况,可能是高级、首席、数据科学家 V、技术负责人或其他头衔)是组织中一个专家,其工作是在数据科学方面提供专业知识并帮助他人完成技术任务。成为管理者意味着逐渐减少数据科学的工作量,尽管作为主要数据科学家可以让你做更多。但除了自己进行数据科学(尽管你将做很多)之外,你还将被要求帮助其他数据科学家完成他们的工作。

主要数据科学家通常从初级数据科学家开始,晋升为高级数据科学家,并继续在这些角色之外成长。随着他们在数据科学职业生涯中的成长,他们在理解问题和解决问题的能力上变得更加经验丰富和成熟。很快,他们知道得如此之多,以至于当其他人遇到困难时,他们能够迅速介入并提供帮助。公司里的人都会来找他们,寻求关于如何处理问题以及什么可能有效(或无效)的建议。

主要数据科学家的工作涉及多个职责:

  • 影响数据科学策略—— 主要数据科学家必须制定解决数据科学问题的计划。建模支付欺诈是否可行?是否应该使用神经网络?经理负责想法和商业计划;主要数据科学家则负责如何实施。

  • 指导初级数据科学家—— 由于主要数据科学家拥有丰富的经验,他们有责任将他们所知道的知识与更年轻的员工分享。他们的成长与主要数据科学家自己的工作一样重要。

  • 解决难题—— 当数据科学团队受到一个棘手的技术问题困扰时,主要数据科学家是负责制定解决方案或宣布无法解决的问题的人。

与经理相比,主要数据科学家仍然非常从事数据科学工作。因此,这个角色非常适合那些热爱成为数据科学家的人。如果你所想的都是数据科学,并且你喜欢参加会议,成为社区的一员,以及了解更多关于技术和方法,你将作为主要数据科学家继续做这些事情。由于主要数据科学家对团队的重要性,这个角色需要一个人具有成熟度、责任感,以及在数据科学方面有足够的经验,以便在需要时快速适应新领域。

尽管主要数据科学家的工作与数据科学相关,但主要数据科学家很少从事个体贡献者工作,如进行单一分析或创建机器学习模型。这些任务需要大量的时间和统一焦点,而主要数据科学家必须将他们的工作分配到许多项目和领域。数据科学项目通常落在初级和高级数据科学家身上,尽管主要数据科学家负责协调和监督它们。

要求晋升

在某个时候,你可能会觉得自己已经准备好在更高的水平上工作,但你还没有得到晋升。这种情况可能会让人感到沮丧(你可以看到为什么你准备好了;为什么其他人不能呢!?),但这并不是没有希望的。为了帮助推进这个过程,你能做的最好的事情就是为自己辩护。让你的经理知道你对晋升到更高层次的位置感兴趣,并且你希望与你的经理一起制定一个达到那里的计划。如果你的经理很好,他们应该对此感到高兴:通过明确表示你准备好做出改变以实现下一个职位,你打开了关于如何实现这一点的对话。尽量设定一个具有具体日期的目标,比如下一个绩效评估周期,以晋升。目标应该尽可能具体,例如“在公司进行三次技术演示”或“独立创建和部署整个机器学习 API。”通过设定具有时间表的具体目标,你将能够持续讨论你是否在取得进展。

如果你的经理在告诉你为什么你还没有准备好,请认真倾听。虽然听到负面反馈很难,但你的经理对你的晋升所需条件有一个你不具备的视角。如果你的经理告诉你他们认为你准备好了,并想在晋升过程中为你辩护,尽量给他们提供尽可能多的关于你所做的一切以及你为什么能够胜任新工作的文件。这些文件可以帮助你的经理推动你前进。

如果你感觉无论做什么,都无法得到你寻求的晋升,这可能是一个迹象,表明是时候转到另一家公司了。有很多时候,人们习惯于看到某人在特定角色上,以至于他们不愿意冒险将这个人放到新的角色中。通过更换公司,你将有机会与一群没有对你能做什么有预期的人一起工作,他们可能会给你更多的机会。

16.2.1. 成为首席数据科学家的好处

首席数据科学家通常会遇到最有趣的问题。如果团队有一个全新的数据科学方法的想法,之前没有人尝试过,你将参与首次尝试。如果需要整合一个复杂的技术堆栈,你也会在那里。如果项目应该启动,但团队就是无法让模型工作,你也会在那里。置身于行动的中心可以是非常满足的。在技术方面很有趣,而且随着你一次又一次地证明自己的有用性,你会感到自己的价值得到了认可。团队会意识到简单的、琐碎的数据科学项目不值得你有限的时间,这意味着你将不得不比大多数数据科学家做更少的这类项目。

你的经理也会明白紧跟技术发展对你来说有多么重要,这意味着你很可能会有资金去参加会议,并有时间去尝试新技术。根据你的经理,你可能会被期望在会议上发表演讲来推广你的公司,但因为你一直在处理有趣的问题,你很可能已经完成了值得分享的工作。如果你向你的经理申请资源,比如尝试新云服务的资金,你通常会得到。你的经理会信任你有效地利用时间和预算,而不是浪费它,这不是每个数据科学家都能得到的。

你还将有机会一直谈论数据科学。因为你将指导资浅的数据科学家,你可以告诉他们不同的方法,与他们一起磨练他们的想法,并指出数据科学方法可能存在问题的领域。对于一个喜欢数据科学的人来说,这个角色可以相当有趣。

制定数据科学计划可以非常有力量。作为决定使用哪些类型模型、如何结构化数据和如何界定项目范围的人,你更有可能看到项目按照你想要的方式进行。而且因为你是一位数据科学专家,项目成功的可能性也更大!更资浅的数据科学家并不总是有机会设计数据科学方法、执行它并亲自看到结果,除非有人为他们做出关键决策。

16.2.2. 首席数据科学家的缺点

作为首席数据科学家的最大问题是,当你遇到难题时,没有人可以求助。资浅的数据科学家通常有一个导师或高级数据科学家可以提问,或者他们甚至可以进行谷歌搜索来找到他们问题的答案。作为首席数据科学家,你可能在团队中没有比你更资深的数据科学家。你将面临的问题通常非常不寻常或独特,以前没有人遇到过,因此谷歌搜索也无法提供答案。因此,你需要能够在没有帮助的环境中工作,这对许多数据科学家来说可能是压倒性的。

尽管你将有机会参与最有趣的数据科学问题,但你可能也会面临最令人烦恼的问题。例如,如果一个数据集以数年来无人触碰的、格式糟糕的 .csv 文件形式存储在服务器上,且没有人为其了解的架构,你将被叫去弄清楚如何使用这些数据。这个问题其实并不有趣;它只是一个无人能导航的雷区。你将面临许多类似的问题,而且你可能无法将解决方案委托给其他人。

由于你的知识非常广泛,你将会非常受欢迎,并且非常忙碌。你经常会发现自己工作量超过了可用时间,不得不放弃一些有趣的项目,因为你没有足够的时间和精力去处理它们。很容易陷入一个习惯,那就是工作更长的时间,但仍然感觉做得不够。因为很多人依赖你,只有 40 小时的工作周或没有笔记本电脑的周假对你来说可能很难实现。如果你想要一份轻松愉快的工作,首席数据科学家可能不是你的选择。

16.2.3. 如何成为首席数据科学家

如果你作为数据科学家工作并继续发展你的职业生涯,你默认会变成首席数据科学家。这个角色是高级数据科学家角色的自然发展;它是该角色的扩展版。不幸的是,许多高级数据科学家在晋升到下一个级别时都遇到了困难。要具备成为首席数据科学家的资格,你需要足够强大的数据科学能力,能够有效地独立工作并领导他人。然后你需要突出你的能力和贡献,并找到公司里支持你的人,以便你作为团队的关键部分而广为人知。有了这些资格,你可以为晋升到这个更高的角色进行辩护。

要作为数据科学家独立工作,你需要能够独立处理完整的项目,而不需要外部指导。如果你的经理给你一个任务,比如“分析我们应该在哪里开设下一个零售店”,他们需要能够信任你可以在没有他人帮助的情况下完成这项工作,并且不会陷入困境而不告诉任何人。随着你作为数据科学家的成长,独立工作的能力应该随着你对工作的熟练程度而自然提高。为了加速这种成长,尝试注意自己在遇到困难时的反应以及你采取的行动。如果你寻求帮助,这种帮助提供了你独自无法完成的东西?你能够最大化自己解决问题的次数,那就越好。

随着你获得经验,你也应该关注你周围的数据科学家。他们面临什么问题,你能否帮助他们?如果你是更高级的数据科学家,那么初级员工可能正在处理你过去遇到过并解决的问题。你能找到更多技术指导的机会,你帮助他人的能力就会越强——这对首席角色来说是非常好的。

最后,随着新想法的出现,寻找您可以创造方法的情境。例如,如果公司想要找到零售店的位置,您可能会想出使用位置优化技术的想法。您的想法可能有效也可能无效,但如果有效,您会看起来很棒;如果无效,您将了解更多关于提出想法的知识。依赖其他数据科学家来制定方法很容易,但没有这种技能很难成为主要数据科学家。

16.3. 转向独立咨询

成为老板并拥有自己的公司是一个常见的梦想。在数据科学领域,这通常意味着成为一名独立顾问:拥有一个公司可以雇佣来处理专门数据科学项目的业务。从理论上讲,公司只有在需要解决重要问题的特殊技能时才会雇佣外部顾问。如果您在经营自己的公司,您可以保留所有的收入,因此不会在上面的肥猫高管那里损失任何钱。人们会雇佣您,因为他们相信您是一位伟大的数据科学家,因此您将因您的专业知识而受到重视。

作为一名独立顾问,您必须是一个完整的公司,这意味着您必须做很多事情,例如

  • 推广您的业务— 您的公司除非人们了解您,否则无法获得新客户。这可能意味着参加会议、与老同事会面,或者创建如博客文章之类的促销材料。

  • 进行销售— 当您找到一家公司有兴趣雇佣您的公司进行数据科学项目时,您需要与该公司的人见面,并为这项工作提出建议。如果您不能让他们对这个建议感兴趣,您将无法获得这项工作。

  • 执行项目— 这项工作是您被雇佣进行的数据科学工作。它还包括项目管理,以确保事情按计划进行,并处理可能出现的任何情况(如数据质量差)。

  • 交付结果— 当您创建了模型或完成了分析后,您需要向客户展示您所做的工作,并让他们接受它。如果他们喜欢,您可能会得到后续项目,如果不满意,您可能会失去这个客户。

  • 管理业务— 企业需要做一些事情,比如缴纳税款、创建法律文件、跟踪账户和现金流,以及执行许多其他小任务,这些任务随着时间的推移会累积起来。

完成所有这些任务需要技能,这些技能远远超出了数据科学家的范畴,才能作为一个有效的顾问发挥作用。

根据你作为顾问得到的客户类型,你的工作可能一半是数据科学,另一半是所有其他维持业务运转的工作。工作将有一定的流程:你将为一家客户公司工作在一个项目上,随着项目的结束,你将接近与另一家不同公司的另一个项目的交易。此外,工作的到来将是不规则的:你可能会发现,在一个月内,有三家公司要求你投入时间,而下一个月,没有人有工作可提供。

寻找客户往往是独立顾问工作中最困难的部分,需要投入和强大的网络。大多数客户通常来自前同事或客户的推荐。知道顾问并能为其工作作证的人越多,接到的活就越多。因此,为了使顾问成功,许多人(理想情况下,那些有权力雇佣顾问的人)必须了解顾问的专业技能。不同公司和行业之间的联系网络越多样化,在不同时间接到工作的可能性就越大。拥有如此强大的网络要求顾问在之前已经与许多不同的公司合作过,要么是通过在职业生涯早期多次更换工作,要么是通过在一家大公司担任顾问。

如果你作为一个独立顾问取得了成功,你就有机会开始雇佣更多的人并扩大业务。公司可以从只有你一个人发展到拥有 5 人的团队,再到 100 人的组织。作为该组织的首席执行官和创始人,你将有机会按照你想要的模式和想要的文化来引领它。通过从所有其他顾问带来的收入中抽取一部分,你可能会发现自己变得富有。尽管这种结果很少见,但作为一个独立顾问,可能是本章中所有路径中最有利可图的。

16.3.1 独立咨询的好处

作为一名独立顾问,你可以成为自己的老板,这意味着你可以选择是否接受可能的数据科学项目,采取什么方法,以及如何展示结果。你不必依赖任何人,这对某些人来说可能是极其自由的。如果你能控制成本,保持高收费,并保持一组稳定的客户,你的业务可能非常有利可图。你有机会赚到的钱是你在公司工作的两倍或更多。如果你想在家工作或休息一天,你有权力这样做,而无需与任何人争论。

你也拥有你所创造的东西的所有权。如果你想出一个有趣的解决问题的方法,你可以决定申请专利或者将其作为你公司的产品进行市场推广。没有人有权力拿走你的工作,而如果你为别人的公司工作,公司可以声称你的想法是其知识产权。如果你能够提出一系列有用的产品,这个产品组合可以让你维持多年。

咨询可以很有趣!在全国各地飞来飞去,帮助人们用你的想法,并以你自己的公司名义做所有这些事情,这有一种特别的刺激感。当许多人愿意为你的时间付费时,这可以是非常有成就感的。如果客户喜欢你提供的解决方案,并且知道是你自己做的这项工作,这也会感觉非常好。

16.3.2. 独立咨询的缺点

成为独立顾问的缺点令人震惊(实际上如此繁重,以至于在本节中我们将大量使用粗体字体):

  • 独立咨询非常具有压力。 你是否能在一个月内得到报酬完全取决于人们是否决定雇佣你,这通常是由于你无法控制的因素(例如公司预算)。相反,你可能会发现自己有比你能处理更多的任务,你必须决定哪个项目可以推迟。你通常必须在完全访问数据之前出售咨询项目,以查看项目是否可行,你必须想出如果不可行的话要做什么。作为顾问,有无数种方式会让你夜不能寐。

  • 独立咨询可能会让你破产。 如果你成为全职独立顾问并且找不到机会,你会很快失去钱。即使你能签订咨询合同,大公司通常会在工作完成后 90 天或 120 天后支付,这可能是你开始后的半年之后。如果你无法处理这种现金流的巨大波动,你将无法成为顾问。

  • 你将没有人可以求助。 如果你作为独立顾问独自工作,人们雇佣你是因为他们有一个无法解决的问题,所以可能没有人可以让你提出想法。你将独自一人。如果你在执行分析或使模型工作时有困难,你将被迫自己找到解决方案;否则,你必须告诉客户你失败了。

  • 你的工作不会太多是数据科学。 你将花费在市场营销、谈判销售、撰写合同和会计上的时间与你在做数据科学上花费的时间相比将感觉非常巨大。仅仅成为一名强大的数据科学家是不够的;所有这些其他工作对于你的咨询公司生存是必要的。

16.3.3. 如何成为一名独立顾问

要成为一名独立顾问,你需要一套强大的数据科学技能,以及在工作中独立解决问题的记录。你还需要一个了解你能力的人脉网络,无论是通过在多家公司工作,或者(更好)通过在大型咨询公司工作。

你可以在业余时间通过做自由职业的数据科学工作来试探市场。建立一个网站,在 LinkedIn 上发帖,让人们知道你可以提供帮助。如果你能够找到客户,你会在晚上做自由职业工作时了解更多关于咨询的信息。如果你发现自己晚上没有精力工作,你可能不会喜欢做顾问。如果你无法找到自由职业客户,这可能意味着你的人脉不够广,你应该首先关注这一点。

如果你发现自己有太多的自由职业工作,以至于难以继续全职工作,那么现在是时候过渡到全职独立顾问了。在这个阶段,你可以开始专注于咨询,如果你能找到一组核心客户开始,你可以辞去工作,转向全职咨询。

离开数据科学

最后一条路是完全离开数据科学。也许你会发现这项工作不再有趣。也许工作量与你的工作/生活平衡需求不一致。也许你发现自己处于一个必须为了不道德的目的使用数据科学的职位,而你无法再继续这样做。有很多原因说明数据科学不是适合每个人的领域,这没有什么可耻的。

给出关于如何离开这个领域的建议是困难的,因为你的离开方式很大程度上取决于你将要进入的领域。数据科学简历对于软件开发或工程等相关领域来说是一个容易的招聘对象。而其他领域可能更难过渡。但正如你可以尽量让之前的工作听起来像数据科学一样(第六章),你也可以尽量让数据科学的工作听起来像另一个领域。

如果你真的离开了,你可能会发现自己想要在将来回来。在你离开数据科学之后,只要你能定期做一些小项目或者努力跟上这个领域的发展,当你准备好回来时,你应该能够赶上你错过的内容。在这种情况下,这就像是从这本书的开始重新开始,只是背景要强大得多。

尽管数据科学目前作为一个热门领域有很多营销和炒作,但不要让它让你觉得你必须留下来;你的幸福是最重要的。做对你正确的事情。

16.4. 选择你的道路

在本章中,我们介绍了三条在数据科学领域成长的道路,但你还有很多其他的选择。所有这些选择都可能令人不知所措,而且大多数情况下,在做出重大承诺之前,你无法尝试一条道路。你如何知道哪条职业道路适合你?

真相是,你无法知道。你无法知道哪个选择是“正确”的,因为没有正确的选择。这些决策取决于你正在与之合作的公司、你周围的人以及你在生活中的个人兴趣。你只能做出对你来说感觉最好的选择,不要过于担心错过的机会。

这本书中反复出现的一个观点。正如没有正确的方法来学习数据科学技能或一个正确的公司类型来工作一样,也没有最好的方法来导航你职业生涯的高级部分。你只能用你所拥有的知识来做对你最好的事情。我们希望这一章能为你提供足够的知识,使导航这些职业选择变得更容易一些。

16.5. 与 iRobot 数据科学、数据工程和机器学习负责人 Angela Bassa 的访谈

Angela Bassa 是 iRobot 的总监,她负责监督整个组织的数据工程、数据科学和机器学习工作。她之前曾担任顾问、高级经理和分析师总监,拥有数学学士学位。

作为一名管理者,日常的生活是怎样的?

这实际上取决于组织的复杂性,这通常与其规模有关。当你有三个人时,你有三条连接他们的边;当你有七个人时,你需要指数级更多的边来确保每个人都相互连接。如果需要协调不同产品、团队、目标和时间表,那么将需要很多会议。我大约用三分之一的时间进行战略协调,以确保我们在正确的方式和正确的理由下做正确的事情。另外三分之一的时间用于与我的团队一起工作,通常是通过充当一个回声板,帮助他们提供背景或反馈。最后三分之一的时间是行政性的。例如,预算是否在计划之内?每个人是否都有他们报名参加的培训和发展所需的资金?如果即将举行一场非常有趣的女性会议,而我团队中有许多空缺,我会想要赞助那个会议吗?

你应该从独立贡献者转变为管理者的迹象是什么?

决定成为一名管理者需要大量的自我反思、自我意识和开放心态。找到成为管理者最有可能成功的时间点与在专业和个人上都处于进行如此重大转变的位置有很大关系。管理是一个不同的职业:它有不同的技能组合和不同的风险特征。如果你作为一个个体贡献者犯了错误,你实际上只掌握着自己的命运。当你管理其他人时,你处理的责任是别人的医疗保健或别人支付租金的能力。但我确实认为任何人都可以成为管理者,如果你担心成为管理者,那么你可能是一个很好的候选人。

你最终必须从独立贡献者的角色中过渡出来吗?

数据科学作为一个职业是如此的新兴,以至于选择进入这个职业的人仍然有很大的自我选择。我们中的许多人都是雄心勃勃的进取者:我们正在开辟一条全新的职业道路,因为我们就是这样的人。但如果你看看其他职业道路,比如会计,他们不会很快晋升;你可以绝对地成为一名高级会计师很长时间。可能发生的情况是,你可能会达到薪酬增长或知识增长的极限。如果这是你的职业目标之一,我认为喜欢自己现状的人没有问题。然而,仍有如此多的有才华的专业人士涌入数据科学作为职业,如果我发现有人渴望并为之努力,那么在决定要引进谁时,我更有可能偏向于这种性格类型。

你对那些想成为技术领导但还没有准备好的人有什么建议?

找一个可以与你进行坦率和开放对话的人,这样你就不会只是在自己脑海中思考。这可以帮助你获得具体的反馈,并理解你需要提高的地方。拥有一个已经在技术领导角色中取得成功的人也可以帮助你理解他们需要达到并成功在那个位置上所需的东西。当你调查自己的技能组合时,你会看到自己的盲点。有趣的是:我们接受成长需要大量的沟通和协作,养育一个家庭需要整个村庄,但在专业上,我们期望每个人都能独自完成所有事情。最好的成长方式是找到那些支持你的人,并愿意听取他们的反馈。

你对有抱负和初级数据科学家有什么最后的建议?

我的第一个建议是保持谦逊。很容易相信自己是山上的国王和王后,因为数据科学是“最性感”的职业,而且任何雇主都应该在我们走过时在我们脚下撒玫瑰花瓣。记住,要使产品成功需要许多人,而且仅仅因为数据科学处于聚光灯下并不意味着它更好或更特别。

第二个建议是保持善良。对自己严厉很容易,尤其是因为数据科学如此广泛,可以意味着许多不同的东西。如果您擅长分析但不太擅长机器学习工程,您可能会觉得自己不是一个“真正的”数据科学家。但您是!有无数种方式可以发光。

摘要

  • 管理是一个适合那些想要帮助他人但愿意放弃数据科学的人的绝佳路径。遵循这条路径最终可能导致在公司中担任高级职位。

  • 主数据科学家可以在技术方面领导,并需要对他人负责。这个角色是一个在帮助他人的同时保持技术的绝佳选择。

  • 独立咨询压力很大,风险也很大,但可能也有回报。您需要强大的联系网络来持续找到工作。

第 13-16 章资源

书籍

《日常事物的设计》,由唐·诺曼(Basic Books)著

这本经典书籍介绍了设计领域的想法,并讨论了如何在任何类型的工作中思考设计。能够理解用户以及设计如何影响他们的行为对于产品的成功至关重要。通过阅读这本书,您将更好地理解利益相关者的需求,并降低数据科学项目因不符合客户需求而失败的风险。

《自我同情:对自己温柔的力量》,由克里斯汀·内夫博士(HarperCollins Publishers)著

如果第十三章中讨论人们失败时心理上如何自我折磨的部分让您产生共鸣,您会想阅读这本书。它深入探讨了作者与自我批评的斗争以及她对自己温柔的过程。这是一条许多数据科学家都应该走的道路,这本书是通往这条道路的绝佳指南。

《揭秘公众演讲》,由拉拉·霍根(A Book Apart)著

拉拉·霍根是一位在工程领导力方面广受欢迎的公众演讲者,她写这本书是为了给人们提供实用的建议,帮助他们开始演讲。在这本简短而引人入胜的书中,她涵盖了从选择主题到制作演示文稿再到处理紧张情绪的各种策略。

《R 包》,第 2 版,由詹妮弗·布莱恩和哈德利·维克汉姆(O’Reilly Media)著

这本书涵盖了如何创建 R 包的细节,这是一种提升您自身工作流程的绝佳方式,以及如何回馈社区。截至 2020 年 1 月,这本书仍在开发中,但您可以在 r-pkgs.org 找到正在进行的副本。

《弹性管理》,作者 Lara Hogan(A Book Apart)

这本书是一本优秀的、简短的指南,适合任何新任经理,其中包含了了解团队成员、指导、设定期望和处理挑战的建议和模板。即使你并不打算成为一名人事经理,如果你开始领导项目或在与团队成员沟通方面遇到困难,这本书也会非常有帮助。

《经理之路:技术领导者导航成长与变革指南》,作者 Camille Fournier(O’Reilly Media)

如果你正在考虑从数据科学家转向技术领导或管理者,这本书非常适合你。由前 Rent the Runway 首席技术官 Camille Fournier 撰写,这本书通过探讨如何思考管理者的工作并摆脱独立贡献者的心态来指导你。阅读这本书将帮助你理解可能需要自己花费数年才能弄清楚的想法。

《E-Myth 重访》,作者 Michael E. Gerber(HarperCollins 出版社)

尽管这本书与数据科学完全无关,但对于考虑成为独立顾问或以其他方式创业的人来说,这是一本极好的资源。它讨论了随着你经营业务,思考工作框架需要如何改变。你需要从专注于完成任务的人转变为必须系统化他们所做的一切以保持业务持续运行的人。

《高产出管理》,作者 Andrew S. Grove(Vintage)

经营一家企业是一项复杂的任务,需要大量的战略思考。《高产出管理》通过如送早餐这样易于理解的案例来分解概念,是那些想要了解更多关于企业管理的人的有用资源。这本书于 1983 年撰写,但自那时以来已经更新并经受了时间的考验。

博客

“与个人品牌和平共处”,作者 Rachel Thomas

www.fast.ai/2017/12/18/personal-brand

Rachel Thomas 在数据科学领域和社交媒体上为自己做了出色的品牌建设,这篇博客文章提供了如何在保持自我舒适感的同时做到这一点的视角。

Lara Hogan 的博客

larahogan.me/blog

我们在前一节推荐了 Lara Hogan 的两本书,她的博客同样充满了关于你需要成功所需的软技能的宝贵建议。尽管她的大部分帖子都关注管理者,但她也提供了适用于任何人的建议,包括如果你的管理者不支持你时应该怎么做,如何提供反馈,以及在你思考“为什么领导就不能……?”时的情绪处理。

“幻灯片设计的艺术”,作者 Melinda Seckington

missgeeky.com/2017/08/04/the-art-of-slide-design

这个五部分系列(每个后续帖子都在底部有链接)是制作有效幻灯片的专家课程。Seckington 分享了幻灯片设计的原则——最大化信号,最小化噪音,使重要信息突出,展示和讲述,并保持一致性——并通过许多示例和反例来阐述这些原则。

“克服社交焦虑参加用户组”,作者 Steph Locke

itsalocke.com/blog/overcoming-social-anxiety-to-attend-user-groups

如果社交焦虑阻碍了你参加聚会或会议,请查看 Steph Locke 的这篇帖子。她用简短实用的建议解决了常见的担忧,例如“我不知道任何人”或“我该如何与人交谈?”

“如何请求晋升”,作者 Rebecca Knight

hbr.org/2018/01/how-to-ask-for-a-promotion

本文分享了两位领导力教练关于如何请求晋升的建议。每个建议,如“播种种子”和“做一些研究”,都附带一段具体的例子。

后记

好吧,我们确实涵盖了很多内容。我们从定义数据科学以及你需要哪些技能来做它开始,然后介绍了如何准备和获得数据科学工作,接着讨论了如何在领域内成长和繁荣。在 16 个章节中,我们从理解不同类型的公司到为生产模型编写单元测试,再到成为一名管理者。

当你从整体上看待这本书时,似乎有几个趋势贯穿其中。这些经验教训以不同形式适用于数据科学家旅程的各个阶段。对我们来说,这三个理想一直推动着我们的职业生涯不断前进:

  • 数据科学家需要能够沟通。 我们在为这本书采访的人反复提到,他们的成功来自于有效地传达他们的工作。无论是为高管制作报告、与工程团队合作模型,还是以非数据科学家能够理解的方式说话,这都可以帮助你找到工作并与其他人一起工作。

  • 数据科学家需要积极主动。 数据科学家很少会得到一个完美形成的问题和解决问题的工具。相反,数据科学家需要主动寻找数据,为模型创造新想法,并尝试实验。积极主动地做事,比如制作个人作品集,也会帮助你找到工作。你越能主动解决问题,效果就越好。

  • 数据科学家需要社区。 没有人在没有他人帮助的情况下在任何职业中取得成功,但作为新兴且快速发展的领域成员,数据科学家特别受益于建立强大的专业关系。这些关系可以采取多种形式。赞助人可以推荐你作为会议的演讲者,两年后,这可能导致在国际会议上发表主题演讲。导师可以对你的简历提供反馈,并将你推荐到他们公司的一个职位。经理可以帮助与利益相关者建立联系,并提出个人成长领域。或者,同事可以在你工作艰难的一天后简单地安慰你,提振你的精神。花时间建立这些关系来应对你职业生涯中面临的许多挑战是值得的。

我们希望您喜欢阅读这本书;我们当然喜欢写这本书。在创作这本书的过程中,我们发现我们自己的许多经验都融入其中。在写作过程中,我们甚至多次重新阅读,以便更好地思考自己的职业决策。我们祝愿你在数据科学职业旅程中一切顺利!

附录. 面试问题

通常,准备面试最有帮助的事情是进入那种即将到来的状态。能够舒适地回答问题并以适合面试快速思考的方式思考,这可能是得到工作与否的区别。因此,我们为你提供了示例面试问题,让你思考和理解。你应该将这些问题与第七章一起查看,该章节讨论了如何整体看待面试过程。

本附录中的问题分为五个类别:

  • 编码和软件开发

  • SQL 和数据库

  • 统计学和机器学习

  • 行为学

  • 脑筋急转弯

这是一个广泛的主题范围,不可能为可能被问到成千上万个问题做好准备。一家公司可能会要求你反转一个二叉树,而另一家公司可能只要求你回答 Python 和行为问题。这就是为什么我们建议在到现场面试之前询问可以期待哪些类型的问题。当然,你不会得到确切的问题,但招聘经理或招聘人员应该给你一个大致的概念,这样你就可以集中准备。他们可能会说,例如,“在你的第一次面试中,你将在白板上回答一些 SQL 问题。然后你将连续进行两次行为面试,一次是与工程师进行的,一次是与数据科学家进行的。最后,我们的机器学习工程师会询问你之前的数据科学项目。”

在你的求职过程中,你几乎不可能只看到附录中涵盖的问题。这就是为什么我们不仅为每个问题提供了答案(包括我们可能会大声说出的文本以及我们会在白板上编写的任何代码),还提供了我们认为有效的答案的注意事项。所有答案都是从一个假设的数据科学家的第一人称视角给出的,这位数据科学家拥有与本书作者类似的经验组合。对于一些问题,我们借鉴了我们在过去工作中积累的经验;你应该尝试为这些问题想出自己的例子。

其中一些问题来自我们经历多次面试的共同经验;其他问题则来自其他数据科学家。非常感谢所有帮助使这个附录更加有用的人!

A.1. 编码和软件开发

A.1.1. FizzBuzz

编写一个程序,打印从 1 到 100 的数字。但对于 3 的倍数,打印 "Fizz" 而不是数字,对于 5 的倍数,打印 "Buzz"对于既是 3 的倍数又是 5 的倍数的数字,打印 "FizzBuzz"

示例答案

这是该问题的一个解决方案的伪代码:

for (i in 1 to 100) {
    if (i mod 15) {
        print("FizzBuzz")
    } else if (i mod 5) {
        print("Buzz")
    } else if (i mod 3) {
        print("Fizz")
    } else {
        print(i)
    }
}

程序遍历数字 1 到 100。对于每次迭代,它首先检查该数字是否能被 15 整除,如果是,则打印“FizzBuzz”。如果不是,它检查该数字是否能被 5 整除,如果是,则打印“Buzz”。如果不是,它检查该数字是否能被 3 整除,如果是,则打印“Fizz”,如果不是上述任何一种情况,则打印该数字。

备注

这个问题在软件开发中是一个非常著名的面试题,由 Imran Ghory 创建并由 Jeff Atwood(blog.codinghorror.com/why-cant-programmers-program)推广,因此在数据科学面试中经常遇到这个问题。其中的两个主要任务是确定如何遍历所有数字的集合(在示例中我们使用了for循环)以及在每个数字处应该打印什么。一个常见的错误是在检查数字是否能被 15 整除之前先检查它是否能被 3 或 5 整除,但任何能被 15 整除的数字也能被 3 或 5 整除。因此,如果先检查 3 或 5,那么在应该打印“FizzBuzz”的情况下可能会打印“Fizz”或“Buzz”。

尽管我们提出的解决方案很简单,但仍有改进的方法。在某些语言中,包括 R 和 Python,你可以通过使用 R 中的 purrr 或 Python 中的列表推导式来采取更干净的函数式编程方法。你也可以创建一个通用函数,该函数接受要检查的倍数列表和在这些倍数处打印的单词作为输入,并输出任何列表。根据面试的进展情况,你可能想谈谈你想要改进答案的方法。

为了娱乐,可以查看 FizzBuzz 企业版(github.com/Enterprise-QualityCoding/FizzBuzzEnterpriseEdition)或 FizzBuzz TensorFlow 机器学习模型(joelgrus.com/2016/05/23/fizz-buzz-in-tensorflow)。

A.1.2. 判断一个数字是否为质数

编写一个函数,给定一个数字,如果它是质数则返回 true,否则返回 false。假设没有内置函数来检查一个数字是否为质数。

示例答案

下面是解决该问题的一个解决方案的伪代码:

is_prime = function(n){
    for (i in 2 to n / 2) {
        if ((n mod i) == 0) {
            return FALSE
        }
    }
    return TRUE
}

一个质数是指除了 1 和它本身外不能被任何其他数字整除的数。程序遍历从 2 到给定数字一半的所有数字,检查给定数字是否能被它们整除。如果可以,函数返回false并停止。如果整个for循环都没有停止,则函数返回true

备注

与 FizzBuzz 问题类似,这个问题测试你是否能编写一个 for 循环和一个函数。你还需要知道如何在达到某个条件时停止迭代,以便在 for 循环完成后安全地返回 true。你可以添加一些小技巧,比如意识到你不需要检查数字是否可以被它所有小于它的数字或它的一半整除——只需要那些小于它的平方根的数字。但这个问题的关键点仅仅是测试你是否能编写一个能工作的函数。

A.1.3. 使用 Git

你能谈谈一次你使用 Git 协作完成项目的经历吗?

亚历克斯·海斯

示例回答

在我上一份工作中,我和两位同事在一个下午的黑客马拉松中创建了一个 R 包,名为 funneljoin,从一开始就使用 Git。我们花了一个小时在一台电脑上进行结对编程,然后列出了一项任务清单,分配给我们自己。我们每个人都创建了一个不同的分支来处理我们的任务,这使得我们最终可以轻松地将它们合并在一起。使用 Git 确保我们不会意外地覆盖了别人的工作。随着我们的进展,我们经常提交,这样我们就可以在决定之前的方法实现一个功能更好时总是可以回退。最后,使用 GitHub 意味着之后公司里的任何人都可以下载这个包并立即开始使用。

自从那个下午开始,我一直担任这个包的维护者。我继续使用 Git 的功能,比如分支,这样我就可以在不合并它们之前对功能进行原型设计,直到它们经过彻底测试。

备注

如果你被问到这个问题,而你之前没有在项目中使用 Git 协作过,你可以谈谈你是如何使用 Git 进行个人项目的。这个问题测试的是你是否使用过 Git,你可以解释你已经使用过不同的功能(如分支或分叉),即使只是你自己。你可能会补充说,如果你与其他人合作,你会如何调整你的做法——例如,通过更多地使用分支,或者坚持一致的提交信息结构。

如果你之前没有使用过 Git,在面试中要诚实地说明这一点。但我们确实建议在参加更多面试之前尝试学习它。

A.1.4. 技术决策

如果给你一个完全空白的画布,你是如何选择你的技术栈的?

海瑟·诺利斯

示例回答

这个问题很有趣,因为它实际上取决于手头的项目。我选择技术栈的决定主要基于平衡对我来说最简单实现的方法和对于其他人来说最容易合作的方法。让我给你举两个我选择技术栈的例子以及我从中学到的东西。

在我职业生涯早期的一个项目中,我必须从头开始开发一个全新的产品,我是团队中唯一的数据科学家。我选择使用 .NET 堆栈和 F#,因为我非常熟悉它们,而且因为我很熟悉,我们能够快速推出一个可工作的产品。缺点是,由于 F# 语言非常不常见,当我们需要雇佣一个数据科学家来接管它时,我们找不到任何已经具备所需知识的人。回顾过去,使用 .NET 和 F# 并不是一个正确的决定。

在一个更近期的项目中,我被分配创建一个机器学习 API。我身处一个与微服务合作的工程团队中,所以我决定在 R 中创建一个作为 Docker 容器的 REST API。尽管我之前没有使用过 Docker 容器,但我选择了它,因为我知道这对团队来说将是最容易维护的。从这个项目中,我学到了很多关于 Docker 和容器的东西,我创建的工作能够很好地集成。

备注

在 T-Mobile 面试候选人时,Heather Nolis 通常会让一个人选择一个项目并描述他们所做的决策;其他人所做的决策;以及如果现在知道了这些,他们会如何不同地做事。你的面试官可能不会直接问你这些问题,但无论如何,这些都是值得包括在内的。

无论你给出什么答案,你都想包含大量你在之前工作中(包括副项目和课程作业)不得不做出的决策的引用。这个问题的目的是看看你在选择适合项目的正确技术方面投入了多少思考。选择最终出现问题的技术栈是可以接受的,只要你从问题中学习到了东西。事实上,从事情中学习甚至比第一次就做对一切更好,因为这表明你可以改变。

A.1.5. 常用包/库

你经常使用哪个 R 包或 Python 库,为什么?

示例答案

这不是一个单独的包,但我真的很喜欢构成 R 中的 tidyverse 套件的那些包。这些包可以帮助你从读取数据到清洗、转换、可视化和建模数据。

我特别喜欢使用 dplyr,因为得益于连接包 dbplyr,无论我是处理本地还是远程表,我都可以编写相同的代码,因为 dbplyr 将 dplyr 代码转换为 SQL。在我上一份工作中使用 dbplyr 意味着我可以在整个工作流程中保持使用 RStudio,尽管我们所有的数据都存储在 Amazon Redshift 中,并且需要 SQL 查询来访问。如果需要做更复杂的操作或可视化,我会使用 dbplyr 来做总结和筛选,然后如果需要,将数据拉回到本地。

总的来说,我真的很喜欢 tidyverse 核心开发者 Hadley Wickham 的哲学:编程时的瓶颈往往是思考时间,而不是计算时间,你应该构建能够无缝协作并快速将你的想法转化为代码的工具。

备注

面试官在这里并不是在寻找一个特定的答案。相反,他们想看看你是否(a)在这两种语言中编程足够多,以至于有一个常用的包,并且(b)能够解释你如何以及为什么使用这个包。这个答案也让面试官对你日常工作的类型有了了解。不要忘记解释这个包的功能,尤其是如果它是一个小众包的话。如果另一个包在执行这项任务时更广泛地被使用,你可能需要解释你选择这个包的原因,因为这显示了你对其他替代方案的更广泛认识。最后,不要担心选择最“高级”的库,比如深度学习库,来给面试官留下深刻印象。理想情况下,这个问题是最容易回答的,(可能)也是最有趣的问题之一,所以不要过度思考。

A.1.6. R Markdown 或 Jupyter Notebooks

什么是 R Markdown 文件或 Jupyter Notebook?为什么你会选择使用 R Markdown 文件或 Jupyter Notebook 而不是 R 或 Python 脚本?什么时候脚本更好?

示例答案

我将以 R 和 R Markdown 为例来回答这个问题,但对于 Python 和 Jupyter Notebooks,基本思路是相同的。R Markdown 文件是编写 R 代码的一种方式,它允许你在代码周围放置文本和格式。从某种意义上说,它们将分析代码和结果与叙述和思想合并在一起。通过使用 R Markdown 文件,你可以进行比原始 R 代码更容易重复的分析,并附有关于分析内容的单独文档。理想情况下,你的 R Markdown 文件格式应该非常清晰,当你渲染输出文件时,你可以将生成的 HTML 输出、Word 文档或 PDF 文件交给利益相关者。

R Markdown 文件非常适合可重复分析,但当你编写将要部署或用于其他地方的代码时,它们就不是很实用了。比如说,你有一系列函数想要在多个其他地方使用(比如一个从文件加载数据的函数)。可能写一个 R 脚本创建所有这些函数,并将脚本与单个分析分开是有意义的。或者,如果你想要使用 plumber 包与 R 一起创建 Web API,你就不想用 R Markdown 文件了。

备注

这个问题是为了检查面试官是否看到你有进行可重复分析的经验。许多使用 R 或 Python 的人以临时方式编写脚本,并没有考虑如何与他人分享结果。通过展示你理解 R Markdown 和 Jupyter Notebooks 的意义,你表明你在思考如何使你的代码更易于使用。如果你还没有使用过 R Markdown 文件或 Jupyter Notebooks,绝对可以去尝试使用其中之一。

不要担心理解 R 和 Python 的版本;两者都行。

A.1.7. 你应该在什么时候编写函数或包/库?

你什么时候应该将你的代码转换为函数?什么时候应该将其转换为包或库?

示例答案

通常情况下,如果我注意到我在反复复制粘贴代码,这可能是一个迹象,表明我应该将其制作成一个函数。例如,如果我需要在不同数据集上运行代码,我应该创建一个函数并将其应用于每一个,而不是复制代码三次。R 中的 library purrr 或 Python 中的列表推导式使得多次应用函数变得容易。

我发现,当你的代码跨越多个不同的团队项目时,包和库是最好的。在我目前的工作中,我们有很多存储在 S3 中的数据,但我们想在本地上进行分析。而不是复制粘贴函数来访问每个项目中的代码,我创建了一个可以从所有这些项目中调用的库。库的缺点是,如果你更改它们,你必须更改所有使用该库的项目,但对于核心函数,这种方法通常是有价值的。

备注

这个问题有点像送分题,因为它有一个正确的答案:“尽可能多。”通常,反复复制粘贴代码是一种不好的做法;数据科学家应该编写函数,使得代码更容易阅读和理解。因此,尽可能多地添加示例,以展示你理解将代码作为函数或包重用的价值。你有没有过创建一个函数并且大量重复使用的经历?关于库呢?尽可能多地谈论这些情况。

A.1.8. R/Python 中的数据处理示例

这里有一个名为 tweets 的表格。数据包含发送推文的账户、文本、点赞数和发送日期。编写一个脚本,获取一个表格,每行一个人,有一个列是他们的最小点赞数,称为 min_likes,还有一个列是推文总数,称为 nb_tweets。这应该只针对 2019 年 9 月 1 日之后发送的推文。你还需要首先消除表格中的任何重复项。

account_name text nb_likes date
@vboykis 数据科学是... 50 2019-10-01
@Randy_Au 当...时很难 23 2019-05-01
@rchang 一些新闻... 35 2019-01-01
@vboykis 我的通讯... 42 2019-11-23
@drob 我的最佳建议... 62 2019-11-01
... ... ... ...
R 中的示例答案
tweets %>%
  filter(date > "2019-09-01") %>%
  distinct() %>%
  group_by(account_name) %>%
  summarize(nb_tweets = n(), min_likes = min(nb_likes))
Python 中的示例答案
tweets = tweets[tweets.date > "2019-09-01"].
drop_duplicates().
groupby("account_name")
tweets['nb_likes'].agg(nb_tweets="count", min_likes="min")
备注

这种问题介于 FizzBuzz 和素数问题(知道如何在 R/Python 中完成某事)以及 SQL 查询(分析数据)之间。对于以前做过数据分析的人来说,这个问题应该相对简单,但你可能会遇到一个包含技巧的问题(例如需要将字符列转换为日期列或将其从长格式转换为宽格式),而你此刻可能想不起来。如果你不记得如何做某事,可以说“我不记得 X 的确切语法,所以现在我将放入一些伪代码作为占位符”,然后继续。你不想在一个部分上花费太多时间而陷入困境。如果问题确实包含一些更不寻常的内容,那么面试官可能认为这部分是一个加分项,而不是进入下一阶段的必要条件。

A.2. SQL 和数据库

A.2.1. 连接类型

解释左连接和内连接之间的区别。

Ludamila Janda 和 Ayanthi G.

示例答案

连接是将来自两个不同表(一个左表和一个右表)的数据合并到新表中的方法。连接通过在两个表之间连接行来工作;使用一组键列来查找两个表中相同的数据并应该连接的数据。在左连接的情况下,左表中的每一行都会出现在结果表中,但右表中的行只有在它们的键列中的值出现在左表中时才会出现。然而,在内连接中,左表和右表中的行只有在另一表中存在匹配行时才会出现。

在实践中,你可以将左连接想象成将右表的数据附加到左表上,如果存在的话(例如使用右表作为查找)。内连接更像是找到所有共享数据,并仅从这些对中创建一个新的表。

备注

Janda 喜欢将这个问题作为一个早期筛选器,用于更初级职位,因为它不是一个陷阱问题,而且对于候选人来说,这是重要的知识。她发现你可以从候选人选择如何回答中学到很多东西。有大量的有效答案,从教科书上正确但不易理解到非常简单易懂但遗漏了边缘情况的答案。

注意,在我们的答案中,我们没有谈论数据中出现重复行所带来的任何复杂性。提到这些复杂性可能是有价值的,因为它们可能会影响结果,但更有可能的是,它们是分散你试图传达的观点的干扰。

A.2.2. 将数据加载到 SQL 中

你有哪些不同的方式可以将数据最初加载到数据库中,以及每种方式的优缺点是什么?

Ayanthi G.

示例答案

将数据加载到数据库中有许多方法,主要取决于数据最初存在于哪里。如果数据位于平面文件中,例如 CSV 文件,许多 SQL 版本都有导入数据的程序。例如,SQL Server 2017 有一个导入和导出向导。这些工具易于使用,但允许的定制很少,且不易重复。如果数据来自不同的环境,例如 R 或 Python,有驱动程序允许将数据传递到 SQL。例如,ODBC 驱动程序可以与 R 中的 DBI 包一起使用,将数据从 R 移动到 SQL。这些方法更易于重复和程序化实现,但需要你将数据放入 R 或 Python。

备注

这个问题实际上是在测试你是否曾经将数据加载到数据库中过。如果你之前做过,那么描述你是如何做的应该不会太难。如果你之前没有将数据加载到数据库中,这可能会让面试官觉得你的经验不足。

关于优缺点的那部分问题检查你是否理解在不同的情境下不同的工具更适用。有时候,当你只有一个文件时,使用图形用户界面(GUI)上传数据是一个简单、方便的解决方案。在其他时候,你可能需要设置一个完整的自动化脚本来连续加载数据。你能展示出你对何时使用何种工具的理解越深入,你的表现就越好。

A.2.3. 示例 SQL 查询

以下是来自学校的 TABLE_A 表,包含多个班级学生获得的 0 到 100 分的成绩。你将如何计算每个班级的最高分?

班级 学生 分数
数学 诺利斯,艾梅柏 100
数学 伯克 owitz,迈克 90
文献 列斯顿,阿曼达 97
西班牙语 贝坦库尔特,劳拉 93
文献 罗宾逊,艾比 93
... ... ...
示例答案

这是一个查询以找到每个班级的最高分:

SELECT CLASS, MAX(GRADE)
INTO TABLE_B
FROM TABLE_A
GROUP BY CLASS

这个查询将数据分组到每个班级,然后从中找到最大值。此外,它还将结果保存到一个新的表(TABLE_B)中,以便稍后查询。

备注

这个问题对于 SQL 问题来说几乎是最简单的;它在测试你是否对 SQL 中的分组有基本理解。人们通常在这个问题上出错的原因包括没有看到要分组的内容(在这种情况下,班级变量),或者他们觉得这个问题太简单了,以至于他们过于复杂化并错过了简单的方法。如果你在面试中遇到一个问题看起来太简单,那么它可能真的就像看起来那么简单。

如果这个解决方案对你来说并不明显,现在是一个很好的时候来回顾 SQL 中分组变量是如何工作的。

最后,INTO TABLE_B 这一行完全是可选的,但它为你接下来的问题做好了准备。

A.2.4. 示例 SQL 查询继续

考虑之前问题中的表格。如果我们不仅想找到每个班级的最高分,还想找到获得这个分数的学生呢?

示例答案

假设我们之前问题的结果存储在 TABLE_B 中,我们可以在本解决方案中使用它:

SELECT a.CLASS, a.GRADE, a.STUDENT
FROM TABLE_A a
INNER JOIN TABLE_B b ON a.CLASS = b.CLASS AND a.GRADE = b.GRADE

这个查询选择了所有学生及其成绩,来自原始 TABLE_A,这些学生在具有出现在最大值表 TABLE_B 中的成绩的班级中。内部连接作为一个过滤器,只保留那些是最大值的班级/成绩组合,因为只有在这种情况下,成绩才会出现在 TABLE_B 中。或者,我们也可以使用子查询来完成相同的事情,而不调用 TABLE_B:

SELECT a.CLASS, a.GRADE, a.STUDENT
FROM TABLE_A a
INNER JOIN (
  SELECT CLASS, MAX(GRADE)
  FROM TABLE_A GROUP BY CLASS) b
ON a.CLASS = b.CLASS AND a.GRADE = b.GRADE
备注

虽然这个问题有多个解决方案,但几乎任何解决方案都需要对 TABLE_A 进行不止一个查询,因此这个问题很容易让人出错。解决方案在纸上看起来可能很简单,但在面试中想到它可能很难。如果你答错这类问题,仍然有可能通过面试。

解决方案并没有为最大值的情况做特殊处理。在示例解决方案中,会返回多个学生。可能值得向面试官指出这一点,因为这表明你在关注边缘情况。

A.2.5. 数据类型

将日期列作为字符串存储在数据库中有什么缺点?例如,在 SQL 中,如果我们把日期列存储为VARCHAR(MAX)而不是DATE呢?

示例答案

将日期存储为字符串而不是日期(例如将 2019 年 3 月 20 日存储为字符串"03/20/2019")是数据库中常见的情况。虽然你可能不会丢失任何信息,但根据你的处理方式,你可能会遇到性能问题。首先,如果数据不是以DATE类型存储,我们就不能使用MONTH()函数。我们也不能做诸如找出两个日期之间的差异或找出列中的最小日期这类事情。

当你将数据加载到数据库或清理数据时,这个问题经常发生。你越早正确格式化数据,分析就会越容易。你可以通过使用CAST等函数来修复这些情况。话虽如此,如果你正在加载包含数百个列的数据,并且有很多你永远不会使用,那么修复所有这些问题可能不值得花费时间。

备注

数据存储在错误类型中的问题是一个极其常见的情况。这种情况不仅发生在数据库中,也可能发生在平面文件或 R 和 Python 等环境中的表格中。这个问题是在检查你是否理解,当这种情况发生时,通常是不好的,当你看到这些情况时,你通常应该修复它们。能够回答这类问题应该自然地从数据科学项目中作为数据清理的一部分来完成。

A.3. 统计学和机器学习

A.3.1. 统计术语

向一个八岁的孩子解释平均数中位数众数*。

艾伦·巴特勒

示例答案

平均数中位数众数是三种不同的平均数类型。平均数让我们用一个数字来理解整个数字集合的一些信息。

假设我们对你的班级进行了一次调查,看看每个人有多少个兄弟姐妹。你的班级里有五个人,让我们假设你发现一个人没有兄弟姐妹,一个人有一个,一个人有两个,两个人有五个。

众数是最常见的兄弟姐妹数量。在这种情况下,那是 5,因为与只有一个人有其他所有数字相比,有两个人有五个兄弟姐妹。

要得到平均数,你需要将兄弟姐妹的总数除以人数。在这种情况下,我们加上 0 + 11 + 12 + 5*2 = 13。你班上有五个人,所以平均数是 13/5 = 2.6。

如果将数字从小到大排列,中位数是中间的数字。我们将线设置为 0, 1, 2, 5, 5。第三个数字是中间的,在我们的例子中,这意味着中位数是 2。

我们看到三种平均数给出了不同的数字。你什么时候想用一种而不是另一种?平均数是最常见的,但如果你有异常值,中位数就很有帮助。假设有一个人有 1,000 个兄弟姐妹!突然,你的平均数变得很大,但这并不真正代表大多数人拥有的兄弟姐妹数量。另一方面,中位数保持不变。

备注

对于一个申请数据科学职位的人来说,不太可能不知道不同类型的平均数,所以这个问题实际上是在测试你的沟通技巧,而不是你是否正确地得到了定义(尽管如果你答错了,那是一个红旗)。在我们的例子中,我们使用了一个简单的例子,一个八岁的孩子可能在现实生活中遇到。我们建议保持主题数量简单;你不希望因为试图计算平均数或中位数而陷入数学困境,因为你可能需要为 50 个数据点计算它们。如果房间里有一块白板,写下数字以跟踪它们可能会有所帮助。作为加分项,当你可能想要使用一种平均数而不是另一种时,你可以像我们这样做。

A.3.2. 解释 p 值

你能向我解释什么是 p 值以及它是如何被使用的吗?

示例答案

想象一下,你抛硬币得到了 50 次中的 26 次正面。你会因为不是正好得到 25 次正面而得出硬币不公平的结论吗?不!你明白随机性在起作用。但如果是硬币正面出现了 33 次呢?我们如何决定判断硬币是否公平的阈值是多少?

这就是 p 值的作用。p 值是如果零假设为真,我们会看到与我们得到的结果一样或更极端的结果的概率。零假设是我们进入时的默认假设,例如试图证伪的两个组之间没有差异,我们正在尝试证明这一点。在我们的例子中,零假设是硬币是公平的。

因为 p 值是一个概率,它总是在 0 和 1 之间。p 值本质上是我们对结果感到震惊的程度,如果我们的零假设为真。我们可以使用统计测试来计算,如果我们抛一个公平的硬币,我们会得到 33 个或更多正面或反面(两者都是与我们得到的结果一样极端的结果)的概率。结果是,这个概率,即 p 值,是 0.034。按照惯例,人们使用 0.05 作为拒绝零假设的阈值。在这种情况下,我们会拒绝硬币是公平的假设。

在 0.05 的 p 值阈值下,我们接受 5%的时间,当零假设为真时,我们仍然会拒绝它。这是我们假正例率:在零假设实际上为真时拒绝零假设的比率。

备注

这个问题测试你是否理解 p 值是什么,并且能否有效地传达定义。关于 p 值有一些常见的误解,例如它是一个结果为假阳性的概率。与上一节中的平均值问题不同,有人可能会答错。在沟通方面,我们建议使用例子来引导解释。数据科学家需要能够与各种利益相关者沟通,其中一些人从未听说过 p 值,而另一些人认为他们理解 p 值是什么,但实际上并不理解。你想要展示你不仅理解 p 值,而且能够与他人分享这种理解。

A.3.3. 解释混淆矩阵

什么是混淆矩阵?你可能会用它来做什么?

示例答案

混淆矩阵让你可以看到对于给定的模型,你的预测与实际结果是如何比较的。它是一个 2x2 的网格,包含四个部分:真正例、假正例、真负例和假负例的数量。从混淆矩阵中,你可以计算出不同的指标,例如准确率(正确分类为真正例或真负例的百分比)和灵敏度,也称为真正例率,以及正确分类为正例的百分比。混淆矩阵在监督学习问题中使用,这些问题中你需要对结果进行分类或预测,例如是否航班会晚点,或者图片是猫还是狗。让我画一个关于航班结果的例子。

实际晚点 实际准时
预测晚点 60 15
预测准时 30 120

在这种情况下,60 个被预测为晚点的航班实际上确实晚点了,但 30 个被预测为准时的航班实际上晚点了。这意味着我们的真正阳性率是 60 / (60 + 30) = 2/3。

看到混淆矩阵而不是单个指标可以帮助你更好地理解你的模型性能。假设对于不同的问题,你刚刚计算了准确率,例如,发现你有 97%的准确率。这听起来很棒,但可能结果是 97%的航班准时。如果模型简单地预测每架航班都准时,它将会有 97%的准确率,因为所有准时的航班都被正确分类,但模型将完全无用!

备注

这个问题测试你是否熟悉监督学习模型。它还测试你是否知道评估模型性能的不同方法。在我们的答案中,我们分享了两个可以从混淆矩阵中计算出的指标,表明你理解了如何使用它,以及一个看到整个矩阵而不是仅一个指标是有用的案例。

A.3.4. 解释回归模型

您将如何解释这些两个回归模型输出,给定输入数据和模型?这个模型是基于 150 个观察值的 3 种花卉数据集:setosa、versicolor 和 virginica。对于每一朵花,记录了花瓣长度、花瓣宽度、花萼长度和花萼宽度。该模型是一个线性回归,用于从其他四个变量预测花萼长度。

模型输入数据
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
          <dbl>       <dbl>        <dbl>       <dbl> <fct>  
 1          5.1         3.5          1.4         0.2 setosa 
 2          4.9         3            1.4         0.2 setosa 
 3          4.7         3.2          1.3         0.2 setosa 
 4          4.6         3.1          1.5         0.2 setosa 
 5          5           3.6          1.4         0.2 setosa 
模型调用
model <- lm(Sepal.Length ~ ., iris)
输出 1
term              estimate std.error statistic  p.value
<chr>                <dbl>     <dbl>     <dbl>    <dbl>
(Intercept)          2.17     0.280       7.76 1.43e-12
Sepal.Width          0.496    0.0861      5.76 4.87e- 8
Petal.Length         0.829    0.0685     12.1  1.07e-23
Petal.Width         -0.315    0.151      -2.08 3.89e- 2
Speciesversicolor   -0.724    0.240      -3.01 3.06e- 3
Speciesvirginica    -1.02     0.334      -3.07 2.58e- 3
输出 2
variable          value
<chr>             <dbl>
r.squared         0.867
adj.r.squared     0.863
sigma             0.307
statistic           188
p.value        2.67e-61
df                    6
logLik            -32.6
AIC                79.1
BIC                 100
deviance           13.6
df.residual         144
示例答案

查看模型摘要结果,看起来是一个非常不错的模型;R-squared 为 0.867,这意味着预测变量解释了花萼长度 86.7%的方差。所有预测变量在p小于.05 的水平上都是显著的。我看到,花萼越宽,花瓣越长,花萼就越长,而花瓣越宽实际上与花萼越短相关。versicolor 和 virginica 物种的系数为负,这意味着我们预测这些物种的花萼长度将比 setosa 物种小。

假设我们发现了一种新的花卉,其花萼宽度为 1,花瓣长度为 2,花瓣宽度为 1,并且它是 virginica 物种。我们的模型将预测花萼长度为以下值:2.17 + .496 * 1 + .829 * 2 – .315 * 1 – 1.02,大约为 3。在使用这个模型之前,我想要查看一些更多的诊断信息,比如残差是否呈正态分布,我还想找到一个测试集来查看它在样本外的表现,以确保它没有过拟合。

备注

面试官在寻找多个方面,你可以根据答对的数量获得分数。在这种情况下,面试官在检查你是否理解模型统计量(如 R 平方),以及估计及其相关的p值。尽管这个信息没有被明确要求,但在我们的答案中,我们添加了如何使用这个模型来预测新花的萼片长度。最后,我们添加了一些关于在使用该模型之前我们想了解的信息。这类开放式问题是一个很好的机会,可以击中面试官可能寻找的内容,并添加额外信息。避免过于努力,最终在一个问题上花费 20 分钟;展示你尽可能多地理解了概念,然后继续前进。

A.3.5. 什么是提升?

当提到机器学习算法时,“提升”这个术语是什么意思?

示例答案

提升指的是一类机器学习算法,这些算法基于将一个弱模型重复使用足够多次,使其成为一个强模型。其思路是在数据上训练一个弱模型,寻找模型出错的地方,然后训练一个同类型的第二个模型,该模型对出错的数据点进行更重的加权,希望第二个模型能纠正第一个模型的一些错误。你重复这个过程,直到达到模型数量的某个限制。然后你使用所有这些模型一起进行预测。通过拥有大量模型,你将得到比使用单个模型更准确的结果。

提升方法的一个非常流行的实现是 XGBoost,它在 R 和 Python 中都被广泛使用。

备注

提升是一个不太常见的术语,以至于一个基本的数据科学背景的人可能不知道它的确切含义。因此,这个问题更多的是测试你的资历,而不是你的数据科学专业知识。这个问题也有一点学术性;你可以想象有人已经成功地在代码中使用 XGBoost 多年,而没有深入思考它是如何工作的。这个问题更多的是“做对是件好事,但如果你没做对,也不是世界末日”而不是“如果你没做对这个问题,你不太可能得到这份工作。”

A.3.6. 最喜欢的算法

你最喜欢的机器学习算法是什么?好吧,你能给我解释一下吗?

Jeroen Janssens

示例答案

我最喜欢的机器学习算法是循环神经网络。最近我一直在做很多自然语言处理的工作,循环神经网络是快速对文本进行分类的绝佳模型。

你了解线性回归吗?神经网络就像线性回归,只不过你有一组组线性回归,一组线性回归的输出是下一组线性回归的输入。通过将这些线性回归绑定成模型的层,你可以更准确地做出预测。

循环神经网络是神经网络的一种特殊情况,它针对序列数据进行了调整。在自然语言处理的情况下,一个文本块,序列中某个位置的输出是下一个单词模型的输入。

注意事项

这个问题可能是你可能在面试中遇到的问题之一,这些问题旨在了解你是否能够以简单的方式解释复杂的概念。你选择哪种算法来回答这个问题并不那么重要,重要的是能够清楚地表达它是如何工作的。话虽如此,这个问题是一个很好的机会,通过表达与你的工作相关的算法并谈论它,来突出你过去有趣的工作。

A.3.7. 训练数据与测试数据

什么是训练数据,什么是测试数据?你创建这些数据集的一般策略是什么?

示例答案

训练数据是用于训练机器学习模型的数据。测试数据是在训练机器学习模型时未使用的数据;相反,它用于验证模型工作得有多好。这些数据集需要分开,因为如果数据被用于训练模型,模型可以学习数据的正确结果,并将人为地擅长拟合它。

有许多方法可以将训练数据和测试数据分开。我的一般方法是,在分析开始时取一个小随机样本,例如 10%,将其作为我所有模型的测试数据,而其余的 90%作为训练数据。当我找到一个表现良好的模型时,我会用所有数据(包括训练数据和测试数据)重新训练模型,以获得最精确的模型用于部署。

注意事项

很重要要有良好的训练数据和测试数据之间的区别的解释,因为理解这种区别以及如何思考它是创建机器学习模型的基本部分。话虽如此,有许多有效的数据分割策略。例如,除了随机抽样之外,你还可以使用交叉验证,在训练模型时避免偏差,同时使用更多数据。只要你有逻辑上解释你选择方法的原因,你应该就没事了。

A.3.8. 特征选择

如果你有 1,000 个协变量,必须将它们减少到 20 个,你会如何进行特征选择?

亚历克斯·海斯

示例答案

有几种不同的方法可以做到这一点。在预测问题的情况下,一个可能的解决方案是使用 lasso 回归。lasso 回归是一种特殊的线性回归,它对系数的增加应用惩罚。通过增加回归中的惩罚项,你可以使模型使用的系数越来越少,直到它只使用 20 个最重要的协变量。这样,模型就选择了模型中系数应该是什么。尽管 lasso 回归在训练数据上具有所有协变量的线性回归的准确性得分较低,但它只使用少量协变量的好处,可能在测试数据上表现更好,因为 lasso 减少了过拟合的可能性。

你还可以使用像主成分分析(PCA)这样的降维技术,将问题的维度从 1,000 降低到 20。lasso 方法将选择现有的 1,000 个特征中的 20 个特征。像主成分分析这样的方法将创建 20 个新的特征,试图尽可能多地捕捉 1,000 个数据中的信息。

备注

这个问题有许多可能的解决方案。另一个解决方案是尝试使用阶梯函数反复去除协变量,直到只剩下 20 个。你甚至可以取许多包含 20 个特征的样本集,并选择效果最好的那个。将这个问题视为不是对知道正确解决问题的方法的测试,而更多是对能够展示如果你面临这个问题,你能够找到解决方案的测试。这个问题是为了确保你不会在工作中陷入困境。你能想到你想尝试的事情吗?如果可以,太好了;你可以去尝试一下。如果不行,你在独立工作时可能会遇到困难。

如果你给出多个答案,请准备好回答后续问题:在什么情况下你会选择其中一个而不是另一个?这个问题是为了检查你是否真正理解了这些技术,而不是仅仅因为别人告诉你要使用它们。在这种情况下,你可以回答,在可解释性和捕捉变异性之间存在权衡:lasso 易于解释,但 PCA 尽可能多地捕捉变异性。你选择哪一个取决于你希望通过分析达到什么目标。

A.3.9. 部署新模型

你开发了一个新模型,该模型在当前生产中的表现优于旧模型。你如何确定是否应该切换生产中的模型?你是如何处理的?

Emily Spahn

示例答案

对于我来说,答案取决于环境中的几个因素。首先,新模型在哪个指标上做得更好?假设是整体准确度,我会检查模型是否足够好,以至于值得替换旧模型。如果它只是在准确度上提高了百分之一点,那么可能不值得改变,因为效果可能微不足道。接下来,是否有破坏当前模型的危险?如果模型是使用维护良好的管道、清晰的日志和测试部署的,我可能会进行交换,但如果模型是由不再在公司的人手动将模型移动到生产系统部署的,我可能会推迟。

最后,有没有一种方法可以先对模型进行 A/B 测试?理想情况下,我希望新旧模型可以并行运行,这样我就可以测试新模型是否存在任何问题或遗漏的边缘情况。没有测试系统可以覆盖生产中的所有内容,因此能够先让选定的客户或输入运行该模型将是理想的。

备注

对于公司来说,部署模型通常是一项劳动密集且风险较高的任务。这个问题决定了你是否理解这种感受以及你会如何处理这种情况。一个初级的数据科学家或机器学习工程师可能会觉得正确的选择是尽快部署最准确的模型,但需要管理一些风险。如果你有任何可以借鉴的经验(例如模型部署失败),这个问题是一个很好的地方来提及它们。如果你没有,那完全没问题;只需尝试描述你认为可能出错的地方。

A.3.10. 模型行为

给定你开发的模型,你会如何从最终用户的角度设计一个指标来评估它?你会如何决定哪些错误是可以接受的?

特蕾莎·约菲丘和贝蒂尔·哈特

示例回答

标准模型指标,如 R 平方或准确度,可能会忽略最终用户或业务视角。一个分类模型可能 99%的时间都是正确的,但那 1%的时间它是错误的,对业务来说可能是一个大问题,以至于模型永远不会被使用。

我认为评估模型最好的方法是尝试用实验来运行它。例如,如果我正在创建一个将客户聚类成不同段落的模型,我会向营销部门展示这些聚类,并让他们尝试对来自不同段落的客户样本进行定制营销的测试运行。我会比较营销在有和没有对客户进行分段的情况下表现如何,如果有明显的改进,那么这个模型就是成功的。这与使用关于模型本身的指标(例如它如何有效地进行分段)完全不同,因为那些类型的措施只分析模型。在这里,我实际上是在分析它与没有模型相比的表现。

使用模型进行实验的缺点是,通常很难设置实验。有时,你无法将客户分成得到模型和不得到模型的两组。在其他时候,模型的影响如此之小,以至于它不会在任何容易衡量的关键绩效指标中显示出来。但尽管有这些困难,如果可能进行实验,那么这几乎总是最好的方法。

备注

这个问题很棘手,因为它非常通用,但为了回答它,你需要谈论具体细节。你的答案可能会根据预测模型与无监督模型或如果你在营销部门工作与运营部门工作而有很大差异。你将想要大量谈论统计指标与业务关心的指标并不相同的概念;初级数据科学家可能会过分关注最大化统计指标而忽略业务指标。但最终如何谈论这些想法是非常开放的。就像许多答案一样,如果你能从你的经验中提供例子,你可以增加很多深度。

A.3.11. 实验设计

(问题、答案和笔记由 Ryan Williams 提供)

你正在开发一个应用程序,并想知道新设计的布局是否比当前的布局更好。你将如何构建一个测试来选择更好的应用程序布局?

示例答案

有很多不同的方式来回答这个问题的具体细节,但 A/B 测试通常遵循以下类型的流程:

  1. 通过选择你关心的改进指标来定义“更好”的含义:活跃用户、按钮点击、展示次数等。

  2. 基于你的成功指标选择一个零假设,例如“所有组的按钮点击将相同。”使用这个假设进行功效计算,这将告诉你需要运行测试多长时间才能检测到一定大小的变化。

  3. 将应用程序用户群体随机分成几个组,并为每个组提供不同的应用程序版本。

  4. 在步骤 2 中确定的时间后,通过使用适当的统计测试(如 t 检验)来评估你是否在两组之间看到了统计上显著的不同。

备注

这种类型的问题在涉及媒体测量、应用程序/网站开发等领域的团队中很常见。面试官通常只是想知道你是否理解 A/B 测试的目的和一般原则,特别是对于初级职位。我们建议在回答时坚持一个清晰的高层次方法,而不是陷入统计测试的细节(例如,何时使用卡方检验而不是 t 检验),以展示你知道如何设计实验并确定因果关系。

A.3.12. 实验设计中的缺陷

(问题、答案和笔记由 Ryan Williams 提供)

假设你已经进行了一项 A/B 测试来选择更好的应用布局;在看到你正在测试的指标有统计学上显著的改进的情况下,你可能会不希望实施新布局的情况有哪些?

示例回答

如果你看到布局对其他重要指标(如安全栏或无害指标)有负面影响,你不会想实施这个布局。一个例子可能是,你正在测试的指标是用户点击量,尽管你确实看到新布局下用户的点击量有显著提高,但你同时也看到应用中的页面在该布局下加载时间更长。在这种情况下,应用性能的下降可能不值得点击量的增加,因为随着时间的推移,更差的在应用中的体验可能会驱使用户离开。

备注

这个问题非常开放。面试官想要看到的是你认识到仅仅找到一个低的p值并不总是考虑实验成功的充分理由。对于公司来说,对像应用或网站这样的实时产品进行更改是有风险的,而且单一的统计测试通常无法包含做出正确决策所需的所有信息。这类问题的其他一些合理答案包括相对于更改应用的成本和风险,改进太小,或者样本/分割方法中的偏差。

A.3.13. 样本数据中的偏差

(由 Ryan Williams 提问、回答和备注)

在使用样本数据时,你应该注意哪些类型的偏差?你如何判断一个样本是否存在偏差?

示例回答

许多类型的偏差会影响样本数据。在实践数据科学应用中最常见的偏差之一是选择偏差(错误地选择样本)。选择偏差可能发生在以下场景中,例如从交易级别表中随机选择一组客户,这会过度代表有多次交易的客户。其他常见的偏差类型还包括生存偏差(样本过度代表了通过某些预选过程的群体)和自愿响应偏差(样本过度代表了更有可能自愿提供自身信息的群体)。

你可以使用统计方法来识别样本中的偏差,例如比较样本的均值与已知或预期的总体均值。你也应该理性地思考采样过程以识别偏差,试图回答这个问题:我们采样这个群体的方式是否可能使其与我们关心的总体不同?

备注

这个问题旨在测试你对与数据工作以及得出结论的限制的理解。了解具体术语,如选择偏差生存偏差,不如了解数据可能受限或误导的方式。面试官想看到你理解与真实世界数据工作的细微差别——所有这些数据都有某种程度的偏差——以及这些数据带来的所有混乱。例如,使用可选调查的数据会有明显的自愿响应偏差。这并不意味着数据不可用,但它确实意味着你应该意识到这种偏差,思考它对分析的影响,并在你得出的任何结论中考虑它。

A.4. 行为

A.4.1. 影响最大的项目

你参与过的哪个项目对你影响最大?

示例回答

在我上一份工作中,我被招聘来构建一个在线实验系统,或者说是 A/B 测试分析系统。公司有兴趣开始运行实验,并且有一位能够实施这些实验的工程师,两位能够提出想法并制定变更方案的增长营销人员,以及一位经理,但他们需要一个方法来理解实验的结果。

当我开始工作时,我使用 R 语言单独分析每个实验。但我知道这不是最好的系统:这意味着团队需要我运行脚本才能看到结果,而且我在分析中重复了工作。

这就是促使我构建一个内部仪表板来监控实验的原因。这个仪表板不仅包括每个实验的结果,例如在对照组和实验组中注册或订阅的人数百分比,还包括健康检查以确保实验按预期运行,结果可以信赖。有了这个仪表板,公司里的任何人都可以看到最新的结果。

到我离开时,这个仪表板已被用于五个团队运行的所有实验。多亏了我与实验团队其他成员的工作,现在公司推出的几乎每个功能都首先作为一个实验来测试,以衡量它是否有任何积极影响。

备注

对于这个回答,如果你为一家公司做过任何数据科学项目,你希望使用其中一个项目而不是非数据科学项目。另一方面,如果你只为个人使用或课堂作业做过数据科学项目,你可以突出另一个项目。这里最重要的是关注对业务的影响。说“我构建了一个 90%准确性的模型!”并不是他们想要的;他们想了解有人是如何使用你构建的模型、工具或分析的,以及为什么它很重要。

A.4.2. 数据惊喜

你能告诉我一次你在数据中发现令你惊讶的事情吗?

示例回答

我之前的工作是在一家通过订阅赚钱的公司。我在那里做实验,当我开始的时候,我会计算实验中的订阅率,即后来订阅的人数占进入人数的百分比。虽然这听起来不错,但结果却是人们未来的订阅已经开始!

在与拥有订阅数据的数据科学家交谈后,我发现这些未来开始日期的订阅实际上是有人暂停的订阅。例如,一个从九月开始的月度订阅用户可以选择在十月不续订或取消订阅,而是暂停订阅,两个月不支付并失去访问权限,然后在十二月重新开始订阅。在这种情况下,她会在订阅表中有两行:一行是九月到十月的订阅,然后从十二月开始。

对于我的用例,我不想计算那些会因为它们将取消暂停而开始的订阅;我只想要那些有人主动选择的订阅!

我学到了两个教训:我永远不应该对数据进行假设,并且我可能需要根据我的需求定制数据源。我假设订阅不可能在未来开始,所以我没有检查这一点。当我意识到这个问题时,我没有覆盖原始数据,因为其他人仍然需要了解那些被设置为未来开始的订阅。相反,我创建了自己的表格,只计算新的订阅。

备注

在这个回答中,我们用一个例子来说明,我们对我们用例中的数据质量问题感到惊讶。但你可以谈论一个你的直觉与结果不符的时间,例如,你对 Reddit 数据科学子线程的探索性数据分析,当时你认为帖子的词数将与评论数呈正相关,但结果却是负相关。你还要确保解释为什么你坚持了最初的假设。

这个问题是在测试你是否在简单地深入数据之前考虑你的数据。它也在测试你不仅仅试图证实你的初始假设,而是让自己被结果所惊讶,并适应新的信息。

A.4.3. 之前工作的反思

你在上一份工作中最想改变的是什么,但你无法改变?

Bertil Hatt

示例回答

我发现在我上一家公司,沟通上存在真正的困难。领导团队不断要求人们更加开放并表达他们的担忧,但这并没有发生。我的理论是,这是因为领导者自己不够开放;他们会不断地告诉我们一切都很顺利,而我们知道有问题存在。

我最想改变的是让领导层对我们开放。如果他们能更多地表达自己的困难和担忧,这将使更年轻的员工更容易开放,并创造一个更好的工作环境。

备注

这个问题很棘手。你需要表明你对之前的工作环境足够了解,以至于可以提出改进建议,但你需要在听起来你与前任雇主有良好关系的同时做到这一点。

你可以列出很多不同类型的变化,例如技术变化、团队动态变化和产品变化。你能列出的变化越有意义,越好(所以不是“我希望我们能有免费汽水”)。如果你能反思为什么那个变化没有发生(“我希望我们能够使用像 R 或 Python 这样的现代语言,但我们因为维护所有遗留产品而使用 SAS”),那就更好了。解释为什么变化没有发生表明你考虑了环境的限制。

避免侮辱你的前任雇主(“你能相信他们愚蠢到使用 FORTRAN!?”)。你不想给人留下这样的印象,即有一天你会离开下一家公司并侮辱他们。即使最终缺乏,也要尊重你前任雇主所做的工作。

A.4.4. 高级人员基于数据犯错

如果你有计算或结果与公司高级人员的先前结果相冲突,你会怎么做?你会试图说服他们你是正确的,如果是这样,你会怎么做?

Hlynur Hallgrímsson 和 Heather Nolis

示例答案

首先,我会问自己这个结果是否重要到足以提出。如果它只偏离了很小的百分比,但我们仍然会根据新的结果做出相同的决定,或者如果先前结果从未被用于任何事情,我可能会让它过去。

如果不是,我会先尝试理解对方的动机和目标。假设这个人销售副总裁,他们进行了一项分析,表明他们雇佣的每位销售人员带来的销售额超过其工资的两倍。然后他们使用这项分析来证明为团队再雇佣五人的合理性。如果我表明每位销售人员实际上带来的销售额少于其工资,这可能会危及整个销售部门。人们对结果有很高的期望,因此必须小心谨慎。

我会安排与他们见面。通过了解情况,我可以对他们如何反应做出有根据的猜测。如果结果存在冲突,因为他们分析中存在错误,或者结果对他们的业务至关重要,我预计他们可能会进行防御,并试图找出我分析中的缺陷,所以我会在情感上做好准备,并三倍检查我的结果。我会尝试找到一个解决方案,让他们保住面子,调整策略,并将业务引向正确的方向。

在最坏的情况下——他们没有听取或提供任何有效的原因来解释新的结果为什么是错误的,我认为新的结果对业务至关重要——我会与我的经理合作,制定一个策略来分享并采取新的结果。不幸的是,有时人们最终可能不会同意你的新分析,这时重点需要从说服他们转移到找到一种方法来实现你的目标,并限制错误分析的影响。

笔记

这个问题旨在了解你如何处理与级别更高的人的冲突。尽管存在许多答案,但像“我会给公司里的每个人发邮件,公开讨论他们多么错误”或“无论情况如何,我都会这样处理,因为唯一重要的是数据”这样的回答肯定会有问题。学术界的人士在处理商业冲突时尤其可能遇到困难;在学术界,演讲可以是一场谁能在听众中找到最多研究缺陷并拆毁论点的竞赛。另一方面,在工业界,你需要能够分享你的观点,帮助业务做出正确的决策,同时平衡其他因素,并理解不同情况下的细微差别。面试官正在寻找你以前成功解决分歧的迹象,所以尽可能多地展示这方面的经验。

A.4.5. 与团队成员的意见不合

请告诉我一次你与团队成员意见不合的经历。那是什么事情,你采取了什么措施?

示例答案

一次,我和产品经理一起进行了一个实验,我们根据功率计算设定了两周的运行时间。四天后,他们想提前结束实验并全面推出,因为主要成功指标上的p-值是.04。但我知道这可能是窥视效应的产物:通过每天检查结果看p-值是否低于.05,并在低于.05 时停止,你会大大增加你的假阳性率。我还知道产品经理有很强的动力让实验成功:他们评估的主要指标之一是通过成功实验获得的增量收入。

在这种情况下,我专注于确保我知道他们从哪里来,并提问。我将我们带回到我们的共同目标:使公司尽可能成功。我通过一个来自网络漫画 xkcd 的简单例子引导他们,以帮助他们发展对为什么过早停止可能成为问题的直觉:如果你检查 20 种不同颜色的果冻豆是否与痤疮有关,即使没有,随机统计检验很可能会“发现”其中之一。 (以下是一个链接,供参考:xkcd.com/882/) 同样,我们正在追逐统计幽灵,并可能欺骗自己认为我们没有积极影响。最后,他们同意按照计划运行两周的实验。

这种情况也让我开始思考如何改进实验工具,使其更容易让人们做正确的事情。我知道的一个实验平台有一个小圆圈,每天都会填满更多,并在七天结束时变成一个勾号。这帮助人们至少运行实验一周,这是最佳实践。

备注

这个答案使用了 STAR(情境、任务、方法、结果)方法。STAR 是一个经典的回答行为面试问题的框架,因为它提供了一个易于遵循的答案结构。在思考这个问题的好例子时,你想要找到一个有积极结果的情境,而不是“然后我们再也没有说过话”或“我让他被解雇了。”你还希望分歧是业务相关的,而不是“我们关于如何装洗碗机有分歧。”面试官想看看你是否能理解与你意见不同的人,并避免诽谤他们或把问题归咎于他们。

A.4.6. 难题

当你不知道如何解决与数据科学相关的问题时,你会怎么做?

示例答案

对于编码问题,谷歌是我的朋友。通常,如果我在谷歌上搜索错误信息或类似“如何在 R 中执行潜在狄利克雷分配?”这样的问题,Stack Overflow 上的答案就是第一个结果。如果我知道我想使用的函数或包,但不确定它具体是如何工作的,我会查找任何文档。

但有时,我不知道如何着手解决问题。在这种情况下,我通常会开始分解问题,有时会在白板上写下不同的组成部分。这有助于我找到核心问题,这些问题可能是我知道如何解决的,即使最初整个问题看起来令人畏惧。

我还喜欢自己花 15 或 30 分钟(取决于我是否觉得我在取得进展)来解决这个问题,然后向公司里的另一位数据科学家寻求帮助。首先尝试自己解决问题是我的责任,但我也不能因为同事可以在几分钟内帮助我而整天卡在某个问题上。当我寻求帮助时,我会分享我所尝试的内容,以及一个小型的、可复现的示例,以便让其他人更容易看到问题(而不是给他们发送数百行需要解析的代码)。

备注

数据科学是一个你将不断学习并面临以前从未见过的问题的领域,因此,发展一些解决问题的策略是很重要的。这个问题想要考察的是,你是否在课堂之外的环境中发展了解决问题的策略,在那里你有答案纸、同学和教授的帮助。你可能需要根据你正在交谈的公司来调整这个答案。如果你说你主要的策略是询问你的数据科学家同事,而你正在面试成为第一个数据科学家,那么这个答案将是一个红旗。

A.5. 脑筋急转弯

A.5.1. 估计

美国所有酒店一年内使用的迷你洗发水瓶的估计数量是多少?

示例答案

我使用以下公式来估计瓶子的数量:

number of hotels in the US * average number of rooms per hotel * 1 shampoo
bottle per occupied room per night * average room utilization * 365 days per
year = number of shampoo bottles per year

然后我估计公式中的数字:

  • 美国酒店的数量——如果我假设这个国家每 5,000 人就有一家酒店,而国家大约有 3 亿人口,那么就有 60,000 家酒店。

  • 每家酒店的房间数量——根据我住过的酒店,50 似乎是对酒店平均房间数量的一个合理的猜测。

  • 平均房间利用率——因为酒店需要盈利,我猜测每个晚上,一个房间有 80%的几率被占用。

这使得公式为 60,000 * 50 * 1 * 0.8 * 365 = 8.76 亿瓶

备注

解决这个问题的方法是提出一个你试图估计的数字的公式,并对放入公式中的数字进行猜测。这个问题有很多版本,从“一个波音 747 飞机可以装多少个乒乓球?”到“法国有多少架钢琴?”面试官想看看你是否能提出一个有道理的公式,以及你对公式中每个数字的猜测逻辑是否合理。在面试中,你几乎不可能得到一个接近正确答案的数字(例如,我们不知道 50 是否是酒店房间平均数量的一个好猜测),但这并不重要。

对于这些问题,除了练习即兴提出公式和估计的技巧外,你几乎无法做任何准备。

A.5.2. 组合数学

想象一个像上图那样的网格,网格的左下角有一只老鼠。右上角有一块奶酪。老鼠只能沿着网格的线条移动,永远不会离开网格。从老鼠到奶酪有多少条路径?

示例答案

要到达奶酪,老鼠必须沿着网格的水平线移动九次,然后沿着网格的垂直线移动六次(因为网格是 9x6)。我们可以将水平移动称为 H,垂直移动称为 V。那么任何包含 9 个 H 和 6 个 V 的字符串都是一个从起点到终点的有效路径。例如,直接向上然后向右,将是 VVVVVVHHHHHHHHH。有 15 个不同的字符排列方式,这被称为排列,但由于有 6 个相同的字母(V)和 9 个相同的字母(H),我们必须去除所有重复的排列。我们可以通过计算每种重复的数量来去除它们。V 重复了 6!次(它们可以排列的方式),H 重复了 9!次。这意味着答案是 15!/(6!)/(9!),即 5,005 条路径。

注意事项

这个问题真的很难回答。首先,很难知道正确答案。如果你已经研究了组合数学领域,你可能知道它;否则,很难突然意识到你可以将这个问题视为路径的排列。即使你看到了这种表述问题的方法,你也可能不知道如何计算解决方案的数量。

第二,即使你知道答案,也很难以一种清晰解释问题和解决方案的方式给出,而不显得冗长。你不能假设每个人都了解诸如排列这样的术语,但如果你要解释所有这些,你会花费太多时间。

最后,真的没有方法可以准备这个问题的答案。有如此多的组合数学问题,你不可能提前准备好所有问题的答案。对于这类问题,你最好的办法是解释你的思考过程和如何处理这个问题。如果面试官非常重视这类问题,那可能是一个红旗。

posted @ 2025-11-24 09:11  绝不原创的飞龙  阅读(25)  评论(0)    收藏  举报