論一枚資料科學家的自我修養

AI科技大本營發表於2017-11-21

作者 | 林薈

責編 | 何永燦


在回答這個問題之前,希望你先想想另外一個問題:為什麼要成為資料科學家?當然,如果你是為了10萬美元的年薪也無可厚非,但是我衷心希望你能將這個職業和自己的價值感掛鉤。因為成為資料科學家的路途會很辛苦,但如果你將其看成是實現個人價值的一種方式,那麼追尋目標才能帶來長久的成就感,在這個過程中會感到快樂並且動力十足。


資料科學家技能包

要回答“如何成為……”這樣的問題,首先當然需要知道想要成為的物件是個什麼樣子。圖1是一個資料科學家的技能表。

論一枚資料科學家的自我修養

圖1 資料科學家的技能

首先程式設計能力是資料科學家需要的基本技能。資料讀取、整合、建模分析和視覺化的整個環節都需要用到這些工具。在業界環境中,整個資料鏈大概分為5塊:

  • 雲端資料儲存系統。比如亞馬遜的雲服務AWS,大資料可以用分散式儲存在S3中。AWS更像是一個生態系統,裡面有資料庫,也可以在上面執行一些程式碼,比如實時從社交網站上爬取資料儲存在雲端資料庫中。最近亞馬遜還在雲端提供了一個類似於SQL客戶端的工具,叫做Athena,方便你直接在AWS內寫SQL程式碼從S3中讀取資料。

  • 安全門。讀寫資料都需要經過這道安全門,這個部分主要是由公司的IT部門建立。安全門有3種限制訪問許可權的方式:

    • IP地址:只接受從特定IP地址的訪問

    • 職能:比如只有頭銜是資料科學家和資料工程師的人有許可權

    • 使用者名稱密碼: 公司常常會同時使用上面3種方法,也就是有特定職能,從特定IP地址,通過使用者名稱和密碼訪問。資料工程師會訓練資料科學家穿越這重重安全門。這裡對資料科學家的計算機要求並不高,只需要知道一些基本的Linux就可以,苦活累活都讓工程師們包攬了。

  • SQL客戶端。資料科學家需要通過SQL從資料庫中讀取相應資料。根據資料庫的不同,使用SQL的型別和語法也略有不同,但大體上非常相似。掌握基本的資料庫讀取操作是非常必要的。

  • 資料分析。現在使用最廣的資料分析語言是R和Python,熟練使用至少其中一門語言幾乎成為資料科學家的標配。只會SAS行不?不行。當然,這些都只是工具,工具是解決問題的手段,而非目的。你必須要有一個能用來進行資料分析的工具,偏好因人而異,但選擇工具的時候最好考慮工具的靈活和可擴充套件性。比如說,新的方法是不是能夠用該工具實現?該工具是不是能夠和其他工具結合實現新功能(可重複報告、互動視覺化,將結果轉化成資料科學產品App等)?該工具是不是容易整合到應用系統中大規模的使用(比如電商的推薦演算法、搜尋的廣告優化、精準農業中的化肥量推薦等)?

  • 結果報告。這裡會用到基於D3.js的互動視覺化,Rmarkdown自動化報告以及Shiny應用。

圖2是資料流程構架圖。

論一枚資料科學家的自我修養

圖2 資料流程構架

另外一個重要的技能是分析建模。這個模組可以進一步細分成下面幾個:

  • 資料科學家應該具備基本的概率統計知識,能夠熟練進行t檢驗,開方檢驗,擬合優度檢驗,方差分析。能夠清楚地解釋Spearman秩相關和Pearson相關之間的區別。熟悉抽樣、概率分佈、實驗設計相關概念。

  • 瞭解貝葉斯統計(很快就能在白板上寫下貝葉斯定理)。不是所有的應用資料科學領域都需要用到貝葉斯,即使你所處的行業用得很少,瞭解貝葉斯的基本概念也是很有必要的。使用“貝葉斯”這個詞的方式有很多。但其主要代表了一種解釋概率的特別方式。用流行的術語表達,貝葉斯推斷不外乎計算在某假設下事情可能發生的方式的數目。事情發生方式多的假設成立的可能性更高。一旦我們定義了假設,貝葉斯推斷強制施行一種通過已經觀測到的資訊進行純邏輯的推理過程。頻率法要求所有概率的定義都需要和可計數的事件以及它們在大樣本中出現的頻率聯絡起來。這使得頻率學的不確定性依賴於想象的資料抽樣的前提之上——如果我們多次重複測量,將會收集到一系列呈現某種模式的取值。這也意味著引數和模型不可能有概率分佈,只有測量才有概率分佈。這些測量的分佈稱為抽樣分佈。這些所謂的抽樣只是假設,在很多情況下,這個假設很不合理。而貝葉斯方法將“隨機性”視為資訊的特質,這更符合我們感知的世界運轉模式。所以,在很多應用場景中,貝葉斯也更加合適。

  • 機器學習相關技能。知道什麼是有監督學習,什麼是無監督學習。知道重要的聚類、判別和迴歸方法。知道基於罰函式的模型,關聯法則分析。常用的黑箱模型:隨機森林、自適性助推、神經網路模型。如果從事心理相關的應用的話(如消費者認知調查),還需要知道基本的潛變數模型,如探索性因子分析、驗證性因子分析、結構方程模型。在應用過程中還需要加強對模型中誤差的來源分類的理解,知道相應誤差的應對方法。當前存在的機器模型太多,理解模型誤差可以幫助你有效地通過嘗試少量模型找到足夠好的那個。

除了技術能力以外,還需要其他一些非技術的能力。這些包括將實際問題轉化成資料問題的能力,這一過程需要交流,也就要求良好的交流溝通能力。關注細節,分析是一個需要細心和耐心的職業。還有就是展示結果的能力,如何讓沒有分析背景的客戶理解模型的結果,並且最終在實踐中應用模型的結論。

這個單子還可以一直列下去。看起來是不是不只一點嚇人?其實這個技能單是動態的,你一開始不必具有上面列出的所有技能,但在工作過程中,需要不斷的學習成長。一個優秀的資料科學家不是通過資料找到標準答案的人,而是那個接受和適應這個充滿不確定性的世界,給出有用方案的人。一個成熟的資料科學家面對分析專案時會看到多種可能性和多種分析方法,給出結果後依舊時刻關注這個結果,不停地保持小幅度頻繁更新。再次強調自學能力和成為一個終生學習者是優秀的資料科學家的必要條件。


如何獲取相關技能

現在你對資料科學家需要具備的技能應該有個大致的概念了。接下來的問題是如何獲取這些技能。這個問題的答案部分取決於你的專業背景。當前資料科學家的背景其實很雜,這裡主要著眼於數學、統計、計算機或其它定量分析學科(電子工程、運籌學等)本科以上學歷的情況。數學統計背景的學生,需要加強計算機方面能力的培養。而計算機背景的學生需要更多的瞭解統計理論。如果是其他定量分析學科,可能需要同時加強這兩者。

其他專業的學生成為資料科學家有兩種情況:

  • 從事和自己專業相關行業公司的資料分析。比如在一些精準農業應用的公司,會常常看到資料科學家是生態學博士,或者土壤學博士。其實這些人不能算是廣義上的資料科學家。因為他們處理的問題侷限於非常特定的領域,對生態和土壤的瞭解的要求高於對資料分析的要求。

  • 雖然是其他專業,但是本身有著很強的計算機技能,比如物理學專業的學生會成為資料科學家或者量化交易員,這因為他們通常具有很好的程式設計能力。

關於資料科學家的學位背景,根據2017年的統計資料,美國的資料科學家41%有博士學位,49%有碩士學位,只有10%是本科。研究生博士期間的課題最好偏向機器學習、資料探勘或預測模型。其次需要的是資料庫操作技能。在工作中通常需要用SQL從資料庫讀取資料。對於統計或者數學專業的學生,在校期間可能不需要使用SQL,因此不太熟悉。這沒有關係,我也是工作以後才開始使用SQL的。但你要確保自己至少精通一種程式語言,之後遇到需要用到的新語言可以迅速學習。現在有大量的MOOC課程,以及一些線上的資料科學視訊,都是提升自己的很好方法。

有的人問我怎麼選擇學習課程。通常情況下我會看講課的老師,如果是想要徹底清晰地瞭解某種技術,那就去搜下寫這個領域相關書籍的人,如果他們有開課,可以選這些課;或者那些在資料科學行業名字如雷貫耳的,比如吳恩達這樣的。選這樣的人講的課,才能聽得明白,因為這些人對相關的專業知識足夠了解。


常見誤區

在資料科學的應用中有哪些常見誤區?

  • 會用函式跑模型就可以了。

會開車的只是司機,要當汽車工程師,僅靠會開車是不行的。這點放在資料科學領域也是一樣。不需要你背下模型背後的所有數學公式,但是至少需要學過一遍,讓你可以翻著書解釋模型機理。

  • 模型精確度越高越好。

在實際應用中需要同時考慮收益和成本。如果模型精確度是90%,但是提高到95%需要複雜得多的模型,因此需要大量的計算裝置投入,同時帶來的邊際收益很小的話,滿足於精確度小的模型就好了。模型選擇和評估可能是資料分析流程中最難的環節。

  • 技術過硬就是尚方寶劍。

接受這個現實,人常常是不理性的,我們的行為和對周遭的態度受感情的影響。你永遠看不到一隻單純的狗,你看到的是一隻可愛或者不可愛的狗,我們總是會對所有的事情加上自己的主觀判斷。當然,你公司的同事,領導看待你的方式也受到主觀的影響。很遺憾,這個主觀的感受通常更多的來自於你作為人的部分,而不是機器的部分。你覺得自己技術好是一件事情,領導覺得你技術好是另一件事情,領導覺得你的技術是有用的那又是新的一件事情了。這點,美國中國貌似沒差。所以“做技術”不等於“情商低點沒關係”。

  • 技術不斷更新,讓人難以招架。不明覺厲,被泡沫裹挾著失去方向。

我理解,這種感覺很不好受。有的時候我感覺自己永遠都是菜鳥,但現在我才明白,這才是當前世界的真實狀況。不斷升級將會是一種常態,這不僅僅是資料科學,你必須這麼做,因為所有的東西都在升級,就像軍備競賽一樣,升級已經成為事物本身的存在方式。無論你使用一樣工具的時間有多長,升級後你又會變成一個菜鳥。所以做菜鳥是可以的,但是不明覺厲,隨意跟風是不允許的。面對不懂的技術,要麼就說不懂,要麼就去學。其實你真正鼓起勇氣,開始認真去學習這麼技術的時候,會發現其實沒有那麼神祕。當然,馬上又會有新的神祕的東西出現,這個過程又會重複。但你就是在這樣迴圈反覆中成長的,產品是這樣,人也是這樣。


資料科學領域現狀

我們從資料上看看資料科學的現狀吧。從最大的職業社交網站領英(LinkedIn)的資料看來,資料科學家職位的年薪在7.5萬~ 17萬美元之間,中位數是11.3萬美元。 

其中僱傭資料科學家的公司主要集中在微軟、IBM、Fackbook、亞馬遜、Google這些計算機網際網路公司,圖3為前10名僱傭資料科學家最多的公司。

論一枚資料科學家的自我修養

圖3 前10名僱傭資料科學家最多的公司

資料科學家所處的行業也集中在科技或者研究性組織,圖4是排名前10的行業。

論一枚資料科學家的自我修養

圖4 前10名資料科學家集中的行業

不同公司的資料科學團隊架構不一樣。主要有如下2種:

  • 獨立式。獨立的資料科學部門,會有一個資料科學總監這樣的領導角色領導。這通常在研究所或者公司科研型的部門。對於資料科學家而言,在這樣部門的優點是能夠和很多其他資料科學家有技術上的交流,也有明確的職業軌道。缺點是,很難脫穎而出,需要和很多其他科學家競爭一些資源(比如培訓會議的機會)。

  • 嵌入式。資料科學家各自嵌入到不同的職能部門中。常見的是市場部的資料科學家。領導者就是傳統的市場總監。在這樣的團隊優勢在於直接和公司高層接觸,影響商業決策。因為獨特很容易脫穎而出獲取很多行業內培訓和會議的機會,而且市場部是核心部門,如果你想在這個公司發展,這是很好的地方。缺點就是,無法和其他資料科學家交流,很多東西需要自己決策,周圍人只能選擇相信或者不相信你,但不能給出特別的幫助。久了會有在專業上落後的危險,所以需要充分利用在市場部的培訓會議資源,積極參與資料科學家社群。最大的缺點是沒有清晰的職業軌跡,因為在市場內部的分析團隊不會太大。如果你的職業目標是最後管理一個大團隊或者職能的話,這可能不能滿足你的目標。但其職位本身從初級到高階的跨度可以很大。

資料科學家這個職位還比較新,所以從團隊建設和職業軌跡上都還在發展,具有很好的前景。希望你能成為一個不斷思考,終生學習的資料科學家!

附錄:R程式碼

下面是文章中兩幅圖的R程式碼,感興趣的讀可以執行下面的程式碼:

dat<-read.delim("https://raw.githubusercontent.com/happyrabbit/DataScientistR/master/Data/DS.txt")


library(ggplot2)

library(dplyr)


# 前10的公司


df <- dat%>%

select(Companies, ComCt)


colnames(df) <- c("Company", "Counts")

df$Company <- factor(df$Company, levels = df$Company)

ggplot(df, aes(x=Company, y = Counts, fill=Company))+

geom_bar(stat="identity")+theme_minimal() +

coord_flip()+ theme(legend.position="none")


# 前10的行業


df <- dat%>%

select(Industries, ComCt)


colnames(df) <- c("Industry", "Counts")

df$Industry <- factor(df$Industry, levels = df$Industry)

ggplot(df, aes(x=Industry, y = Counts, fill=Industry))+

geom_bar(stat="identity")+theme_minimal() +

coord_flip() + theme(legend.position="none")


作者簡介:林薈,美國杜邦公司商業資料科學家,美國愛荷華州立大學博士。《套路!機器學習:北美資料科學家的私房課》作者。2017年1月至今主持美國統計協會市場營銷線上資料科學講座。個人網站:http://linhui.org/。

責編:何永燦

本文為《程式設計師》原創文章,未經允許不得轉載。


相關文章