據(jù)挖掘工程師筆試全解析:從貝葉斯到SQL的考點(diǎn)與備考策略)
那兩年大數(shù)據(jù)崗位剛熱起來數(shù)據(jù)挖掘工程師的筆試題目不像現(xiàn)在這么“卷深度學(xué)習(xí)”反而特別看重基礎(chǔ)功底和業(yè)務(wù)直覺。阿里巴巴2016年這場筆試當(dāng)年在圈子里流傳很廣我身邊好幾個(gè)朋友都參加過考完之后在群里吐槽了一整天。現(xiàn)在回頭看這套題的價(jià)值其實(shí)超出了“一場面試”本身——它基本劃出了數(shù)據(jù)挖掘工程師這個(gè)崗位的能力邊界概率統(tǒng)計(jì)、機(jī)器學(xué)習(xí)算法、數(shù)據(jù)結(jié)構(gòu)、SQL、業(yè)務(wù)建模思維一個(gè)都不能少。即便放到今天這套考察邏輯依然適用只是算法框架換成了更新的版本而已。這篇文章我不打算逐題貼答案那個(gè)網(wǎng)上能找到不少。我更想做的是把筆試背后真正想考察的東西拆開結(jié)合當(dāng)年備考和實(shí)際工作里的一些體會講清楚“數(shù)據(jù)挖掘工程師筆試到底在考什么”“每類題背后的能力要求是什么”“怎么準(zhǔn)備才不白費(fèi)功夫”。無論你是正在準(zhǔn)備數(shù)據(jù)崗筆試的在校生還是想轉(zhuǎn)行做數(shù)據(jù)的職場人這篇文章應(yīng)該都能給你一些參考。1. 2016年的這場筆試究竟在考什么能力1.1 數(shù)據(jù)挖掘工程師的崗位定位要理解筆試題目為什么這么出先得搞清楚2016年前后“數(shù)據(jù)挖掘工程師”這個(gè)崗位在互聯(lián)網(wǎng)公司里承擔(dān)什么角色。那會兒不像現(xiàn)在搞個(gè)推薦系統(tǒng)就是深度學(xué)習(xí)模型端到端跑通。當(dāng)時(shí)的典型工作流是從埋點(diǎn)日志和業(yè)務(wù)數(shù)據(jù)庫里取數(shù)做清洗和特征工程訓(xùn)練一個(gè)邏輯回歸或者GBDT模型上線做預(yù)測或排序再通過AB實(shí)驗(yàn)驗(yàn)證效果。整個(gè)過程里數(shù)據(jù)挖掘工程師是連接“數(shù)據(jù)”和“業(yè)務(wù)決策”的關(guān)鍵角色。這意味著崗位要求的能力是復(fù)合型的。你得懂業(yè)務(wù)知道GMV掉了一個(gè)點(diǎn)該從哪個(gè)維度的數(shù)據(jù)找原因你得會寫代碼至少SQL和Python要熟練你得懂統(tǒng)計(jì)和機(jī)器學(xué)習(xí)不然特征做出來不知道合不合理模型結(jié)果也不敢拍板你還得有工程意識因?yàn)槟P妥罱K要上線不能只在本地跑通Jupyter Notebook就行。2016年阿里巴巴的筆試題目本質(zhì)上就是在篩選具備這種復(fù)合能力的人。整套卷子不會只考一個(gè)方向它會有計(jì)算題、算法題、SQL題、業(yè)務(wù)場景分析題各種類型交叉出現(xiàn)目的就是看你在“數(shù)據(jù)挖掘工程師”這個(gè)崗位上能不能全面cover住。1.2 筆試考察的三個(gè)維度從題目結(jié)構(gòu)來看核心考察點(diǎn)可以歸納成三個(gè)維度。第一個(gè)維度是數(shù)理基礎(chǔ)。概率論、統(tǒng)計(jì)學(xué)里的經(jīng)典知識點(diǎn)幾乎必考比如貝葉斯公式、期望方差、常見分布、假設(shè)檢驗(yàn)、極大似然估計(jì)。這些不是死記硬背就能應(yīng)付的往往會包裝成業(yè)務(wù)場景讓你現(xiàn)場計(jì)算。第二個(gè)維度是機(jī)器學(xué)習(xí)算法原理。2016年還不流行直接問Transformer和注意力機(jī)制更多是問LR邏輯回歸、SVM、決策樹、樸素貝葉斯、K-Means、協(xié)同過濾這些經(jīng)典算法的推導(dǎo)、適用場景和優(yōu)缺點(diǎn)。而且有些題目會故意挖坑比如給你一堆前提條件其實(shí)對應(yīng)的算法根本不適用就看你有沒有真正理解算法的內(nèi)在邏輯。第三個(gè)維度是工程與數(shù)據(jù)能力。SQL是肯定要考的因?yàn)檫@是日常取數(shù)的基本功。數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)題也會涉及畢竟寫特征工程和UDF用戶自定義函數(shù)的時(shí)候代碼能力和算法思維很重要。還有一類容易被忽視的題是“估算題”比如“估算杭州有多少個(gè)加油站”這類題考察的是你的邏輯拆分能力這在做特征工程和數(shù)據(jù)建模時(shí)非常關(guān)鍵。我當(dāng)時(shí)備考的一個(gè)體會是所有題目看似分散歸根結(jié)底都在考察“把模糊問題轉(zhuǎn)化為可計(jì)算問題”的能力。筆試不是單純考你會不會某個(gè)公式而是考你在真實(shí)業(yè)務(wù)中能不能找到用這個(gè)公式的入口。2. 核心知識點(diǎn)拆解統(tǒng)計(jì)、算法、工程三足鼎立2.1 概率統(tǒng)計(jì)高頻考點(diǎn)是怎么包裝的2.1.1 貝葉斯公式與樸素貝葉斯貝葉斯公式是當(dāng)年筆試的“頂流考點(diǎn)”幾乎每年都有。它本身不難P(A|B) P(B|A) * P(A) / P(B)。但筆試題目往往會套一個(gè)實(shí)際場景不會直接告訴你P(A)、P(B)。舉個(gè)例子題目可能這么出某個(gè)推薦位的歷史點(diǎn)擊率是5%在推薦位展示的商品中被用戶收藏過的商品占比30%而在被點(diǎn)擊的商品中被收藏過的商品占比60%?,F(xiàn)在一個(gè)商品被收藏了問它被點(diǎn)擊的概率是多少。這道題用貝葉斯公式列出P(點(diǎn)擊|收藏) P(收藏|點(diǎn)擊) * P(點(diǎn)擊) / P(收藏) 0.6 * 0.05 / 0.3 0.1。答案就是10%。題目本身不復(fù)雜但考場上容易亂在“哪個(gè)是條件哪個(gè)是結(jié)果”。我當(dāng)時(shí)總結(jié)過一個(gè)判斷技巧先看最后問的是什么把問的內(nèi)容放在條件概率的前面然后再往回找另外兩個(gè)概率。再升級一點(diǎn)就會和樸素貝葉斯分類器結(jié)合。題目給你一堆訓(xùn)練樣本每個(gè)樣本有幾個(gè)離散特征比如“是否周末”“是否有折扣”“用戶年齡段”然后要求預(yù)測某個(gè)新樣本的類別。這時(shí)候你需要用拉普拉斯平滑來處理某個(gè)特征取值在訓(xùn)練集中沒有出現(xiàn)的極端情況。很多人考完后悔的就是“我明明背過拉普拉斯平滑但做題的時(shí)候忘了用?!边@類題目考的不是你會不會背公式而是你在具體計(jì)算時(shí)有沒有把邊界條件納入考慮。2.1.2 期望與方差的業(yè)務(wù)化包裝期望和方差的考點(diǎn)通常藏在“AB實(shí)驗(yàn)”和“成本評估”里。比如一個(gè)活動頁有兩種設(shè)計(jì)方案方案A預(yù)計(jì)有10%的用戶會點(diǎn)擊點(diǎn)擊用戶中平均每人帶來5元收入方案B預(yù)計(jì)有15%的用戶會點(diǎn)擊但點(diǎn)擊用戶中平均每人只帶來3元收入。假設(shè)用戶量是10萬問選哪個(gè)方案。計(jì)算期望收入方案A期望收入 100000 * 0.1 * 5 50000方案B 100000 * 0.15 * 3 45000。單看期望應(yīng)該是A但這里有個(gè)坑方案B的點(diǎn)擊率高方差表現(xiàn)可能更穩(wěn)定。如果題目進(jìn)一步問“哪個(gè)方案更穩(wěn)妥”你可能還需要考慮分布和置信區(qū)間。這就是把統(tǒng)計(jì)學(xué)知識放進(jìn)業(yè)務(wù)決策里考察而不單純是算一個(gè)數(shù)。這類題目給我的啟發(fā)是筆試想看的不是你會不會套公式而是你在一個(gè)真實(shí)業(yè)務(wù)目標(biāo)面前能不能快速定義一個(gè)量化指標(biāo)來輔助決策。這種思維在后來做數(shù)據(jù)挖掘的實(shí)際工作中太重要了——業(yè)務(wù)方不會問你“這個(gè)特征的方差是多少”而是問你“這個(gè)方案靠不靠譜”。2.2 經(jīng)典機(jī)器學(xué)習(xí)算法推導(dǎo)比調(diào)參更重要2.2.1 邏輯回歸為什么是“入場券”2016年的筆試邏輯回歸的“出鏡率”高得離譜。倒不是題目多難而是它太適合出題了既能考推導(dǎo)又能考理解還能和業(yè)務(wù)場景結(jié)合。常見考法有三種。第一種是推導(dǎo)損失函數(shù)和梯度更新公式。你得能寫出似然函數(shù)、取對數(shù)、求梯度并解釋為什么用梯度下降而不是直接求解析解。第二種是問邏輯回歸的優(yōu)缺點(diǎn)比如它為什么適合做大規(guī)模稀疏特征訓(xùn)練快、可解釋性強(qiáng)、容易并行化但缺點(diǎn)是決策邊界是線性的對非線性關(guān)系擬合能力有限。第三種是給你一個(gè)實(shí)際業(yè)務(wù)場景比如預(yù)測用戶是否會流失特征是用戶的登錄頻率、訂單金額、客服投訴次數(shù)等然后問你怎么評估模型效果——這就引出了AUC、準(zhǔn)確率、召回率等概念。我見過很多人在“為什么邏輯回歸的損失函數(shù)用交叉熵而不用均方誤差”這類題上栽跟頭。原理其實(shí)不復(fù)雜邏輯回歸的sigmoid函數(shù)會把輸出壓到0到1之間如果使用均方誤差損失函數(shù)關(guān)于參數(shù)不是凸函數(shù)梯度下降容易陷入局部最優(yōu)而交叉熵?fù)p失在邏輯回歸中是凸函數(shù)有全局最優(yōu)解。但考場上容易慌忘了從“凸性”這個(gè)角度去回答。備考時(shí)把這層“為什么”想透比刷十道題都管用。2.2.2 決策樹與集成學(xué)習(xí)決策樹的考點(diǎn)集中在特征選擇準(zhǔn)則上信息增益、信息增益率、基尼指數(shù)這三者的區(qū)別和適用場景必須搞清楚。ID3用信息增益C4.5用信息增益率CART用基尼指數(shù)。當(dāng)時(shí)常見的題是給一個(gè)數(shù)據(jù)集然后讓你手動計(jì)算某個(gè)特征的信息增益判斷該選哪個(gè)特征做分裂。這種題看起來繁瑣但其實(shí)分值是大頭只要耐心就能拿穩(wěn)。我當(dāng)時(shí)備考的方法是列出表格每個(gè)特征單獨(dú)算一遍寫清楚log2的計(jì)算過程避免因?yàn)榇中膩G分。后來我發(fā)現(xiàn)手動推導(dǎo)決策樹的價(jià)值不只是應(yīng)付筆試它能幫你真正理解為什么XGBoost會選擇某些特征做分裂調(diào)參時(shí)理解也更深。集成學(xué)習(xí)在2016年的筆試?yán)镆呀?jīng)有不少涉及主要考Bagging和Boosting的區(qū)別、隨機(jī)森林的隨機(jī)性體現(xiàn)在哪些地方樣本采樣隨機(jī)、特征選擇隨機(jī)、GBDT的負(fù)梯度擬合思路。這些問題不會問得太深但需要你用自己的話把原理說清楚。我當(dāng)時(shí)總結(jié)的口訣是“Bagging減少方差Boosting減少偏差”——雖然這句話有點(diǎn)簡化但應(yīng)付筆試的判斷類題目夠用了。2.2.3 相似度計(jì)算與聚類聚類和相似度計(jì)算幾乎是數(shù)據(jù)挖掘筆試的保留節(jié)目。歐氏距離、曼哈頓距離、余弦相似度這三種要能列出公式并說明適用場景。我記憶中有一道題給了幾個(gè)用戶對兩部電影的評分讓算用戶之間的相似度用余弦相似度還是歐氏距離結(jié)論會有差異題目故意設(shè)了這個(gè)坑讓你討論。K-Means的考點(diǎn)包括算法流程、如何選擇K值手肘法、輪廓系數(shù)、初始中心點(diǎn)的影響K-Means是對這個(gè)問題的改進(jìn)。還考過一道很經(jīng)典的題在K-Means迭代中如果某個(gè)簇為空怎么辦。答案是重新隨機(jī)初始化該簇中心或者將其設(shè)為距離最遠(yuǎn)的點(diǎn)。這種題書上不一定會細(xì)講但實(shí)際面試和筆試都愛出因?yàn)樗疾炷闶遣皇钦娴氖謱戇^K-Means而不是只背了步驟。2.3 數(shù)據(jù)結(jié)構(gòu)與SQL工程能力篩選2.3.1 SQL窗口函數(shù)與多表查詢SQL筆試幾乎必考因?yàn)檫@是數(shù)據(jù)挖掘工程師每天的日常工具。2016年的題目雖然不會要求寫太復(fù)雜的UDF但窗口函數(shù)的題目已經(jīng)出現(xiàn)了。比如查詢每個(gè)用戶最近一次下單時(shí)間和累計(jì)下單金額這就是典型的ROW_NUMBER() SUM() OVER()組合使用。這類題目想一次做對要養(yǎng)成一個(gè)習(xí)慣先看題目要“每個(gè)組”的什么指標(biāo)定位分組字段和排序字段再想“累計(jì)”還是“最近”決定用什么窗口函數(shù)最后再排查是不是要加WHERE過濾條件。很多人一上來就寫大段子查詢結(jié)果窗口函數(shù)簡單幾步就搞定了。多表關(guān)聯(lián)的細(xì)節(jié)也值得留意。INNER JOIN、LEFT JOIN、RIGHT JOIN的區(qū)別是必須掌握的但2016年的筆試更傾向于考察關(guān)聯(lián)條件是否會“放大數(shù)據(jù)量”。比如訂單表和訂單明細(xì)表關(guān)聯(lián)如果關(guān)聯(lián)字段不是唯一鍵會產(chǎn)生笛卡爾積式的膨脹。這類題實(shí)際工作中太常見了我那時(shí)候就踩過坑訂單表一個(gè)訂單ID對應(yīng)明細(xì)表多行我只想統(tǒng)計(jì)訂單數(shù)結(jié)果直接JOIN之后COUNT(DISTINCT 訂單ID)數(shù)據(jù)算翻了好幾倍。筆試其實(shí)就是在提前幫你避開這種低級錯(cuò)誤。2.3.2 數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)與手撕算法雖然數(shù)據(jù)挖掘崗位不像純后端那樣重算法但筆試?yán)锒嗌贂婕耙恍?shù)據(jù)結(jié)構(gòu)和算法基礎(chǔ)題。常見的有鏈表反轉(zhuǎn)、快排、二分查找、兩個(gè)棧實(shí)現(xiàn)隊(duì)列、最長公共子串等。這些題目不算難但需要你手寫或者在有限時(shí)間內(nèi)給出思路。我當(dāng)時(shí)的準(zhǔn)備策略是把《劍指Offer》里高頻的30道題刷熟尤其是指針操作、遞歸和動態(tài)規(guī)劃入門題。因?yàn)楣P試的算法題一般不是最難的卡住的人往往不是因?yàn)椴粫且驗(yàn)榫o張導(dǎo)致代碼細(xì)節(jié)寫錯(cuò)。建議平時(shí)練習(xí)時(shí)養(yǎng)成在紙上或白板上寫代碼的習(xí)慣畢竟線上筆試的環(huán)境和IDE差別很大沒有自動補(bǔ)全和調(diào)試提示。還有一類題是“大數(shù)據(jù)量下的統(tǒng)計(jì)”。比如給你一個(gè)超大文件里面有幾十億個(gè)整數(shù)如何在內(nèi)存有限的情況下找出出現(xiàn)頻率最高的數(shù)。這類題考的是分治和Hash的思想先把大文件按Hash分片再分別統(tǒng)計(jì)每個(gè)片的最大值最后歸并。這是MapReduce思想的基礎(chǔ)版本也是數(shù)據(jù)挖掘工程師需要具備的“數(shù)據(jù)處理直覺”。3. 典型題型分析與解題思路復(fù)盤3.1 概率計(jì)算題從題目條件反推考點(diǎn)我印象里有這么一道概率題憑記憶復(fù)述大意一批商品中有5%的次品采用某種檢測方式次品被檢出的概率是98%正品被誤判為次品的概率是3%?,F(xiàn)在隨機(jī)抽一個(gè)商品檢測結(jié)果為次品問它真的是次品的概率是多少。這道題看著繞實(shí)際上是標(biāo)準(zhǔn)的貝葉斯公式題。設(shè)A表示“商品是次品”B表示“檢測結(jié)果為次品”。題目給出P(A)0.05P(B|A)0.98P(B|非A)0.03。要求P(A|B)。用全概率公式算出P(B)0.050.980.950.030.0490.02850.0775再算P(A|B)0.049/0.0775≈0.6323。這道題的關(guān)鍵陷阱在于很多人算出63%后不敢置信覺得檢測準(zhǔn)確率這么高怎么真次品概率才六成多。其實(shí)是因?yàn)榇纹仿时旧碇挥?%即使誤判率只有3%因?yàn)檎坊鶖?shù)太大誤判出來的“次品”會很多。這就是貝葉斯公式反直覺的經(jīng)典體現(xiàn)。做題的技巧是把條件列清楚不要憑直覺答題。我后來在實(shí)際做反欺詐模型時(shí)這個(gè)思維特別有用——模型預(yù)測“欺詐”的人里有很大比例其實(shí)不是欺詐因?yàn)槠墼p本身的先驗(yàn)概率太低了。理解了這一點(diǎn)才能正確設(shè)定閾值而不是機(jī)械地看模型的準(zhǔn)確率。3.2 業(yè)務(wù)場景題如何把模糊問題轉(zhuǎn)化為建模問題業(yè)務(wù)場景題是數(shù)據(jù)挖掘筆試的“區(qū)分度擔(dān)當(dāng)”。這類題一般沒有一個(gè)標(biāo)準(zhǔn)答案但能看出你的分析思路是否縝密。比如有一道類似這樣的題平臺發(fā)現(xiàn)用戶在某段時(shí)間的停留時(shí)長明顯下降讓你分析可能的原因并設(shè)計(jì)一個(gè)方案來定位問題。這道題拿到手切忌上來就談模型而是應(yīng)該分層拆解。首先確認(rèn)數(shù)據(jù)來源是否可靠是不是埋點(diǎn)上報(bào)出了問題——這是數(shù)據(jù)挖掘工程師的本能因?yàn)楹芏唷爱惓!逼鋵?shí)是數(shù)據(jù)質(zhì)量問題。其次從時(shí)間維度看下降是突發(fā)性的還是持續(xù)性的是某個(gè)時(shí)間段還是全天都有從用戶維度看是全體用戶都在下降還是只有某個(gè)渠道、某個(gè)新版本、某個(gè)特定人群在下降從產(chǎn)品維度看最近有沒有上線新功能、改版首頁、調(diào)整推薦策略。接下來才是建模分析。如果要做歸因可以用維度下鉆對比不同維度的指標(biāo)差異如果想要量化影響可以設(shè)計(jì)假設(shè)檢驗(yàn)或者構(gòu)建一個(gè)預(yù)測模型預(yù)估“如果沒有某個(gè)改動停留時(shí)長應(yīng)該是多少”再與實(shí)際值對比算出“增量”部分。我當(dāng)時(shí)對這類題的感受是業(yè)務(wù)場景題沒有唯一答案但考官通過你的回答能判斷你是“只會跑模型的人”還是“能解決業(yè)務(wù)問題的人”。備考時(shí)我建議練習(xí)一個(gè)習(xí)慣——回答任何業(yè)務(wù)分析題都按“確認(rèn)數(shù)據(jù)→拆解維度→提出假設(shè)→設(shè)計(jì)驗(yàn)證→給出建議”這個(gè)框架來邏輯清晰了分?jǐn)?shù)自然不會被壓。3.3 估算題以“北京有多少輛出租車”為例估算題在筆試?yán)锊凰阒髁鞯紶枙霈F(xiàn)而且實(shí)際面試中問得更多。數(shù)據(jù)挖掘工程師做特征工程時(shí)經(jīng)常需要估算一些指標(biāo)的合理范圍所以這種題挺能體現(xiàn)一個(gè)人的數(shù)感。估算題的核心思路是“從需求端拆分”。比如問“一個(gè)城市一天產(chǎn)生多少筆外賣訂單”可以從人口端拆城市常住人口約2000萬外賣滲透率假設(shè)30%即600萬潛在用戶其中每天實(shí)際下單的比例假設(shè)20%那日活躍用戶約120萬每人每天平均下單1.2單所以總訂單約144萬單。如果你對數(shù)字沒有概念寧可先給出一個(gè)粗略假設(shè)也要把計(jì)算鏈路寫完整考官更看重的是邏輯而不是數(shù)字的精確度。這類題平時(shí)練習(xí)時(shí)可以多做“數(shù)量級敏感度”訓(xùn)練看到任何一個(gè)宏觀數(shù)字先猜一個(gè)數(shù)量級再用乘法或除法拆解驗(yàn)證。比如“全國的快遞量”“一個(gè)熱門APP的日活”“一個(gè)城市的地鐵日客運(yùn)量”都試著估算一下。熟練之后在做數(shù)據(jù)質(zhì)量校驗(yàn)和業(yè)務(wù)異常排查時(shí)你的“數(shù)據(jù)直覺”會明顯比同行靈敏。4. 備考過程和時(shí)間投入策略4.1 我用過的備考時(shí)間軸我是提前一個(gè)月開始集中準(zhǔn)備的前一周會先做摸底把概率統(tǒng)計(jì)和機(jī)器學(xué)習(xí)的基礎(chǔ)知識點(diǎn)過一遍確認(rèn)自己的薄弱點(diǎn)在哪里。對于基礎(chǔ)比較扎實(shí)的同學(xué)可以直接刷真題對于基礎(chǔ)不夠牢固的同學(xué)我建議先用一到兩周補(bǔ)齊短板不然刷題時(shí)處處卡殼效率很低。我的時(shí)間分配大致是前10天專攻概率統(tǒng)計(jì)和機(jī)器學(xué)習(xí)算法每天上午推導(dǎo)2-3個(gè)算法邏輯回歸推導(dǎo)、樸素貝葉斯計(jì)算、決策樹手算等下午做對應(yīng)的題目。中間7天主攻SQL和數(shù)據(jù)結(jié)構(gòu)SQL每天練10道題從簡單查詢到窗口函數(shù)再到復(fù)雜多表關(guān)聯(lián)數(shù)據(jù)結(jié)構(gòu)每天刷5道高頻題。最后一周做整套模擬嚴(yán)格按考試時(shí)間限制來把做題節(jié)奏和心態(tài)調(diào)整好。另外我強(qiáng)烈建議建一個(gè)“錯(cuò)題本”不是簡單抄題目和答案而是寫下“我當(dāng)時(shí)為什么錯(cuò)”“正確思考路徑是什么”“下次怎么避免”。當(dāng)年筆試前我反復(fù)翻錯(cuò)題本很多容易踩的坑比如條件概率搞反、JOIN條件忘加去重、信息增益計(jì)算時(shí)漏掉log底數(shù)都能快速回憶起來這比臨時(shí)刷題管用得多。4.2 知識體系梳理優(yōu)先于盲目刷題備考過程中最容易犯的錯(cuò)誤是一頭扎進(jìn)題海里卻忽視了構(gòu)建知識框架。數(shù)據(jù)挖掘筆試的題目看似雜實(shí)際上每個(gè)知識點(diǎn)之間是有邏輯關(guān)系的概率統(tǒng)計(jì)是機(jī)器學(xué)習(xí)算法的基礎(chǔ)機(jī)器學(xué)習(xí)算法是業(yè)務(wù)建模的工具SQL和數(shù)據(jù)結(jié)構(gòu)是工程實(shí)現(xiàn)的支撐。建議在正式開始刷題前先拿一張紙畫出自己的知識圖譜標(biāo)出哪些是熟悉的哪些是模糊的哪些是完全不會的。根據(jù)這個(gè)圖譜安排復(fù)習(xí)節(jié)奏比你每天隨機(jī)刷題要高效得多。以概率統(tǒng)計(jì)為例知識圖譜可以這樣分基本概念概率公理、條件概率、獨(dú)立性、隨機(jī)變量分布函數(shù)、期望方差、常見分布、數(shù)理統(tǒng)計(jì)點(diǎn)估計(jì)、區(qū)間估計(jì)、假設(shè)檢驗(yàn)、貝葉斯統(tǒng)計(jì)先驗(yàn)、后驗(yàn)、共軛分布。每一項(xiàng)下面再掛對應(yīng)的筆試考點(diǎn)和常見題型復(fù)習(xí)的時(shí)候?qū)φ請D譜過一遍哪里薄弱補(bǔ)哪里。4.3 模擬筆試比看起來更重要模擬筆試不是自己在家做兩套題就算完。我建議嚴(yán)格按真實(shí)筆試的時(shí)間限制和環(huán)境來定時(shí)一小時(shí)不能查資料不能中途看答案做完再統(tǒng)一對答案。2016年那會兒線上筆試還是用??途W(wǎng)或者其他在線OJ系統(tǒng)環(huán)境的代碼框很小沒有自動補(bǔ)全打錯(cuò)一個(gè)括號都讓你煩躁。提前適應(yīng)這種環(huán)境考場上就會穩(wěn)很多。模擬完一定要做復(fù)盤。復(fù)盤不只是看錯(cuò)題還要統(tǒng)計(jì)你每類題型的用時(shí)和正確率。比如你會發(fā)現(xiàn)概率計(jì)算題雖然不難但你要花20分鐘SQL題寫得順手正確率卻只有70%。這時(shí)候就要調(diào)整做題順序——拿到卷子先快速瀏覽全卷先做自己有把握的、分值高的題再做需要深入思考的題。避免在一道題上耗太久導(dǎo)致后面大題來不及寫。5. 數(shù)據(jù)挖掘筆試背后的行業(yè)觀察與實(shí)用心得5.1 為什么經(jīng)典考點(diǎn)至今仍不過時(shí)2016年的筆試考題放到現(xiàn)在看很多內(nèi)容依然是數(shù)據(jù)崗面試的高頻考點(diǎn)。邏輯回歸仍然是廣告點(diǎn)擊率預(yù)估的主力模型之一至少在深度學(xué)習(xí)大規(guī)模落地前是這樣貝葉斯公式仍然是做垃圾郵件過濾和反欺詐的基礎(chǔ)SQL窗口函數(shù)仍然是數(shù)據(jù)分析師的日常工具。核心原因在于數(shù)據(jù)挖掘工程師這個(gè)崗位的“底層操作系統(tǒng)”沒有變。無論工具換成Spark、Flink還是更復(fù)雜的深度學(xué)習(xí)框架你處理問題的思路仍然是“定義問題—拆解數(shù)據(jù)—特征工程—建模評估—業(yè)務(wù)驗(yàn)證”。筆試?yán)锬切└怕暑}和算法推導(dǎo)題表面考的是知識記憶實(shí)際考的是這個(gè)“操作系統(tǒng)”是否運(yùn)行順暢。我記得入職之后參與的第一個(gè)項(xiàng)目是用戶流失預(yù)警。當(dāng)時(shí)我們用的模型是XGBoost特征有幾十個(gè)但最初版本的效果并不好。后來我們回頭用邏輯回歸做了一版基線然后用簡單的分位數(shù)分析和交叉表去排查特征才發(fā)現(xiàn)有幾個(gè)特征的取值分布存在嚴(yán)重傾斜處理后模型效果才上去。這和筆試?yán)铩柏惾~斯公式結(jié)合業(yè)務(wù)先驗(yàn)概率判斷結(jié)果可信度”的思路一模一樣。經(jīng)典知識的價(jià)值不在于它永遠(yuǎn)是最前沿的而在于它是你理解一切新東西的骨架。5.2 筆試之外的加分項(xiàng)與軟實(shí)力筆試只是入場券但筆試成績高不代表你能拿到offer面試環(huán)節(jié)其實(shí)更重要。不過筆試成績對面試官的影響還是蠻大的筆試排名靠前面試時(shí)面試官會先入為主地認(rèn)為你基礎(chǔ)扎實(shí)問問題的深度和態(tài)度都會不一樣。所以準(zhǔn)備筆試時(shí)除了刷題我建議同時(shí)準(zhǔn)備幾個(gè)“加分項(xiàng)”。第一是整理自己做過的項(xiàng)目哪怕只是課設(shè)或者Kaggle比賽也要能一句話講清楚“背景、數(shù)據(jù)、方法、結(jié)果”。第二是準(zhǔn)備機(jī)器學(xué)習(xí)算法的“講故事”能力比如講XGBoost的時(shí)候不要只講公式而是講“我用它做過一個(gè)特征重要性排序發(fā)現(xiàn)某個(gè)特征的權(quán)重異常高排查后發(fā)現(xiàn)是數(shù)據(jù)泄漏”。這種活生生的案例比背誦更能加分。第三是可以看看當(dāng)年的技術(shù)博客和面經(jīng)了解阿里巴巴數(shù)據(jù)團(tuán)隊(duì)在關(guān)注什么方向比如AB實(shí)驗(yàn)的實(shí)踐、用戶畫像體系的搭建、推薦系統(tǒng)的冷啟動等。5.3 考后復(fù)盤與長期職業(yè)發(fā)展筆試結(jié)束后無論結(jié)果如何我都建議做一次徹底的知識清單復(fù)盤。把這次筆試中暴露出的薄弱點(diǎn)記下來哪怕你已經(jīng)拿到offer也值得花時(shí)間補(bǔ)上。我當(dāng)時(shí)筆試發(fā)現(xiàn)自己對SQL窗口函數(shù)掌握不夠熟練于是花了兩個(gè)周末專門練了50道窗口函數(shù)題后來入職第一年寫各種日報(bào)、周報(bào)SQL時(shí)幾乎沒卡過殼。基礎(chǔ)能力這種東西早補(bǔ)早受益它會成為你職業(yè)生涯里長期復(fù)利的一項(xiàng)投資。另外持續(xù)關(guān)注行業(yè)變化也很重要。2016年那會兒深度學(xué)習(xí)剛剛開始大規(guī)模應(yīng)用自然語言處理和圖像識別已經(jīng)有了比較大的突破但在推薦和廣告領(lǐng)域還是傳統(tǒng)模型占主導(dǎo)。過了幾年DeepFM、DIN這類深度模型就變成了標(biāo)配。如果你只是守著2016年的知識體系很快就會被淘汰。筆試備考是“打底”持續(xù)學(xué)習(xí)才是數(shù)據(jù)從業(yè)者的生存方式。6. 給后來人的幾點(diǎn)建議最后說幾條我踩過坑之后的實(shí)在建議吧。如果你近期要參加數(shù)據(jù)挖掘工程師的筆試可以先按這幾個(gè)方向自查一下概率統(tǒng)計(jì)里的貝葉斯公式和全概率公式能不能脫稿寫出步驟邏輯回歸的損失函數(shù)和梯度推導(dǎo)能不能12分鐘內(nèi)完成SQL窗口函數(shù)ROW_NUMBER、RANK、DENSE_RANK、SUM OVER能不能熟練使用決策樹三個(gè)特征選擇準(zhǔn)則的區(qū)別能不能用一句話講清遇到一個(gè)模糊的業(yè)務(wù)問題能不能快速梳理出分析框架。如果這些基本點(diǎn)都過關(guān)了那么再挑戰(zhàn)一些綜合題和開放性題目。遇到不會的題不要慌先寫下已知條件再寫嘗試的求解思路最后給出一個(gè)階段性結(jié)論閱卷人通常會給過程分。坦白說一場筆試考的是多個(gè)維度絕大多數(shù)人都不可能完美拿分能穩(wěn)定拿住基礎(chǔ)分適當(dāng)沖擊難題就已經(jīng)能在排名上超過大部分人了。還有一個(gè)小技巧筆試前找?guī)灼?dāng)年的面經(jīng)和真題回憶帖過一遍不是為了押題而是為了知道出題風(fēng)格和難度。數(shù)據(jù)挖掘筆試的題型之間差異很大有些人概率統(tǒng)計(jì)強(qiáng)但SQL弱有些人算法推導(dǎo)強(qiáng)但業(yè)務(wù)題弱提前了解題型分布你才能在考場上合理分配時(shí)間發(fā)揮出自己的最好水平。2016年的那場筆試過去很久了但我到現(xiàn)在依然覺得那段備考經(jīng)歷很值。它不僅幫我拿到了心儀的offer更重要的是逼著我把數(shù)據(jù)挖掘的知識體系完整地梳了一遍。希望這篇文章也能幫到你祝筆試順利。