算法工程師的落地能力具體指的是什么?
點擊上方“程序員大白”,選擇“星標(biāo)”公眾號
重磅干貨,第一時間送達(dá)
轉(zhuǎn)載自 | 夕小瑤的賣萌屋
文 | 桔了個仔@知乎
大家好,這里是桔了個仔,目前是一名Data Scientist(不太想翻譯成數(shù)據(jù)科學(xué)家,畢竟感覺自己就是個工程師),過去幾年在做基于機(jī)器學(xué)習(xí)的風(fēng)控與合規(guī)系統(tǒng),參與了一些算是成功的項目,和團(tuán)隊一起,成功在幾個跨國銀行那里落地了我們開發(fā)的系統(tǒng)。
根據(jù)我的經(jīng)歷以及對身邊同事的觀察,我個人會把落地工程師的「落地能力」分為三個維度:
1.技術(shù)層面
很多人以為算法工程師日常工作就是調(diào)下參,改個算法再跑跑,直到神經(jīng)網(wǎng)絡(luò)輸出符合預(yù)期。在入行前,他們以為算法工程師的日常是這樣的:

事實上,算法工程師可能涉及的技術(shù)范圍是很廣的。很可能是這樣的[1]:

中間那個小小的幾乎都快看不見的黑塊,你放大圖片,會發(fā)現(xiàn)里面寫著ML Code,這就是「算法」的部分。當(dāng)然,別被這個圖嚇到,這不一定全是你的工作,這里是一個團(tuán)隊的任務(wù),這個團(tuán)隊可能是兩人的團(tuán)隊,也可能是幾十人的團(tuán)隊,但可以肯定的是,無論你在哪個公司,一個算法工程師都不太可能只做純「算法」,不要忘了「工程師」三個字。對于要做產(chǎn)品落地的工程師,搞算法的時間很可能不到10%,其他技術(shù)部分可能占據(jù)你40%。要增強(qiáng)自己落地能力中的技術(shù)水平,除了算法要基礎(chǔ)打好,你還需要:
學(xué)會數(shù)據(jù)獲取。原始數(shù)據(jù)需要經(jīng)過ETL才能被算法利用。ETL(Extract, Transform, Load)是將業(yè)務(wù)系統(tǒng)的數(shù)據(jù)經(jīng)過抽取、清洗轉(zhuǎn)換之后加載到數(shù)據(jù)倉庫的過程,目的是將企業(yè)中的分散、零亂、標(biāo)準(zhǔn)不統(tǒng)一的數(shù)據(jù)整合到一起,為企業(yè)的決策提供分析依據(jù)。也許你們公司有專職的數(shù)據(jù)工程師來做ETL,但你如果能稍微參與到ETL的過程中,不僅讓你在大數(shù)據(jù)技術(shù)方面得到提升,而且對你理解上游業(yè)務(wù)非常有幫助。ETL工具的典型代表有:Informatica、Datastage、OWB、微軟DTS等。
構(gòu)建特征。如果沒有機(jī)會參加到ETL里,也沒關(guān)系,我也沒,畢竟客戶不想給讓我們接觸原始數(shù)據(jù)。這時候,你也可以處理ETL之后的數(shù)據(jù),從中構(gòu)建特征。其實特征構(gòu)建的過程能幫助你理解業(yè)務(wù),例如給銀行預(yù)測信用卡逾期風(fēng)險,你了解到,債務(wù)負(fù)擔(dān)率和用戶風(fēng)險有著一定關(guān)聯(lián),于是你會考慮把用戶所有信用卡的欠款加起來除以這個用戶的收入,得到一個新的特征。關(guān)于相關(guān)技術(shù),我知道很多人肯定馬上想到pandas,但老實講句,我做了幾年數(shù)據(jù)工作,能用到pandas的機(jī)會真的不多。產(chǎn)品都要落地了,幾百萬條的數(shù)據(jù)馬上進(jìn)來了,還在玩pandas?spark, hadoop, flink等分布式計算平臺趕緊給我研究起來。
可視化數(shù)據(jù)。我相信問出來這個問題的人都知道哪些python庫可以做可視化,例如matplot, seaborn等等。當(dāng)然,除了python庫,excel里的可視化也要做好,這與算法無關(guān),但在你做匯報時能幫助你把一個結(jié)果解釋清楚。
會用服務(wù)器。一般數(shù)據(jù)產(chǎn)品部署,得上云或者私有服務(wù)器吧,那么如果你還不熟悉linux,那就趕緊練練吧。你把系統(tǒng)部署到服務(wù)器時,是不太可能用鼠標(biāo)拖拽個exe就完事的。如果你還能熟練使用aws等云服務(wù),那就更好了。
至于UI層面,例如構(gòu)建網(wǎng)頁等等,開發(fā)app這種,這就不再推薦算法工程師學(xué)了,畢竟人的精力有限。
前面技術(shù)部分花了10%+40%的工作時間,然后其他50%的時間呢?用來和客戶或者產(chǎn)品經(jīng)理溝通,然后理解業(yè)務(wù),做ppt,匯報結(jié)果。雜事很多,很難接受吧?沒錯,我剛?cè)胄袝r也是覺得自己一身技術(shù)無處施展,后來我上司一句話啟發(fā)了我:
技術(shù)是邏輯的藝術(shù),業(yè)務(wù)也是,所以只搞技術(shù)不管業(yè)務(wù)的,不能算是邏輯能力出眾的。
你現(xiàn)在應(yīng)該有疑問了,那怎么才算「懂業(yè)務(wù)」?嘿嘿,馬上道來。
2.業(yè)務(wù)層面
其實關(guān)于「懂業(yè)務(wù)」,可以分為宏觀業(yè)務(wù)和微觀業(yè)務(wù)兩部分。
宏觀業(yè)務(wù)指的是行業(yè)的「共性」。例如:
你的產(chǎn)品所服務(wù)的對象所在的行業(yè)都有什么「痛點」。sorry,句子有點長,而且說法也有點「老土」,但了解客戶痛點永遠(yuǎn)都是必須的。例如我做金融風(fēng)控,客戶的痛點是「舊的專家系統(tǒng)規(guī)則更新慢」,而我們提供「基于機(jī)器學(xué)習(xí)的方案」,數(shù)據(jù)來了就自動更新規(guī)則,就能解決他們痛點。
他們這項業(yè)務(wù)目前的工作流程如何。例如我做反洗錢,那么我得了解洗錢的三個步驟,反洗錢的警報產(chǎn)生,警報調(diào)查等等。這些流程在不同客戶之間都是一樣的,我了解清楚了這些,我才能知道,我的產(chǎn)品是在哪個環(huán)節(jié)發(fā)揮價值。如果你做的項目是對內(nèi)的,例如為自己公司電商搞推薦算法,那你必須清楚用戶在你們APP上的路徑,例如首頁到搜索頁再到詳情頁。以及在每條路徑上,怎么做推薦商品,例如有的商品是推薦搭配,有的商品是推薦近似替代品。
微觀業(yè)務(wù)是指不同部門/公司在實踐上的不同。微觀業(yè)務(wù)是最容易被人忽視的而且也是最辛苦的,因為大家都有不同的「知識沉淀」方式,學(xué)習(xí)起來并沒有那么立竿見影。但我發(fā)現(xiàn)有趣的一點是,當(dāng)你接觸微觀的業(yè)務(wù)多了,你還是能從中提取「共性」。例如某個算法工程師,之前在銀行做風(fēng)控,在銀行獲取數(shù)據(jù)流程會比較長,每個步驟要做的事情不能跳過;現(xiàn)在去某互聯(lián)網(wǎng)金融公司做風(fēng)控,可能獲取數(shù)據(jù)流程變得很短,但是你會發(fā)現(xiàn)共性是,大家都有準(zhǔn)入審查、逾期催收等環(huán)節(jié),用到的技術(shù)可能也是相近的。
現(xiàn)在你已經(jīng)掌握了各種技術(shù),準(zhǔn)備大干一場,準(zhǔn)備拿最強(qiáng)的深度學(xué)習(xí)模型,給客戶設(shè)計一款準(zhǔn)確率非常高的產(chǎn)品。現(xiàn)在你開始學(xué)習(xí)相關(guān)業(yè)務(wù),我建議你帶著問題學(xué)習(xí)。不過,你什么都不懂時,你應(yīng)該問自己的第一個問題是什么?沒錯,那就是:
這個系統(tǒng)的真實需求是什么?
這個問題很重要。有個故事是這樣的:
某大型日化公司引入了一條國外肥皂生產(chǎn)線,這條生產(chǎn)線將肥皂從原材料加入直到包裝箱自動完成。不過產(chǎn)品線有瑕疵,個別肥皂盒是空的,這家公司聯(lián)系廠商后被告知這是設(shè)計上的缺陷,無法避免。于是老板要求工程師們解決這個問題,以數(shù)名博士為核心形成一個技術(shù)攻關(guān)團(tuán)隊,耗費大筆資金之后,終于宣告解決。解決的辦法是在生產(chǎn)線上安裝一套 X 光機(jī)進(jìn)行掃描識別。在另一家私人企業(yè),老板讓新來的小工解決問題,小工所用的辦法是,找來一臺電風(fēng)扇放在生產(chǎn)線旁邊.
不知道這是真實故事還是段子,不過我們可以知道的是,如果你只顧著解決自己拿到的問題,而不想問題背后的真實需求是什么,埋頭苦干,用復(fù)雜的方法來解決個很簡單的事,那么會弄出大炮打蚊子的笑話。
第二個該問自己的問題是:
有什么制約因素?
對于機(jī)器學(xué)習(xí)系統(tǒng),落地時的制約因素主要包括(但不限于):
開發(fā)時間。即使項目剛開始,你還不知道要花多久,你也得計劃開發(fā)時間出來,你計劃不出來,領(lǐng)導(dǎo)也會給你設(shè)定期限。畢竟做產(chǎn)品不同于做研究,做產(chǎn)品大家都喜歡確定的投入和可預(yù)估的匯報。 計算資源。因為機(jī)器學(xué)習(xí)系統(tǒng)使用是需要成本的,你得知道用戶能承受怎么樣的成本或者自己服務(wù)器能承受怎樣的成本。 算法性能。算法落地不同于打kaggle比賽,并沒有時間能把性能壓榨到極致。只要比預(yù)期好些,基本就「先用著再說」了 
要在這三個限制因素里面取得微妙的平衡,才能使得產(chǎn)品落地。我剛做數(shù)據(jù)科學(xué)工作時,總喜歡搞算法調(diào)優(yōu)來炫技,但其實壓榨算法的邊際收益很低,你用一個月把算法準(zhǔn)確率從70%提升到80%,可能還不如提前一個月把系統(tǒng)上線使用起來的收益高。
第三個該問自己的問題是:
算法、性能評估和業(yè)務(wù)是否吻合?
還是拿我自己的經(jīng)歷做例子。
我工作中面對的數(shù)據(jù),是非常的不平衡的,我們做二元分類,100條數(shù)據(jù)里,標(biāo)簽為1的只有2~3條,其他97~98條數(shù)據(jù)標(biāo)簽都是0。這個時候顯然需要選擇一些合理的評估方法,首先就排除了用準(zhǔn)確率(Accuracy)作為評判標(biāo)準(zhǔn)了,F(xiàn)1-score, AUC都可以備選。原因?可以看我在另一個問題的舉的例子。《如何評價德國訓(xùn)練探雷犬和尋尸犬識別新冠患者,稱準(zhǔn)確率達(dá)94%?嗅探犬接觸患者后會成為病毒傳播介質(zhì)嗎?》[2]
然后是模型選擇。銀行的業(yè)務(wù)需要強(qiáng)解釋性,所以又否決了所有黑箱模型。剩下的就在tree-based model、logistic regression還有線性kernel的svm之間選擇了。
上線之后要評價模型對正負(fù)樣本區(qū)分度,于是又要引入KS值。隨著時間遷移,數(shù)據(jù)分布可能會變化,又要引入PSI值來監(jiān)控數(shù)據(jù)偏移程度來決定是否重新訓(xùn)練模型。你看,模型和評價指標(biāo),都是和業(yè)務(wù)息息相關(guān)的。
如果你看到這里還是感覺到迷茫,不知道怎么補(bǔ)足相關(guān)業(yè)務(wù)知識,例如產(chǎn)品和運營的知識,可以看我之前寫的一個回答,這里就不重復(fù)敘述了。《算法工程師如何補(bǔ)足產(chǎn)品和運營知識?》 [3]
那怎么檢驗自己真的「懂業(yè)務(wù)」了呢?你可以檢查下自己能不能做到下面這些點:
檢查下自己是否能快速復(fù)現(xiàn)方案? 如果能快速復(fù)現(xiàn)方案,是否能估算每個階段大致需要多少人多少時間? 面對不同的數(shù)據(jù)量,能否估算一個大概的服務(wù)器性能需求?
3.軟實力層面
懂技術(shù)了,又懂業(yè)務(wù)了,是不是感覺還不夠差點什么能力去推動產(chǎn)品落地?這個是拋開技術(shù)和業(yè)務(wù)之外的東西,要描述成一個具體的能力,真的很難,我會把這些能力都?xì)w結(jié)于「軟實力」。我認(rèn)為主要是表現(xiàn)在溝通,思維這兩方面。情商、親和力、共情能力、有眼光,這些算不算軟實力?當(dāng)然算,但你有沒有發(fā)現(xiàn),這些軟實力都是基于溝通和思維的。
溝通和思維等軟實力包括(但不限于):
和客戶溝通的能力。聽你講的客戶并不一定是算法工程師或者數(shù)據(jù)科學(xué)家,你是否能把自己的方案原理講清楚?設(shè)計到技術(shù)的概念,是否能讓非技術(shù)的聽眾也能大致理解? 思考能力。例如結(jié)構(gòu)化思維和批判性思維。其實有一定套路,只要多加練習(xí)就能掌握。推薦書籍有《金字塔原理》、《批判性思維工具》等。 推動團(tuán)隊的能力。和個人魅力息息相關(guān)。
這里說個真實故事,和算法無關(guān),和軟實力有關(guān)。我大舅是開工廠的,產(chǎn)品良品率之前一直上不去。我二舅退休后就去我大舅廠里做質(zhì)量監(jiān)督。我二舅就中學(xué)學(xué)歷,普通話也不標(biāo)準(zhǔn),但我二舅進(jìn)廠后,產(chǎn)品良品率上去了,工廠也扭虧為盈了。我問他怎么做到的,他說,很簡單啊,對于那些手工不精湛的小伙子,我就親自做一遍給他看,并告訴他,我一個退休老頭都能按質(zhì)做好,為啥你不行?就這么耐心的一個個溝通,一個個教學(xué),盯著他們直到確認(rèn)他們能做好為止。看起來這很簡單是吧,但這過程需要耐心溝通,需要系統(tǒng)性思維找到關(guān)鍵因素。這就是軟實力的表現(xiàn)之一。
如果你觀察銷售團(tuán)隊的日常,你會發(fā)現(xiàn),他們做的事情看起來簡單,大部分時間就是給客戶發(fā)發(fā)郵件,和客戶開開會,都是動嘴皮子的事情,但是如果讓你去做這些,你會發(fā)現(xiàn)你會缺少自己貌似很難推進(jìn),你會問自己,自己嘴皮子咋就不那么好呢?軟實力就像肌肉,運用軟實力的過程就像搬磚,把磚頭從A點搬到B點看著很容易,但搬起來才發(fā)現(xiàn)自己肌肉還不夠強(qiáng)大。
而鍛煉軟實力的方法?無它,只有干多了,軟實力才能上去。具體的說,對于算法工程師而言,就是不要逃避那些繁瑣的看似沒收獲的事情。例如在我為某客戶落地風(fēng)控系統(tǒng)的過程中,我們需要和他們的項目經(jīng)理保持聯(lián)系,有問題也要給他們的數(shù)據(jù)團(tuán)隊反饋。其實這過程還挺難搞,因為他們作為一個跨國大公司,顯然數(shù)據(jù)中心是需要同時對接很多vendor的,所以當(dāng)和他們合作時,需要經(jīng)常主動推進(jìn)項目進(jìn)度,不然他們的項目經(jīng)理會問責(zé)我們。例如我們有個pipeline每天固定時間要跑,他們作為上游,需要在運行時間前把數(shù)據(jù)給到我們。當(dāng)時間到了,數(shù)據(jù)還沒給到我們,我們要做的第一個事,就立馬需要給數(shù)據(jù)團(tuán)隊發(fā)送郵件,抄送項目經(jīng)理,分清責(zé)任;然后積極跟進(jìn)回復(fù),搞清楚原因,和數(shù)據(jù)團(tuán)隊商量個預(yù)計解決時間,并且在這個時間點來臨前就問問進(jìn)度,以預(yù)留足夠時間來應(yīng)變。在這些看似繁瑣的溝通過程中,我掌握了推進(jìn)工作的方法,養(yǎng)成了積極推動工作進(jìn)展,并在deadline來臨前檢查進(jìn)度以預(yù)留時間應(yīng)變的好習(xí)慣。
總結(jié)
算法工程師的「落地能力」包括技術(shù)能力,業(yè)務(wù)理解,還有軟實力。但對自己要求不要太苛刻,就好像你玩游戲時很少能用到每個維度的能力都滿分的英雄一樣,人的能力是有個頻譜的,不可能方方面面都能做得滿分,所以不要對自己感到挫敗。
就拿我自己說,大家別看我說的頭頭是道,但是說實話,說了這么多,其實我自己也并不能每個方面都做得好。這個「落地能力頻譜」就像是一個打分卡,幫助你從更全面的角度來分析自己的能力頻譜。有的人技術(shù)不那么精湛,但很懂業(yè)務(wù),很會帶隊,也能使得產(chǎn)品順利落地;有的人技術(shù)滿分,但業(yè)務(wù)和溝通能力欠缺,但配合其他團(tuán)隊成員的優(yōu)勢,也能使得產(chǎn)品順利落地。
所以,接受自己的不足,盡可能動態(tài)平衡自己的能力頻譜,總有一日,你能成為具有超強(qiáng)「落地能力」甚至能獨當(dāng)一面的算法工程師。
[1]Hidden Technical Debt in Machine Learning Systems https://wiki.esipfed.org/w/images/5/5f/NIPS-5656-hidden-technical-debt-in-machine-learning-systems.pdf
[2]https://www.zhihu.com/question/442962994/answer/1717172385
[3]https://www.zhihu.com/question/436066262/answer/1695872348
推薦閱讀
國產(chǎn)小眾瀏覽器因屏蔽視頻廣告,被索賠100萬(后續(xù))
年輕人“不講武德”:因看黃片上癮,把網(wǎng)站和786名女主播起訴了
關(guān)于程序員大白
程序員大白是一群哈工大,東北大學(xué),西湖大學(xué)和上海交通大學(xué)的碩士博士運營維護(hù)的號,大家樂于分享高質(zhì)量文章,喜歡總結(jié)知識,歡迎關(guān)注[程序員大白],大家一起學(xué)習(xí)進(jìn)步!



