本文为大家全面解析Data Science面试的最新趋势,主要分为以下几个部分。

  • 数据科学家的主要职责
  • Data Scientist面试的组成部分
  • Data Scientist面试的趋势
  • 不同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问题可能会问也可能不会问,一般会问机器学习方面的问题,对你谈到的一些点进行深挖,可能会问到直到你回答不出来。然后还会问统计和概率方面的问题。
  • 现场面试。与电话面试较为接近。区别是现场面试会让你做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。学习机器学习算法的最好方法是做项目,但是不是用了算法后就结束了,我们需要把算法挖深,多问自己一些问题,为什么要这么做?为什么这个方法比那个方法好?这样才能不断提高。在做项目的过程中,你也能知道工业界是怎么应用这个模型的,如fraud detection的分数出来了到底怎么用。

 

  • 机器学习/建模问题

机器学习的问题特别多,此页ppt列举了一些例子,比如解释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问题

这里列举了一些常见问题。比如给你一个情境让你构建一个recommender system,在ecommerce site上怎么构建recommendation module,还包括fraud detection,怎么optimize广告的竞标,以及在搜索中如何提高用户体验,比如怎么做explore/exploit。还有一个没那么常见但也有可能会考的,就是predict churn,即用户在什么时候就不用这个产品或网站了。

如何准备这类问题?比较快速的方法是,如果你知道你要面的组是做什么的,如是做search、recommendation还是做fraud的,那你就可以去读一些paper,了解这个领域的概况,领域中有哪些常用的方法,这些方法的优缺点是什么。还可以读一些工业界的技术博客,airbnb,还有许多创业公司都写了很多技术博客,读一些会很有帮助。同学们还可以自己去做一些public或competition的数据以积累经验。如果有工业界的人带着做工业界项目,可以更好地了解工业界关心的问题,这些问题很多都是在面试中容易暴露的问题,所以能得到直接的提高。最后是不要花时间了解太多的领域,这样都不够深入,最好着重你觉得你可能会去面的两到三个领域,一般两个领域是比较显示现实的。

 

 

  • 人工智能及深度学习

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

最后想对大家说的是,从长远来看,大家要把基本功弄扎实,把算法理解透彻,这无论是对大家的面试还是以后参加工作都非常有好处。大家要对自己有清楚的认识,自己是cs、统计还是物理数学等背景,对Coding和算法的掌握程度如何,能投入多少时间做项目。明白自己想实现什么目标,是想做Modeling或Analytics的Data Scientist,还是先做Data Analyst积累经验之后再转Data Scientist。需要对准备面试的过程进行很好的时间规划,每一块需要花多少时间。