敏捷数据科学

来自CloudWiki
跳转至: 导航搜索

敏捷数据科学的定义

敏捷数据科学(Agile Data Science)是一种围绕网络应用开发展开的数据科学实践。敏捷数据科学认为,适用于在机构中发挥作用的数据科学过程的最有效的输出应为网络应用程序。它还认为应用开发是数据科学家的基本技能。因此,从事数据科学变成了构建用于描述应用研究过程的应用程序,包括快速的原型设计、探索性数据分析、交互式可视化以及应用机器学习。

为了将敏捷开发经验应用到数据科学实践中,我尝试提出了敏捷数据科学“宣言”这样一套严谨的方法。这些原则不仅仅适用于数据科学家在生产中构建数据产品。网络应用程序是在机构内和机构间共享能影响决策的认知的最佳形式。

敏捷数据科学不仅仅包括交付能用的软件,还包括更好地把数据科学整合到机构内其他团队的开发中。

在这段时间中,软件工程领域也发生了“敏捷”革命,应用的构思、构建、维护都与之前大不一样。这些新现象使得许多项目和产品能够按期交付、不超预算,也让小团队和个人开发者能在各行各业中开发出完整的应用。这就是敏捷软件开发(agile software development)。

敏捷数据科学的原则

敏捷数据科学是围绕下面这几条原则进行组织的。

  • 迭代,迭代,再迭代:表格、图表、报表、预测。
在数据科学中,迭代是提取、可视化以及产品化见解不可或缺的环节。构建数据科学应用就意味着迭代。


  • 发布阶段性结果。即使是失败的实验也有输出。
迭代是构建分析型应用不可或缺的行为,这意味着每个冲刺结束时我们都会留下一些没做完的事情。如果我们不在冲刺结束时发布未完成的阶段性输出,可能最终什么也没发布出去。
  • 原型实验高于实施任务。
在软件工程中,产品经理让开发者在一个冲刺阶段内完成一张图表的开发。开发者把这个任务转化为实现一个SQL GROUP BY语句,并创建一个网页来显示图表。任务完成了吗?没有。如此具体的图表不大可能有什么价值。数据科学和传统软件工程的不同之处就在于它一半是科学一半是工程。
  • 在产品管理中仔细考虑数据的情况。
在产品讨论中要始终考虑数据的情况,这意味着产品讨论必须以可视化为基础
  • 不断上下求索于数据价值金字塔。
 ● 图表(chart)和表格(table)层是数据优化和分析的起点。
● 报表(report)层提供沉浸式数据探索,帮助推理并了解数据。
● 预测(prediction)层创造了更多价值,但要创建好的预测模型,就需要进行特征工程,这需要低层的支持。
● 最后一层,行动(action)层,它是人工智能热潮发挥作用的一层。
  • 找到实现杀手级产品的关键路径并遵照执行。
为了尽可能地提高我们成功的概率,我们应该把大多数时间放在应用程序对于成功最重要的部分上。
  • 抓住本质。描述过程而不仅仅是最终状态。

瀑布模型的问题

科学擅长发现未知,与工程相比的不同之处在于,科学没有特定的终点:

Python2022070901.png

工程是运用已知的科学知识和工程技术,以线性的流程来构建事物。如图1-4中的甘特图所示。任务可以被细化、监控和完成。

Python2022070902.png


敏捷软件开发

在数据科学中我们必须在版本管理工具中提交全部代码,同时必须对丑陋的代码有更高的容忍度,除非部分代码确定需要保留并复用。如果不这样而直接把软件工程的标准用在数据科学的代码上,则会极大地降低生产效率。同时,通过把一些软件工程知识和习惯灌输给学者、统计学家、研究人员、数据科学家,代码质量可以提高很多。

图1-6展示了如果任务在一个个冲刺中完成,笨重的技术栈和团队会使项目回到瀑布模型。在这种情况下要画一个图表,于是数据科学家用Spark计算出图表的数据并把数据存入数据库。接下来,API开发人员为这份数据设计了API,然后网站开发人员为图表开发了一个网页。可视化工程师创建了真正的图表,然后设计师对图表进行了美化。最后,产品经理看到了图表,之后如果要修改的话又是一轮新的迭代。每前进一步都要多花很多时间。进度非常缓慢,团队也谈不上敏捷。

数据科学过程

敏捷数据科学的团队成员也因此包含从客户到运维的各种角色

这些角色的具体定义如下。

● 客户:产品的使用者,单击你提供的按钮和链接,或者完全无视。你的任务是为他们不断创造价值。他们是否感兴趣决定了你的产品是否成功。

● 业务拓展:与早期客户签约,可能是通过面对面联系,也有可能是通过推广页面和活动获取,在市场上为产品造势。

● 市场人员:与客户直接交流,决定投放何种市场。他们决定了敏捷数据科学产品的出发点。

● 产品经理:聆听各方观点并进行汇总,构建对于产品愿景的共识,明确产品的发展方向。

● 用户体验设计师:负责从客户的角度协调设计与数据的关系。这一角色非常关键,因为统计学模型的输出对于对模型输出结构毫无概念的“普通”用户来说,是非常难以理解的(比如什么叫75%正确) 。 ● 交互设计师:设计与数据模型的交互方式,以便用户发现价值。

● 网站开发人员:开发把数据显示在浏览器中的网络应用程序上。

● 工程师:构建为应用程序传递数据的系统。

● 数据科学家:以创新的方式探索并转化数据以实现并发布新功能,整合各种来源的数据以创造价值。他们和研究人员、工程师、网站开发人员、设计师一起实现数据可视化,不断地及时展示数据,不论是原始数据、阶段性数据还是经过提炼的数据。

● 应用研究人员:解决数据科学家发现的阻碍发掘价值的严重问题。这类问题需要投入精力与时间,要用统计学和机器学习中的新方法来解决。

● 平台工程师/数据工程师:解决分布式基础架构中出现的问题,让敏捷数据科学可以无痛伸缩。平台工程师负责随时解决严重问题的工单,并根据长期计划实现一些项目来为研究人员、数据科学家以及工程师提供基础平台维护,提高系统可用性。

● 质量保障工程师:对预测系统进行端到端的自动化测试,确保能做出精确可靠的预测。

● 运维/开发运维工程师:保障生产环境的数据基础架构的平顺安装和运行。他们要实现自动化部署,出故障的时候会大费周章。

构建团队:

● 优先选择通才而非专才。

● 小规模团队比大规模团队好。

● 使用高级的工具和平台:云计算、分布式系统、平台即服务(PaaS)。

● 将阶段性结果持续迭代输出,即使工作尚未完成。

敏捷数据科学团队中的设计尤其是一个关键角色。设计不仅限于外观和体验,而是包含产品的方方面面,从架构到发行,从用户体验到运行环境。

过程中的注意事项

敏捷产品开发的目标是认清应用的核心特性,优先构建这些部分,然后再加上其他功能。这为项目带来了敏捷性,使得项目更能满足真实而关键的需求,毕竟需求一直在演进。在数据产品中,这个核心特性会让你大吃一惊。

每一轮冲刺中的代码审核都对保持高的代码质量和代码可读性至关重要。在算法层面上,避免系统性错误是非常重要的,这就需要团队形成一种总结和分享的风气。这种文化冲击是代码审核中最重要的一方面,因为这为团队成员提供了互相学习的机会

创意工作者们需要三种不同的空间来相互合作,一起构建产品。按照从开发到封闭的顺序,这三种空间分别是:合作空间、个人空间、私有空间。如果团队获得了这三种环境,就会变得愉悦而高产,能够更高效地应对数据科学挑战。

敏捷开发环境的要求包括能方便地进行大幅打印。可视化的物质形式能够促进思路分享、思想碰撞、想法表达以及创造性。


参考文档:《Spark全栈数据分析》