從底層到應用,那些數據人的必備技能
前言:
謹以此文獻給對數據有熱情,想長期從事此行業的年輕人,希望對你們有所啟發,並快速調整思路和方向,讓自己的職業生涯有更好的發展。
根據數據應用的不同階段,我將從數據底層到最後應用,來談談那些數據人的必備技能。
1、大數據平台目前很火,數據源頭,各種炫酷新技術,搭建Hadoop、Hive、Spark、Kylin、Druid、Beam~,前提是你要懂Java,很多平台都是用Java開發的。
目前很多企業都把數據採集下來了,對於傳統的業務數據,用傳統的數據是完全夠用的,可是對於用戶行為和點擊行為這些數據或者很多非結構化的數據,文本、圖像和文本類的,由於數據量太大,很多公司都不知道怎麼進行存儲。
這裡面要解決的是實時、近實時和離線的大數據框架如何搭建,各數據流之間如何耦合和解耦,如何進行容災、平台穩定、可用是需要重點考慮的。
我的感覺是:最近兩三年中,這塊人才還是很稀缺的,因為大數據概念炒作的這麼厲害,很多企業都被忽悠說,我們也來開始進入大數據行業吧。進入的前提之一就是需要把數據存儲下來,特別是很多用戶行為方面的數據,對於業務的提升比較明顯的,如果你能很好的刻畫用戶,那麼對你的產品設計、市場營銷、開發市場都是有幫助的。現階段,很多公司都要做第一步:存儲更多的數據。這也是這塊人員流動性比較高的原因,都被高薪挖走了。
和傳統的SQL不同的是,針對大數據量的非結構式數據,我們所想的就是:用最廉價的成本存儲數據同時能夠達到容災、擴展性高、高性能、跨域,從目前來看,分散式已經被證明是個很好的一個方式。
另外,雲端會是個很好的方向,不是每個公司都養得起這麼多這麼貴的大數據平台開發人員和運維人員OPS,從事這個行業的我們要有很好的危機意識,及時貢獻出自己的價值,積極主動的學習新技術、否則就可能被淘汰了。
此外,花點錢把數據託管給雲服務提供商是對於創業公司或者一些傳統的企業來說是個很好的思路,這樣能夠最快速的確定數據對你的價值是什麼,而不用採購這麼多的伺服器、僱傭這麼多的運維人員和網站開發人員。
說了以上這些,主要是想給未來會從事這塊的人或者想存儲數據的公司一點方向。我自己不做這塊,體會不深,大家看看就行。
這塊工作最被吐槽的一點就是:Hive速度好慢,SQL查詢好慢,集群怎麼又掛掉了,hadoop版本升級後,怎麼數據跑出來不對了等等。
因此,在這個領域內工作,需要有強大的攻堅能力,並且還需要有快速定位和解決bug的能力,因為有很多工具都是開源的。因為是開源的,所以你們懂得,各種坑爹,甚至出現無法向下兼容的情況,所以需要強大的Java開發能力。
如果想在這塊做的很好,還需要有整個系統架構的設計能力、比較的強的抗壓能力和解決問題的能力、資源收集的能力,可以打入開源社區,這樣就可以隨時follow最新的潮流和技術。
2、數據倉庫-ETL確實做倉庫的人很辛苦,單單Oncall就會讓人望而卻步。有很多資料庫工程師,晚上睡覺的時候經常被Oncall電話吵醒,因為數據流程出問題,需要第一時間去排查,是哪個數據源出問題,並且要立即解決,否則整個數據流程都會受到影響。
如果數據流程受到了影響,你就可能會被大領導一言不合叫到辦公室說:我要的數據怎麼還沒有準備好,我的業務報表今天怎麼沒有發出來。
通過上面這個情景,我們可以知道:這是個很重要的崗位,因為數據流程很重要,決定了數據從源頭雜亂無章的狀況,通過ETL之後變成了整齊的數據,這些整齊一致性的數據可以讓你很方便地把各業務的統計結果計算出來,並且能夠統一口徑。要不然就會變成有幾個部門,就有幾種統計結果,到時候A部門說業務增長了5%,B部門說業務漲了10%,OMG,到底信誰。
至少在以下幾點上,我覺得數據倉庫人員應該要做好:
a、數據字典的完整性,用的人都希望能夠清晰的知道這個欄位的邏輯是什麼。欄位要保持很好的一致性,不要同樣一個欄位在不同表裡有不同的定義。
b、核心流程的穩定性,不要讓每天訂單主表能夠使用的時間很不穩定,有的時候很早,有的時候要中午才出來,如果不穩定就會導致使用數據的人對你很沒有信心。
c、倉庫版本迭代不要過於頻繁,要保持不同版本之間的兼容性。不要做好了倉庫1.0,很快就把原來的推倒重來,變成了2.0。在數據倉庫中需要考慮到延續性,主表的變動不要太頻繁,否則使用的人會非常痛苦,好不容易才用習慣了1.0的表結構,沒辦法這麼快進行切換。簡單地說,要能向下兼容。
d、保持各業務邏輯的統一性,不要出現同樣的業務邏輯,同一個組別的人統計出來的結果不同。原因在於共同的邏輯沒有落地成通用的東西,所以導致每個人寫法不同。這點其實需要特別注意。
針對以上,這個崗位的技能要求是:不要成為僅僅會寫SQL的人,現在工具都很發達,如果你的技能很單一的話,那麼可替代指數是非常高的,並且你自身也沒有什麼成就感。這裡並不是說會寫SQL的人很low,只是說應該多學一些技能,否則會很危險。
倉庫人員應該要常常思考,如何進行架構設計是最合理的,你要考慮是否需要欄位冗餘、行存儲還是列存儲、欄位如何擴展最有效,熱數據和冷數據如何拆分等,所以需要有架構思維。
技能上,除了SQL熟練之外,還需要知道如何寫Transform,MapReduce,因為有很多業務邏輯用SQL實現起來非常複雜,但是如果你會其他腳本語言,那麼就能給你提供便利,讓你的效率提升很多。另外好的倉庫人員需要寫Java或者Scala,通過寫UDTF或者UDAF來提升你的效率是很有必要的。
數據倉庫人員也應該常常考慮自動化和工具化方面的事情,需要很好的工具或者模塊的抽象能力,動手實現自動化的工具來提高整個組織效能。針對經常碰到的數據傾斜問題,需要很快定位問題並進行優化。
說完了數據存儲這塊,接下來是數據應用的幾個關鍵職位,在此之前,我想說數據應用的一個最關鍵的前提是:數據質量、數據質量、數據質量!!在每次闡述你的觀點、分析結論或者用演算法的時候,都需要先檢查,源頭數據正確性,否則任何結論都是偽命題。
3、數據可視化這是個很炫的工作,最好是能懂點前端,比如js。數據可視化人員需要有很好的分析思維,不能為了炫技而忽視對業務的幫助程度。因為我對這個崗位客串的不多,所以沒有特別深入的感悟,不過我覺得這個崗位需要有分析的能力,才能把可視化做好。
另外一方面來說,做數據應用的人都應該懂點數據可視化,要知道觀點表達的素材順序是:圖片>表格>文字,一個能夠用圖片來闡述的機會千萬別用文字來描述,因為這樣更易於讓別人理解。要知道,給大領導講解事情的時候,需要把大領導設想成是個「數據白痴」,這樣才能把一件事情說的比較生動。
4、數據分析師現在對數據分析的需求是很大的,因為大家都想著說:數據有了,但是能做些什麼呢?這就需要有數據分析師,對數據進行分析和挖掘,然後做數據應用。
對數據分析師吐槽最多的是:你分析出來的不就是正常的業務邏輯嗎,還需要你分析什麼?或者是你分析的結論不對,跟我們的業務邏輯不符合。特別是:ABTest的結果和當初設定的預期不相符合的時候,分析師會常常被拉過去說:分析一下,為什麼我的AB實驗結果不顯著,裡面肯定有原因的。
很多時候,寶寶的心裡苦啊,你說這個轉化率下降了,從數據上可以看出哪個細分渠道下降了,至於為什麼客戶不下單,我們得去用戶去,很多時候,數據上也體現不出來為什麼,只能告訴你現狀是什麼。
如果你一直在寫分析報告,給結論中,持續周而復始,沒有直接在業務中體現成績的時候,數據分析師們該醒醒了,你該想想這個是你要的崗位嗎?
對於數據分析師的定位:個人認為,成為優秀的數據分析師是非常難的,現在市面上也沒有多少優秀的分析師。數據分析師的技能要求,除了會數據分析、提煉結論、洞察數據背後的原因之外,還需要了解業務,懂演算法。
只有這樣,當面對一個業務問題時,數據分析師們才可以針對問題抽絲剝繭,層層遞進去解決問題,再根據定位的問題進行策略的應對,比如是先做上策略進行測試還是應用演算法進行優化,用演算法用在哪個場景上,能不能用演算法來解決問題。
一個優秀的數據分析師,是個精通業務和演算法的全能數據科學家,不是那個只會聽從業務的需求而進行拉數據、做報表、只做分析的閑雜人等。我們都說分析要給出結論,優秀分析師的結論就是一個能解決問題的一攬子策略和應對措施,同時很多需求是分析師去主動發現並通過數據來挖掘出來的。
從上述描述中,可以看到對數據分析師的要求是:會寫sql拉數據,精通業務、會數據洞察、精通演算法,主動性強,要求還是很高的。
如果你一直只是忙於應付日常分析需求,熱衷於寫華麗的報告,那麼你要記得,你很危險,因為會有一堆人在那裡質疑你存在的價值,特別是小公司。因為數據人員的薪資是個不小的支出。
大部分不落地的分析都是偽分析,有一些探索性的可行性研究可以不考慮落地,但是其他的特定業務需求的分析都需要考慮落地,然後通過實踐來反推你的作用,如此反覆,才能慢慢的給你價值的肯定,同時提升你的分析技能,也只有這樣才能證明你作為分析師、數據落地者的價值。
5、數據挖掘/演算法這塊的話,經過這三年的摸爬滾打,感觸蠻多的。體會比較深的吐槽主要有以下幾點:
一個規則搞定了,還用什麼演算法。
你的準確率怎麼這麼低?!
你的準確率可以到99%嗎?
你的推薦有價值嗎?你不推薦客人也會下那個產品的訂單的。
幫我做個大數據預測他想要什麼?
很多時候,不同的場景對準確率的要求是不同的,所以在一定合理的場景下和業務進行據理力爭是必要,不要害怕讓業務吐槽,更多的時候管理好他們的預期。
有些場景下,推薦的價值在於『長期復購率』,所以不要每次都盯著ABTest的轉化率來說事,讓客人的費力度降低也是很有前途和前景的。一個智能的產品會讓客人用起來愛不釋手,雖然在這一次的轉化中沒有明顯的差別,但是觀察長期復購率才能體現價值。特別是要區分:高頻和低頻產品。頻次比較低的產品就特別難體現出短期價值。
對於這個崗位的技能要求來說,沒有要求你一定要從零開始實現所有的演算法,現在有很多現成的演算法包進行調用。最基本的要求是,你要知道每個場景會用到哪個演算法,比如分類場景,常用的分類演算法就有LR/RF/Xgboost/ET等等,此外,你還要知道每個演算法的有效優化參數是什麼、模型效果不好的時候怎麼優化。還需要有演算法的實現能力,語言方面可以用Scala/python/R/Java等。我們常說:工具不重要,重要的是你玩工具,不是工具玩你。
另外針對有監督式學習演算法,演算法工程師最好有很好的業務sense,這樣在feature設計的時候才能更有針對性,設計的feature才有可能有很好的先驗性。
6、深度學習(NLP,CNN,語音識別)這塊我沒具體商用過,只是動手實踐過。個人感覺商業化是重點吧,特別是大家都在觀望說你的chatbot很有用啊,可是siri做了這麼久,最後反響也一般。
現在客服機器人又很火,大家又在一通吐槽說,這個上下文理解的太差了,機器人的語義識別做的怎麼這麼差。誰做誰知道,對於中文的語義識別,難度比國外的難多了,因為中文的一種否定說法有太多種變體,你不知道我們會說哪種。
另外,常常有人吐槽說,你這個CNN這麼複雜,我線上需要滿足100ms內返回,搞的這麼複雜,實時調用怎麼整,肯定來不及了,最後只能考慮offline預測了。常常說這話的人,是不會自己寫底層代碼的,很多時候我覺得:不是你沒有解決問題的辦法,而是你沒有去思考怎麼解決問題,心智決定了你的產出。
整體來說,這塊對個人的綜合素質要求是很高的。如果你只是想簡單利用現成的Model,提取中間層的特徵,然後再套用其他的機器學習模型進行預測的話,倒也能很好的解決一些現實中的公司應用,比如yelp的圖片分類。
不過,嚴格來說,這個不算是做深度學習的人,因為真正玩DL的人,是需要自己動手建模型,調參數,改symbol的,所以他們的編程能力是很強的,這點上,我一直都高山仰止。特別是一些創業公司,對於這個崗位的編程能力要求很高。如果你面試創業公司後沒有下文了那就表示:你很優秀,但是不一定適合我們公司,因為我們要找的編程能力很強的人。
這塊我不專業,所以就點到為止,不說太多。個人認為,在這塊上需要有比較強的演算法改造和優化能力,盡量的提高演算法預測的速度,同時不斷的提高演算法的外延性提高精度,目前整個行業也都是朝著好的方向在發展。如果有很多人看到這塊行業開出來的高工資,記得和招聘上的要求核對一下,自己哪塊技能需要補充。這樣你才能成為人中之鳳。
對於未來,一片光明,對於未來,甚是期待,對於未來,一切可能。
做個總結:
以上說了這麼多,嘮叨了這麼多,其實核心就是:如何用數據創造價值,如果你沒有用數據創造價值的能力,那麼就只能等著被數據淹沒,被數據拍死在職場上,早早到達職業的天花板。
體現數據價值的層面上,越往數據應用層靠攏,對數據產生價值的要求就越高,從事這塊領域的人要常常自省是否有好的商業Sense,畢竟在工業界,沒人關心你是否比傳統的baseline提高了一個百分點,他們關心的是你提高了一個百分點之後,對公司的價值是什麼。
而越往底層那塊,倒也沒有強制要求和業績綁定在一起,更多的是從流程上進行約定,對於這塊的價值體現,主要從技術層面上的創新為主,你如果解決了現存架構的問題,那麼你就可以成為一個大牛,所以多學學編程吧,別太約束自己,故步自封。
【作者簡介】潘鵬舉,攜程酒店研發部 BI 經理,負責酒店服務相關的業務建模工作,主要方向是用機器學習幫助業務創造價值。
沒看夠?更多來自攜程技術人的一手乾貨,歡迎搜索關注「攜程技術中心」微信公號哦~
推薦閱讀:
TAG:大数据 |