很多想要在数据科学行业寻找一席之地的人正在慢慢意识到这个问题:在数据科学这个领域应聘,想得到求职或者面试反馈是基本不可能的。
图片来源:unsplash.com/@kentreloar
互联网公司对这些信息守口如瓶有很多原因。其一,公司给出的每一条拒绝理由都可能招致法律诉讼。其二,很多人并不能很好地消化负面消息,有些人甚至会变得十分偏激。其三,如果要这么做的话,想想面试官要花多长时间写一篇构思精良的反馈给几十个甚至上百个应聘的人。除此之外,公司并没有从中得到任何好处。
于是,就出现了一大批困惑、迷茫又想要有所成就的数据科学家。但好消息是:在这个行业,求职被拒的原因其实也就那么几个,针对这些不足还有很多方法来进行弥补。
不管是技术性还是非技术性的技能,应聘者所不具备的也正是这些公司迫切需求的,本文旨在对这些问题进行探讨。
原因1:使用Python语言处理数据科学的技能
大部分数据科学模型都基于Python环境。在使用Python语言处理数据结构时,仅有少数工具能将新手和经验丰富的老手区分开来。如果你指望通过创建特别出众的项目来吸引雇主的注意,这些工具能迅速拉开你和其他人的差距。
要想促使自己扩充数据科学理论方面的知识,提高实践能力,可以在项目中尝试以下几个方法:
数据挖掘。你应该熟练掌握pandas函数,比如.corr(),scatter_matrix(),.hist() 和.bar()这些语句的使用。你应该时刻注意,利用主成分分析(PCA)原理或者t-SNE的方法将数据可视化,在Python语言中可以使用sklearn的PCA和TSNE。
特征选择。在90%的情况下,数据集会有很多并不需要的特征,这些特征会耗费不必要的调试时间,还很可能会出现过拟合的现象。这就要求数据科学家们熟练掌握基本的筛选方法(如scikit-learn库的VarianceThreshold函数和SelectKBest函数)和稍显复杂的基于模型的特征筛选方法(如SelectFromModel)。
使用超参数搜索的方法来寻找***模型。数据科学家一定得知道GridSearchCV函数是什么、怎么用。RandomSearchCV函数同理。要想出类拔萃,你可以用skopt库中的BayesSearchCV这个函数来实验一下,看看怎么将贝叶斯优化法运用到超参数搜索中。
管道机制。sklearn中的pipeline库可以帮助你一站式完成数据预处理、特征选择和建模这些步骤。如果你对pipeline不熟悉的话,那就说明你应该加强对建模工具包的学习。
原因2: 概率论和统计学知识
图片来源:unsplash.com/@johnmoeses
概率论和统计学方面的知识并不会在数据科学的工作中单独应用,但它们是所有数据科学工作的基础。所以,如果你还没仔细研究过下面这些知识的话,那你就很容易把面试搞砸了。
贝叶斯法则。这是概率论的基础,在面试中经常出现。你可以练习一些基础的贝叶斯“白板”问题,并且阅读下面这本著作来深刻理解这个法则的含义和来由。
传送门:http://www.med.mcgill.ca/epidemiology/hanley/bios601/GaussianModel/JaynesProbabilityTheory.pdf
基本的概率论知识。你应该知道怎么回答下文这些问题。
问题传送门:https://github.com/kojino/120-Data-Science-Interview-Questions/blob/master/probability.md
模型评估。在分类问题中,很多新手习惯以模型的精确度作为衡量标准,这样做通常不是一个很好的选择。你应该习惯使用sklearn的precision_score,recall_score,fl_score,和roc_auc_score等函数并了解其背后的理论知识。对于回归问题,知道为什么用均方误差(mean_squared_error)而不用平均绝对误差(mean_absolute_error)也同样重要,反之亦然。花时间去弄清列在sklearn官方文件中的所有模型评估标准是很值得的。
官方文件传送门:https://scikit-learn.org/stable/modules/model_evaluation.html
原因3: 软件工程小窍门
数据科学家被要求做软件工程工作的情况越来越多。很多雇主都要求应聘者管理好自己的代码,在笔记本和草稿上留下清晰的注释。尤其是以下几个方面:
版本控制。你应该知道怎么使用git系统,并且能用命令行和自己的GitHub库远程互动。如果你还不能做到的话,建议你从下面这个教程开始。
教程传送门:https://product.hubspot.com/blog/git-and-github-tutorial-for-beginners
网页开发。有些公司更倾向于将数据储存到自己的网络应用程序(WebApp)中,或者通过API的形式来访问数据。因此,熟悉网页开发的基本知识也很重要,***的办法就是学习一些Flask框架的知识。
传送门:https://www.freecodecamp.org/news/how-to-build-a-web-application-using-flask-and-deploy-it-to-the-cloud-3551c985e492/
网页抓取。这有点类似与网页开发:有时候你需要通过从网页直接抓取数据,将数据采集自动化。BeautifulSoup和scrapy是两个非常不错的网页抓取工具。
清晰简洁的代码。学会字符串的使用。不要滥用行间注释。将长函数拆成短函数,越短越好。10行以上的函数都不应该出现在你的代码中。每个函数都应该清晰地命名,function_1不是一个好名字。在给变量命名时遵循Python语言的规则,要像这样like_this,不能像LikeThis或者这样likeThis。一个Python模块(.py格式的文件)中的代码不要超过400行代码。每个模块都要有一个明确的目的,比如data_processing.py,predict.py)。学习if name == ‘_main_’语句是什么,为什么重要。使用列表解析(list comprehension)。不要滥用for循环。***要记得给你的项目附上一个README文件。
原因4:商业嗅觉
图片来源:unsplash.com/@emmamatthews
似乎有很多人认为只要自己技术够硬,就能被心仪的公司录取。其实不然。事实上,公司更青睐能更快带来效益的员工。
这就意味着求职者不仅技术要过关,还要掌握一些其他的技能。
想别人之所想,并付诸行动。大多数人在沉浸于“数据科学学习模式”时,都会遵循一系列步骤:导入数据、分析数据、清理数据、数据可视化、建模、模型评估。
如果你是在学习一个新的库或者一项新的技能的话,这些步骤没什么不好。但在商业环境中,这种类似于“无人驾驶”的工作模式是一个不好的习惯,因为上班时间的每一分、每一秒,你做的每一件事情都是公司在为你买单。你得培养自己的商业思维,思考怎么妥善安排好自己的时间,为团队和公司做出有意义的贡献。
这里介绍一个方法,在开始一项数据科学项目之前,先思考一下你要用它达到一个什么样的目的,先给自己提几个问题,这样你就不会中途被一些所谓的DS工作流(workflow)等无关的工作打乱思路。把这些问题想得越实用越好,当你完成整个项目之后,再回过头想想这个项目有没有帮你认真回答这些问题。
问对问题。公司希望雇用的员工在调整工作模式时能够顾全大局,并思考清楚一些问题。比如,“我现在负责的工作是因为它真的对团队和公司有实际帮助,还是因为我能在里面使用我自己喜欢的算法?”或者“我应该优化哪些重要的商业指标呢?有没有更好的方法来改善?
将你的成果解释清楚。管理层需要你来告诉他们哪些商品卖得好,哪些用户转而使用了竞争者的产品,你得说出个所以然来。但他们不懂(也不屑于去了解)什么是查准率/查全率曲线,也不知道你为了防止模型过拟合做出了多大的努力。所以,用浅显易懂的方式来让你的听众明白你做出了什么成果,有什么影响,这也是数据科学家必须具备的一项技能。
你可以找一个从高中开始就再也没上过数学课的朋友,试着一边做项目,一边向这位朋友解释你做的项目是干什么用的。友情提示:解释的时候不能提到任何算法的名字,有关调试超参数的术语也不能提,你使用的语言应该越简单越好。
除了上面的原因,还有……
关于求职被拒的原因,没有比上述理由更详尽的了,从笔者目睹的百余个新手数据科学家求职和面试指导案例,以及与面试官的沟通结果看来,70%的人是因为上述理由被拒。
但记着,像性格这种定义比较灵活的东西也可能会被算作考量的标准之一。如果你和面试官不是很合得来,谈话进行地不是很顺利或者很尴尬,就很有可能你的硬实力是够的,但是面试官觉得你的气场和公司文化不是很符合。很多技术大牛也会因这种理由被拒,所以别太放在心上!