Data Science领域现在在美国很红,但感觉非相关科系的new grad求职还是很不容易,
去年秋季我开始在这个领域寻找机会,一直到最近终于拿到一份理想的offer,一路上
虽然辛苦但受到很多人的帮助,所以想将我的经验记录成四篇文章分享给大家,里头
分别会谈到:
一、我的背景及转职准备过程
二、介绍Insight Data Science Program
三、Data Scientist面试经验分享
四、Offer negotiation心得分享
这一系列的文章可能比较适合非CS/DS背景出身转DS或是其他在Analytics/BI roles的人
参考,也希望能够借此帮助跟鼓励到还在这条路上努力的人 :)
◎背景:
BS in Atmospheric Science at NTU
PhD in Meteorology and Atmospheric Science at Penn State
我的学历比较像是所谓的冷门理工科系,也不像CS/Stats/ITS跟Data Scienc有比较直接
相关,我的博班研究跟DS几乎没有关系,顶多就是用multiple linear regression看看
海温对区域气候变迁的影响这部分可以算是沾得上边。然后大概知道PCA是什么但也没有
实际运用在我的研究上。
相关的背景知识也蛮缺乏的,所以一开始真的找DS的工作很不顺利。
在Coding方面,当时我完全不会Python、SQL或一般业界常用的语言。而且在2017秋天以
前我几乎不太知道Machine Learning( ML)是什么,一些ML算法 像是logistic
regression、各种tree-based models、clustering techniques、SVM、neural net等等
是听都没听过。CS相关课程像是资料结构、算法等等都是零基础。统计知识也很一般,
至于business/product sense也完全没有。
不过在博班时因为有在Linux Cluster上跑气候变迁的模拟与分析,这部分在对于一开始
的上手应该算有些许帮助。
◎转职历程概述:
为了踏入Data Science领域我花了些时间自学Python。因为念大气科学的人多少有过用其
他语言写script分析数据的经验,只要花时间学一下语法的话,单就入门不会太困难。在
熟悉语法后,我尝试将一部分的博班研究工作“翻译”成Python,然后学着用jupyter
notebook将一部分的程式码以及视觉化的成果放在我新建立的GitHub上当个小作品。
建议有心学Python的人也可以试试这个方法,因为这可以把你用Python分析的结果跟用别
的语言分析的结果做相互的对照,过程会比较好follow,也可以慢慢练习coding的能力。
比较熟悉Python后,我开始学习scikit-learn跟其他做资料分析时会用到的工具,例如
pandas、matplotlib、seaborn等等,偶尔逛逛Kaggle去观摩别人的kernels来学习做
ML project 的思维。不过我只有跟着做过两三个很简单的projects熟悉一下,后来就荒
废了,因为发现自己需要补强更多ML相关的背景知识,而且我不喜欢在我不知道这个
model在干嘛的情况下直接调用,预测结果出来也不知道要怎么interpret。于是开始断断
续续上网看各种Data Science相关的教学影片。
2017夏天时听朋友提起她参加Insight Data Science Program的经验,觉得好像可以试试
,所以随手申请了2018一月的session,没想到竟然最后被accept(不是炫耀文XD),于
是有点误打误撞开启了要认真踏入Data Science career的旅程。我其实本来在参加
Insight之前一直有点排斥,会质疑自己花两个多月是否值得?是否会学到东西?是否最
后真的能找到Data Scientist的工作?然后很害怕自己做不出data product。但现在回头
看这些担心都是多余的,因为Insight带给我的价值完全超乎我的想像。
我在Insight做的project在往后每一个面试都是个很棒的selling point,然后Insight的
network非常强大,在我自己找工作的过程中真的对我帮助很多。即便我在参加完之后并
没有马上找到工作,而且最后的offer也不是透过Insight拿到的,但我真心觉得能够参加
Insight绝对是我人生中最重要且最棒的决定之一!诚心推荐给大家,详情我会另写一篇
Insight心得文跟大家分享。如果无法参加这个program也没关系,我也会在那篇文章中
分享参加的过程与准备,如果可以试着follow他们的workflow应该也会对你有一些帮助。
今年三月初参加完Insight后,三月中旬就重回学校做研究写论文准备毕业,中间陆续有
跟几家Insight refer的公司面试,然后大概到4月中差不多都挂光了XD。不过即使
program结束之后Insight还是一直会po职缺以及介绍想听我们demo的公司,所以多少还是
有一些机会。
但在4月后我就没有积极找工作面试了,主要在准备论文口试跟忙其他事情,真正又开始
比较认真投工作跟面试是在六月中后,但此时又要准备收拾搬家,所以其实也没能全心全
意在找工作跟准备面试。
九月初搬到芝加哥附近后有开始比较积极找工作。基于个人因素,我只想找芝加哥附近的
工作,且我又只偏好某几种方向的Data Scientist,所以在诸多限制下其实要找到一个
很fit的职缺真的是困难重重。有几次真的很想放弃,不过后来很幸运能同时拿到两家
Data Scientist的offer,一家是毕业前一直想去的产物保险公司,业务还满广的,而且
是涵盖我最有兴趣的气候╱农业相关的保险。另外一家是Slice,后来被Rakuten买下,
现在改名叫Rakuten Intelligence,主要做online shopping market research。
虽然除了自己喜欢网购以外,对这个产业了解并不多。但最后还是决定去Rakuten试试看
,原因是Slice的所有条件几乎都狂胜另一家保险公司(体会到有多个offer的好处)
,而且manager跟teammates感觉都很不错。
另外,我在决定选哪个offer之前,还利用Insight的network去跟之前在Slice待过的
Insight fellow稍微聊过(再次感到Insight network的强大XD),觉得各方面感觉都很
好,才做了决定。
◎Data Science准备过程与学习资源:
其实现在回去检视整个找DS工作的过程,我觉得自己起步有点太晚,在DS相关背景知识还
不够强就去参加Insight,所以参加program的过程会有一点辛苦,虽然之后在跟Insight
合作公司的面试时候有渐入佳境,但还是没能够透过这个管道拿到offer。但如今能拿到
这两个很棒的offer,也是基于之前参加Insight以及过去面试失败的经验,所以不论面试
成功与否,如果能够从这些经验里学习并一步步改进,过去的失败其实是很珍贵的,面试
详情我会在第三篇文章分享。
接下来想跟大家分享一些Data Science相关的学习资源(我都是用免费的option,也没有
做作业)。面试Data Scientist需要准备的项目真的太广了,其深度也会根据职缺要求
而异,不过总体来说可分为六大部分:
一、 SQL
(1) Codecademy
SQL语法:https://www.codecademy.com/learn/learn-sql
SQL练习:https://www.codecademy.com/learn/sql-table-transformation
SQL应用:https://www.codecademy.com/learn/sql-analyzing-business-metrics
我的SQL一开始就在这边学的,个人比较喜欢接口是interactive 的方式。不过我个人不
是很喜欢SQL,比较偏好Python的pandas。所以没有很认真地持续练习SQL,且我会尽量
避免需要写超级advanced SQL query的工作,而我自己的面试从来没有被考过需要当场
写SQL,但有被问过说SQL会什么command。
(2) SQL zoo
https://sqlzoo.net/
还不错的练习,我无聊的时候会拿来refresh一下。不会SQL的人也可以从这个网站下手。
(3) Hakerrank
https://www.hackerrank.com/domains/sql
也是还不错的练习,但是我只做到medium而已,因为真的不太擅长刷题。
二、CS Fundamentals
这个我真的不会,版上SWE分享文很多,就不在这野人献曝了。
Insight有推荐这个网站好像不错:
http://interactivepython.org/runestone/static/pythonds/index.html
另外Cracking the Coding Interview那本书听说也很有用,刷题的话就Leetcode跟
Hackerrank。但因为我没学过资料结构跟算法,所以只写了不到10个easy题就放弃了。
如果想学Python,我推荐Codecademy的课程:
https://www.codecademy.com/learn/learn-python。
这也也是interactive的接口,我的Python就是在那边学的。之后的学习方式就是不断
的Google跟Stack Overflow。
三、ML知识
(1) Machine Learning Foundations(机器学习基石)by 林轩田教授
(2) Machine Learning Techniques (机器学习技法)by 林轩田教授
我的ML学习之路是从这里开始,影片在YouTube跟Coursera都有。满喜欢看林轩田教授的
教学影片,因为觉得有些冷笑话很好笑XD。当初不想给自己太大压力,怕自己无法坚持
看完所有影片,所以没有很认真地逼自己拿纸笔一步步follow课程,我是以比较轻松的心
态在学,有点像看影集那样一天看一小时,最后不知不觉地把所有的影片都看完(不推荐
这样的学习法XD),并且开始对ML有点概念。不过这堂课还是满多数学符号,且需要
线性代数、微积分跟矩阵运算的概念,这些基础比较弱的人可能要注意一下。
(3) Machine Learning course by Andrew Ng
这门课在美国Data Science领域很有名,我自己没上过,但听说是不错的ML入门课程。
(4) Applied Machine Learning in Python by Kevyn Collins-Thompson (Coursera)
我觉得算是不错的入门课程,不过我自己是自学一段时间后才看这门课,所以觉得满简单
的。这门课跟林教授的课比起来简单很多,比较少数学证明推导,但ML概念涵盖还算广,
整体来说偏应用,有许多使用Python实作ML的简单例子,可大略地提供做
ML project pipeline的观念,例如不同ML models选择、data前置处理、evaluate
results等等。
四、Stats
统计相较于其他方向来说算是我比较熟悉的一个领域,不过在准备面试的过程中还是找
了一些线上资源来复习跟学习。根据我的面试经验大部分会问一些regression、
correlation、statistical inference相关的问题。介绍几个不错的学习平台:
(1) Khan Academy
https://www.khanacademy.org
里面的Statistics and probability部分很多人有推荐,但我没有全部看完,里面很多部
分可以挑着看。
(2) Statquest by Josh Starmer (大推!)
他是一位UNC-Chapel Hill Genetics系的教授,录了很多统计以及ML相关的教学短片。
他的影片对我的面试准备帮助非常大!真的超级感谢他!他很擅长把很复杂的观念或
ML模式用很浅显的方式解释清楚,这点不论是在观念的理解上,以及在面试时能清楚
回答统计或ML相关问题都非常有帮助。
我的经验是在communication skills在Data Scientist面试的时候是非常重要的一部份,
如果能够将较深的统计/ML观念解释清楚绝对是大为加分的。我几乎在每个tech screen
前都会再重看几个比较重要的影片。而且他的影片都不长,不会造成太大的心理学习压力
(点开影片的活化能较低XD),真的是非常棒的资源!
这是他的YouTube频道:
https://www.youtube.com/channel/UCtYLUTtgS3k1Fg4y5tAhLbw
所有教学影片的分类细项:
https://statquest.org/video-index/
(3) Intro to Inferential Statistics by Udacity