前言

2012年,哈佛商业评论的一篇文章中称“数据科学家”为21世纪“最性感“的职业[1],预测着未来数据科学行业需求将急速增长。Glassdoor 的美国最佳工作榜单上,数据科学家从2016年到现在的2019年,四年以来都位居榜首[2]。这四年长居美国最佳工作榜首的数据科学家,到底是做什么的呢?

初次接触的疑惑

我刚上大学的时候,数据科学这个概念几乎没有被周围的人提及,那时大数据才是一个非常火的概念。后来,人工智能开始流行。其中,在风口浪尖上的,即是机器学习。大四在豆瓣和百度实习时,我主要的方向还是做移动开发 (iOS)。实习所在的团队每季度可以买书报销,我当即就入手了一本机器学习的西瓜书(现在看来那真不是一本好的入门书籍),希望为之后的研究生选题打下基础。本科做毕业设计,我选的课题是新浪微博自动文摘系统,这是一个与自然语言处理相关的项目。从毕业设计开始,我便希望在研究生时,接触与人工智能领域相关的方向。随着自己的探索,我了解到数据科学家这个职业。当我意识到数据科学可以基于数据做决策,从数据中获取洞见并应用于实际产品时,我被这种能力深深吸引吸引,便决定自己以后向这个方向发展。

但是,如果你现在和当时的我一样,初次接触这个学科,你会发现,想要理清楚数据科学是一个怎样的学科,数据科学家们又是在承担着什么职能,会遇到不少阻碍。因为数据科学其本身就是一个还在发展中的学科,其中许多概念定义都还是模糊的,学术界和工业界都还处于各自有定义,相互讨论的状态。

正因如此,你很可能会和我一样,一开始会思考🤔:什么是数据科学?数据科学家就是做数据分析的工作吗?数据科学与机器学习有什么关系?数据科学与统计学的关系又是什么?冠以”科学”的名义,只是为了看起来”高大上“一些吗?你说数据科学能够应用于各个领域,那数据科学到底是在解决一类什么样的问题呢?想要成为数据科学家,到底应该学习什么样的领域知识呢?我又应该如何自学以找到与其相关的工作呢?

本文就是在我阅读论文、书籍和各类博客之后,我对这些疑惑的解答。

数据科学是什么?

我们先来看数据科学解决现实问题的例子。奥巴马在竞选美国总统时,组建了一支数据科学团队,试图解答:哪一些人会给奥巴马投票?如何保证这些人在投票日那天也的确会投出自己的一票?Netflix公司用数据科学解决的问题是,如何推荐给用户喜欢看的电影?再例如,DataKind 致力于利用数据的力量来更好地改善人们的生活。他们的项目有:如何利用开放数据防范家庭火灾?利用数据提升道路安全?[3,4]

Photo by Franki Chamaki on Unsplash

数据科学还有许多可以解决的问题,其本质是什么呢?

在Data Science Overview中给出的一个定义是:

From the disciplinary perspective, data science is a new interdisciplinary field that synthesizes and builds on statistics, informatics, computing, communication, management, and sociology to study data and its environ- ments (including domains and other contextual aspects, such as organizational and social aspects) in order to transform data to insights and decisions by following a data-to-knowledge-to-wisdom thinking and methodology. ——Data Science Overview[5]

这个定义,强调数据科学是综合运用各个学科,遵循数据-知识到智慧的思维模式和方法,来完成从数据到洞察和决策的转化。

另一个对其的定义是:

An interdisciplinary field that combines statistics with computer science concepts like machine learning and artificial intelligence to extract insights from big data. In business, these insights — whether delivered via autonomous integrated systems or in traditional reports — have the potential to fuel innovation and transform decision making. ——What is data science [7]

同样的,强调其决策能力。

综合起来,我认为最简洁有力的定义如下:

数据科学,是将数据转化为洞察(insights),并基于这些洞察作出决策。

而在数据的不同阶段,也会提出不同的问题,使用不同的方法,实现从数据转化为洞察的过程[5]:

该图的横坐标是时间,从数据的三个阶段(过去、现在和未来),到决策阶段。纵坐标,是从数据到洞察。图中,G代表Goal,目标;A代表Approach。每一个格子对应的是不同阶段,目标问题和使用的方法。

这样说来多少有些抽象,具体而言什么叫做理解数据?什么又算洞察呢?基于数据做出的又是什么决策呢?不如看看数据科学家们实际在做些什么。

具体的工作流程是什么?

与科学工作流程类似

数据科学的工作流程和科学家(或者说研究员)的工作流程是类似的。科学家的职责是收集数据并将其转化为理解[8],科学工作流程如下:

从数据到理解不是一蹴而就的:数据首先需要被转化为信息,再将信息转化为知识,最后从知识再产生理解。

对于一般工业界的数据科学家,会更偏向于解决实际问题,所以更多的是在寻求,如何将对数据的理解转化为实际的应用[8]。所以其流程如下:

工作流程

上面这样的流程是一个高度抽象的流程。实际接地气的方式,是什么样的呢?

我们先一个整体的流程图[9]:

抽象化之后,一个清晰简洁的数据科学流程如下[9]:

提出问题

A data scientist is the adult version of the kid who can’t stop asking “Why?”. —— Avantika Monnappa

数据科学与传统软件开发的需求不同,传统软件开发的需求是让你直接做出对应的功能来,比如写一个页面,比如完成一套业务逻辑的后端。在数据科学中,你需要先提出好的问题来,思考清楚问题的核心关键是什么。例如LinkedIn中的一个数据科学问题就是,要怎么识别出与用户在现实世界建立联系的好友,并推荐给他呢?在分析的过程中,时常回到这些关键问题上,确认自己正在做的分析是与问题相关的。

数据获取

我们可以通过各种渠道,例如日志文件,邮件,调查,用户行为记录等等,从现实世界中收集到原始的数据。

不少人会有一种先入概念,就是拿到数据之后立即上手,而没有想清楚自己是要解决什么样的问题,解决这些问题需要什么样的数据。一开始自己学习时,是不太需要去想记录和收集数据的问题,因为大部分时候你都是使用他人已经收集好的数据集。所以,这样想也情有可原。但你还是应该尝试问自己,为了解决自己提出的问题,应该收集哪一些数据呢?

数据处理

获取到原始数据之后,我们会对数据进行一系列的处理,这一部分也可以称为数据工程。收集到的原始数据集,可能形式多样,有的是日志文件、有的是网页数据、有的是传统数据库文件,这个时候就需要将这些数据集整合为同一格式,方便后期分析[10]。之后,还需要进行数据清理,去除异常值、处理缺失数据等等操作。为了更适合后期模型使用,也可能会对数据做一些转换。例如将表格数据转化为矩阵。

像kaggle这样的比赛数据,大部分数据处理的工作都已经完成,你拿到手上的是一些可以直接使用的数据。而在实际的工作中,这些处理是需要自己去完成的。

探索性数据分析

Photo by Andrew Neel on Unsplash

探索性数据分析 (Exploratory Data Analysis, EDA),我个人认为是极关键、也极具艺术的过程。这一步,才是你真正开始和数据深入打交道的时候,开始对数据有一个整体的感观,理解数据的分布、数据中变量的关联、哪些变量是关键、数据中可能存在的模式。随着你的探索,你对数据和问题的理解也会进一步加深。

在探索性数据分析时,通常会绘制大量的图像,来帮助你理解数据,例如最基础的箱线图,可以看出数据的基本分布和异常值。最重要的是,你对数据的理解,有利于后期使用机器学习模型建模时,特征的选取。

探索性数据分析,如同摄影,你在按下快门前,对自己所在环境的理解,对色彩、图形和光线的感觉。在你按下快门键之前,这些东西已经决定了你照片的质量。也就是你之后分析结果的质量。

建模

统计模型由统计学家创造,而机器学习模型则是来自计算机科学家。统计推断是为了推断数据背后的生成过程,而机器学习更偏向尽可能准确地预测和分类。通常这一步中,包含三个部分:

Photo by Paweł Durczok on Unsplash

如果说,函数可以看做是一个盒子,你给定输入参数,在这个盒子中,会进行一系列操作,最后返回一个结果。同样的,模型,也是这样的一个盒子,上面有一些按钮可以调整参数,你输入从数据中抽取得到的特征,经过盒子之后,就能得到特定的结果。

模型的输入是什么呢?模型的输入是一系列的特征。特征是什么?特征是你从数据中抽取出的特定变量。特征工程解决的就是模型输入的特征问题。

有各种各样的模型盒子,你应该选择哪一个呢?你要如何使用呢?盒子打开之后,里面的原理又是什么呢?盒子上面的参数按钮又要怎么进行调节呢?第二部分就是解答这些问题。

模型的输出是什么?不同模型的输出是不同的,有的模型输出是二元结果,有的是一个区间,取决于你想要解决什么样的问题。例如,预测一个商品的销量在下一个季度是否会增加,而预测销量增加多少就是一个区间。模型的输入是正确地吗?模型的输入达到预期的效果了吗?第三部分,模型评估就是在回答这类问题。

可视化报告

可视化报告不仅仅是将结果用图表展示,更重要的是用数据讲故事。回归到你最开始提出的问题,用可视化报告解答它。说服他人接受你的结论,将结论应用于实际的产品中。

需要怎样的知识结构?

从上面的整个工作流程来看,似乎数据科学家,需要成为一个全才。实际情况是这样的吗?很少有人能够样样都精通,每个人的侧重点可能都不尽相同,所以通常而言,一个数据科学团队才是更好的选择。

根据现在数据科学家的工作流程,要想成为一个称职的数据科学家,需要掌握以下的知识结构[8],分别是:

计算机科学

Photo by Jefferson Santos on Unsplash

你需要计算机科学专业知识,毋庸置疑,最基础的是基本编程和代码调试能力,例如 Python、R 之类的语言,理解基本的数据结构与算法。对于算法要求,相对于 SDE (Sofeware Develop Enginner) 岗位的要求会低一些,毕竟侧重点不同。另外很重要的一点是,要学会寻找相关的工具库并且学习使用它们,例如 Python 中的 Numpy、Matplotlib、Pandas、Scikit-learn和 R 中的 GGplot、Dplyr、CARET等等。

其次,是数据库相关知识,因为无时不刻都在于数据打交道,你要学会常用的数据库管理系统,例如 MySQL、PostgressSQL、MongoDB。能写基本的数据库操作命令,例如 SQL 语句,能检索非结构化数据。如果涉及到大数据相关分析,你还需要了解Hadoop编程框架和 Spark 计算引擎。

最后,要学会使用合适的工具和平台,例如,IPython (Jupyter Notebook)、Git 版本管理、Visual Code 编辑器,来提高你的效率。

以上就是你入门时需要掌握的计算机相关知识,通常来说,你不用知道操作系统、计算机体系结构、计算机网络这样的知识。当然,如果你研究的领域会涉及到计算机相关知识又另当别论。例如,如果你是研究社交网络,图论的知识便不可或缺。

数学

Photo by Wu Yi on Unsplash

如果只是告诉你说,要学习数学知识,那你一定会说,现在哪个理工学科,与数学毫无关联呢?是的,但也是各有侧重点的。这里的数学知识,是为你理解统计学和机器学习打下的基础。所以,数学方面,基本的是需要学习线性代数和微积分知识。初期的时候,学到什么程度呢?了解基本的概念,熟悉常用的公式定理即可。例如,线性代数,你不需要手动的去计算大规模矩阵,很多库都能帮你完成这样的工作。

统计学

Photo by rawpixel on Unsplash

统计学与数据科学一直以来都有着相同的根本挑战:如何使用不完整的信息得出有关世界的有力结论[11]。统计学的两个分支是描述性统计学和推断性统计学:

虽然在做探索性数据分析时,你会大量用到描述性统计学的基础知识,例如平均值,中位数,众数。但在数据科学中,更为重点的是统计推断。其中的贝叶斯推断,是很多机器学习的理论核心。

还有一部分值得注意,就是实验设计,最为典型的代表之一就是A/B Test。A/B 测试将实验分成两个组开展,进而确定两种处理、产品、过程等中较优的一个。在两组实验中,一般会有一组采用现有的标准处理,或者是不执行任何处理,称为对照组,而另一组称为实验组。实验中的一个典型假设是实验组要优于对照组。[6]例如两种网站设计风格,哪一种效果更佳,你就可以给不同的人使用不同的风格,最后比较两种风格的用户反馈情况。

机器学习

Photo by Dominik Scythe on Unsplash

统计学和机器学习领域是密切相关的,“统计”机器学习是现代机器学习的主要途径[12]。所以,统计学和机器学习本身就是密不可分的。

在前面我们谈了建模的三部曲:

接下来我们具体来谈一谈每一个部分。

特征工程

什么是特征?特征是你从数据中抽取出的代表信息。普通事物的特征是什么?我们能够通过事物具有的特征,将事物彼此区分开来。例如大象的特征是有长长的鼻子,灰色皮肤,健壮的体格和爱吃香蕉等等。我们能通过这些特征,将其与其他动物分开来。鼻子长短、肤色和体格大小就是大象的代表信息。

你脑海中有老虎和大象的概念。对于计算机而言,这些概念只有转化为数据才能被理解。这个转化的过程是信息化数字化的过程。假设你记录了两种动物,大象和老虎的信息,存储在电脑中。

Photo by Adam King and Harshil Gudka on Unsplash

其中,每一列都是动物的一个特征。

你怎么分辨出这是老虎还是大象呢?很明显,你很难从年龄和性别来区分老虎和大象。但是另外两个特征则不然。如果鼻子长于一米,这很显然就是大象嘛。如果毛发颜色是黄色,这也很明显是老虎嘛。所以,你选择鼻子长短和肤色,作为区分大象和老虎这个问题的特征。这个过程,就是特征选择。你会根据问题,选择出与问题最相关的特征,去除掉这些不相关的特征。

你还可以自己创造新的特征。你可以组合,例如将性别和年龄组合在一起;你还可以分解,例如你将鼻子长度拆分成:鼻子长度大于 0.5m 但小于 1m 、鼻子小于等于 0.5m 和鼻子大于 0.5m 这三特征。这个过程叫做特征构造。

总体而言,特征工程包括:特征抽取、特征选择、特征构造和特征学习[13]。好特征是好结果的基石。甚至不少人说特征决定了机器学习的上限。

模型

机器学习这个名词想必你并不陌生。你也许也知道,机器学习解决的问题分为三大类,预测、分类和聚类。按照学习的方法,机器学习可以分为:监督学习、非监督学习、半监督学习和强化学习。监督是指输入的是否是由标记的数据,或者结果目标是否给定。按照算法相似度,可以分为:线性模型、基于树的模型和聚类模型。

在此,我只强调在数据科学中,你对机器学习模型学习的重点是什么:

首先,是理解每一种问题,经典的模型有哪一些,这些模型具体的含义是什么,具体应该如何使用。

理解基本的理论之后,就需要上手去实际的用这些模型,在实际的环境中去理解什么时候应该用什么模型。

就像在我们学习数据结构与算法时,大家一定很熟悉老师说的一句话:理解各类算法很重要,但在以后在工作中,更为重要的是你要知道什么时候应该用什么样的算法。同样的,在你入门时,大部分时候都不需要你自己从无到有的去实现一个算法,而是你能理解它,应用它。等到有一天,你发现它不能满足于你的需求时,你再去改造它。

模型评估

模型评估就是评价模型好坏。就好像你学习一门课程,最后会有期末考试,最后结果的好坏体现在分数上。你需要知道不同的模型,应该用什么样的评估方法,再根据评估的结果,去调整自己的模型,直到获得最优结果。像Kaggle中的比赛,通常情况下,评估方法都是由主办方给出。

图片来源

领域知识

传统软件开发,也是需要领域知识的。例如你是写后端的,你还是需要理解你的业务逻辑的领域知识。你如果是做银行的后端,你需要理解银行系统的知识。你是写医疗系统,你也是要理解医疗系统相关的领域知识。数据科学对于领域知识的要求,只是相对要高一些,除了只是知道基本的概率外,你需要进一步的思考,领域中关键因素直接的关系。当然,如果一个项目对于领域知识要求极高,我相信,你们团队应该会请一个领域的专家。

数据可视化和沟通技巧

数据可视化是一门艺术。好的数据可视化,一张图就让人了解到他要传达的所有信息和结论,使人信服。

数据科学技能需求最出名的定义之一,是2010 年 Drew Conway 的韦恩图:

Drew Conway在《数据科学访谈录》中强调,这个图缺失一个东西,也就是做完一套分析之后,将发现、结论或者其他相关的信息解读给完全没有技术背景的人听的能力[14]。

作为一个软件工程师,有一个很流行的话叫做:“Talk is cheap, show me the code!”。因为写代码的时候衡量的标准非常简单,实现功能或者没有实现。但是对于数据科学结果报告的时候不同,你就算把最终的结果做出来了,如果没有一个好的展示,不能过让他人信服,也是无济于事。所以,重视最后讲故事这一步,将自己的分析结果转化为切实的数据产品。

最后的话

数据科学入门门槛较高。相比于传统软件开发,它更具有探索性。假如你学习前端,你能很快的就构建出一个简易的完整网站的网页,只需要一些 HTML 和 CSS 的基础知识。但学习数据科学不是,如果想要做出一个完整的项目,你前期的学习成本是会大很多的。也没有那么立竿见影的效果。举个可能不太恰当的比喻,软件开发像是在画画,每画一笔你都能看到结果。而数据科学的过程像是在爬山,你到达山顶之后,才能看见完整的风光。 所以,前期开始学习的时候,就需要扎扎实实的建立起自己的知识体系,理解知识体系中的核心概念,每遇见一个新的问题,都尝试使用自己的知识框架,去解释它,去解决它。


Reference

文章略长,最后给大家奉上思维导图,回忆要点: