轉載,原文來源: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、管理和領導技能(取決於職位級別)
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和邏輯迴歸的比較
-
生成模型和判別模型之間的差異
-
梯度消失問題背後的根本原因和一些避免這種情況的常見做法
-
在進行批量梯度下降時使用動量梯度下降法的優點
<p> </p> </li>
3. 通用統計和數學知識
今天的許多數據科學家曾經是統計學家和分析人員,許多機器學習的模型就是(重新包裝爲)統計學習模型(如線性迴歸,嶺迴歸,LASSO,邏輯迴歸)。因此,許多面試官喜歡在統計學或數學方面提出一些問題也就不足爲奇了。
對於統計學和概率學,如果你熟悉以下概念,那將是很好的:
-
模型的偏差和方差以及如何計算它們
-
分佈抽樣
-
置信度和給定置信度所需的樣本數量
-
均值,方差,相關性(統計意義上和經驗意義上)
-
隨機過程,隨機遊動(金融公司的數據科學職位需要)
-
如何找到某些事件的概率
對於數學問題,你可能會被問到以下問題:
-
一些需要一些思考的腦筋急轉彎問題
-
如何計算特定損失函數的梯度
-
關於損失函數或優化算法的一些詳細問題
<p> </p> <p> </p> </li>
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建模問題,你可以將它們分解爲相關的數據提取,數據清理,特徵提取,預測建模,評估和可能的改進。
<p> </p> <p> </p> </li>
8. 行爲問題
有些人在面試時也可能會問行爲問題。這些問題可能包括你過去的工作經歷(爲了瞭解你是否具備工作所需的技能),以及你的個人興趣。這些問題也可以集中在你過去如何處理各種工作情況上。你對這些問題的回答可以展示你的技能,能力和個性。以下是你可能會被問到的一些示例問題:
-
你喜歡什麼樣的職位,一個涉及研究和研發的職位,還是更傾向於把現有模型應用於公司內部數據並圍繞它構建數據驅動的解決方案的職位?
-
你是喜歡單獨工作,還是與一羣人合作解決一個問題?
-
舉一個你達到的目標的例子,告訴我你是如何實現它的,以及你面臨的挑戰是什麼?
-
舉一個你沒有遇到的目標以及你如何處理它的例子?
-
如果你需要在deadline交付模型,請告訴我你將如何在壓力下工作?
<p> </p> <p> </p> </li>
9. 系統設計技巧(取決於職位級別)
根據你申請的職位級別,你可能還會被聞到一些系統設計面試(SDI)問題,這些問題主要是關於“設計大規模分佈式系統”的問題。
由於缺乏足夠的開發大規模系統的經驗,以及沒有標準答案的設計問題的開放性,這些問題可能具有挑戰性。
我不打算在這裏談論SDI問題太多,因爲它不是這篇文章的重點,但我會提供一些示例問題,以及一些有用的資源,如果你想在這方面得到更多的練習。
以下是一些示例系統設計問題:
-
你將如何設計Youtube或Netflix等視頻流服務?
-
你會如何設計Facebook Messenger或WhatsApp?
-
你如何爲客戶服務設計聊天機器人?
-
設計Quara或Reddit?
-
設計像Snapchat這樣的應用程序?
-
你將如何設計Dropbox或GoogleDrive或Google Photos等全球存儲和共享服務?
-
你會如何設計像Twitter或Facebook這樣的服務?
-
你將如何爲Google或Expedia設計預先輸入系統?
<p> </p> <p> </p> </li>
以下是面試中,關於設計問題的一些有用資源:
-
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
歡迎關注磐創博客資源彙總站:
http://docs.panchuang.net/
歡迎關注PyTorch官方中文教程站:
http://pytorch.panchuang.net/