大鼻觀點這個部落格成立大概一年多了,當初創立的想法其實很簡單:身邊有很多人想要轉行做資料科學家,卻不得其門而入,我剛好是剛轉行成功的菜逼巴,有一些經驗可以分享,因此決定開了這個部落格。這個部落格其實非常隨性,幾乎就是我想到什麼就寫什麼,所以要非常謝謝各位讀者的包容與支持!我今後會繼續寫下去!在部落格成立滿一週年以及申請博士班如火如荼的時間點,我決定花點時間回顧一下我這三年來的經歷,希望能夠給目前跟我一樣菜逼巴的新鮮資料科學家一點方向,以及 connect the dots 一番。
資料科學不是只有機器學習
身邊許多想要成為資料科學家的朋友告訴我:我想要運用機器學習解決商業問題,這是個很好的出發點,也是我當初轉往這個領域的主要原因,但在這個領域耕耘了一陣子之後,我理解到一件事情:熱門的機器學習算法只是資料科學家的一小塊必備技能,很多時候機器學習並不足以真正解決一個商業問題。在我看來,資料科學家其實有兩種類型,一是協助公司針對一個重要的議題進行縝密的科學分析,並提出相對的解決方案,另一種則是機器學習科學家,專門針對重要的功能建立機器學習的pipeline與演算法。
對於第一種類型的資料科學家,我認為最重要的能力其實是「能夠理解並拆解商業問題」以及「針對分析結果進行有效的溝通」,這類工作的工作夥伴往往是不同領域的專家,比如說:提出問題的部門(如:我在CHOCOLABS主要協助產品、行銷以及商業開發團隊進行分析)、工程師(如:我在CHOCOLABS時常會需要後端工程團隊的協助)等。坦白來說,我認為我在實習時有很多可以改善的環節,比如說:我當時不太敢去跟其他團隊的正職仔細討論他們的商業問題,時常需要依靠我的主管傳達訊息;我當時不太知道怎麼跟後端團隊開需求,我擔心我請他們幫忙會讓大家覺得我不夠有能力等等。當然,我覺得我也有些做得不錯的地方,比如說,盡量用最簡單的方法將分析結果呈現給行銷團隊看,辨認出影響使用者觀看行為的重要因素等等,我覺得之所以能有這些表現,主要是依賴 (1) 對於各類不同資料探勘模型都有一定的掌握,(2) 我在BizPro接受的商業訓練,讓我比較知道怎麼樣跟 business-side 的人傳達訊息。作為這一類的資料科學家,你需要的是廣泛的統計/機器學習知識,基本的資料庫操作技能,對於商業問題的熱誠,以及縝密的邏輯分析能力,並不是單單修了一門機器學習的課,就會具備這些技能了。
對於機器學習的資料科學家,就更不只是了解機器學習演算法了!為什麼機器學習這麼有用?主要是因為在大部分的商業問題中,只要能夠 scale up,任何一點微小的改善,都能夠創造巨大的影響。我自己的經驗:通常「不用機器學習可能有80分,用了機器學習變成85分」,80分跟85分的威力在使用者數量多時就會很驚人!然而,要將一個複雜的機器學習模型上線,在資料pipeline的設計非常困難。在設計Pipeline的時候,我自己會建議先要把output想好再去想怎麼跟input串接,在設計時也要注意擴充性的問題,避免想要多加一個功能要重構整組程式碼。另一個機器學習專案的特色是,嚐嚐需要多個開發團隊協作,因此code review以及程式碼管理變得非常重要。這點我非常感謝在 Yoctol 實習時我的主管 Ian 與柏憲的指導!其實我剛到 Yoctol 時非常辛苦,一來是我從來沒寫過 Python,二來我也從來沒用過 Git 以及進行團隊協作過,因此我同時得學很多東西,尤其是第一週為了趕快能夠做事拼了命地學Python,寫了很多爛code給Ian改 XD 在寫程式上面,Ian 給了我很大的啟發:要不斷去思考為什麼要這樣寫,而不是只是可以把 code run起來就好!雖然我現在很少寫 Python 了,但這件事情在寫R時也非常重要。另外團隊開發也是我一開始很不習慣的地方,尤其是 master 與 branch 的管理,我一開始以為是指令不熟的問題,後來才體會到這是流程管理的問題。如果大家對於團隊開發的心態建立有興趣,我滿推薦人月神話的,尤其是對於沒有任何軟體專案開發經驗的人,可以很快具備一些重要心態。
盡量學著閱讀學術論文
我覺得資料科學很特別的地方是,常常學界走得比業界快 5 年,所以如果遇到不會解的問題,常常可以在學術論文中找到一些解答。我自己在工作上也時常看paper,但看法跟學校做研究不太一樣,由於時間有限,我看機器學習的論文主要都是在看 (1) 這個論文解什麼問題 (2) 作者怎麼解這個問題 (3) 如何衡量這個問題解法的績效好壞,其他technical 的證明可以不用太仔細。如果發現這篇paper的方法可以用,第一件事情就是去 github 上看有沒有已經實作好的套件可以用,如果每有的話也可以自己實作,但要評估實作難度。另外,我也會看一些 information system / quantitative marketing / econometrics 類的論文,主要是因為從領域角度出發的論文很擅長把不同的演算法組在一起,這會給我很多建立模型的想法。像是我在 CHOCOLABS 做的推薦系統,或是我目前工作做的市場情資分析系統,都是靠看一些特殊領域的論文想到的idea做出來的!
關於怎麼樣能夠順利讀懂一篇學術論文?我的建議是:當遇到一個不熟悉的主題,先去找 survey paper 來看,通常只要在 Google Scholar 上打 OOO survey 就搜得到了,建議看10年內引用次數特別高的幾篇。看完之後會對於目前這個領域的研究成果有個概念,再針對survey paper裡面提到的幾個重要的論文去搜尋就可以慢慢找到你需要的文章。另外,如果你要讀懂大研討會的論文(像是ICML, NIPS 等),你可能要先去查查這些論文前面有哪些相關議題的論文,才會比較懂一篇論文在幹嘛;如果是要讀 journal articles 我覺得可以不用特別往前查,因為通常裡面都會有比較清楚的背景介紹。另外,看不同類型與不同領域的研討會/期刊,需要懂得知識不太一樣,如果是看機器學習的,懂微積分跟線性代數大概就夠了,可能會用到一點點機率;如果是要看JMLR的,可能要比較深的數學證明底子,尤其是機率的部分;如果要看統計類的論文,數統沒學好大概是看不懂了。
過程非常艱辛與痛苦
雖然資料科學家是個很性感的職業,但就跟性感的model要維持身材一樣,資料科學家需要付出很多辛勞在學習知識上。我剛轉統計的時候最痛苦的就是線性代數不好,所以我花了一個月的時間把數學系的線代課本啃完,雖然大學有修數統但老師其實也沒有很仔細地在上,所以我也是自己花了一個月啃完。後來在工作的時候時常我要解的問題學校也沒有課程教過,所以會花很多時間自己研究,時常也會茫然手足無措,像是最近一次是我從來沒有寫過R Shiny但我只有一個禮拜的時間把專案做完,我也是硬著頭皮直接看別人的source code 查 document 做出來。
我覺得過程之所以會這麼辛苦,主要還是因為學校沒有人會教這些技能與分析方法,也沒有人告訴我在這條路上怎麼學習比較好。台灣大部分企業的資料科學團隊都剛起步而已,對於新鮮的資料科學家,沒有mentor跟老師是必然的。也因為感受到台灣資料科學教育的資源缺乏,尤其是現在市面上課程都只是教怎麼寫程式,離能夠真的在工作中實戰還太遙遠,因此我跟我的朋友目前正在開發比較高階一點的課程,希望能夠盡快發布,一起讓更多想要進入這個領域的朋友有好的資源。
最後,希望大家繼續支持大鼻觀點,如果可以的話也幫我祈禱一下博士班申請XDD 希望一月二月能有好消息告訴大家!期待跟大家邁向第二個週年紀念!
非常感謝你的分享,也祝福您可以申請到博士班,剛剛您上面有提到說您現在比較少用python ,是比較常用R嗎
因為現在很多人正在進入這個領域學習,最常的問題就是我該先學R或python 我想問下說若您對這兩個軟體的了解可以給一些剛進來的人一些建議嗎