转载,原文来源:https://blog.csdn.net/fendouaini/article/details/94368631
在过去的一年里,我采访了一些在Expedia Group担任数据科学职位的人,职位从入门级到高级的都有。我想分享我的经验,这些经验适用于对申请数据科学职位的人。在这篇文章里,我还会给出关于你可能在面试中会遇到的问题的一些提示。
面试候选人帮助我认识了一些有广泛背景和技能的人。从CS / ECE,统计/数学到土木/机械工程,这些领域的人我都接触过。所幸我有机会能在这里与这些出色的人交谈。
在我讲更多细节之前,我想提一下,近年来,业界把“数据科学家”也叫做“机器学习科学家”或“应用科学家”。虽然在一些公司中这些职位有着略有着不同的任务或者需要具备不同的技能,但对于大多数公司来说,这三个职位或多或少都指的是同一个东西。所以在这篇文章中,我提到的“数据科学”,跟上面的“机器学习”“应用科学”是一样的。
虽然每个人都有一套自己解决问题的技能,但是大多数公司都会要求数据科学候选人具备一些特定的基本技能。我将这些基本技能大概分为以下几类,然后再讨论这些技能具体是什么。根据公司和职位级别的不同,你可能会被问到以下提到的一个或多个相关问题:
1、关于你的简历和之前工作相关的问题
2、通用机器学习(和深度学习)知识
3、通用统计和数学知识
4、编程和软件工程技能
5、统计建模技巧
6、计算机视觉(CV),自然语言处理(NLP)和定价策略(Pricing Topics)
7、面试中沟通和表达能力
8、行为问题
9、系统设计技巧(取决于职位级别)
10、管理和领导技能(取决于职位级别)
你的简历在你面试时会被问到的那类问题中起着至关重要的作用。因此,请确保你对自己在简历中提到的任何内容有足够的了解,内容包括从课程和研究项目到编程语言。如果被问到诸如“介绍一下你自己”,或者“介绍一下你现公司的工作” 的一般性问题是很常见的,不仅如此,你还会被问到关于你简历的问题。
例如,如果你在简历中提到几个以前的与NLP相关的项目,那么你应该对NLP有一个很好的理解,并且你很可能会在NLP上被问到一些技术问题,来评估你的技术含量。因此,如果你在一个项目上跟别人做了一些合作的东西,但对这项工作的贡献很小,我建议你让自己更熟悉该项目的技术方面。
或者,如果你提到Python或Scala作为你最喜欢的编程语言,请确保你足够了解这些语言(至少在数据科学职位所需的范围内),以及每个语言中的一些机器学习相关库。我看过很多候选人在他们的简历中提到了Scala / Python,但当我问他们关于这些语言的一个简单问题时,他们根本不知道它,这会给我一个负面信号。如果你使用这些语言的经历非常有限,那么最好是诚实地告诉面试官,并且我相信大多数面试官都不会因为在你没有丰富经验的事情上对你进行评判。
虽然不同公司的数据科学工作可能涉及广泛的问题和技能(包括数据提取和预处理,运行SQL查询,简单数据分析,深度学习,NLP和CV),但机器学习是一个基础,现在大多数顶级公司都希望这些“数据科学候选人”懂得这一概念。因此,如果你正在申请数据科学职位,请确保你对以下机器学习概念有充分的了解。诸如“统计学习要素”[1]和“模式识别与机器学习”[2]等书籍对这些主题非常有用。
监督和无监督算法
经典分类算法,如SVM,逻辑回归,决策树,随机森林,XGboost
经典回归算法:线性回归,LASSO,随机森林,前馈神经网络,XGboost
聚类算法,例如K-means和Spectral聚类
降维技术,如PCA,LDA和自动编码器。
偏差 - 方差均衡
过拟合以及如何避免过拟合(例如正则化,特征选择,dropout(用于神经网络))
有名的深度学习模型,如卷积神经网络(CNN),递归神经网络(RNN)和长短期记忆网络(LSTM),自动编码器,残差结构,序列到序列模型,生成对抗网络(GAN)
评估指标,例如分类准确度,精确度,召回率,F1分数,均方误差,平均绝对偏差
流行的损失函数,如交叉熵,MSE,三元组损失,对抗性损失,边际最大化损失等
反向传播
强化学习和深度Q学习(对于偏研究类型的职位)
离线和在线(A / B)指标的比较?
上面列出的问题涵盖了一些与数据科学职位相关的高级机器学习概念,但你可能会被问到有关上述某些主题的更详细问题,例如你可能会被问到:
分类算法中SVM和逻辑回归的比较
生成模型和判别模型之间的差异
梯度消失问题背后的根本原因和一些避免这种情况的常见做法
在进行批量梯度下降时使用动量梯度下降法的优点
今天的许多数据科学家曾经是统计学家和分析人员,许多机器学习的模型就是(重新包装为)统计学习模型(如线性回归,岭回归,LASSO,逻辑回归)。因此,许多面试官喜欢在统计学或数学方面提出一些问题也就不足为奇了。
对于统计学和概率学,如果你熟悉以下概念,那将是很好的:
模型的偏差和方差以及如何计算它们
分布抽样
置信度和给定置信度所需的样本数量
均值,方差,相关性(统计意义上和经验意义上)
随机过程,随机游动(金融公司的数据科学职位需要)
如何找到某些事件的概率
对于数学问题,你可能会被问到以下问题:
一些需要一些思考的脑筋急转弯问题
如何计算特定损失函数的梯度
关于损失函数或优化算法的一些详细问题
任何数据科学家都需要会编程。在创业公司(员工人数较少)中,数据科学家可能需要自己做很多软件工程,例如数据提取和清理以及模型部署。相比之下,在大公司中,还有其他人负责数据工程和模型部署,数据科学家主要负责培训和测试特定产品的模型。作为数据科学家,你还需要了解数据工程角色所需的一些术语和任务,例如ETL(提取,转换,加载)。在这里,我将介绍数据科学家使用的一些最广泛使用的编程语言,库和软件。
Gayle Laakmann McDowell [3]的“Cracking the Coding Interview”等书籍让你在解决软件工程和算法问题上做好准备非常有帮助。这里还有几个很棒的网站,它们有一个很好的软件工程问题数据库,比如leetcode,hackerrank和geeksforgeeks。
4.1 编程语言
在编程语言方面,Python,Scala,SQL和R似乎是人们使用的最流行的语言,但我也看到人们使用其他语言,如Java,C ++和Matlab(尽管它不是一种编程语言))。
4.2 有用的Python库
在这里,我将提到一些与数据科学职位最相关的Python包:
对于机器学习和数值计算,Scikit-learn,XGboost,LIB-SVM,Numpy,Scipy是使用最广泛的软件包。
对于深度学习,Tensorflow,PyTorch,Keras被广泛使用。
对于数据可视化,Matplotlib,Seaborn,ggplot是最受欢迎的(尽管还有大量其他有用的软件包)。
对于CV,OpenCV和PIL很有用。
对于NLP,NLTK,GENSIM,Spacy,Torchtext等软件包非常棒。
对于使用数据库,Pandas和PySpark是Python中的两个流行的库,我个人认为它非常有用。
4.3 云服务
根据你要处理的数据规模,你可能需要在云服务上运行代码,例如AWS,Azure或Google Cloud。因此,拥有在云环境中运行代码的经验可能是一个加分项。你绝对不需要了解所有不同的云服务,但熟悉AWS中的EC2等计算服务可能是一个优势。
有些公司也可能在AWS或Azure之上使用其他大数据服务,例如Databricks和Qubole,但我认为不需要事先体验它们,因为这些很容易学习。
4.4 部署工具
在为任务训练模型(例如推荐系统或适度模型)之后,理想情况下,你希望在实际生产中使用它。因此,某人(可能是你,或你正在使用的工程团队)需要将你的模型部署到生产环境中。为此,熟悉Docker和Python中的Flask可能会有所帮助。如果你想在AWS等云服务上部署模型,那么熟悉Sagemaker可能会有所帮助。我个人并不认为熟悉部署工具对于入门级数据科学职位是必要的。
作为数据科学家,你需要为各种产品/问题构建数学和ML模型,因此在面试过程中可能会遇到一些建模问题。这些问题通常与公司的域名有关。目标是看看你是否可以将你在概念上理解的内容应用于特定问题。你可能会遇到的一些示例问题可能是:
你将如何构建机器学习模型来检测我们网站上的欺诈交易?
你将如何构建机器学习模型以向我们的客户推荐个性化项目?
你将如何建立一个模型来检测我们网站上产品的假评论(类似淘宝刷的评论)
你如何使用ML模型检测敏感评论/推文?
你如何建立模型来预测我们产品的价格?
如何构建模型以自动标记社交网络中用户上传的图像?
运行A / B测试时的在线指标?
根据你的答案,你可能还会被问到一些跟进问题,包括你需要的数据类型,评估模型的方式以及如何随着时间的推移改进模型。如果你想查看更多问题,https://medium.com/acing-ai/acing-ai-interviews/等网站非常有用。
在面试过程中,重要的是你的思维过程以及你能想到为产品构建ML模型的各个方面的能力。你绝对不需要给出最好或最完美的答案; 只要你对问题的高层次理解是合理的,你就是很棒的。
根据你申请的团队的重点产品,你可能还会被问到有关CV,NLP或产品定价的一些问题。因此,在面试之前,请确保对你申请的团队进行一些研究,以便更好地了解他们的重点。面试官可能会问你关于NLP或视觉中非常高级的概念,一些其他面试官可能会提出更具挑战性的问题。
以下是你可能获得的一些与 NLP 相关的问题:
什么是词干提取和词形还原?
什么是词袋模型?TF-IDF怎么样?
你怎么能找到两个单词之间的距离?有哪些有名的字符串距离指标?
什么是命名实体识别,你将如何评估NER系统的性能?
CRF模型如何针对词性标注进行训练?
什么是公报特征,什么时候它们有用?
你将如何构建神经机器翻译模型?你会如何评价其表现?
word2vec对于经典的one-hot编码有什么优势?
你会如何建立一个Q&A问答系统?
你如何检测一系列文档中的主题?
你如何找到客户评价的情绪(极性)?
正则表达式的一些问题
以下是你可能会被问到的一些计算机视觉相关问题:
你如何将网站上的图像分组为不同的类别(如电子,服装等)?
如何构建一个模型来自动地标记一张图像中的不同人脸?
如何检测图像/视频的质量并过滤模糊的图像/视频?
什么是超分辨率,你如何评估超分辨率模型的性能?
如何检测图像中的不同对象?
你如何检测图像中的文本区域?
你将如何创建自动图像标记系统?
数据科学职位通常涉及大量的沟通和演示。这可以用于与产品经理讨论新项目,或向你的团队展示你的模型。因此,能够与其他人(技术人员和非技术人员)交流关于你的工作和想法是非常重要的。
有时你可能需要以非常技术性的方式向同事或经理传达你的新发现,有时你可能需要说服产品经理你的模型对他们有用,不用描述太多的技术细节。
面试官通常不需要问你一个具体的问题来评估你的沟通和表达能力,他们可以在面试过程中了解面试者的这些能力。我的建议是:
尝试首先向面试官提供你的解决方案的高级图片,然后讲解其中的细节。通过这样做,如果你的高级方法是正确的,你可以获得反馈。
你可以专门询问面试官你的答案是否是他们想要的。如果不是他们想要的,你可以请他们给你一些提示。
尝试将建模问题分解为几个部分,然后对每个部分分别进行阐述。对于许多ML建模问题,你可以将它们分解为相关的数据提取,数据清理,特征提取,预测建模,评估和可能的改进。
有些人在面试时也可能会问行为问题。这些问题可能包括你过去的工作经历(为了了解你是否具备工作所需的技能),以及你的个人兴趣。这些问题也可以集中在你过去如何处理各种工作情况上。你对这些问题的回答可以展示你的技能,能力和个性。以下是你可能会被问到的一些示例问题:
你喜欢什么样的职位,一个涉及研究和研发的职位,还是更倾向于把现有模型应用于公司内部数据并围绕它构建数据驱动的解决方案的职位?
你是喜欢单独工作,还是与一群人合作解决一个问题?
举一个你达到的目标的例子,告诉我你是如何实现它的,以及你面临的挑战是什么?
举一个你没有遇到的目标以及你如何处理它的例子?
如果你需要在deadline交付模型,请告诉我你将如何在压力下工作?
根据你申请的职位级别,你可能还会被闻到一些系统设计面试(SDI)问题,这些问题主要是关于“设计大规模分布式系统”的问题。
由于缺乏足够的开发大规模系统的经验,以及没有标准答案的设计问题的开放性,这些问题可能具有挑战性。
我不打算在这里谈论SDI问题太多,因为它不是这篇文章的重点,但我会提供一些示例问题,以及一些有用的资源,如果你想在这方面得到更多的练习。
以下是一些示例系统设计问题:
你将如何设计Youtube或Netflix等视频流服务?
你会如何设计Facebook Messenger或WhatsApp?
你如何为客户服务设计聊天机器人?
设计Quara或Reddit?
设计像Snapchat这样的应用程序?
你将如何设计Dropbox或GoogleDrive或Google Photos等全球存储和共享服务?
你会如何设计像Twitter或Facebook这样的服务?
你将如何为Google或Expedia设计预先输入系统?
以下是面试中,关于设计问题的一些有用资源:
https://github.com/checkcheckzz/system-design-interview
http://blog.gainlo.co/index.php/category/system-design-interview-questions/
https://hackernoon.com/top-10-system-design-interview-questions-for-software-engineers-8561290f0444
如果你正在申请数据科学经理职位(有时甚至是高级或主要职位),面试官将需要评估你的管理和领导技能,并了解你之前的管理经验。
这个候选人的理想背景是在机器学习和预测建模等领域具有强大理论背景的人,以及良好的软件工程技能。要成为有效的领导者,候选人还需要具备良好的沟通技巧和良好的规划技能,以便能够以考虑构建数据驱动产品所带来的许多风险的方式进行优先排序和规划。
我不会谈到太深入到管理技能的方面,但我将在这里提供一些示例问题:
你所管理的最大团队是什么?你面临的挑战是什么?
假设你的团队已经构建了一个模型,可以在测试集上实现90%的准确率。为了确定模型性能是否可靠,你需要了解什么?
讨论一个可能影响我们公司的数据驱动产品
当你想为你的团队招聘员工时,你会考虑哪些问题?
你如何吸引顶尖人才加入你的团队?
你认为对数据科学家至关重要的技能是什么?
什么是大数据,你熟悉大数据架构吗?
你如何在工作中保持与时俱进?
你如何判断与其他团队的合作是否成功?
在这篇文章中,我尝试提供一些提示,以及你在DS面试期间可能遇到的一些高级问题。鉴于数据科学角色的范围不断扩大,当然有一些主题和问题在此未讨论。但我试图涵盖一些对数据科学面试中非常重要的一般性主题。
我的最终建议是对你申请的团队/公司进行更多研究,并更好地了解他们正在处理的问题。然后,你可以将主要重点放在为与该团队相关的主题做好准备。
参考链接
[1] https://web.stanford.edu/~hastie/ElemStatLearn/
[2] https://www.microsoft.com/en-us/research/uploads/prod/2006/01/Bishop-Pattern-Recognition-and-Machine-Learning-2006.pdf
[3] http://www.crackingthecodinginterview.com/
文章来源:https://towardsdatascience.com/giving-some-tips-for-data-science-interviews-after-interviewing-60-candidates-at-expedia-395fff7e073b
欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/
欢迎关注PyTorch官方中文教程站:
http://pytorch.panchuang.net/