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