在過去的一年裡,我採訪了一些在Expedia Group擔任資料科學職位的人,職位從入門級到高階的都有。我想分享我的經驗,這些經驗適用於對申請資料科學職位的人。在這篇文章裡,我還會給出關於你可能在面試中會遇到的問題的一些提示。
面試候選人幫助我認識了一些有廣泛背景和技能的人。從CS / ECE,統計/數學到土木/機械工程,這些領域的人我都接觸過。所幸我有機會能在這裡與這些出色的人交談。
在我講更多細節之前,我想提一下,近年來,業界把“資料科學家”也叫做“機器學習科學家”或“應用科學家”。雖然在一些公司中這些職位有著略有著不同的任務或者需要具備不同的技能,但對於大多數公司來說,這三個職位或多或少都指的是同一個東西。所以在這篇文章中,我提到的“資料科學”,跟上面的“機器學習”“應用科學”是一樣的。
雖然每個人都有一套自己解決問題的技能,但是大多數公司都會要求資料科學候選人具備一些特定的基本技能。我將這些基本技能大概分為以下幾類,然後再討論這些技能具體是什麼。根據公司和職位級別的不同,你可能會被問到以下提到的一個或多個相關問題:
1、關於你的簡歷和之前工作相關的問題
2、通用機器學習(和深度學習)知識
3、通用統計和數學知識
4、程式設計和軟體工程技能
5、統計建模技巧
6、計算機視覺(CV),自然語言處理(NLP)和定價策略(Pricing Topics)
7、面試中溝通和表達能力
8、行為問題
9、系統設計技巧(取決於職位級別)
10、管理和領導技能(取決於職位級別)
1. 關於你的簡歷和之前工作相關的問題
你的簡歷在你面試時會被問到的那類問題中起著至關重要的作用。因此,請確保你對自己在簡歷中提到的任何內容有足夠的瞭解,內容包括從課程和研究專案到程式語言。如果被問到諸如“介紹一下你自己”,或者“介紹一下你現公司的工作” 的一般性問題是很常見的,不僅如此,你還會被問到關於你簡歷的問題。
例如,如果你在簡歷中提到幾個以前的與NLP相關的專案,那麼你應該對NLP有一個很好的理解,並且你很可能會在NLP上被問到一些技術問題,來評估你的技術含量。因此,如果你在一個專案上跟別人做了一些合作的東西,但對這項工作的貢獻很小,我建議你讓自己更熟悉該專案的技術方面。
或者,如果你提到Python或Scala作為你最喜歡的程式語言,請確保你足夠了解這些語言(至少在資料科學職位所需的範圍內),以及每個語言中的一些機器學習相關庫。我看過很多候選人在他們的簡歷中提到了Scala / Python,但當我問他們關於這些語言的一個簡單問題時,他們根本不知道它,這會給我一個負面訊號。如果你使用這些語言的經歷非常有限,那麼最好是誠實地告訴面試官,並且我相信大多數面試官都不會因為在你沒有豐富經驗的事情上對你進行評判。
2. 通用機器學習(和深度學習)知識
雖然不同公司的資料科學工作可能涉及廣泛的問題和技能(包括資料提取和預處理,執行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和邏輯迴歸的比較
生成模型和判別模型之間的差異
梯度消失問題背後的根本原因和一些避免這種情況的常見做法
在進行批次梯度下降時使用動量梯度下降法的優點
3. 通用統計和數學知識
今天的許多資料科學家曾經是統計學家和分析人員,許多機器學習的模型就是(重新包裝為)統計學習模型(如線性迴歸,嶺迴歸,LASSO,邏輯迴歸)。因此,許多面試官喜歡在統計學或數學方面提出一些問題也就不足為奇了。
對於統計學和機率學,如果你熟悉以下概念,那將是很好的:
模型的偏差和方差以及如何計算它們
分佈抽樣
置信度和給定置信度所需的樣本數量
均值,方差,相關性(統計意義上和經驗意義上)
隨機過程,隨機遊動(金融公司的資料科學職位需要)
如何找到某些事件的機率
對於數學問題,你可能會被問到以下問題:
一些需要一些思考的腦筋急轉彎問題
如何計算特定損失函式的梯度
關於損失函式或最佳化演算法的一些詳細問題
4. 程式設計和軟體工程技能
任何資料科學家都需要會程式設計。在創業公司(員工人數較少)中,資料科學家可能需要自己做很多軟體工程,例如資料提取和清理以及模型部署。相比之下,在大公司中,還有其他人負責資料工程和模型部署,資料科學家主要負責培訓和測試特定產品的模型。作為資料科學家,你還需要了解資料工程角色所需的一些術語和任務,例如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可能會有所幫助。我個人並不認為熟悉部署工具對於入門級資料科學職位是必要的。
5. 統計建模技巧
作為資料科學家,你需要為各種產品/問題構建數學和ML模型,因此在面試過程中可能會遇到一些建模問題。這些問題通常與公司的域名有關。目標是看看你是否可以將你在概念上理解的內容應用於特定問題。你可能會遇到的一些示例問題可能是:
你將如何構建機器學習模型來檢測我們網站上的欺詐交易?
你將如何構建機器學習模型以向我們的客戶推薦個性化專案?
你將如何建立一個模型來檢測我們網站上產品的假評論(類似淘寶刷的評論)
你如何使用ML模型檢測敏感評論/推文?
你如何建立模型來預測我們產品的價格?
如何構建模型以自動標記社交網路中使用者上傳的影像?
執行A / B測試時的線上指標?
根據你的答案,你可能還會被問到一些跟進問題,包括你需要的資料型別,評估模型的方式以及如何隨著時間的推移改進模型。如果你想檢視更多問題,https://medium.com/acing-ai/acing-ai-interviews/等網站非常有用。
在面試過程中,重要的是你的思維過程以及你能想到為產品構建ML模型的各個方面的能力。你絕對不需要給出最好或最完美的答案; 只要你對問題的高層次理解是合理的,你就是很棒的。
6. 關於CV,NLP和定價策略的問題
根據你申請的團隊的重點產品,你可能還會被問到有關CV,NLP或產品定價的一些問題。因此,在面試之前,請確保對你申請的團隊進行一些研究,以便更好地瞭解他們的重點。面試官可能會問你關於NLP或視覺中非常高階的概念,一些其他面試官可能會提出更具挑戰性的問題。
以下是你可能獲得的一些與 NLP 相關的問題:
什麼是詞幹提取和詞形還原?
什麼是詞袋模型?TF-IDF怎麼樣?
你怎麼能找到兩個單詞之間的距離?有哪些有名的字串距離指標?
什麼是命名實體識別,你將如何評估NER系統的效能?
CRF模型如何針對詞性標註進行訓練?
什麼是公報特徵,什麼時候它們有用?
你將如何構建神經機器翻譯模型?你會如何評價其表現?
word2vec對於經典的one-hot編碼有什麼優勢?
你會如何建立一個Q&A問答系統?
你如何檢測一系列文件中的主題?
你如何找到客戶評價的情緒(極性)?
正規表示式的一些問題
以下是你可能會被問到的一些計算機視覺相關問題:
你如何將網站上的影像分組為不同的類別(如電子,服裝等)?
如何構建一個模型來自動地標記一張影像中的不同人臉?
如何檢測影像/影片的質量並過濾模糊的影像/影片?
什麼是超解析度,你如何評估超解析度模型的效能?
如何檢測影像中的不同物件?
你如何檢測影像中的文字區域?
你將如何建立自動影像標記系統?
7. 溝通和表達能力
資料科學職位通常涉及大量的溝通和演示。這可以用於與產品經理討論新專案,或向你的團隊展示你的模型。因此,能夠與其他人(技術人員和非技術人員)交流關於你的工作和想法是非常重要的。
有時你可能需要以非常技術性的方式向同事或經理傳達你的新發現,有時你可能需要說服產品經理你的模型對他們有用,不用描述太多的技術細節。
面試官通常不需要問你一個具體的問題來評估你的溝通和表達能力,他們可以在面試過程中瞭解面試者的這些能力。我的建議是:
嘗試首先向面試官提供你的解決方案的高階圖片,然後講解其中的細節。透過這樣做,如果你的高階方法是正確的,你可以獲得反饋。
你可以專門詢問面試官你的答案是否是他們想要的。如果不是他們想要的,你可以請他們給你一些提示。
嘗試將建模問題分解為幾個部分,然後對每個部分分別進行闡述。對於許多ML建模問題,你可以將它們分解為相關的資料提取,資料清理,特徵提取,預測建模,評估和可能的改進。
8. 行為問題
有些人在面試時也可能會問行為問題。這些問題可能包括你過去的工作經歷(為了瞭解你是否具備工作所需的技能),以及你的個人興趣。這些問題也可以集中在你過去如何處理各種工作情況上。你對這些問題的回答可以展示你的技能,能力和個性。以下是你可能會被問到的一些示例問題:
你喜歡什麼樣的職位,一個涉及研究和研發的職位,還是更傾向於把現有模型應用於公司內部資料並圍繞它構建資料驅動的解決方案的職位?
你是喜歡單獨工作,還是與一群人合作解決一個問題?
舉一個你達到的目標的例子,告訴我你是如何實現它的,以及你面臨的挑戰是什麼?
舉一個你沒有遇到的目標以及你如何處理它的例子?
如果你需要在deadline交付模型,請告訴我你將如何在壓力下工作?
9. 系統設計技巧(取決於職位級別)
根據你申請的職位級別,你可能還會被聞到一些系統設計面試(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
10. 管理和領導技能(取決於職位級別)
如果你正在申請資料科學經理職位(有時甚至是高階或主要職位),面試官將需要評估你的管理和領導技能,並瞭解你之前的管理經驗。
這個候選人的理想背景是在機器學習和預測建模等領域具有強大理論背景的人,以及良好的軟體工程技能。要成為有效的領導者,候選人還需要具備良好的溝通技巧和良好的規劃技能,以便能夠以考慮構建資料驅動產品所帶來的許多風險的方式進行優先排序和規劃。
我不會談到太深入到管理技能的方面,但我將在這裡提供一些示例問題:
你所管理的最大團隊是什麼?你面臨的挑戰是什麼?
假設你的團隊已經構建了一個模型,可以在測試集上實現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