行業資深專家切身經驗——給資料科學家新手的建議

weixin_34037977發表於2017-11-30

摘要:本文是行業資深從事人員寫的關於資料科學的個人反思,一份關於資料科學之路及科研認知的心路歷程,相信本文對許多有抱負的資料科學家是非常有用的。

未來是大資料的時代,成為一名資料科學家是從事這方面研究者夢寐以求的職業,本文是一份給資料科學家新手的建議,關於作者學習資料科學的一些親身體會。

2509688-fd1d1e4d125fe496.png


動力

兩年前,我在行業分享了個人從事資料科學的經歷。本文原本是為了慶祝自己兩年的推特紀念日而寫的個人反思,但最終發表在Medium上,這是因為我相信它對許多有抱負的資料科學家是非常有用的。

很快就到了2017,我在Airbnb不到兩年的工作時間裡成為高階資料科學家。當回顧到目前為止的旅程並想象下一個來的是什麼,我寫了這些關於我早期職業生涯的一些認識。

如果我之前博文的目標受眾是有抱負的資料科學家以及對這個領域完全陌生的人,那麼本文是針對那些已經在這個領域剛剛起步的人。這篇文章的目的不僅是要用來提醒自己已經學到的重要的知識,同時也激勵那些從事資料科學事業的人!

你在誰的關鍵路徑

Philip Guo在他的部落格“你在誰的關鍵路徑上?”中闡述了以下觀察:

如果我是在導師的關鍵路徑上,然後他們會努力提供幫助以確保我成功;相反,如果我沒有在導師的關鍵路徑,通常我自己照料自己。如果你在某人的關鍵路徑上,然後你強迫他們把你的成功與他們聯絡起來,這將激勵他們儘可能的提升你。

2509688-d99bd95c14925c74.png

這項工作的結果是相當直觀的,通過我早期的職業生涯作為一個例子:

在推特時,我一直想了解更多關於機器學習的知識,儘管我的團隊是資料驅動型,但在很大程度上需要資料科學家關注實驗設計及產品分析。儘管我盡了最大的努力,但經常發現很難將學這類知識的慾望嫁接到團隊中的關鍵專案中。

因此,當我來到Airbnb,我有意識地決定集中加入一個專案/團隊,其中機器學習是該專案成功的關鍵。在我跟經理確定的幾個有前途的工作中,在Airbnb對客戶終身價值(LTV)的房源建模。

這個專案不僅是我們事業成功的關鍵,也是我職業生涯的發展。我學到了構建大規模機器學習模的工作流程,以及一些解決具體的業務問題的情境學習的優化方法。

毫無疑問,選擇的專案的框架在導師的關鍵路徑可以使我們越來越幸運。

學到的準則:我們都希望發展感興趣及追尋的知識,發現專案、團隊和公司的關鍵路徑,它們最好與你一致。

針對問題選擇正確的工具

在Airbnb工作之前,我常使用R和dplyn語言。從開始LTV專案後,我很快意識到使用Python去構建複雜的管道更容易些,此時我面臨一個兩難情形——應該從R轉到Python嗎?

2509688-941a10580f3aadc6.png

這是資料科學家普遍會遇到的一個的問題,因為選擇哪種語言都是困難的。對我來說,這中間顯然存在一個轉換成本。經過利弊權衡再做選擇,但我越想它就越陷在的陷阱裡。最終,我通過看了這個而逃離癱瘓:

不要思考學習哪種程式語言,而要思考哪種語言能為你提供特定領域語言(DSL)的正確設定並適合你的問題。

工具的合適性始終依賴於上下文以及特定的問題。因此不要關心是否應該學習Python,而是關心Python是否適合做這項工作。用下面是一些例子詳細描述這點:

如果你的目標是應用最新的、先進的統計方法,R語言可能是更好的選擇。因為R是由統計人員為統計人員建立。每一週,在CRAN上有很多有趣的新R包提供。

另一方面,Python對於構建生產資料管道非常管用,因為它是一個通用的程式設計語言。例如,可以在蜂巢使用PythonUDF輕易地構建一個scikit學習模型來做分散式評分。

學到的準則:不要糾結於單一的技術或程式語言,而是關心哪個工具或技術能最好地幫助你解決問題?關注於解決問題,工具自然而然的就確定了。

建設學習型專案

雖然我在之前沒有使用過Python,並且從來沒有真正正確的學好Python基礎,導致我害怕程式碼被分成相關的類別,我一直想知道,__init__ .py是用來做什麼的。

在打算真正學好基礎的這段時間中,我從Anders Ericsson的刻意練習研究中獲得靈感:

刻意練習是由教師設計的活動,其目的是有效地改善個人在具體方面的表現。

鑑於我是自己的老師,所以我需要自己設定練習計劃。例如,我開始策劃”學習計劃”的一套材料,都是與機器學習最相關的Python內容。這個過程花了我幾周時間,之後選定一個個性化的課程。所有的這些前期工作都是為了確保我能走上正確的學習之路。下面是一些專案里程碑(由於關於Python的基本概念,這裡沒有進行翻譯):

2509688-f09558bb631c17e5.png

一旦有了明確的課程,使用以下策略來在工作中刻意練習:

反覆練習:我強迫自己做一些簡單的事情,比如Python中的非關鍵任務的分析,雖然這會拖慢我的效率,但這強迫我熟悉的基本API而不必有時間負擔。

建立反饋迴路:在適當的時候就找機會審查其他人的程式碼並修復一些小錯誤,在編寫自己的程式碼時,試圖重構它幾次使其更具可讀性。

分塊學習和回顧:每到週末,我會寫下了那一週的進度,包括研究的重要資源、瞭解到概念等。通過回顧所學的內容,能夠更好地消化相關概念。

學到的準則:在許多實踐實驗的支撐下,在進入一個專案之前,提前規劃可以幫助你更加刻意的練習。重複、組塊、回顧和反饋是加強學習的最有用的方式。

與有經驗的資料科學家搭檔

一個關鍵成分是刻意練習能得到及時的反饋和行動。任何偉大的運動員、音樂家或數學家在沒有指導或有針對性的反饋情況下就能夠成就偉大。

我從那些有成長型思維的人觀察到的一個共同特點是他們都不會為承認不知道的東西而感到羞愧,他們是不斷尋求反饋。長期自我回避不會的問題在大多數情況下都錯過了學習的機會。

2509688-4cfa8a96da064380.png

在這個專案前,我有很少的將機器學習模型應用於生產的經驗。在這個專案中,我做的最好的決定之一是提前告知我的合作者關於我對機器學習的基礎知識知之甚少,但我非常想學並且保證隨著我知識的積累,會讓自己對團隊更加有用。

這是一個很好的策略,因為人們一般會喜歡分享他們的知識,尤其是當他們知道最終受益的會是他們的導師時。下面是一些具體例子,如果沒有我的合作伙伴的指導,我不會學得很快:

Scikit學習管道:我的合作者建議採用Sklearn的管道施工可以讓我的程式碼更模組化。這個工具使我的程式碼更簡潔、更可重複使用而且更容易相容生產模型。

模型診斷:由於我們的預測問題涉及時間,合作者告訴我典型的交叉驗證行不通,而使用時間序列的交叉驗證是一個更好的方法。

機器學習的基礎建設:在機器學習工程師的幫助下,我學會了通過virtualenvs管理包的依賴關係、如何使用picking序列化模型等。

由於學到了更多的新概念,我不僅能夠將其運用到專案中,還能夠參與到專案討論中,這使得專案能做得更好。知識共享創造了一個良性迴圈,使我成為一個更好的夥伴。

學到的準則:從長遠來看,自我審查在大多數情況下都錯過了學習機會,早點表明你的求知慾,使自己變得更好而變得更有用。

教學以及傳福音

經過多年的研究生導師工作,我一直都知道我對教學的熱誠。Richard Feynman,一位諾貝爾獎物理學得主、了不起的老師,講述了自己的教學觀:

如果不能將知識給一些基礎薄弱的人講解明白,這意味著我們自己都沒有真的弄明白。

知道這些教學技巧可以提高我個人理解的水平,我尋找機會仔細記錄模型的實現過程、提供學習午餐並鼓勵其他人嘗試新的工具。

截至九月下旬,我已經開始與我們的內資料大學團隊合作並準備了一系列關於內部機器學習工具系列。我不知道這最終會走向哪裡,但我在Airbnb會驅動更多與機器學習相關的教育。

最終,我會用一條來自Hadley Wickham的一條推特結束這部分:

有用的東西不僅僅是新軟體,還包括解釋現有工具、案列研究、描述工作流程以及良好的錯誤報告等。

— @hadleywickham

學到的準則:教學是檢驗你對這門學科理解以及提高技能的最好方法,當你學到有價值的東西時,請與他人分享。你並不總是需要建立新的軟體,解釋現有的工具如何工作也是非常有價值的。

在步驟k時,想想你的第k+1步

從專注於自己的專案,到與機器學習指導團隊的合作,最終使得其他資料科學家能更多地瞭解機器學習工具。原來的專案範圍比幾個月前更大,誠然,我從來沒有預料到這放在第一位。

當我思考這個專案的演變時,有一件事情與我以往的專案不同,那就是對當前事物狀態有一點不滿,總是想讓它做得更好一點。描述這點最動人的方式來自Claude Shannon的寫作:

2509688-1a7c4ead9eb96797.png
“有不滿的想法,這並不意味著對世界悲觀不滿——我們不喜歡事情進行的方式是——我指的是一個建設性的不滿。思想可以用文字表達,這雖好,但我認為事情可以做得更好。我想有一個更簡潔的方法來做這件事,我認為情況會有所改善。換句話說,當事情看起來不太好時,需要有持續的輕微刺激;我認為對目前的不滿是好的科學家的一個關鍵驅動力。”

我決不是一個合格的科學家,但我覺得稍微不滿的表徵相當於告訴你是否能擴充套件你的專案影響。在我的專案中,每當我在步驟k時,我自然會開始思考如何第k+1步及更遠。

我認為這種心態是非常有幫助的——用你良好鑑賞力和輕微的不滿來堅持不懈地為你的進步加油

學到的準則:在做一個專案時注意你內心的不滿,這些都是關於你如何改進和將專案擴充套件到下一個級別的線索。

分離想法:你和你的工作

最近,我聽了Richard Hamming的演講,演講的題目是“你和你的研究”,也可以被命名為“你和你的事業”。

在演講中分享了一些他的故事,有幾點對我很重要。

如果你正在做的事情是不重要的,不可能會重要,你為什麼這麼做?你必須研究重要問題。這麼多年的星期五下午我都會思考我研究領域中重要的問題[這佔我工作時間的10%]。

讓我提醒你重要的問題,重要的不是結果,有些問題不重要是因為你還沒有受到抨擊。問題的重要性在很大程度上取決於如果你是否有辦法去解決問題。

這整個過程,我想教你的東西是風格品味,所以你會有一些直覺,什麼時候問題是正確的,什麼問題是正確的以及如何去解決它。正確的問題在適當的時間以適當的方式解決,並且沒有其他的解決方法。

重要問題對於你來說是重要的;對他來說,這是科學的問題;對於我們大多數人來說,這可能是不同的東西。他還談到制定進攻計劃的重要性,如果你沒有一個計劃,那麼這個問題並不重要,但後果很嚴重。最後他提到了用自己獨特的風格和品味做事情。

他做重要工作的標準很高,但這是值得效仿的。當你發現你的重要問題時,你自然會努力做的更好並使其更有效;你會找到教育別人關於它的意義;你會花時間向其他厲害的人學習並學好自己的手藝。

相關文章