Data Scientist的行业概览及工作机会

 

 

Data Science行业在今后的几年中会更加火爆。以上两张图中,左边是Data Scientist职位数,右边是搜索相关关键词的数量,可以看出Data Scientist职位从14年到现在增长了四倍左右。一般来说,公司里记录的数据要比盈利用的数据多的多,所以大部分数据并没有拿出来做过分析,存在巨大的价值。Data Scientist这个行业就是要把这部分潜在的的价值挖掘出来,给公司产生实际的利益。不只是美国,还有欧洲、国内等,都有越来越多的Data Scientist职位。

 

Data Scientist, Data Engineer, Data Analyst, Business Analyst的区别

 

Data Scientist

 

 

定义Data Scientist最核心的技能主要有两条。

 

第一是Predictive modeling,也就是我们常说的Machine learning,用已有的数据去预测没有的数据,这是Data Scientist很核心的技能。

 

第二是Story-telling and visualizing,把分析和预测的结果呈现给你的老板或者其他人,并让你从数据中发现的insights产生实际的价值。这个过程中,你讲故事的能力,和把你的insights可视化的能力很重要,这往往是区别一般的Data Scientist和顶尖Data Scientist很重要的一点。

 

每个公司的Data Scientist从事的职能可能不一样。比如,有些公司的Data Scientist完全不涉及到Predictive modeling,而有些公司的Data Scientist却只做Predictive modeling,不讲故事,也不做Presentation。

 

Data Engineer

 

 

Data Engineer同样在不同的公司有不同的职能。

 

Data Engineer的一个很重要的技能是ETL tools,即建立数据流水线,把数据从最原始的形式,通过处理和转化,存储到有规律的格式里。Data Scientist做的分析其实是基于Data Engineer处理好的比较干净的数据。

 

其次是Data APIs。比如LinkedIn的一个Feature:People you may know。它涉及到很多数据层面的计算,Data Engineer会把这些写成API,产品工程师只要靠这些API就能获取他们需要的东西。

 

关于Data warehouse,有些公司会细分出一个职位叫Data Infrastructure Engineer,但有些比较小的公司没有把职位分得那么具体,那么Data Engineer也会负责这方面的工作。

 

其实Data Scientist有时也会负责以上提及的工作,比如ETL。当Data Engineer在做其他的事情,而你急需这些数据时,这些数据清理的工作就需要Data Scientist自己来做。但是Data Scientist一般不会接触到Data warehouse这种比较底层的工作。

 

Data Analyst

 

 

Data Analyst和Data Scientist的职能有很大的交集。在有些公司,Data Analyst只是Data Scientist的一个junior职位,几年后会升职为Data Scientist。而它们的区别是:

 

Data Analyst一般不做或很少做建模的工作,而Data Scientist一般会建模。Data Analyst的薪水比较低,底薪在7、8万左右,但Data Scientist和码农持平,11、12万左右。

 

Business Analyst

 

 

与Data Analyst比较像,不需要做Machine learning,他处理的数据是和商业直接相关的,比如公司的收入、盈利等。他所回答的问题也是和商业直接相关的问题,汇报对象大部分也是商业部门的人,相对于前三种职位,他们和工程师打交道的时间会少一些。

 

Data Scientist有哪些职能?

 

我们列举了以下三项Data Scientist的主要职能:

 

Predictive Modeling

 

 

收集数据:第一步是收集数据,每个公司会使用不同的语言或框架,有些老一点的公司会用Pig,有些新型公司会用Hive,中型公司可能用SQL就足够。

 

清理数据:收集完数据后,要对数据进行清理,做一些例如Imputation的工作,以此得到干净、完整的数据。因为原始数据往往存在各种问题,比如部分数据错误,数据缺失等。例如,如果数据缺失了30%,Data Scientist就可以用剩下70%的数据的中位数替换缺失的30%的数据,这样就有了全部的数据。

 

建立模型:清理完数据,就开始构建模型。一般需要尝试许多模型,因为根据数据的不同,不同的模型会有不一样的表现。尝试的次数多了,就能大概知道怎样的模型是有效的。大部分Data Scientist不需要自己开发模型,只需利用已有的模型。

 

优化模型:构建出模型后,模型中还有许多参数要调整,这就涉及到优化模型。可以用Cross polarization或其他的一些方法。

 

给出解决方案:当得到了一个比较好的模型后,你就要给出解决方案。建模是为了给产品或Business提供价值。比如现在有一个用户用了我们的产品,你就要对他的行为做预测,优化他的用户体验。有些模型不能放到产品里,比如你是用Deep learning或Decision tree做的这个模型,但你仍然可以得到一些insights,比如发现某个Feature很有用,根据这些去优化你的产品。

 

Product Analytics

 

通过数据分析,发现一些insights,这一步不需要构建机器学习模型。

 

一个非常普遍的的分析方法就是漏斗分析(Funnel Analysis)。比如,你的产品在最开始的时候,拥有100%的用户,而经过注册这一步,只剩80%的用户。经过下一步,只剩50%的用户,并且页面上有不同的按钮,每一步都会流失一些用户。假如你发现之前的每一步只流失5%的用户,但是某一步却流失了30%的用户,这就说明这一步是有问题的,你要抓住这一步,并思考要怎样优化你的产品,使这一步流失的用户也降为5%。

 

之后你会将你的insights呈现给产品经理和或者工程师,说明自己发现的问题以及对应的解决方案,并通过实验来验证其中的因果关系,最终优化产品,使产品的各项指标得到提高。

 

Reporting

 

 

Reporting也是Data Scientist的一个重要的职能。首先要做ETL Pipeline,包括数据清理的工作,然后在干净的数据上做数据可视化,把数据呈现在Dashboard中。公司的领导以及其他人可能每天都会看这个Dashboard,以了解公司目前的经营状况。

 

顶尖科技公司对Data Scientist的技能要求

 

 

SQL

 

大家可能觉得Data Scientist都在做深度学习模型,并不经常用到SQL,但事实不是这样。Data Scientist要花大量的时间用SQL抓取数据,可能是做一些直接的分析,也可能是为建模做准备。

 

SQL是非常重要的技能,每一个公司的面试都会考。你需要熟悉掌握这些语句:Case when, Group by, Having, Self join, Left outer join, On vs Where等,这些是面试中比较常考的。在学校里涉及得SQL语句一般比较简单,没有侧重这些语句,比如一个Select from where,加上一个Join就结束了。但在实际面试中,会问一些比较难的问题,比如Left outer join。大家一定要知道什么时候用Left outer join,以及on和where的区别。

 

Case when也是用得非常多的语句,用于实现简单的逻辑功能,有时候会嵌套很多层。有些SQL问题乍一听比较难,并且你摸不着头绪,这时候可以试试Self join,这种问题往往用Self join可以解决。

 

R/Python

 

有同学可能会问,这两种语言只会一种行吗?必须两者都会吗?结论是最好两种都会。公司里普遍是一半的人用R,另一半人用Python。如果你只会一种,你和另外一半同事合作就会有些困难,读他的代码就会吃力。虽然面试的时候,面试官会让你根据自己的喜好选择一种语言,但对于提升自己的实际能力来说,两种都掌握是最好的。

 

这里有几个Package大家需要熟悉,R的Package有Ggplot2Dplyr,面试时有些公司会让你当场用R写一些东西,如果你熟练运用这些Package用得很好,会给你增加优势。Python的Package有 Pandas, Scikit-learn, Matplotlib

 

Machine Learning

 

最常用的两个模型是Linear RegressionLogistic Regression,需要熟悉它们的数学逻辑。其他的模型当然也要了解,但用得并不是特别多,比如Random Forest等。

 

A/B testing

 

实际工作中可能会大量地做A/B testing,而这恰恰是在学校涉及得比较少的。有很多拥有丰富的A/B testing工作经验的人会发一些博客,大家可以去读一读。

 

Experiment Design

 

Data Scientist一般会和Product Manager合作设计实验,在设计实验的过程中,你需要思考实验中涉及到的Feature是想要改善哪个指标,在什么时候、呈现给哪些用户。在实际工作中,存在一些难度比较大的实验设计,这就要依靠Data Scientist的个人经验,也可以在博客中看看别人实际的工作经验。

 

Product Sense

 

 

这一点对于应届生来说可能是最难的,因为它需要通过工作经验来积累。比如产品的什么Metric是你最看重的。大家需要通过实习或者阅读文章来积攒经验,Quora上经常有关于这方面的讨论,比如某产品最关注的Metric是什么,以及为什么。

 

Business Sense

 

我们在学校做的项目,数据一般比较完美,并且老师会帮你制定项目的框架。但在实际工作中,原始数据会存在很多问题,你会找不到头绪。这时拥有一些Business Sense,比如对公司的核心指标比较敏感,会对数据分析有一些帮助。

 

Communication

 

沟通能力是把你的想法和发现分享给其他人的能力,可以通过更多的演讲和Presentation来锻炼。并且要根据你的听众选择不一样的讲述方式。如果你的听众是其他Data Scientist,你就可以介绍一些项目的细节。但如果是Director,他可能没有领域知识,不会对那些细节感兴趣,而是更看重结果,所以这时你就要用一些直白的话讲述你的发现。

 

Data Scientist面试对口语的要求相对较高,表达时还要有清晰的逻辑,如果口语不好,你就无法将你的技术能力很好地向面试官展现出来。

 

Data Scientist的面试技巧

 

 

面试流程

 

有些公司最开始会有一个Online Assignment,给你一到三天的时间完成。

 

然后是电话面试,问问你之前的经历,然后聊简历上的项目,最后会问一些概念性的问题。电话面试可能会考SQL,但一般不会考察实际操作,比如问你某个场景你会怎么处理。

 

下一轮是现场面试,一般是4到6轮不等,涵盖的内容比较多,电话面试中考的东西可能会再考一遍。有的公司还会让产品经理面试一轮,看你和产品经理能不能合作得愉快,因为你在公司中合作得最多的就是产品经理。

 

现场面试会考数学的概率题,还有Product metrics,Product sense的问题。有的公司会考机器学习,有的公司会考一轮算法。关于编程技能,只要掌握Leetcode里Easy和Medium等级的题目就可以了。Data Scientist的面试不会涉及到Hard等级的题。Data Scientist面试考察的内容很杂,我们要从各个领域全面地去准备,不要留下短板。

 

Case Interview

 

现场面试的两轮或三轮可能都会面Case Interview。在这里举两个Case Interview的例子。

 

第一个例子是,一个公司的核心指标是日活用户,而在过去的两周,这个指标降低了30%,面试官让你找出其中的原因。回答这种问题的关键点是要有框架和条理性,比较推荐的是从上至下,先制定High level的框架,再说具体的点并进行展开。你可以这么说,日活下降了30%,可能存在内因和外因,内因是公司内部的因素,外因是公司外部的、不可控的因素,这是一个High level的表述。然后说外因有哪些,比如现在是不是圣诞节期间,最近有没有什么新闻事件,转移大家的关注点。还可以分析用户的性别和年龄,是不是只有男性用户的指标跌了,或者是不是只有青少年的指标跌了。而内因方面,你可以说是不是网站有Bug,数据清理的过程中数据有没有Bug。对每一点进行具体的展开。

 

第二个例子是,你是一个共享单车公司的Data Scientist,现在你要和产品经理决定,接下来在哪些城市Launch新的单车项目。从High level上讲,共享单车包含两个元素,人和出行。人这一方面,每个城市人口的性别比例、年龄组成是我们要考虑的因素。比如可能老龄化严重的城市,骑单车的人数也相对较少。出行方面,可以考虑城市的环境、气候、地形等。比如伦敦经常下雨,有的城市的山地较多,这些可能会影响骑单车的人数。

 

多看Techcrunch

 

Techcrunch上经常有一些科技新闻,比如什么公司发布了什么新的Feature,阅读这些新闻可以帮助我们提高Product Sense和Business Sense。有时候面试会被问到你最喜欢的App是什么,如果你平时经常读这些文章,就可以积攒很多的思考,有助于面试时说出有洞察的见解。

 

Networking

 

学会通过各种渠道与人建立联系。实习中遇到的同事就是很好的资源,比如你的同事跳槽了,如果他先前和你合作很愉快,他可能就可以内推你进他的公司。还可以去参加一些线下活动和Conference。很多公司会办一些Conference,有些学校也会办一些数据科学论坛,请的都是工业界的大牛做嘉宾,不仅可以学到知识,也可以和嘉宾或者参会人建立联系。在LinkedIn上也去主动加一些Recruiter搜索目标公司的Data Scientist,加他们为好友,可以直接在LinkedIn上私信希望得到面试机会,也可以只是关注他们有什么动向,这样在面试中遇到了就有话题可聊,并且能让他们觉得你是真的对他们公司感兴趣。