求職 | 想轉行數據科學,收好崗位選擇指南與技能圖譜分析!

  • 2019 年 12 月 26 日
  • 筆記

數據相關的職位一般分為三類:數據分析師、大數據工程師和演算法工程師。數據分析師需要豐富的領域知識和敏感的業務思維;大數據工程師為數據分析提供了數據基礎和分析工具,需要掌握Spark和Flink等大數據技術,對編程和邏輯思維要求較高;演算法工程師的技術要求最高,不僅要懂業務,會大數據,還要熟悉機器學習演算法,並且能夠將機器學習模型部署到生產環境。當然,因為優質演算法工程師稀缺,他們的薪資水平最高。

在大數據和人工智慧行業,有眾多與數據相關的崗位,名目繁多:數據分析師、數據產品經理、數據挖掘工程師、大數據工程師、數據開發工程師、機器學習工程師、演算法工程師、NLP演算法工程師、數據科學家等等。很多應屆生或準備轉行的朋友面對如此多的崗位名稱,都會傻傻分不清楚。本文將這些數據相關的職位分為三類:數據分析師、大數據工程師和演算法工程師,並從工作內容和技能要求來做一下分析,幫助新入行朋友選擇適合自己的崗位。這裡我暫且不談最頂級的數據科學家,這部分人均為名校博士,全世界可能只有幾千個,他們可以輕輕鬆鬆年薪百萬,是整個食物鏈的最頂層。他們不需要找工作,都是工作在找他們。

2017年 於廣西潿洲島

數據行業金字塔

數據科學金字塔 來源:hackernoon.com

上圖的數據金字塔展示了數據科學領域各崗位的大致職能。

  1. 最底層是數據收集部分,主要是原始數據的生成和收集。這部分數據來自各種IOT設備、感測器、手機APP上的用戶行為、外部數據、以及用戶生成數據(類似抖音用戶主動發布的影片)。
  2. 第二層是數據存儲部分,一般需要構建數據倉庫,生成一系列數據流,將原始數據存儲至大數據平台。
  3. 第三層是數據清洗和轉化部分,主要對數據進行清洗和預處理,將數據轉化為更高層次的數據,為上層數據分析做準備。
  4. 第四層是數據聚合部分,主要做一些基礎的數據分析和業務報表,進行一些數據挖掘,並構建機器學習的訓練數據。
  5. 第五層是機器學習部分,主要構建機器學習模型,將模型發布到生產系統,進行AB實驗。
  6. 最頂層是人工智慧部分,頂級的科學家提出新演算法或新架構。

絕大多數數據崗位的工作內容一般在第二至第五層,很多崗位的工作內容互相交叉,很難嚴格區分每個人在做具體哪些事情。無論哪個崗位,都需要衡量候選人以下技能:

  • 領域知識
  • 數學和統計學
  • 邏輯思維
  • 編程開發
  • 大數據
  • 機器學習

數據分析師

我個人認為,數據分析師、數據產品經理(增長黑客)、數據運營以及部分商業智慧分析師雖然主要工作各有側重,但數據相關的核心技能都可以歸納為數據分析。

數據分析師的入行技術門檻相對較低。這裡強調技術門檻相對較低,是指「編程開發」、「大數據」和「機器學習」等技能的門檻要求相對較低,甚至可以說,只要會用Excel,就能進行數據分析。但數據分析師的崗位對於領域知識、邏輯思維和統計學的要求並不低,尤其是領域知識和邏輯思維。數據分析師主要在研究和分析該領域的數據,且必須對該領域數據有非常深刻的理解和認識,那領域知識主要指什麼呢?以今日頭條這樣的內容推薦引擎為例,數據分析師所做的事情可能是:

  • 用戶畫像分析:哪些用戶是該APP的重度用戶?小鎮青年還是都市白領?60歲以上老人是否也會使用?哪部分用戶是需要下一步重點發展的潛在用戶?
  • 用戶行為分析:用戶在一天中的哪個時段會頻繁打開APP,是上下班通勤途中還是午飯後睡覺前?每次打開時的核心訴求是消磨時間還是獲取有價值資訊?當用戶短時間內切換了一所城市,用戶更希望在當時獲取哪些資訊?
  • 內容分析:不同類別的用戶傾向於閱讀哪些類型的文章,國家大事、炒菜養生還是娛樂星座?影片興起後,該給用戶推薦多少影片類內容?
  • 廣告分析:哪些新的功能會促進用戶點擊APP類的廣告?廣告出現的頻次應該如何控制?廣告與用戶閱讀興趣如何結合?

今日頭條內容分析報告

如果換做電商領域,則需要分析師對電商場景有獨到的理解。對於不同業務場景來說,所用到的統計學知識並不複雜的,所需要分析的內容不盡相同,但都緊緊圍繞著業務。數據分析師的領域知識包括對業務系統的熟悉程度、行業的從業經驗、對一些數據和場景的深刻的見解。新入行的數據分析師主要在分析過去發生了什麼,產生這些結果的原因是什麼;有經驗的數據分析師能夠從數據中預測未來趨勢,為管理層提供前瞻性預見。數據是基礎,從數據中發現一些潛在的因果關係、產品優化方向、未來商業機會等洞見性的想法才是數據分析的精華所在。

數據分析進階

數據分析師每天的工作是處理百萬或上億用戶的數據,並且能夠在這些數據中挖掘到一些有趣的用戶行為模式,給決策層提供前瞻性建議,頗有一種站在上帝視角俯瞰眾生的感覺,非常有趣也很有挑戰。

數據分析師在專業上沒有明確的要求,一般要求候選人有電腦、統計學、電子、通訊等背景,實際上這個崗位也接受大量其他專業轉行。只要了解業務場景,不同專業背景的人都可以快速轉行到數據分析上。數據分析師的這個崗位看似「誰都可以做」,但我個人感覺這個崗位的職能在慢慢被其他崗位所蠶食,反而對從業人員的技能要求越來越高。一方面,現在那些所謂「動動嘴皮子」的崗位已經不能再靠「忽悠」就能勝任了,必須用數據說話,一些崗位如「數據產品經理」、「數據運營」以及「商業智慧分析師」都要求相關人員在工作中進行大量的數據驅動的分析,搶佔了一部分數據分析師的工作。中小型公司為精簡成本,會盡量讓一個人去做兩個人的事情,會讓產品或運營來做輕量型數據分析的工作。另一方面,隨著數據量的爆炸增長,數據分析師所使用的工具也在發生快速變化,甚至Python都無法勝任大數據的場景,必須使用Hive等大數據分析工具,更不要提Excel這種只能處理單機數據的軟體了。

因此,本節一開始提到的:「相比業務知識,數據分析師崗位對「編程開發」等技術門檻要求相對不高」也只是一個相對概念。這並不意味著數據分析師不需要掌握編程技術。翻看某招聘APP上數據分析師的職位要求,幾個核心的技能包括:Python、SQL、數據挖掘等。這其實對沒有相關工作經驗的應屆生或轉行人士的技能要求相當高了。在無相關工作經驗的情況下,一般人很難接觸到大規模的數據量,或者可供分析的業務場景,自學了很久的Python,可能在用人單位眼裡只是一些小玩具,難以勝任真正的工作。另外,學術圈喜歡使用R語言,互聯網公司一般不使用,從R轉到Python對於非電腦專業應屆生來說也是一個不小的挑戰。

數據分析師技能圖譜

對於想為數據分析師、數據產品經理、商業智慧分析師的朋友,一個大致的學習路線圖為:Python基礎 -> 資料庫和SQL -> 數據分析和可視化 -> 業務實戰。本專欄後續會更新一些Python及數據分析的入門教程。

大數據工程師

數據分析師直接面向一線業務,大數據工程師則在為數據分析提供數據基礎、分析工具和軟體平台,構建數據分析環境。原始的數據就像麥田裡的麥子,需要經過層層工序,才能最終將其轉化餐桌上的麵包。大數據工程師打通了糧食收割、清理、制粉的整個流程,數據分析師和演算法工程師就像是大廚,將麵粉加工成麵包。

OLAP架構示意圖

一部分大數據工程師主要關注構建數據倉庫,為公司提供OLAP(Online Analytical Processing,聯機分析處理)服務:主要是在Hadoop生態上,構建大數據分析平台。包括提供HDFS、HBase、對象存儲等數據存儲服務;Hive和Spark批處理、Druid和Kylin預處理等數據分析工具;Spark Streaming、Flink等流式計算工具。這部分工程師關注基礎設施。

構建高可用數據流涉及眾多大數據中間件 來源:www.iguazio.com

還有一部分大數據工程師主要關注ETL(Extract、Tranform、Load):在收集到的基礎數據上做提取和轉化,生成更高層次的數據。這部分工程師關注業務相關的數據流。因為原始數據一般都是互相獨立的,數據與數據之間關聯性差,使用這些原始數據,幾乎很難快速生成用戶畫像、廣告收入等高層次數據分析結果,更不用提如何進行機器學習建模了。還是以今日頭條內容推薦引擎為例,整個推薦引擎要接入不同類型的異構大數據源:每個用戶在APP上的使用行為、公司購買的第三方數據(包括用戶金融能力數據等)、自媒體產生的海量圖文影片內容等等。數據工程師的工作包括:將用戶在APP內的點擊行為與點擊的內容做關聯,生成用戶興趣畫像;將用戶的APP內部數據與第三方數據關聯,生成用戶的消費能力畫像等。

大數據工程師主要對收集過來的底層數據做處理,建立一系列數據管道,將來自不同數據源的原始數據經過層層轉化,生成對數據分析和演算法建模更有價值的中間數據,一般稱這個流程為數據流。小公司限於人力有限,數據流的響應時間有可能是天級或小時級;大公司對數據流的響應要求極高,有可能是分鐘級、秒級甚至亞秒級。很多朋友都發現,在某個平台剛剛搜索過某一個內容,下一分鐘就能收到相似內容的推薦了,因為大數據工程師提供了這種秒級數據管道。

大數據工程師技能圖譜

相比數據分析師,大數據工程師對從業人員的「編程開發」和「大數據」大數據要求比較高,而且數據量越大的公司,對技能要求越高。公司一般要求工程師在Java和Scala語言上,基於Hadoop生態系統,構建實時或批量的數據流。但公司與公司的差異很大,整個技術棧和工作內容與公司架構高度相關。某招聘APP上對大數據開發工程師的技能要求:Java、Scala、Linux、Hadoop、Kafka、Spark、Flink等。面試時一般會重點考察候選人對Google大數據三大論文的理解,即MapReduce、GFS和BigTable,分別對應了開源的Hadoop MapReduce、HDFS和HBase,這三篇論文也被稱為驅動大數據的三駕馬車。非資訊學類專業背景的朋友,未經系統培訓,很難轉行到這個領域。在校學生應該積极參与校園項目或進入公司實習,以獲取大數據開發的實戰經驗。

演算法工程師

人工智慧時代最火爆的概念當屬機器學習了,機器學習工程師也被推上了風口,曾出現畢業後起薪三五十萬,各大公司爭相追捧的盛況。機器學習工程師又被稱為演算法工程師,主要職責是針對業務場景,建立機器學習模型,並將模型部署到生產系統,為公司贏得利潤。演算法工程師也是一個業務相關的崗位,一個合格的演算法工程師必須要熟悉業務,明確工作所要優化的目標,才能有的放矢。不同的業務場景所使用的機器學習模型一般不同,常見的方向有推薦演算法、自然語言處理、電腦視覺等。

演算法工程師也需要在大數據工程師提供的數據基礎上做進一步的數據開發,以構建自己的機器學習數據流。限於公司規模和技術架構,不同公司的演算法工程師所做的具體工作可能也有很大差異,但演算法工程師的核心工作有兩點:

  1. 構建機器學習模型
  2. 將機器學習模型發布到生產系統

機器學習典型流程 來源:towardsdatascience.com

很多朋友看到網上的機器學習例子中,只需要調用一下model.fit()函數就能訓練一個模型,認為機器學習非常簡單。實際上,一個機器學習流程很長,包括:模型選擇、數據預處理、特徵工程、樣本生成、模型調優以及模型上線。整個工作對工程師的各項技能要求也非常高。

對於模型訓練和線上發布,各公司差異也比較大。對於數據量較小的場景,可以直接用「Python + Shell + SQL」的方式構建機器學習數據流,使用scikit-learn或TensorFlow這樣的框架。對於數據量大的場景,還是必須依賴大數據處理框架Spark或Flink,並使用分散式訓練工具。大公司一般為適配自己的數據量和業務場景,都會有一套自己的模型訓練和上線工具,並配有專人來開發和維護這套機器學習框架。因此,在一個大公司里,可能有一部分人負責模型訓練,主要是模型調參和特徵工程;一部分人負責模型上線,主要保障模型能夠提供穩定的在線服務;一部分人負責機器學習框架開發;機器學習並不是萬能的,所以還需要一部分人使用人工策略來解決機器演算法無法解決的那部分問題。聽起來好像所有人的職責都帶機器學習幾個字,實際做的事情區別很大,所側重各有不同。

限於人力條件,有些公司的演算法工程師需要做類似於大數據工程師的的ETL工作,從原始數據開始生成機器學習訓練所需數據,同時要兼任數據分析師,自己分析數據。演算法工程師名字聽起來高大上,實際上絕大多數時間在做臟活累活。

典型推薦演算法

演算法工程師最核心技能還是機器學習和統計學,這關乎機器學習模型能夠在何種程度上優化目標、帶來多大的效果提升。例如一個推薦演算法工程師有可能在面試中被問到的機器學習知識包括但不限於:

  • GBDT的原理
  • 如何進行特徵選擇
  • 如何評估模型效果
  • softmax函數的定義
  • 如何將embedding應用到推薦系統中

綜上,演算法工程師直接面向業務,因此需要有豐富的領域知識,同時需要強大的統計學和機器學習基礎,因為演算法工程師要生成訓練數據,因此要掌握必要的大數據分析和處理工具。負責模型上線的工程師還要有很強的編程開發能力。可見,演算法工程師對各項技能的要求非常高。

演算法工程師技能圖譜

總結

數據相關的職位分為三類:數據分析師、大數據工程師和演算法工程師。數據分析師需要豐富的領域知識和敏感的業務思維;大數據工程師為數據分析提供了數據基礎和分析工具,需要掌握Spark和Flink等大數據技術,對編程和邏輯思維要求較高;演算法工程師的技術要求最高,不僅要懂業務,會大數據,還要熟悉機器學習演算法,並且能夠將機器學習模型部署到生產環境。當然,因為優質演算法工程師稀缺,他們的薪資水平最高。