基础扎实的数据分析师——弥合数据科学训练与现实世界之间的鸿沟

0 阅读22分钟

本章涵盖

  • 使用一种结果驱动的流程来开展数据分析
  • 通过贴近真实场景的项目来学习重要的数据科学概念
  • 在分析数据和学习新技能时,聚焦于务实的解决方案

下面这种场景,你是否觉得很熟悉?你刚刚收到了组织内某个部门发来的一个数据需求,但你完全不知道该如何处理,甚至可能连对方到底让你做什么都还没有完全弄清楚。离开了最初训练阶段那种结构化的学习体验之后,现实世界往往是混乱的、不确定的。你可能会想:

  • 你如何使用自己现有的技能,去完成那些来自高要求利益相关方的项目?
  • 当结构化训练环境已经不复存在时,你该如何继续学习?
  • 你如何把自己的通用技能应用到特定领域的任务中?
  • 你接下来需要学习什么?

任何一位资深数据科学家都会告诉你,这些问题的答案都是:经验。通过完成本书中的八个项目,你将加速获得那些能让你成功胜任数据分析师所需的经验。

你会通过完成一些与你在现实世界中可能遇到的项目相似的练习,来打磨已有技能并学习新的技能。在这个过程中,大部分工作都将由你自己完成,但我也会提供一些思路来帮助你起步。除了具体技能之外,我还会给出一种方法,帮助你通过聚焦于务实的结果而成为一名更优秀的分析师。一路上,你将遵循一套流程,使你能够更高效地学习新技能,并从每一个新挑战中获得最大价值。

1.1 数据分析师的工具箱

分析师在职业起点通常会学习并带入岗位的一些基础技能,包括:

  • 从各种来源读取(加载)数据集
  • 将多个数据集合并在一起
  • 对列进行操作,例如创建、删除、重命名和转换
  • 执行基础统计分析,例如计算平均值
  • 使用柱状图、折线图或散点图等可视化方式探索数据
  • 通过创建合适的可视化或设计仪表盘来展示你的发现

你习惯用什么工具来完成这些任务并不重要。合适的工具包括:

  • Microsoft Excel(或同类工具)
  • 商业智能(BI)工具,例如 Tableau 或 Power BI
  • 数据库查询语言,例如 SQL,不过这类工具通常不具备可视化能力
  • 具备数据分析能力的编程语言,例如 Python 或 R

这些项目的示例解法会使用 Python 给出,但重点将放在解决问题上,而不是 Python 编程语言本身的细节。

完成这些项目,会在你的基础技能之上,进一步补充一些贴近真实世界使用场景的能力,其中包括:数据建模、处理分类数据、从非常规来源提取数据,以及快速原型开发。在每种情况下,我都会强调解决问题所需的具体功能类型,这样你就可以用自己偏好的工具去找到相应的实现方式。有些项目会使用机器学习模型,但对机器学习进行深入讨论并不在这些项目的范围之内。

这些项目还会让你打磨一些更偏“元技能”的能力,而这些能力对于任何数据分析项目都至关重要。这些能力包括:

  • 把一个人类提出的问题——通常含糊不清、没有任何技术术语——翻译成一个可以用数据回答的问题
  • 评估现有数据,并判断这些数据是否适合回答这个问题
  • 如果现有数据无法回答问题,知道如何调整分析方向并改变你的分析问题
  • 把结果传达给一个对技术细节毫无了解,甚至毫无兴趣的人

注意:这些练习项目聚焦于技术能力和问题解决能力的培养,但成为一名优秀数据分析师还需要其他职业技能。如果你希望更深入地了解这些方面,我推荐 Robinson 和 Nolis 所著的 Build a Career in Data Science(Manning,2020)。

数据分析的未来还包括人工智能(AI)工具,例如 ChatGPT 以及类似的大语言模型。AI 工具无法替代你批判性思考、与利益相关方沟通,或在业务环境约束下开展工作的能力;然而,AI 工具可以通过帮助你自动化项目中那些更机械性的部分,来加快你的工作进程。我会指出一些场景,在这些场景中,这类工具可以帮助你解决问题的一部分。例如,如果你不知道如何从 PDF 文件中读取数据,那么 AI 模型就能够告诉你,在你偏好的工具里如何调用这项功能,并给出可以直接使用的代码片段。这意味着,你能够更快地解决那个特定的子问题,从而提高整体生产效率。

关于术语的说明

我会交替使用“数据科学”和“数据分析”这两个术语。首先,数据科学家首先必须是一名优秀的分析师,因此在描述这门学科时,我更喜欢使用“分析”而不是“数据科学”;在描述从业者时,我也更喜欢说“分析师”而不是“数据科学家”。当我使用“data science”时,我只是指“分析数据的过程”。

我也会频繁提到“现实世界”。这样做是为了强调:你在课堂上学到的内容,与分析师在实际工作中所面对的情况之间,存在着一种脱节。这种脱节并不意味着课堂不好;而是说,现实工作中存在许多课堂上无法教授的障碍,而这些障碍不一定是技术性的。我的重点,是通过教授初级分析师那些他们在正式训练中学不到的东西,来帮助他们为实际工作做好准备。当我说“现实世界”时,我的意思就是“学习环境之外的世界”。

类似地,“利益相关方”(stakeholder)这个词本身也承载了很多含义。这里我用它来指代你的老板、内部客户,或者外部客户。他们是那些发起请求、从而产生你所做工作的源头。利益相关方,就是那些作为你分析目标受众、并且会直接受到你工作影响的人。

1.2 一种结果驱动的方法

在工作中,你的成功更多取决于你交付了什么结果,而不是你带来了多少技能和知识。所谓结果导向,意味着你的关注点始终放在解决问题上。你应当尽快拿出一个第一版解决方案——我喜欢称之为“最小可行答案”(minimum viable answer)。这就是你拿给利益相关方看的东西,也是后续迭代的基础。

应用这种思维方式,能够简化你的工作,并且立即交付价值。你花时间学习的东西会立刻得到应用,因此你投入时间所获得的回报也会更高。采用这种以结果为中心的方法,你不需要一开始就成为所有事情的专家;相反,在完成每一个项目的过程中,你会把新的、具体的技能加入自己的工具箱,并且一路学习如何高效地应对新任务的方法。我所介绍的这种结果驱动方法,本质上就是:通过做来学习,并以结果为导向地工作

让我们借助一个行业中的经典例子来看看这种方法。假设你在一家汽车经销商工作,你的经理问了一个看似简单的问题:“昨天我们卖出了多少辆车? ”在理想世界里,这只是一个简单的商业智能问题,只需要把销售表筛选到昨天售出的车辆,然后给出答案即可。现实则是,我们必须对这个问题进行更深入的思考,从在开始之前就定义术语做起。

用一种结果驱动的分析方法来解决这类问题,步骤如下:

  1. 理解问题 —— 这包括对其中各个单词/概念进行定义。
  2. 从终点开始 —— 什么样的最小可行答案能够引发进一步对话?
  3. 识别额外资源 —— 这些资源可以是数据、人员,或者你为了拿到这个最小可行答案所需获得的访问权限。
  4. 获取你需要的数据,以得到最小可行答案 —— 这些数据真的存在吗?
  5. 开展工作,得到最小可行答案 —— 理想情况下,这一步不应超过几天,这样你才能快速迭代。
  6. 将最小可行答案呈现给利益相关方 —— 这可能是一次随意的讨论,也可能是一场面对听众的汇报。
  7. 如有必要,继续迭代 —— 如果这项工作有价值,利益相关方会要求你进一步深入。

图 1.1 是对这一流程的可视化表示。请注意,从第 7 步回到前面步骤的箭头:它们强调了这一过程的非线性。根据第 6 步的进展情况,你可能需要回到更早的步骤,甚至回到最开始。

image.png

图 1.1 结果驱动流程的可视化

图 1.1 中的图标会在全书中反复出现,用于讨论这一方法如何应用到具体项目中。为了把这一流程应用到我们的汽车例子里,我们先从第 1 步“理解问题”开始。

1.2.1 理解问题

我们所说的“”到底是什么意思?我在汽车行业工作时,每次一旦出现关于车辆的问题,我们都必须先澄清:这里是否包含厢式车(van)或其他那种不完全算轿车的车辆。有时候,厢式车算在内;有时候,不算。

那么,“昨天”又是什么意思?很多时候,一次销售事件可能关联着多个日期:顾客在店里购买商品的日期、我们给顾客开票的日期、顾客付款的日期,甚至与销售相关的争议最终解决的日期。因此,当我们问“昨天”时,我们必须知道应该使用哪一个日期字段。

甚至“卖出”这个词本身也可能含糊不清。假如顾客后来把商品退回来了呢?这是否意味着这个问题的答案会随着时间而变化?我们甚至可能会明确决定:过去发生的事情并不是固定不变的,这会让我们的分析变得更复杂。顺带一提,我们应当把这类问题的答案编码化并记录在特定业务的数据模型中。关于这一点,我们会在第 3 章进一步讨论。

这一步的输出应当是:

  • 一个可以通过分析来处理的清晰问题
  • 一个定义明确的范围(例如,对“车”的分析是否也包括厢式车?)
  • 由相关各方共同达成一致的、定义清晰的术语

这些内容应当作为项目的一部分被记录下来,以保证透明性可复现性。一旦我们理解了需求,就应当进入对解决方案的构想阶段。

1.2.2 从终点开始

假设我们已经就术语达成一致,那么我们就可以从终点开始,决定“最小可行答案”应该是什么样子。这取决于请求的性质,以及利益相关方想拿这些信息去做什么。如果他们只是需要一个快速的大致估算,那么我们就可以绕过其中一些关于车辆类型和日期的棘手问题——前提是我们手头有一个合适的数据模型可供提取。了解利益相关方期待的是何种层级的答案,对于决定这项请求值得投入多少精力至关重要。

这一步的输出,是对一个可接受解决方案的清晰画面。它会是一份文档、一场汇报,还是甚至一个可以运行的概念验证(proof of concept)?一旦这一点明确了,下一步就是识别所需数据。

1.2.3 识别额外资源

即便面对很简单的请求,也应当立刻问一句:“要回答这个问题,我们需要哪些数据? ”紧接着再问:“我们有这些数据吗? ”在承诺开始工作之前,最好先调研现有数据,因为有些情况下,我们根本就没有一个能够直接记录我们感兴趣概念的数据集。

例如,在一个在线拍卖市场中,销售交易可能不会被直接记录,因为交易可能是在系统之外完成的。我们需要知道的是:如果拍卖结束后,双方通过电话达成了交易,那么这笔销售究竟会在哪里被记录下来。

这一步的输出,应当是一份关于“合适的数据应该长什么样,才能回答这个问题”的清单。这其中应包括:组织内部已经可用的数据集,以及那些需要额外获取的外部数据集。

1.2.4 获取数据

接下来,我们需要获取相关数据,要么从某个地方提取出来,要么自己创建它。如果我们的在线拍卖市场只是用于发布和竞价,那么我们可能不得不通过观察某个商品何时停止上架,来推断它何时被卖出。这个数据集就需要我们从原始上架数据中自行构建出来。

在这种情况下,我们就不得不停在第 3 步,重新讨论:为了得到这样一个“推断出的销售数据集”,所需投入是否值得。这取决于我们在第 2 步中定义的那个最小可行答案。

这一步的输出,应当是一个可落地的数据集或数据抽取结果,并且它可以被用来得到最小可行答案。如果目前拿到的只是一个抽样或提取结果,那么它应当能够代表更大的整体数据。

1.2.5 开展工作

你会注意到,第 5 步只写了“开展工作”。这是有意把它写得宽泛而模糊。第 5 步可能涵盖了你在其他数据分析工作流中遇到的全部内容。第 1 到第 4 步所做的工作,是为了确保“真正去做”这一部分能够有更高的 ROI。到了这个时候,你已经对问题做了足够多的思考,不至于只是毫无方向地一头扎进写代码里——而当你的技能还很新鲜、你又急于交付成果时,这种冲动几乎总是存在的。我鼓励你在第 1 到第 4 步上多花一些时间,也许比你的直觉所愿意投入的还要更多。

在汽车例子中,在这一阶段你可能会发现:某辆车的销售日期会随着时间变化,因为可能会有一些后续事件,例如顾客在等待融资协议获批,或者之后发现了原先未披露的故障,并提出了投诉。作为分析师,你不应单独决定哪一个日期才算真正的销售日期。在这种情况下,你需要一路退回到第 1 步,再次与利益相关方进行沟通,然后才能继续分析。

无论分析过程中发生什么,把你的具体选择与假设记录下来,对于透明性可复现性都是至关重要的。在我为每个项目提供的示例解法中,我都会记录自己做出的具体选择,以及另一个分析师在做出不同决策时可能会走上的不同路径。

这一阶段的输出,就是你在第 2 步“从终点开始”中所决定的那个成果物。这个成果物应当作为项目的一部分被记录下来,并且能够被其他分析师复现。第 12 章和第 13 章会展示一个正是这样做的项目。

1.2.6 呈现最小可行答案

结果驱动方法的一个关键组成部分,是比我们本能上更早地展示结果。我们追求的是一个令人满意的解决方案,因此应当尽早讨论初步结果,以便让迭代尽快开始。过去,数据团队之所以失败,很大程度上就是因为他们把自己封闭在业务之外,几个月后才重新出现,带来了一堆没人真正提出要求、也没有任何实际业务价值的工作。

有人在使用你的工作吗?

我曾经在一个会议上听过一场很有意思的演讲,主讲的数据科学团队构建了一个复杂的销售预测模型。整场演讲几乎完全是技术性的,讲述了他们如何一步步走到一个分层贝叶斯(hierarchical Bayesian)方法的故事。

在问答环节,我问了一个比较尖锐的问题:“真的有人在使用你们的预测吗?如果有,是拿来做什么的? ”那些数据科学家有些不好意思地承认,他们还在努力说服业务方相信这些预测是值得使用的。

我怀疑,如果他们更早地去展开那场对话,就能避免很多不必要的工作。

这一步的输出,是与利益相关方的会议纪要,或者是一场汇报。相应结果也应当作为项目的一部分记录下来。是否被要求继续推进这项工作?如果是,那么具体要求是什么?

1.2.7 如有必要,继续迭代

最后,你几乎总是会对自己的第一版答案继续迭代。把这一步明确纳入任何数据分析框架之中是很重要的,因为它强调了这份工作的内在不确定性。你永远不可能一开始就掌握所有答案——包括“这次分析要花多长时间? ”这个问题的答案——而这没有关系。

接受这样一个事实:为了得到一个令人满意的解决方案,第一版草稿是必须存在的;而且,第一版越早出现越好。这种迭代式方法还有一个额外好处:你会越来越擅长估算自己的工作需要花多长时间,因为你每次只需要估算一个迭代,而不是整个项目。

采用结果驱动的方法,你会逐渐形成一种直觉,知道该如何做出分析决策,从而让自己聚焦于提供一个务实的解决方案,而不是一开始就试图给出一个不必要地过深的答案。当然,在这个过程中,你仍然需要学习新工具。有时候,这些工具只会在眼前这一项分析中被使用;下一次分析可能又需要另一套工具。没关系——工具会来来去去,但你学到的知识与概念会保留下来,而这些东西,才是真正让一个分析师优秀的根本。

需要指出的是,这种方法并不是说,在有必要的时候你就不需要深入下去。我并不是鼓励任何人只学会走捷径。然而,在分析工作中,一项关键能力是识别你时间投入的最高 ROI,而这往往意味着采用一种广度优先(breadth-first)而非深度优先(depth-first)的方法。

1.3 项目结构

这些项目被设计成能够代表分析师在行业中经常面对的问题。每个项目都被设计得可以在具备基础分析师技能的前提下上手,并且不会花费太长时间。这里面会受到很多因素影响:你对自己工具的熟练程度、你对相关主题的熟悉程度、你学习新概念的速度,等等。但一般来说,你对每个项目的第一轮解答,应该会花费 2 小时到 2 天之间的时间。这个区间很宽,但即便是一个用两天完成的“冲刺”,如果最终能交付出一个可供与利益相关方讨论的成果,也已经算是非常快的周转速度了。

这些项目不仅反映了行业中的常见问题,它们还被设计用来弥合初始训练现实世界之间的一些特定技能缺口。表 1.1 对这些项目做了概览。

表 1.1 本书八个项目概览

项目数据分析技能章节
分析不同地理区域中的客户零售支出从自由文本中提取结构化数据第 2 章
从电商交易中提取唯一客户记录数据建模第 3 章
定义并找出电商商店中表现最好的产品定义指标第 4 章
分析新冠疫情对电影行业的影响从 PDF 中提取数据第 5 章
通过一份调查研究开发者对 AI 工具的态度处理分类数据第 6、7 章
识别骑行基础设施的潜在改进点处理时间序列数据第 8、9 章
构建一个用于探索威尔士房地产市场的概念验证应用快速原型开发第 10、11 章
延续另一位分析师的工作,并基于手机活动创建客户分群在他人工作基础上迭代;客户分群、聚类第 12、13 章

每个项目都按如下方式组织:

首先,它会以一个高层描述以及相关数据开始。除此之外,就主要靠你自己了。如果你已经比较习惯于根据一个相对模糊的分析问题来制定行动计划,或者你想有意识地练习这种能力,那么只读这一部分就已经足够。

接下来,会有一个更详细的、逐步分解的说明,解释你可以如何尝试去得到一个解法。这里不会出现代码片段,但如果高层描述让你卡住了,不知道该从哪里开始,那么这一部分应该能够帮助你启动自己的解题尝试。

最后,我总会给出一个示例解法。其中会讨论:你可以如何尝试解决问题、你必须做出哪些假设、在数据约束下你可能如何调整自己的分析问题,以及一个可接受的结果应当长什么样。在示例解法中,我会做出一些具体的假设和决策,而这些假设与决策可能与你自己的不同。这是完全正常的。目标并不是让你得到我的解法——我的解法也不会是“那个唯一正确的解法”。事实上,我还会专门指出分析可能在哪些地方发生了分叉。真正的目标,是练习如何从问题定义一路走到最小可行答案

你可以把这一组贴近真实的分析项目,当作一个练习伙伴,帮助自己适应这样一种状态:在不知道答案,甚至连所需工具都还不知道的情况下,直接跳进去开始做事。通过这些练习项目来学习时,你将会:

  • 心中带着一个终点目标,并朝着它推进
  • 学习那些为了得到答案而真正需要的技能,而不是学习那些没有明确终点的技能
  • 广度优先而不是深度优先的方式学习

使用结果驱动方法来处理项目,会帮助你把这些方法迁移到任何项目上。这些项目应当能激励你继续分析数据,并使用“解决一个问题”这一框架来学习,同时不断积累新技能,并建立一个顺手可展示给潜在雇主的作品集。

让我们开始吧!下一步,就是接手你的第一个项目:对一个假设中的英国零售商客户人口属性进行分析。希望你会喜欢这段旅程!

小结

  • 你应当预期自己的正式数据科学训练与现实世界之间存在落差。

  • 保持务实、结果导向,有助于你应对数据分析中固有的不确定性。

  • 通过真实世界示例来练习这种结果驱动的方法,将帮助你:

    • 聚焦于问题解决
    • 更擅长识别额外的考量因素
    • 形成一种直觉,更早地做出分析决策,从而更快为利益相关方的问题提供务实的解决方案
    • 建立一个现实世界项目作品集,使自己在求职中更具竞争力