最近幾年Data Science/Machine Learning在北美火紅,許多原本在學術界
的理工博士生或博士後,在決定放棄學術研究的時候都選擇了轉行到業界當
data scientist.這篇心得分享我會以非CS領域理工博士畢業生的角度去寫
,但是如果妳/你只有master degree也不需要直接End,這篇提到的東西我相
信大部分應該還是有用的.
很多人都在問,要當DS是不是要有PhD才可以?我只能說,有PhD當然會有優
勢,但它不是必要條件,這幾年美國DS中master degree的比例其實越來越高,
有興趣的人可以去找The Burtch Works Study: Salaries of Data Scientists
May 2017這筆資料,2017年的時後,美國的early-career DS有64%是master
degree,PhD則是25%
先講一下自己的背景和歷程:
NTU: Bachelor and Master in Physics
University of Hawaii at Manoa: PhD in Astronomy
我大概在唸博士的倒數第二年開始猶豫之後是否要繼續做天文研究,到了
最後一個學期才完全確定要轉行.2017年3月才第一次在Coursera上
Andrew Ng的Machine Leaning課程,8月的時候博士論文口試,9月搬來灣
區找工作(秋季班畢業,OPT 2018年開始),結果這一找就是10個月...
我總共申請了超過350個工作(海投+內推),有得到回應(phone screen,
data challenge, OA等等)的公司總共19家(不包含沒錢的實習機會),去了
8次onsite,最後在6月底拿到一個offer.我申請了100個工作後(2018年初)
才拿到人生中的第一次面試,2月的時找到了SF的一家只有6人的初期start-up
做沒有錢的DS intern,到了3月中,憑著履歷上面有個實習經歷,加上自己
又另外做了不少Machine Learning Projects,我再度開始海投,從這個時
候開始我大概每投10~20家公司可以拿到一個面試.
以下分享我的心得
<心態>
首先,要有一個覺悟,現在有太多的aspiring data scientists,但是公司
普遍都想要有經驗的人,導致競爭很激烈.現在的情況已經和4~5年前不一樣
,在當時可能有個理工博士就會很搶手,但是現在,你必須向雇主證明你花
了很多時間做了他們有興趣的Projects,你已經job ready,人家才會願意給
你機會.千萬不能抱持著一種"我才剛畢業而已沒有業界經驗,他們應該會諒
解,讓我進去後學吧?"的心態.記住,外面有那麼多人想要進來,你要憑什
麼讓雇主看上你?
Q:要有什麼樣的經歷,公司才會願意給面試?
最有用的經歷當然還是實習.如果你離畢業還有一段時間,然後又已經確定畢
業後想轉業界,趕快想辦法找個暑期實習來做.如果沒有時間這麼做而且又無
法在畢業前找到工作的話,可以像我一樣嘗試找找小startup做自願的實習(如
果經濟上允許),AngelList上面有很多這樣的小公司,對他們來說,缺人但是
沒有錢,對你來說,缺的是相關的業界經驗,所以算是一種互惠.但是在找的
時候一定要好好談,確定這是你想要做的事,避免他們只是找你去打打雜,做
一些和DS不相關的東西.開始做以後還是可以繼續申請全職工作,反正他們沒
有付你錢,找到工作的話想走隨時可以走.
另外一件可以吸引recruiter目光的事,就是自己去找數據來做project,並且
放進Github,LinkedIn,以及你的Resume裡面.選擇project的時候,是有針對
性的,仔細去想想什麼樣的產業你有興趣,而那個產業都會怎麼應用ML.舉個
例,現在金融科技(Fintech)正夯,很多公司都會用ML來預測客戶借了貸款是否
會還賬,信用卡花費是否會定期繳清等等,如果你對這方面有興趣,就應該去
找個這方面的數據來做個project,以貸款的問題來說,可以估狗LendingClub
dataset,就可以找到數據玩.若你對推薦系統(recommender system)有興趣,
網路上也有各式各樣的電影,餐廳,或著E-commerce的數據(推薦系統有分很多
種類型,就看你對什麼有興趣).又或是你對security領域有興趣,那就想辦法
去做一個anomaly/fraud detection的project.這邊列舉幾個可以找到dataset
的地方:
Kaggle datasets: https://www.kaggle.com/datasets
UCI ML Repository: https://archive.ics.uci.edu/ml/index.php
當你做過了很多有針對性的projects之後,就可以依照申請的工作調整你
的履歷,放一些比較相關的projects,我自己是在履歷裡面有一個部份叫
"Selected Data Science Projects",底下會放四個projects,並且附上
Githib的超連結,排列的順序就按照和工作的相關性.如果有相關的公司
找你phone screen,這個時候就可以好好喇叭你是對他們這個產業多有興
趣,所以你才會選擇去做XXX
另外值得一提的是,很多公司在工作中都需要用分布式系統,像是Hadoop和
Spark,如果有時間可以上個網路課程學一下,然後再做個相關的project,
在找工作的時候會有加分效果,像我就有一個project是用Pyspark中的ML和
MLlib來做推薦系統.
Q:我應該去比Kaggle競賽嗎?
如果你很有時間而且又很強的話,去比個競賽刷個獎牌我相信是有加分的.
也就是說,我個人覺得你若是不符合上述條件的話,我倒是建議不要太花時
間在競賽上,因為比了也拿不太到好成績.再來,真實工作跟競賽其實是很
不一樣的.比賽中往往accuracy差個0.001名次就改變了很多,比賽中為了讓
預測更準,通常選手都會需要把很多models stack在一起.但是工作中通常
就比較少去計較這些,更重要的往往是如何從data中得到一些insight,以便
幫助決策或產品設計等等.
Q:Deep Learning好夯啊,LinkedIn上面看到一堆工作都要做Deep Learning,
我是否該多往這個方向去準備?
我個人是覺得多學無害,我自己也把Andrew Ng在Coursera上面的Deep Learning
課都上了.不過就是需要想清楚你想要的是什麼類型的工作?Deep Learning通
常是應用在image recognition,voice recognition那些,重點在於演算法而
不是analytics,所以這些工作通常需要的是真的有這方面背景的人來做,屬於
硬底子的缺.你如果跟我一樣,是屬於非CS的理工碩博士,應該在這方面沒有
太多經驗,相反的,你的優勢在於對問題的解決能力,對data的靈敏度和分析
能力.盡量集中火力去申請那些偏向傳統ML和analytics的工作,可能才是一條
比較容易的路.
Q:申請的公司給了Data Challenge,做的時候要注意什麼?
如果你已經有自己做過一些ML projects的經驗,這個關卡應該是屬於容易的
部分,通常data challenge都是用jupyter notebook來做,把code寫乾淨,
文字說明寫清楚,整個project把各段落分清楚,像是data exploration,
data cleaning/processing, feature engineering, model tuning, results,
conclusions...等等.然後公司對於給你的challenge一定會明列他們的要求,
交出去之前確保各項要求都有達到,通常就不會有太大問題.有一個電子書叫
A collection of data science take-home challenges,裡面有一些不錯的資
源,大家可以參考看看.但是缺點就是有點貴,然後裡面的範例是用R寫的不是
python (no offense to R users XD)
Q:該如何準備面試?
DS的面試不像software engineer那樣比較有固定的方向去準備,因為不同的
公司對data scientist的定義都不同,你如果問我面試都在問些什麼,我只
能說depends on the company,也因為如此,找DS工作的人有一堆東西要唸,
但是大致上就是分成幾類:
(1) Machine Learning
(2) Statistics and Probability
(3) Coding
(4) Non-technical questions
Machine Learning
個人覺得單純的Machine Learning問題算比較好準備的,考的通常是基礎概念
和你實作的經驗,不會有人要你在白板上推導公式.不過一種很常見的考法是
case studies,考的是你的應用能力,這個部分就比較難準備,而且也很難猜
題,能做的就是到網路上去找各式各樣的題目來多想,去面試之前,一定也要
去想,這家公司需要解決什麼問題.往往case studies的題目就是他們的DS
team在工作中常面對的問題.
Statistics and Probability
各種基本的統計概念一定要熟練,個人很推薦PennState的online statistics
課程資源: https://newonlinecourses.science.psu.edu/statprogram/
每一個課程都有Online Notes可以看,是很好的參考資料.另外我也非常推薦
這個youtube頻道: https://www.youtube.com/user/jbstatistics/playlists
這個作者的口齒非常清晰而且各種觀念都解釋得很清楚
就如同Machine Learning的考法一樣,統計的題目除了考基本觀念外也很長考
case studies.機率的問題的話就比較像是腦筋急轉彎,最好的練習方法就是
在網路上找probability interview questions,多練習多想.
Coding
很多人都有類似的疑問:申請DS的工作到底需不需要像software engineer那樣
刷題? 我的答案是:面試會不會考algorithm,還是那句老話,depends on
the company.很多公司會考,但也還是有公司不考.身為一個求職者,你當然
還是需要準備,不準備的話等於是放棄掉很多機會.但DS的coding題並沒有像
SDE那麼難,基本上就是刷Leetcode的easy和medium就可以了,而且一些特殊數
據結構像是Linked List和Tree也不太會考,最愛考的就是array和string的應
用,這就包含了binary search, sorting, queue, stack, two pointers, hash
table, recursion…等等算法.dynamic programming和greedy則是沒聽說過會考.
然後我也碰過重點放在object-oriented programming的coding test,也就是考
你會不會寫class,不過用到的算法其實也是上面提到的那些.
至於SQL,在我面試的所有公司中只有在一個OA和Google的video interview中碰
過,會在面試中考SQL的通常是Google,FB這種大公司,因為這些大公司的工作通
常分得很細,他們的DS職缺可能比較偏data analysis,會需要你常常做一些複雜
的SQL queries.而一般公司的DS通常就是直接考你python coding,不是說工作
中用不到SQL,是因為他們覺得你如果coding能力都沒有問題的話,SQL應該只是
小case而已.平常練習SQL的時候,一定要練習用window functions:
https://dev.mysql.com/doc/refman/8.0/en/window-functions.html
原因是很好用,很多複雜的queries用了window functions後就變得非常簡單.
Non-technical questions
電話面試會問的non-technical問題基本上都大同小異,準備的方式就是事先編
好你的故事.故事的內容是真是假都沒關係(但是不會的東西不要假裝你會),反
正面試官也無法查證.最常問的就是:
(1) 請你簡單介紹一下自己
(2) 為什麼想(離開學術界)當data scientist/machine learning engineer?
(3) 對我們公司了解嗎?為什麼有興趣申請這個職位?
有少數的一些公司還是會問比較老派的制式化情境題,例如:
- What is your ideal workplace?
- What is one challenge you've had to overcome in your current role?
- Give me some examples of your experience in a team.
- What was a conflict with co-workers that you had to overcome and
how did you do it?
- What was your biggest success in your current role?
.
.
etc
雖然有這麼多不同的情境題,但是你會發現它們都可以歸類成幾個大類,像是
工作環境,團隊合作/同儕相處,解決問題或面對挑戰,成功或失敗經驗等等.
每一個類別都可以想好一個故事或是例子,接到問題後再適當地把答案導向你事
先想好的故事就可以了.
一定要對公司做足研究,去了解他們的產品或服務,在onsite面試的時候要表
現出一種"我對你們很有研究,因為我非常有興趣"的態度,當你做過研究以後,
面試官如果問你為什麼有興趣來我們公司,你才有辦法言之有物,並且問出一些
有深度的問題.我認為在面試中問問題是很重要的一環,不管在phone, video或
是onsite interview之前,都一定要先準備好一些問題在面試的時候發問,除了
一些技術性或公司運作方面的問題外,也可以多問一些讓面試官發表他們想法的
問題,例如:What do you enjoy about working at XXX? What is your
expectation for a new data scientist to this company? What is the
project you are currently working on? 等等.
People love to talk about themselves! 你讓面試官講得爽,你被錄取的機率
也會提高一點點.面試之前如果有拿到面試官的名單的話,每個人都要去LinkedIn
看一下他們的背景(LinkedIn帳號記得設定隱身XD),面試交談的時候,偶爾可以
看似不經意地說一些話,讓他們覺得你跟他們有共同點(哪怕是一點點也好),不
過要注意不要太刻意太假就是了.
Insight Data Science Fellows Program (非博士可以略過這段)
這個program是一個只收博士學位的boot camp,應該有不少唸博士的人知道,
因為這幾年太多博士想要變成data scientist,加入Insight的門檻也變得越
來越高,申請者已經不能抱持著去學習的心態,你必須讓他們覺得你已經有
實做ML/DS的經驗,或是至少要讓他們覺得你已經花了很多時間去學習和瞭解,
而且不是只有技術層面,你對於產業界是否了解也是面試中的一大重點.我去
年申請2017年9月的session失敗,所以後來只好靠自己找工作.雖然我自己沒
有申請成功,但是靠著我的求職經驗還有我對這個program面試型態的了解,我
最近成功幫助了3位朋友進入今年9月的session (幫忙看履歷,指引做project
的方向,以及幫忙mock interview),如果有人之後也想申請的話歡迎站內信
問我問題.
以上
希望我的心得對大家有幫助,祝各位都能拿到滿意的offer!