伟大的应用(数据)科学工作
Great application (data) science work
从业务需求到令人信服的结果呈现,帮助解决真实问题的关键
在工业领域中,先进的数据科学工作有时也被称为“应用科学”,这反映了它不仅仅涉及数据,还有许多从事该领域的前学者。我发现“应用科学”与研究科学有着不同的期望。因此,根据我的经验,我总结了一些有助于产生优秀应用科学工作的要点。我将其用作数据科学工作的“完成定义”,但其中许多要点也适用于分析师、工程师和其他技术角色。
目标:什么是成功的应用科学工作?
优秀的应用科学家通过发现数据和模型的巧妙用途,从头到尾解决有价值的现实世界问题。有时,这需要的第一步是发现可能提供可行科学解决方案的最有影响力的业务问题;有时,业务问题是被充分理解的,科学工作从明确定义的技术问题陈述开始。
无论哪种情况,成功的科学工作始于对现实世界问题的理解。科学家们需要充分了解复杂的业务挑战,以将其转化为可以在有限时间内解决的技术问题陈述。他们消除了模糊性,并创建了适当的结构性假设以实现解决方案。
成功的科学工作还找到了技术上适当和务实的解决方案:这可能意味着采用最先进的深度学习技术,但非常资深的科学工作也可能只包括几个巧妙的SQL查询。优秀的科学家知道如何选择适合工作的正确工具。
优秀的科学家知道,陷入错误的技术方法很容易。为了避免这种情况,他们将工作分阶段进行:能够将一个大问题分解为较小的子问题;通过生成中间结果来验证每个方法,并积极征求同行的反馈意见。
优秀的科学工作融入了反馈,因为良好的归纳偏见可以极大地加速学习。但优秀的科学家也知道,当他们遇到经验问题时要提出一个实证问题,并坚持使用数据来解答。
优秀的科学工作意味着记录生成解决方案所需的步骤,并以适合受众的方式呈现结果。并确保结果得到使用 – 无论是软件变更、战略决策还是发表论文。因为只有这样才能从头到尾解决有价值的现实世界问题。
总结:4个原则
以下四个原则是支撑这些建议应用于工业应用科学工作的基础:
- 责任:我们的工作是解决模糊的问题。
- 高效好奇心:我们喜欢学习。理想情况下,要比通过武断的实验更高效。
- 反复斟酌:在探索性工作中,明确的计划可以避免迷失方向。
- 迭代结果:频繁的反馈可以减少模糊性。
路径:什么可以使科学工作更加成功?
以下部分根据我的经验提供了一些具体的建议,以改善科学工作,按照科学过程进行结构化。
1. 应用科学的角色
应用科学工作本质上是社交的。要产生优秀的工作,应用科学家需要在团队中良好地进行合作。
与人合作
许多科学工作需要与他人合作;了解之前的工作、找到相关的数据集、寻求解释、向利益相关者沟通进展、说服队友支持你的项目。最终,你要负责交付结果 – 管理合作是工作的一部分。这可能意味着你需要说服队友审查你的拉取请求,也可能意味着你需要找到一种方法将你的数据工程需求优先考虑到其他团队的待办事项中。当这个过程陷入困境时,你可以升级并寻求领导的帮助澄清优先级 – 但你有责任去做这件事。
贯彻始终
作为科学工作的一部分,团队经常在小组会议或一对一的环境中进行头脑风暴。这些会议非常有价值,有助于产生比任何个人都能做得更高质量的工作。但是,如果头脑风暴会议与后续工作没有直接联系,它们往往是浪费时间的。你将希望避免后者 – 这意味着主动跟进讨论的想法和任务:如果团队同意应该做某件事,请做(并沟通结果)。如果无法立即完成,可以为这些想法编写一个工单(并沟通工单)。在头脑风暴会议上主动询问具体的收获和谁负责下一步通常非常有帮助 – 任何人都可以做到这一点,并与团队分享他们的笔记。
透明度与信任
并不是每件事情都按计划进行,科学工作的本质就是大多数实验都会失败。预计计划不会如期实现。这使得科学工作成为一项高方差的活动:即使您能准确预测工作的“预期值”,仍然可能会发生意外。
当事情不按计划进行时,要完全透明。最重要的是,当有什么不对劲的时候,立即通知您的团队。这样可以更有效地协调路线图和可交付成果。作为回报,期望信任:失败的实验是我们日常工作的一部分。
最令人讨厌的实验结果是“不确定”的结果:一个实验不完全失败,但也没有成功。这些也是科学工作的一部分,它们也值得展示和分享:我们能否假设为什么无法解决科学问题?如果我们重新开始,我们会做些什么不同的事情?
在团队中工作时,不理解演示文稿、对话或工单中的一切是很自然的。然而,“点头附和”是有问题的——当别人认为您已经理解了某些事情时,而您实际上没有理解,这很可能会导致误解和工作结果的不一致。作为科学家,“为什么”应该是我们最喜欢的问题:当有什么不清楚的地方时,不断提问,直到您感到双方理解。如果有疑问,用自己的话重新表达某件事是一种检查您是否真正理解正确的工具。
2. 理解业务问题
正确理解业务问题通常比纯研究科学更加“混乱”:概念没有明确定义,数量无法衡量,利益相关者的目标不一致。但是,误解要解决的问题会导致失望,并降低应用科学工作的价值——即使后来再进行科学上的复杂处理也无法挽救这种情况。
不断提问,直到您完全理解业务问题。在某些情况下,您的问题可能会导致业务问题表述的精确化或甚至转变。
在技术术语中阐述业务问题时,我们通常需要做一些基本假设:我们需要选择某个概念的具体定义,忽略边缘情况,决定哪些潜在副作用不在讨论范围之内。注意这些假设,以便以后可以重新审视它们。
由于做出假设,您可能会解决错误的问题,因为一个合理的假设最终被证明是不准确的。防止这种情况的最有效方法是以增量的方式工作,并经常验证增量是否朝着正确的方向发展。将其推到极致,构建一个模拟解决方案(例如快速电子表格)通常有助于产生有价值的业务反馈。
在开始进行深入的建模工作之前,请再次核实您的方法是否能解决正确的业务问题。但不要忘记在整个过程中反复验证这一点。如果有疑问,请选择频繁、小规模的迭代。
3. 研究路线图是假设树
一旦您开始深入数据和模型,很容易迷失方向。编写清晰的研究路线图可以避免这种情况。经验丰富的科学家常常有意识或无意识地按照一种明确的假设结构进行工作,将一个模糊的问题分解为可顺序解决的子问题。我建议在编写第一行代码之前,先完整地草拟出假设结构,并征求意见。
重要的是,您需要写下某种形式的计划,并在进展中对其进行定位。我发现有用的一种格式是以假设树结构明确表示的思维导图或项目符号。以下是创建这种结构的粗略“算法”:
- 对您的问题进行几种不同的方法构思;不要忘记寻找其他团队、开源和已发表资料中的现有解决方案。将它们写下为“候选项”。这里的想法是广度优先:收集许多初步的想法。
- 粗略估计“验证”方法所需的工作量:这不是使用给定方法解决问题所需的工作量,而是找出一种方法是否很可能有效的工作量。
- 按估计的验证工作量对方法进行排序。
- 从验证工作量最低的方法开始,构思如何验证该方法,并最终使用它解决您的(子)问题。递归地继续树下行(即对于每个子问题,重新从1开始)。根据需要为树的级别重复此过程。
使用这种方法,您理想情况下会得到一个结构良好、优先级明确的计划,用于首先尝试什么,以及在一个想法有效时应该做什么(跟随该分支),以及在一个想法无效时应该做什么(继续在当前分支下的下一个分支上工作)。您的“树”的“叶子”应该是相对容易测试、可以通过数据回答的问题。您的计划结构还应该使得描述进展更容易,并且能够获得中期结果的反馈。
4. 增量工作受益于强大的直觉
所有建议中最难捉摸的是:伟大的科学家对哪些方法可能有效、哪些方法甚至不值得进一步考虑具有超凡的直觉。有时人们会有这样的印象,认为某些人“只是让一切都有效”——更准确地说,这些人知道不值得尝试什么,他们把大部分时间花在了有生产力的想法上。当然,建立这种程度的直觉是困难且需要一生的职业。良好的直觉意味着您将大部分时间花在有生产力的假设上——这一点很重要,因为潜在假设和需要跟进的想法的范围是巨大的,而直觉减少了假设树中的搜索空间。
直觉是社交的
当您找到一个您信任的人的直觉时,请问他们有关要遵循的方法的建议。请他们为这些建议提供理由。试着理解他们如何推理问题-解决方案映射,超越了直接的技术问题。
建立直觉尤其受益于互动学习:考虑与您的同行一起进行配对编程,并互相解释概念。尽量亲自见面,而不仅仅是远程:至少我还没有找到白板或两个白板的完全替代品,并且在同一个房间里面。
强大的基础知识有助于
投资于理解基础知识:您应该建立关于事物如何工作的心智模型。这些模型需要“足够正确”,但又足够简单,以适用于实际情况。当涉及到图像或文本数据时,使用“嵌入”这个想法是一个好的直觉,它可以让您快速构建潜在模型的心智架构。但是,要准确评估这种方法的可行性,您应该完全理解嵌入是如何训练的以及所得到的信息编码是什么。
好奇心
对于类似但不同的问题要保持好奇。思考它们的相似之处和不同之处。思考您的问题的解决方案可能适用于这些类似问题还是不适用。一些例子:可替代产品的实验与社交网络的实验有关(“溢出效应”)。时尚定价与航空公司定价有关(“易腐商品”)。产品/实体匹配与音乐版权执法有关(“粗略+精确匹配步骤”)。
反思您以前的工作:当您不得不尝试某些东西,因为您没有强烈的直觉时,您可以从实验中学到什么?从实验中是否可以得出一般性的真理,以帮助您改善直觉?
积极寻求对您方法的批评:无论是作为“研究路线图审查”的一部分,还是作为您对已完成项目的反思的一部分,持不同意见的观点都可以帮助您深化直觉并发现盲点。
5. 以清晰的代码解决问题
对于应用科学而言,将清晰的代码应用于探索性/实验性工作是一个特殊的挑战。但它同样重要:清晰的代码避免错误,部分原因是它强制要求保持卫生,部分原因是代码的读者更容易发现错误,部分原因是当第一次实验不可避免地失败时,它使您更容易迭代思想。变量名比大多数大学课程所建议的要重要得多。在函数、类和模块中进行封装可以帮助浏览各种级别的细节和抽象。
然而,在解决方案清晰之前,过早地进行“产品化”可能会减慢您的速度:在解决方案清晰之前,应该很容易替换您的方法的某些部分。
以读者为导向编写代码
当您编写分析笔记本时,请为读者编写,而不仅仅是为自己编写。解释您正在做什么。使用良好的变量名。整理绘图。标记单元格是有原因的。
考虑DRY代码。当您发现自己从以前的调查中复制/粘贴代码时,这可能是重构的好时机。
当有读者在意的情况下进行探索性工作时,可以像任何其他代码一样将其作为Pull Request进行审查。实际上,最终分析答案所需的所有步骤都应该由第二个人审查。在提交审查之前,请帮助您的审查人员删除(或清楚标记)纯粹的探索性代码。
文档
组织和更新中央知识库是我所知的技术组织中最普遍的问题之一。我不知道简单的解决方案。但我知道好的文档投资会在长期内产生回报。对于中央知识,应该有一个(且仅有一个!)中央来源。这个文档应该是真理的来源:如果代码不按照文档所说的去做,那么代码是错误的(而不是文档)。这需要频繁且容易地更新文档:写得糟糕但正确完整的文档比写得好但过时的文档要好得多。投资于文档是可提升的工作,我相信它的影响。
6. 提出而不仅仅展示结果
演示是一个机会,可以从您的工作中大步后退,思考它在整个计划中的含义。这对最终结果的演示是正确的,但对中间结果的演示可能更为正确。
每次您展示结果时,请考虑您的观众的期望。对于您提出的每个观点(对于每张幻灯片;对于文本中的每个部分),您都应该回答观众的隐含问题“那又怎样?”不同的观众在这方面会有不同的期望:高级业务领导可能最感兴趣的是一个简单明了的叙述,以捕捉您的发现的本质,并可以轻松与其他高级领导分享。您的经理可能最感兴趣的是了解如何解决特定问题以及何时解决。同事可能最感兴趣的是从您的方法中学到的对他们自己工作的帮助。利益相关者或客户希望了解您的工作使他们能够做出什么新的决策或行动。
我发现许多科学家倾向于在演示中按照他们的发现过程开始,从第一个实验开始。我强烈反对这样做,因为这往往会导致在您进入有趣的部分之前就失去人们的注意力:相反,从您试图回答的最初业务问题开始,并给出您对最初问题的最佳回答。然后描述您的高级方法,并解释为什么您认为您的回答是您能给出的最佳回答。预测您的演示会引发哪些问题,并为这些问题准备好答案。最重要的是,对您提出的每个观点回答“那又怎样?”。
没有最终对您的答案做出贡献的有趣实验应该放在附录中-它们可能有助于进行深入讨论,但对于主要演示来说并非必需。
推论:为演示准备材料通常感觉像是繁忙的工作。我发现,相反,频繁制作可呈现的中间结果有助于保持专注和思维清晰,因为您迫使自己多次后退。为演示制作清晰的图表和叙述对于保持专注于最终目标并达到明确结论非常有帮助;但是优化幻灯片布局并不重要。因此,对于中间结果,形式应该服从功能。重要的是明确传达明确的主要信息。设计是否完美并不重要。例如,手绘一幅图并展示其照片是完全可以接受的。
清晰可见的
所有的图表都应该是自解释的,并且有明确的信息。我强烈建议即使在您仅为自己创建的图表中也遵循一些基本事项。
- 用自解释的描述标记轴:使用文字,而不仅仅是字母。
- 使用清晰的图表标题解释显示的内容和主要信息(同样,“那又怎样?”)。
- 减少显示的数据到必要的数据:例如,数据可能包含一个“虚拟”类别,明显不打算有用。不要让它在图表中占据视觉空间。
- 当仅通过颜色区分许多系列的数据时,请确保颜色图例明显区分(对色盲友好的加分)。
- 可视化有助于理解数据中的模式。如果一个图表仅显示一团混乱的点,那可能可以删除(除非您想证明特定的观点)。
- 对于(正)计数数据的清理情节,对数刻度通常可以帮助。
清晰的数值结果
每当呈现数值结果(例如在表格中)时:
- 为适当的成功度量进行优化和展示。许多应用科学家在这方面花费的时间太少:要知道何时使用RMSE/MAPE/MAE,对数尺度,F1与ROC与Precision-Recall曲线下面积的区别。
- 几乎所有的现实世界问题都涉及加权成功度量,然而大多数机器学习课程几乎不涵盖这个主题:例如,销售预测的成功度量可能需要根据价格、库存价值或包装尺寸进行加权,具体取决于使用情况。
- 如果成功意味着估计反事实(“假设”分析),请明确说明,并找到一个清晰的推理,说明您的成功度量如何捕捉这些反事实。 (自然)实验是一个流行的选择。
- 为您提供的任何数字提供合理的基准。通常,找到“正确”的基准需要深思熟虑-但这总是值得的。您拟合了一个花哨的机器学习模型?它比线性回归更好多少?您为下周制定了一个预测?它比假设下周与本周相等的情况更好多少?您正在呈现A/B测试结果?它相对于我们的月收入或上一次改进的增长率是多少?
感谢您阅读到这里!我很想听到您的反馈:哪些触动了您?您的经验有何不同?还有什么其他方法可以解决有价值的现实世界问题的全流程?