入職一年的算法工程師工作總結(jié)
時間:2021-05-08 14:42:41 來源:星星閱讀網(wǎng) 本文已影響 人
20XX年5月到現(xiàn)在入職阿里已經(jīng)快一年了,一年之中也做了幾個項目,期間趟過了不少坑,以往的年度總結(jié)都是閉門造車,寫完了扔印象筆記之中給自己看,今年在知乎上看了很多大佬們的文章,收獲很多,尤其是在討論的過程之中,對自身能力的強化很是受用。下面是星星閱讀網(wǎng)小編為您推薦的入職一年的算法工程師工作總結(jié)。
被暴打的現(xiàn)實5月入職的時候,老板安排的是去做 CTR 模型。當(dāng)時看到線上模型比自己想的更加簡單,于是理所當(dāng)然的認(rèn)為把模型升級到學(xué)界最新的那種肯定能帶來效果上的提升,但是做了很多嘗試,最后發(fā)現(xiàn)其實并沒有那么簡單...
于是在被現(xiàn)實狠狠教育了一番之后,終于痛定思痛,開始做一個 SQL 工程師,一切從特征做起,模型配合著特征進行相對應(yīng)的升級,自己的算法道路才漸漸走上正軌。
一些積累經(jīng)驗數(shù)據(jù)的準(zhǔn)確性是非常重要的
具體地說,就是我們需要做很多數(shù)據(jù)清洗的工作。比如在日志中將虛曝光(服務(wù)器端打點)除去,只保留真正的實曝光(用戶看到的),以及海外業(yè)務(wù),還需要將國內(nèi)的流量進行清洗等等。總之,核心思想就是要保證訓(xùn)練數(shù)據(jù)是用戶真正看到的,且經(jīng)過在線鏈路打分的數(shù)據(jù)。
另外如果沒有必要,千萬別對當(dāng)前的數(shù)據(jù)做采樣。首先做了負(fù)采樣,就已經(jīng)改變了數(shù)據(jù)的分布,它的效果就已經(jīng)不夠置信了,其次,采樣完成之后還需要還原,尤其是在廣告業(yè)務(wù)中,還原之后還需要再加上校準(zhǔn)... 整套流程下來不僅提升了整個鏈路的復(fù)雜程度,拿到的效果還不一定是正向的。
線上線下特征一致性
這算是一個老生長談的話題了,很多時候,我們發(fā)現(xiàn)離線 auc 漲幅喜人,上線之后發(fā)現(xiàn)在線指標(biāo)紋絲不動,甚至還有向下波動的趨勢,第一反應(yīng)就是特征不一致。于是立刻返工去查找線上特征和線下特征是否一致,導(dǎo)致整個項目周期拉的特別長。
筆者今年在這一塊就吃了很大的虧。由于我們業(yè)務(wù)的在線鏈路中的特征是由 c++、 lua 等語言處理得到的。但是我們離線開發(fā)的時候使用的是 python、java以及 SQL 處理得到,導(dǎo)致我們在加新特征的時候往往需要先用 python 和 sql 寫一遍離線邏輯,再用 c++、lua 實現(xiàn)同樣的在線邏輯。這樣的做法首先會導(dǎo)致重復(fù)開發(fā),其次兩套代碼的業(yè)務(wù)邏輯以及不同語言底層庫實現(xiàn)的區(qū)別勢必會導(dǎo)致在線/離線特征處理的不一致。
為了解決上面的問題,我們使用 C++ 開發(fā)了一套特征處理庫,我們將所有的特征處理邏輯全部封裝進該庫之中,只要保證在線、離線輸入的數(shù)據(jù)是一致的,那么得到的特征也可以保證一致。離線情況下,我們則通過 streaming 調(diào) c++ 庫的方式來生成離線特征。
線上環(huán)境特征的引入
由于我們組的業(yè)務(wù)場景、流量來源比較復(fù)雜,因此筆者剛開始做CTR相關(guān)工作的時候,錨定了流量渠道這個一個小點,挖了一部分特征,離線 auc 上也確實拿到了一定的漲幅,但是一上線人就懵了,在線指標(biāo)跟online模型一模一樣。后續(xù)跟朋友、師兄的討論才明白了,渠道特征本質(zhì)上是環(huán)境特征。這一部分特征,讓模型可以分辨高 CTR 渠道和低 CTR 渠道,但是對于用戶最后會不會點并沒有過多的貢獻。
離線指標(biāo)的全面化
CPC 廣告場景中,一般情況下,最后的排序計算公式都是 ctr * bid_price, 這就要求在廣告場景中,我們不僅僅需要保證預(yù)估的序是對的,還需要保證預(yù)估的 CTR 的值是準(zhǔn)的。當(dāng)然,其實值如果準(zhǔn)了,那么序也應(yīng)該會更準(zhǔn)。但是離線指標(biāo)中的 auc 僅僅只能驗證模型對序的預(yù)估情況,并不能實際反應(yīng)值是否準(zhǔn)確。因此,廣告場景下,我們還應(yīng)該關(guān)注類似于 COPC (click over predicted click) 這樣的指標(biāo),當(dāng)然 COPC 這個指標(biāo)也有一定的局限性,比如樣本中如果有一半的數(shù)據(jù)被高估、另一半的數(shù)據(jù)被低估,那么 COPC 的計算結(jié)果很可能表現(xiàn)的還不錯。
快速驗證想法的能力
同是打工人,大家身上都背著 KPI 和績效。這時候,我們做的很多事會需要確定性結(jié)果,但是,作為算法工程師,我們做的很多事,都不能保證有確定性的結(jié)果。這時候,快速驗證想法就是很重要的能力,我們需要在簡短的 1-2周內(nèi)驗證自己的思路是否能產(chǎn)生效益,然后再決定是否加大投入時間,把這個想法做的更加飽滿,全面。舉個簡單的例子,比如我們需要挖掘文本類特征對 CTR 模型的重要性,最簡單的辦法就是去做一些重合特征,比如判斷 query 和 item title 的重合度,重合詞等等,看這些重合特征能對 CTR 模型帶來多大的離線收益,如果能夠帶來比較不錯的收益,我們便可以順著這個路子把文本類特征做的更加完備。
要有產(chǎn)品思維
算法工程師其實并不應(yīng)該僅關(guān)注自己手中的事,其實多思考思考產(chǎn)品的形態(tài),也是極好的。雖然這一塊,筆者自己的體會并不是特別深,但還是想寫出來告誡一下自己別成為一個只懂算法的人。最后,個人對產(chǎn)品和算法的看法是算法的不確定性某種程度上是可以通過產(chǎn)品來進行彌補的。這個觀點也是在最近我們大團隊內(nèi)部的某個產(chǎn)品上線后取得了非常好的效果之后逐漸形成的,算是一個拋磚引玉吧。
學(xué)習(xí)和創(chuàng)新
對于算法工程師而言,保持學(xué)習(xí)是一項重要的能力,緊跟學(xué)界、業(yè)界的前沿個人感覺還是比較重要的,另外根據(jù)業(yè)務(wù)的發(fā)展,或者手頭需要做的事情來有針對性的學(xué)一些知識點也是很重要的。最后,關(guān)于創(chuàng)新,感覺和學(xué)生時期做的論文真的差異很大,學(xué)生時代是確定大方向之后,四處開花,哪里好做做哪里,工作之后,受限于業(yè)務(wù)和數(shù)據(jù),這時候還能做論文創(chuàng)新的,不得不說,確實很強。
寫在最后聊一些有的沒的把,工作是一場長跑,身體的好壞其實是相當(dāng)重要的。每天抽時間出來鍛煉身體,做身材管理,我個人認(rèn)為是比賺錢多少更重要的事情。
另外,作為算法工程師畢竟會面臨很多不確定性,如何在失敗的情況下,保持一個好的心情也是一個很重要的能力。余以為每個人都應(yīng)該找到一個適合自己的解壓方式,比如我自己在壓力大或者心情不佳的時候選擇長跑,10km下來,就又是一個元氣滿滿的自己。