Data Scientist的主要职责

 

首先我们来谈一下,Data Scientist到底是做什么的。Data Scientist的任务可以分为以下四类。

 

第一类是Modeling。主要是构建机器学习或统计模型,解决商业中遇到的问题,这是最多的一类Data Scientist。

 

第二类是做Analytics的Data Scientist,他们的主要任务是计算一些统计上的指标,用其监测商业或产品的Performance,他们会写一些SQL Query或HAP Query,然后构建Data Pipeline,包括做一些Dashboard将这些指标可视化。

 

第三类Data Scientist是做Optimization的,比如做物流、Uber打车软件,他们的工作中会有很多Optimization的问题,但其中也可能会包含一些modeling的问题,比如构建预测模型等。

 

最后一类相当于机器学习工程师做的事情,主要是开发一些算法和工具,然后让其他Data Scientist去构建解决方案。

 

本篇文章主要讲解前两种Data Scientist的工作,即做Modeling和Analytics的Data Scientist。

 

做Modeling的Data Scientist

 

其主要任务就是建立机器学习或统计模型来解决商业问题。这类工作也有不同的Title,在Data Scientist这个词出现之前,公司里做建模这一工作的人被称为Statistician或Modelling Specialist。其职责主要包括以下几点:

 

  1. 建构出机器学习或统计模型,由此作为实际问题的解决方案。当一个待解决的问题出现时,首先要识别这是一个分类问题(Classification problem)还是回归问题(Regression problem),并且哪些Feature是最重要的,怎么去建这些Feature,并评估模型的性能。
  2. 构建Data Pipeline,为模型计算Feature。
  3. 有了Feature后,接下来是构建模型。根据不同类型的问题选择不同的方法,同时要考虑如何建Label,如何选取算法,各种算法的比较,如何调整模型,如何评估构建好的模型(使用NDCG等指标)
  4. 构建好model后,思考如何运用这个模型,帮助Business或产品经理去理解这个模型,并根据模型为商业提供实际建议

 

Modeling工作的实际应用有许多方面,比如最常见的是搜索,运用的是相关模型、排序算法,又比如在广告里用模型预测点进率和转化率。在金融方面,Modeling可以用在信用风险评估,或信用卡交易中的欺诈侦查。

 

做Analytics的Data Scientist

 

主要任务是为商业或产品提供Insight。之前这个职位一般叫做Data Analyst,现在有些公司就把比Data Analyst更偏工程的职位称为Data Scientist,其主要职责包括:

 

  1. 设计KPI等指标去监测商业或产品的Performance,这需要拥有一些对商业问题的见解。
  2. 构建Dashboard更好地使指标可视化。
  3. 构建Data Pipeline来计算KPI等。其需要的最主要的技能是写SQL Query或HAP Query,运用一些可视化工具。
  4. 运用Ad-hoc analysis从数据中提取Insight

 

其主要应用包括为商业或产品提供Insight,Facebook就会招很多Analytics的Data Scientist来了解用户是怎样使用产品的。

成为一个好的Data Scientist所需要的技能

 

 

这里列出了LinkedIn上,Data Scientist所拥有的技能的数据。可以看出除了Data Analysis以外,排名最高的是R和Python,这两个语言都是用作构建模型、操作数据的,它们的职能比较接近。统计背景的人可能更倾向于用R,而计算机背景的人更喜欢用Python。

 

接下来的技能是Machine learning、SQL、Statistical modeling。SQL是一个必不可少的技能,在老师本人的实际工作中,比较少的时间用于做Modeling,而更多的时间用于思考怎么建更多的Signal,怎么做Feature,提高Performance,想出更有价值的Feature。其他的技能是传统的CS技能,比如算法,编程,当然还包括大数据等。

 

Data Scientist面试的组成部分

 

 

电话面试。一开始会让面试者谈谈自己的项目经历,一般是挑一个项目,具体讲讲是如何做的。然后会问一些技术问题,包括Coding,机器学习,和统计概率问题。其中Coding问题可能会问也可能不会问;机器学习方面的问题会对你谈到的一些点进行深挖,可能会问到直到你回答不出来。

现场面试。与电话面试较为接近。区别是现场面试会让你做Case Study,给出一个新的问题,问你如何End to End解决。如果有五个面试者,可能两道到三个都会被问到Case Study,而可能会有一个被问到算法的Coding问题。

 

Data Scientist面试的趋势

 

13年之前,许多IT公司会把Data Scientist当做工程师来面,十分注重算法与数据结构的编程。但最近的Data Scientist面试的趋势是问题更偏实际,不会有那么多的Coding问题。

 

五个面试者中,0~1个面试者会在电话面试中被问到Coding问题,1~2个面试者会在现场面试中被问到Coding问题。Coding问题需要准备,但是不必像软件工程师那样去准备。

 

面试中常见的问题

 

面试者不能达到面试官要求的原因可能有以下几点:

  1. 简历中写了自己并不熟悉的技能
  2. 对自己的项目中提到的方法理解并不深刻,当面试官追问时,很容易就会暴露各种问题。
  3. 许多人带着侥幸的心理,认为Coding不需要怎么准备,导致Coding能力薄弱,当问及并不难的Coding问题时便回答不好。
  4. 对项目中涉及的领域知识掌握得不够好

 

不同Data Scientist职位面试的区别

 

 

两种Data Scientist的面试是有一定区别的。

 

做Modeling的Data Scientist。对Coding,Modeling和Problem solving三方面涉及较为均衡,因此这三方面都要掌握好。需要机器学习算法理解较为深刻,这就需要大家平时多多积累。

 

做Analytics的DataScientist。对于SQL一定要非常熟练,做到又快又准。还会涉及到Case study,设计Metrics。而Modeling和Coding不会问太多甚至可能不会问。

 

如何准备各类面试题?

 

项目/经历问题

 

 

大家对简历上的项目中涉及到的方法,一定要理解透彻,思考为什么这个方法好,多问为什么。最好能与有经验的工业界人士一起做项目。这样的好处是,你能得到实际的工业界经验,并且知道工业界项目的每一步到底是如何做的,该注意什么,各种不同的问题(如 Fraud detection、Recommendation等)到底是怎么 Formulate的,还可以学习一些Tricks来提高模型的Performance。

 

学习机器学习算法的最好方法是做项目,但是不是用了算法后就结束了,我们需要把算法挖深,多问自己一些问题,为什么要这么做?为什么这个方法比那个方法好?这样才能不断提高。在做项目的过程中,你也能知道工业界是怎么应用这个模型的。

 

机器学习/建模问题

 

 

机器学习的问题特别多,上图列举了一些例子,比如解释SVM怎么工作的,为什么要用Kernel,Decision tree最重要的缺点是什么?(是Overfitting)又比如什么时候需要Sampling?(当出现Unbalanced的数据的时候)

 

那么如何准备这些问题呢?有多种途径,如上一些在线课程,看书(速度会比上课慢一些),看一些网上的课件。如果你有一些具体的问题,可以在网上搜索一些分析较为深刻的答案。再就是做项目,过程中多问为什么。还可以找工业界的人进行模拟面试,这个会对你帮助很大。

 

概率与统计问题

 

这类问题很有可能在电话面试的的时候被问。常见的问题有掷骰子,扔硬币、条件概率、Bayes rule问题、A/B test问题等。

 

对于第三个条件概率问题,其实考察的是你是否能够问出很多问题,思维是不是严密。首先我们没有数据,生男生女的概率有可能并不是严格的50%。并且我们并不知道这两个事件是不是独立的,有研究表明,如果第一个生的是女儿,第二个孩子生的是女儿的概率会比50%大,所以两事件独立的假设不一定成立。面试官可能会问你,如何从数据中看这两个变量是不是独立的,做一些什么Test去证明他是独立的还是不独立的。

 

Bayes rule问题也较为常见,你要知道何时使用Bayes rule解决问题,这其中还可能考到条件概率和一些简单的数学,可以在wiki上找一下Base rate fallacy问题。

 

那么如何准备这类问题?如果大家对概率不是很熟的话,就需要过一遍教科书,复习以上列出的几方面知识。然后去收集面经,在面经中把概率问题挖掘出来,其实常见的概率问题还是相对比较有限的。

 

编程及算法问题

 

Leetcode上的Easy题要全部掌握,Medium的题尽量掌握,只做Medium中的高频题,基本也能应付面试。如果你实在不喜欢Coding,可以试一下Analytics的Data Scientist,或者先从Data Analyst做起,积累一些关于Modeling的经验,之后再转成Data Scientist。

 

Problem Solving问题

 

 

上图列举了一些常见问题。如何准备这类问题?比较快速的方法是,如果你知道你要面的组是做什么领域的,就可以在面试前读一些相关Paper,了解这个领域的概况,以及领域中有哪些常用的方法,这些方法的优缺点是什么。还可以读一些工业界的技术博客,Airbnb,还有许多创业公司都写过很多技术博客,读一些会很有帮助。同学们还可以自己去做一些Public或Competition的数据以积累经验。

 

如果有工业界的人带着做工业界项目,可以更好地了解工业界关心的问题,这些问题很多都是在面试中容易暴露的问题,所以能得到直接的提高。最后,不要花时间了解太多的领域,这样都不够深入,最好着重感兴趣的两到三个领域,一般准备两个领域是比较现实的。

 

人工智能及深度学习问题

 

 

最近人工智能特别火,有的人就想知道,如果我做了一个课程项目,用了Tensorflow,那我是不是可以把这个与AI有关的项目写在简历上。其实如果你面的职位并没有要求AI的知识,并且你对AI的认识也不算特别深入,掌握得也不是特别好,就不要写在简历上,因为面试官一般会问得比较深,这样做可能得不偿失。如果你真的对AI感兴趣并且理解也够深入,这里也列举了一些AI和深度学习的常见问题。

最后想对大家说的是,从长远来看,大家要把基本功弄扎实,把算法理解透彻,这对大家的面试和以后的工作都很有好处。

 

要对自己有清楚的认识,自己是CS、统计还是物理数学等背景,对Coding和算法的掌握程度如何,能投入多少时间做项目。

 

明白自己想实现什么目标,是想做Modeling或Analytics的Data Scientist,还是先做Data Analyst积累经验之后再转Data Scientist。

 

需要对准备面试的过程进行很好的时间规划,每一块需要花多少时间。最后祝大家求职顺利!