1.2 特征工程的重要性
为了解决实际问题,数据科学家和机器学习工程师要收集大量数据。因为他们想要解决的问题经常具有很高的相关性,而且是在混乱的世界中自然形成的,所以代表这些问题的原始数据有可能未经过滤,非常杂乱,甚至不完整。
因此,过去几年来,类似数据工程师的职位应运而生。这些工程师的唯一职责就是设计数据流水线和架构,用于处理原始数据,并将数据转换为公司其他部门——特别是数据科学家和机器学习工程师——可以使用的形式。尽管这项工作和机器学习专家构建机器学习流水线一样重要,但是经常被忽视和低估。
在数据科学家中进行的一项调查显示,他们工作中超过80%的时间都用在捕获、清洗和组织数据上。构造机器学习流水线所花费的时间不到20%,却占据着主导地位。此外,数据科学家的大部分时间都在准备数据。超过75%的人表示,准备数据是流程中最不愉快的部分。
上文提到的调查结果如下。
下图展示了数据科学家进行不同工作的时间比例。
从上图可见,数据科学家的工作占比如下。
❏ 设置训练集:3%
❏ 清洗和组织数据:60%
❏ 收集数据集:19%
❏ 挖掘数据模式:9%
❏ 调整算法:5%
❏ 其他:4%
下图展示了数据科学家最不喜欢的流程。
在一项类似的调查中,数据科学家认为他们最不喜欢的流程如下。
❏ 设置训练集:10%
❏ 清洗和组织数据:57%
❏ 收集数据集:21%
❏ 挖掘数据模式:3%
❏ 调整算法:4%
❏ 其他:5%
上面第一幅图表示了数据科学家在流程中的不同部分所花费的时间比例。数据科学家有超过80%的时间花在了准备数据上,以便进一步利用数据。第二幅图则表示了数据科学家最不喜欢的步骤。超过75%的人表示,他们最不喜欢准备数据。
数据源:https://whatsthebigdata.com/2016/05/01/data-scientists-spend-most-of-their-time-cleaning-data/。
好的数据科学家不仅知道准备数据很重要,会占用大部分工作时间,而且知道这个步骤很艰难,没人喜欢。很多时候我们会觉得,像机器学习竞赛和学术文献中那样干净的数据是理所当然的。然而实际上,超过90%的数据(最有趣、最有用的数据)都以原始形式存在,就像在之前AI聊天系统的例子中一样。
准备数据的概念很模糊,包括捕获数据、存储数据、清洗数据,等等。之前的图中显示,清洗和组织数据占用的工作时间十分可观。数据工程师在这个步骤中能发挥最大作用。清洗数据的意思是将数据转换为云系统和数据库可以轻松识别的形式。组织数据一般更为彻底,经常包括将数据集的格式整体转换为更干净的格式,例如将原始聊天数据转换为有行列结构的表格。
清洗数据和组织数据的区别如下图所示。
图片上半部分的转换代表清洗服务器日志,包含数据和服务器状态的描述文本。注意在清洗时,Unicode字符&被转换为了更可读的&。清洗前后,文档的格式基本保持不变。下半部分的组织转换则彻底得多,把原始数据转换为了行列结构,其中每行代表服务器的一次操作,每列代表服务器操作的属性(attribute)。在这个例子中,两个属性是日期和文本。
清洗和组织数据都属于更大的数据科学范畴,也是本书要讨论的主题——特征工程。