器學(xué)習(xí)筆試復(fù)盤:題型拆解與真題思路)
2024年秋招 貝殼找房 機(jī)器學(xué)習(xí)/數(shù)據(jù)挖掘工程師 第一批筆試全記錄題型復(fù)盤與真題思路拆解每年八月底九月初秋招筆試就像雨后春筍一樣冒出來貝殼找房算是房產(chǎn)互聯(lián)網(wǎng)里算法崗招聘比較早的一批。我參加了2024年秋招貝殼找房機(jī)器學(xué)習(xí)/數(shù)據(jù)挖掘工程師的第一批筆試整體感受是考察面非常標(biāo)準(zhǔn)但細(xì)節(jié)坑不少尤其注重工程落地能力和對業(yè)務(wù)場景的理解不是單純刷題能糊弄過去的。這篇文章我按照筆試實(shí)際流程把題型結(jié)構(gòu)、考點(diǎn)分布、代表性題目的解題思路、以及我踩過的坑完整復(fù)盤一遍。如果你正在準(zhǔn)備貝殼或其他大廠的數(shù)據(jù)挖掘/機(jī)器學(xué)習(xí)工程師筆試這篇文章可以直接當(dāng)作戰(zhàn)備手冊用。先說結(jié)論貝殼這批筆試考察重點(diǎn)集中在機(jī)器學(xué)習(xí)基礎(chǔ)理論、SQL數(shù)據(jù)處理、算法編程、以及機(jī)器學(xué)習(xí)在房產(chǎn)交易場景中的應(yīng)用案例整體難度中等偏上但更偏向“扎實(shí)”而非“偏怪”。1. 筆試整體設(shè)計(jì)與考點(diǎn)布局1.1 題型結(jié)構(gòu)與考試形式貝殼2024秋招第一批算法筆試線上進(jìn)行總時(shí)長120分鐘題量大概在30題左右。整體分為四大部分單選題、多選題、編程題、案例分析題。單選題和多選題主要覆蓋機(jī)器學(xué)習(xí)理論基礎(chǔ)和數(shù)據(jù)挖掘概念編程題一般是兩道算法題案例分析題則會給你一段業(yè)務(wù)場景描述要求設(shè)計(jì)完整的建模方案。時(shí)間分配是最容易翻車的地方。120分鐘內(nèi)要做完所有題意味著平均每題只有4分鐘。我實(shí)際做下來單選題大概花了30分鐘多選題20分鐘兩道編程題40分鐘案例分析題30分鐘最后留了大概10分鐘檢查。如果你在選擇題上糾結(jié)太久編程題很容易寫不完。1.2 考點(diǎn)覆蓋范圍分析這里我根據(jù)記憶和同批考生的反饋整理了一個(gè)考點(diǎn)分布表基本可以代表這批筆試的方向模塊考點(diǎn)占比重點(diǎn)程度機(jī)器學(xué)習(xí)基礎(chǔ)模型原理、損失函數(shù)、正則化、偏差方差30%極高數(shù)據(jù)挖掘特征工程、樣本不均衡、評估指標(biāo)20%高SQL與數(shù)據(jù)處理窗口函數(shù)、多表關(guān)聯(lián)、聚合統(tǒng)計(jì)15%高算法編程動態(tài)規(guī)劃、二分查找、數(shù)據(jù)結(jié)構(gòu)25%中業(yè)務(wù)案例分析房產(chǎn)估價(jià)、推薦匹配、用戶畫像10%中可以看出機(jī)器學(xué)習(xí)基礎(chǔ)和數(shù)據(jù)挖掘是絕對核心加起來占了半壁江山。這點(diǎn)和貝殼的業(yè)務(wù)屬性強(qiáng)相關(guān)貝殼找房作為居住產(chǎn)業(yè)數(shù)字化服務(wù)平臺核心業(yè)務(wù)涉及房源估價(jià)、供需匹配、經(jīng)紀(jì)人推薦、用戶增長等這些場景天然依賴機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘技術(shù)。所以筆試出的題目非常“接地氣”不像有些公司那樣為了難而難。1.3 為什么貝殼要這么設(shè)計(jì)筆試如果你只是刷LeetCode準(zhǔn)備大廠通用算法題遇到貝殼這套卷子會有點(diǎn)懵。原因是貝殼對算法工程師的定位——不是純研究型而是“能落地、懂業(yè)務(wù)、會寫SQL、能建模”的復(fù)合型角色。房產(chǎn)數(shù)據(jù)有很強(qiáng)的地域性、時(shí)間性和非結(jié)構(gòu)化特征房價(jià)預(yù)測要考慮區(qū)位因素房源推薦要考慮用戶實(shí)時(shí)行為的稀疏性這些都需要候選人具備從數(shù)據(jù)到模型的完整鏈路能力。我之前也參加過幾家互聯(lián)網(wǎng)大廠的算法筆試對比下來貝殼最大的特點(diǎn)是選擇題里會有不少“小陷阱”。比如問“L2正則化對梯度更新的影響”選項(xiàng)會設(shè)置成“權(quán)重按固定比例縮小”和“權(quán)重按固定量縮小”這種接近的表述如果你對公式推導(dǎo)不熟很容易選錯(cuò)。這提醒我們一件事復(fù)習(xí)機(jī)器學(xué)習(xí)絕對不能只背結(jié)論一定要自己動手推一遍公式。2. 機(jī)器學(xué)習(xí)基礎(chǔ)理論題考得很細(xì)陷阱不少2.1 經(jīng)典模型對比類題目這批筆試?yán)锬P蛯Ρ阮惖倪x擇題出現(xiàn)頻率很高特別是邏輯回歸、決策樹、隨機(jī)森林、XGBoost、LightGBM之間的差異。考題通常不會直接問“哪個(gè)模型好”而是給一個(gè)具體的業(yè)務(wù)假設(shè)讓你選擇更合適的模型。比如“在房源標(biāo)簽缺失比例較高、且特征之間有較強(qiáng)非線性關(guān)系的情況下以下哪個(gè)模型最合適”答案是XGBoost或LightGBM因?yàn)闃淠P吞烊惶幚矸蔷€性且對缺失值有內(nèi)置處理策略。如果你只記住了“邏輯回歸是線性模型、樹模型非線性”這個(gè)層面遇到缺失值這個(gè)條件就不知道怎么選了。這里有個(gè)我總結(jié)的經(jīng)驗(yàn)面試官和出題人真正想考察的是你對模型“適用條件”的理解而不是模型本身。所以復(fù)習(xí)的時(shí)候我建議用一個(gè)表格把常用模型的優(yōu)勢、劣勢、適用場景、需要重點(diǎn)調(diào)參的參數(shù)列出來。特別是GBDT系列和邏輯回歸這種基礎(chǔ)模型必須做到一看到小樣本高維稀疏特征立刻想到邏輯回歸加L1正則化一看到非線性且特征維度適中立刻想到樹模型。2.2 損失函數(shù)與優(yōu)化方法的綜合考察另一類高頻考點(diǎn)是損失函數(shù)和優(yōu)化算法。貝殼這批筆試沒有直接讓你推導(dǎo)SVM的對偶問題而是更偏向應(yīng)用層。比如說給一個(gè)二分類任務(wù)正負(fù)樣本比例是1:99問用什么損失函數(shù)或什么采樣策略最合適。這題考察的是Focal Loss或者對負(fù)樣本降采樣的思路。我在復(fù)習(xí)損失函數(shù)時(shí)有個(gè)心得體會不要死記硬背公式要能結(jié)合“梯度大小”來理解。比如交叉熵?fù)p失在預(yù)測極端錯(cuò)誤時(shí)梯度很大模型能快速糾正而均方誤差配合Sigmoid時(shí)會有梯度消失問題這在神經(jīng)網(wǎng)絡(luò)里是個(gè)經(jīng)典坑。這次筆試雖然沒有直接考梯度消失但有一道多選題問“哪些情況下需要降低學(xué)習(xí)率”本質(zhì)上還是在考你對優(yōu)化過程的理解。其實(shí)貝殼的機(jī)器學(xué)習(xí)題還有一個(gè)特點(diǎn)比較喜歡考“正則化”的細(xì)節(jié)。我印象很深的一道題是問L1正則化和L2正則化在梯度更新時(shí)的差異選項(xiàng)里有一個(gè)是“L1會產(chǎn)生稀疏解因?yàn)樗寵?quán)重按固定量向零靠近L2會讓權(quán)重按比例縮小但不一定到零”。這題的關(guān)鍵在于理解L1的梯度是常數(shù)符號函數(shù)所以每次更新減少固定量小權(quán)重會被直接壓到零而L2的梯度是權(quán)重的線性函數(shù)權(quán)重越小梯度越小最后趨近于零但很難等于零。2.3 偏差與方差的權(quán)衡判斷偏差方差分解也是貝殼愛考的考點(diǎn)但出題方式比較貼近業(yè)務(wù)。有一道題是這樣的一個(gè)房源價(jià)格預(yù)測模型在訓(xùn)練集上R2接近0.98在驗(yàn)證集上只有0.75問以下哪個(gè)措施最可能改善。正確答案是降低模型復(fù)雜度比如減少樹深度或增加正則化系數(shù)。如果你能一眼識別出這是高方差過擬合問題這道題就十秒鐘搞定了。但這里有個(gè)易錯(cuò)點(diǎn)選項(xiàng)里會有“增加訓(xùn)練數(shù)據(jù)量”和“減少特征數(shù)量”這兩個(gè)選項(xiàng)。增加訓(xùn)練數(shù)據(jù)確實(shí)能緩解高方差但在筆試場景下它不如“降低模型復(fù)雜度”直接有效因?yàn)橛?xùn)練數(shù)據(jù)的獲取成本和可行性不明。而減少特征數(shù)量在某些情況下也能緩解過擬合但如果用正則化的話往往不用手動丟特征而且能保留更多信息。這種“最合適”而不是“正確的單選項(xiàng)”的題目貝殼出得挺多做題時(shí)一定要把選項(xiàng)讀完再下判斷。2.4 評估指標(biāo)與樣本不均衡樣本不均衡是房產(chǎn)互聯(lián)網(wǎng)里非常常見的真實(shí)問題比如二手房成交轉(zhuǎn)化率、用戶點(diǎn)擊率正樣本通常只有百分之幾甚至千分之幾。筆試中考察評估指標(biāo)時(shí)不會直接問“準(zhǔn)確率的缺點(diǎn)是什么”而是給你一個(gè)具體的業(yè)務(wù)指標(biāo)優(yōu)化目標(biāo)讓你選合適的評估口徑。我記得有一道題是房源曝光點(diǎn)擊率預(yù)估模型的評估點(diǎn)擊率約0.5%以下哪個(gè)指標(biāo)最適合作為離線評估指標(biāo)答案是AUC因?yàn)锳UC對類別不平衡不敏感能反映模型排序能力。同時(shí)選項(xiàng)里會有F1值、準(zhǔn)確率、召回率。如果你只是機(jī)械地認(rèn)為“不均衡就選F1”就可能漏掉重點(diǎn)——因?yàn)槟P秃罄m(xù)用于排序關(guān)注的是“能不能把可能點(diǎn)擊的房源排前面”而不是“把點(diǎn)擊預(yù)測得分壓得多準(zhǔn)”。在這里補(bǔ)充一個(gè)實(shí)戰(zhàn)經(jīng)驗(yàn)遇到評估指標(biāo)的題先判斷業(yè)務(wù)目標(biāo)是“排序場景”還是“分類場景”。排序場景優(yōu)先看AUC、GAUC等排序指標(biāo)分類場景再看精準(zhǔn)率、召回率、F1。貝殼的推薦系統(tǒng)、搜索排序這些業(yè)務(wù)基本都按排序來評估所以AUC出現(xiàn)的概率極高。3. 數(shù)據(jù)挖掘與SQL實(shí)操題房產(chǎn)數(shù)據(jù)處理的硬功夫3.1 SQL題窗口函數(shù)是核心考點(diǎn)貝殼筆試的SQL題占比不低而且出題風(fēng)格非常貼近實(shí)際數(shù)據(jù)倉庫的分析需求。題目通常是給你幾張表房源信息表、成交記錄表、經(jīng)紀(jì)人信息表要求你統(tǒng)計(jì)某個(gè)小區(qū)在過去三個(gè)月內(nèi)的帶看轉(zhuǎn)化率或者找出每個(gè)經(jīng)紀(jì)人成交量的排名。最常考的語法是窗口函數(shù)尤其ROW_NUMBER()、RANK()、DENSE_RANK()的區(qū)別。這類知識點(diǎn)必須熟練掌握因?yàn)槌鲱}人默認(rèn)你已經(jīng)是“能干活”的候選人這種基礎(chǔ)SQL寫不出來會很減分。我這次就遇到了“找出每個(gè)商圈帶看量TOP3的樓盤”這樣的題直接用ROW_NUMBER() OVER(PARTITION BY 商圈 ORDER BY 帶看量 DESC)就能解決。另外多表關(guān)聯(lián)也是必考項(xiàng)。貝殼的表結(jié)構(gòu)通常不是一把梭的大寬表而是拆分成了房源表、小區(qū)表、城市表等需要你自己JOIN。這里有個(gè)小技巧先明確主體表再想清楚用LEFT JOIN還是INNER JOIN。比如統(tǒng)計(jì)“所有小區(qū)的成交情況”用LEFT JOIN可以保留沒有成交的小區(qū)但如果只統(tǒng)計(jì)“有成交記錄的小區(qū)”就用INNER JOIN。筆試題里經(jīng)常在這個(gè)地方設(shè)置陷阱平時(shí)練習(xí)就要養(yǎng)成“先想清楚連接方向”的習(xí)慣。3.2 特征工程與應(yīng)用題思路數(shù)據(jù)挖掘模塊考得比較靈活不會讓你手寫特征工程代碼而是給一個(gè)業(yè)務(wù)場景讓你判斷哪些特征最可能有預(yù)測力。這類題其實(shí)比編程題更考驗(yàn)功底。有一道題我印象很深預(yù)測一套房源掛牌后多少天能成交給定數(shù)據(jù)集包含小區(qū)名稱、面積、戶型、朝向、裝修狀況、掛牌價(jià)、小區(qū)周邊學(xué)校數(shù)量、近30天帶看量、經(jīng)紀(jì)人評分等字段。問哪些特征可能最重要。分析這類題時(shí)我習(xí)慣用“信息量”和“業(yè)務(wù)邏輯”雙維度來推面積、戶型、朝向是房屋物理屬性肯定有影響但有局限性帶看量是市場供需的真實(shí)反映信息量很大掛牌價(jià)相對市場均價(jià)的比例比絕對價(jià)格更能反映業(yè)主誠意度周邊學(xué)校數(shù)量則代表了區(qū)位價(jià)值。潛在的重要特征是“比準(zhǔn)成交價(jià)”和“掛牌價(jià)”的差值比例這屬于衍生特征需要你對業(yè)務(wù)有理解才能構(gòu)造出來。這種題考察的核心是“特征思維”你能不能從原始字段中挖掘出真正影響目標(biāo)變量的數(shù)據(jù)。我的答題思路是優(yōu)先關(guān)注能反映“供需關(guān)系”和“時(shí)間效應(yīng)”的字段因?yàn)榉慨a(chǎn)交易的核心矛盾就是供需匹配和價(jià)格博弈。帶看量就是需求端的直接信號掛牌價(jià)在市場上的相對位置則是供給端和業(yè)主心理預(yù)期的信號兩者結(jié)合往往能預(yù)測成交周期。3.3 數(shù)據(jù)清洗與異常值處理貝殼筆試的案例分析里還會涉及數(shù)據(jù)質(zhì)量問題。比如給你一段二手房源數(shù)據(jù)統(tǒng)計(jì)描述其中“掛牌價(jià)”字段存在大量極端值問你怎么處理。這題不是單純的“把大于3倍標(biāo)準(zhǔn)差的值刪掉”而是要結(jié)合業(yè)務(wù)判斷高價(jià)豪宅和普通住宅的價(jià)格天然相差巨大統(tǒng)一用3σ可能誤刪正常豪宅數(shù)據(jù)更合理的做法是分層處理比如按城市或商圈分組后分別處理異常值。這一點(diǎn)我覺得貝殼的出題人真的懂行因?yàn)樘幚矸慨a(chǎn)數(shù)據(jù)時(shí)最怕的就是“一刀切”。北京的一套學(xué)區(qū)房和鶴崗的一套老破小價(jià)格可能差幾十倍如果全局算均值和標(biāo)準(zhǔn)差學(xué)區(qū)房全被當(dāng)成了異常值。我當(dāng)時(shí)在作答的時(shí)候提了按商圈分組統(tǒng)計(jì)分位數(shù)的方法用IQR四分位距來識別異常值因?yàn)閮r(jià)格數(shù)據(jù)偏態(tài)明顯均值容易受極值影響。此外還有一個(gè)容易被忽略的點(diǎn)處理時(shí)間數(shù)據(jù)時(shí)要注意跨年問題?!斑^去30天成交”和“今年以來成交”是兩種完全不同的口徑寫SQL時(shí)如果只按月份篩選年初的時(shí)候會不小心丟數(shù)據(jù)這一點(diǎn)在數(shù)據(jù)分析崗的筆試?yán)飵缀跏潜乜印?. 算法編程題解析代碼能力是硬門檻4.1 真題結(jié)構(gòu)與難度評估貝殼的算法編程題是典型的“互聯(lián)網(wǎng)中廠難度”兩道題一道偏數(shù)據(jù)結(jié)構(gòu)和基礎(chǔ)算法一道偏模擬和思維。和字節(jié)、阿里那種動輒困難級別的題目相比貝殼的編程題更溫和但要求你代碼寫得又快又穩(wěn)因?yàn)檎麄€(gè)筆試時(shí)間有限沒太多時(shí)間調(diào)試。第一道題我遇到的是“查找兩個(gè)有序數(shù)組的中位數(shù)”的變體。這個(gè)題核心思路是二分查找要求時(shí)間復(fù)雜度O(log(mn))。標(biāo)準(zhǔn)思路是把求中位數(shù)轉(zhuǎn)化為求第k小數(shù)在兩個(gè)數(shù)組中分別取前k/2個(gè)元素比較每次排除一半。這個(gè)題我在LeetCode上刷過原題所以很快就寫完了但有一個(gè)小坑二分邊界條件和數(shù)組越界的處理。貝殼的評測系統(tǒng)對邊界情況比較嚴(yán)格我遇到過很多人因?yàn)闆]考慮空數(shù)組的情況直接掛了。第二道題是模擬題大致意思是給你一組房源瀏覽日志每條日志包含用戶ID、房源ID、瀏覽時(shí)長需要統(tǒng)計(jì)每個(gè)用戶瀏覽時(shí)間最長的連續(xù)房源序列。這題主要考察哈希表和線性掃描能力難度不高但要求你代碼寫得清晰。我的做法是用哈希表存儲每個(gè)用戶最近瀏覽的房源和累計(jì)時(shí)長遇到不同房源時(shí)重置計(jì)數(shù)。4.2 編程題常用套路與時(shí)間復(fù)雜度分析筆試編程題要想拿滿分關(guān)鍵不是會做而是“快”。我的做題順序是先花3分鐘讀題5分鐘確定數(shù)據(jù)范圍和算法10分鐘寫代碼最后2分鐘檢查邊界。貝殼的輸入輸出格式比較規(guī)整用Python寫起來省心但要注意輸入讀取的效率問題。復(fù)盤這次貝殼筆試的編程題我認(rèn)為最核心的套路有三個(gè)前綴和與哈希表優(yōu)化很多看似O(n2)的題用前綴和加哈希表可以降到O(n)。特別是處理連續(xù)子數(shù)組和、區(qū)間和問題時(shí)這個(gè)套路極其好用。二分答案如果題目問的是“最大值最小化”或“最小值最大化”十有八九用二分答案。先判斷解的范圍再寫一個(gè)check函數(shù)來驗(yàn)證某個(gè)值是否可行?;瑒哟翱谏婕斑B續(xù)區(qū)間、子串問題時(shí)滑動窗口是首選。這三個(gè)套路在貝殼筆試?yán)镏辽倌芙鉀Q一半的編程題。我建議備考時(shí)把這三個(gè)思想練到形成肌肉記憶比刷十道難題更有效。4.3 筆試中的代碼規(guī)范與易錯(cuò)點(diǎn)貝殼的編程題評測對代碼正確性要求很高但不要求你寫出工程級別健壯的代碼只要邏輯正確、能通過測試用例即可。不過還是有幾個(gè)細(xì)節(jié)要注意Python的輸入要用sys.stdin.readline()而不是input()因?yàn)楣P試時(shí)數(shù)據(jù)量大時(shí)input()會超時(shí)這個(gè)坑我在之前一次筆試?yán)锊冗^。另外一個(gè)容易忽略的問題是Python的遞歸深度限制。如果編程題用的是遞歸解法比如樹遍歷一定要在代碼開頭加sys.setrecursionlimit(100000)否則數(shù)據(jù)量大時(shí)會直接RuntimeError。貝殼的題型雖然不??紭涞f一遇到這個(gè)細(xì)節(jié)是保命用的。還有一個(gè)關(guān)于時(shí)間復(fù)雜度的判斷貝殼給的數(shù)值范圍一般會明示比如數(shù)組長度是10^5那么你心里立刻要有數(shù)——O(n2)必超時(shí)需要想O(nlogn)或者O(n)的解法。如果題目給的時(shí)間限制是2秒Python的常數(shù)因子比較大某些過不了的O(nlogn)題可以選擇用C或者優(yōu)化常數(shù)。5. 案例分析題實(shí)戰(zhàn)從業(yè)務(wù)問題到模型方案5.1 案例分析題的考察形式貝殼筆試的案例分析題不是論文式的開放問答而是給你一段相對完整的業(yè)務(wù)描述要求你分步驟寫出建模方案。我這次遇到的題目大意是貝殼平臺想對“二手房源掛牌價(jià)是否合理”做智能評估以便給業(yè)主提供定價(jià)建議。數(shù)據(jù)包括房源基本信息、歷史成交記錄、周邊配套設(shè)施、市場供需指標(biāo)等要求你設(shè)計(jì)一個(gè)定價(jià)模型并說明數(shù)據(jù)清洗、特征工程、模型選型、評估方式、上線監(jiān)控方案。這種題沒有標(biāo)準(zhǔn)答案但打分有偏好。出題人想看到的是你是否有完整的機(jī)器學(xué)習(xí)項(xiàng)目落地思維而不只是會調(diào)包。我當(dāng)時(shí)答題時(shí)按照“業(yè)務(wù)目標(biāo)定義→數(shù)據(jù)準(zhǔn)備→特征工程→模型選型與訓(xùn)練→評估與上線監(jiān)控”的框架來寫這樣結(jié)構(gòu)清晰閱卷人看起來也輕松。5.2 從業(yè)務(wù)目標(biāo)到建模目標(biāo)的轉(zhuǎn)化案例分析題最容易犯的錯(cuò)誤是不知道怎么把“房價(jià)是否合理”這種業(yè)務(wù)問題轉(zhuǎn)化為機(jī)器學(xué)習(xí)問題。我看到這個(gè)題的時(shí)候第一反應(yīng)是把它定義為回歸問題——預(yù)測房源價(jià)格然后和掛牌價(jià)比較差值大則說明掛牌價(jià)不合理。但后來我思考了一下更合理的做法是把它定義為“價(jià)格偏離子”的回歸或分位數(shù)預(yù)測問題甚至可以轉(zhuǎn)化為分類問題偏貴、合理、偏低。關(guān)鍵不是選哪個(gè)而是你要在答案里說清楚轉(zhuǎn)化邏輯。我在答案里是這么定義的以“掛牌價(jià)與模型預(yù)測價(jià)之比”作為核心目標(biāo)變量比值大于1說明掛牌價(jià)偏高小于1說明偏低。然后用回歸模型預(yù)測這個(gè)比值。這個(gè)定義的好處是消除了不同城市、不同地段房價(jià)絕對水平的差異讓模型可以跨區(qū)域泛化。這里有一個(gè)出題人期望看到的加分項(xiàng)分城市/商圈建模。因?yàn)榉慨a(chǎn)價(jià)格是由地段決定的北京和鶴崗的定價(jià)邏輯完全不同如果用一個(gè)全局模型硬train一定會欠擬合和過擬合同時(shí)存在。我的方案是先按城市或商圈做樣本切分每層單獨(dú)訓(xùn)練模型或者在全局模型中加入大量的區(qū)域交叉特征。這種處理方式體現(xiàn)了你對房產(chǎn)數(shù)據(jù)的理解比單純堆模型要加分不少。5.3 特征工程在案例題里的具體展開案例分析題中最能拉開分差的是特征工程部分。貝殼的案例題給的數(shù)據(jù)字段多且雜直接丟進(jìn)模型肯定不行。我在答案里按特征類型做了一一拆解房源物理屬性面積、戶型、朝向、樓層、樓齡、裝修狀況。這些特征相對穩(wěn)定適合做基礎(chǔ)特征。區(qū)位環(huán)境特征小區(qū)均價(jià)、周邊學(xué)校數(shù)量、交通配套評分、商圈均價(jià)。這類特征反映了地理位置的價(jià)值對房價(jià)解釋力很強(qiáng)。市場供需特征同小區(qū)在售房源量、近30天帶看量、成交周期、掛牌價(jià)與同小區(qū)均價(jià)的比值。這些特征是定價(jià)模型里敏感性最高的部分因?yàn)樗鼈兡芊从呈袌霎?dāng)下的冷熱程度。時(shí)間特征季節(jié)性因素學(xué)區(qū)內(nèi)房價(jià)旺季在每年三四月政策調(diào)控帶來的波動等。我在答案里特別強(qiáng)調(diào)了“比值類特征”和“差分特征”的價(jià)值。比如“掛牌價(jià)/同小區(qū)近90天成交均價(jià)”這個(gè)特征如果這個(gè)比值很大說明業(yè)主心理預(yù)期明顯高于市場接受度成交周期很可能拉長。這種特征比絕對值更能抓住定價(jià)偏差的本質(zhì)。為了體現(xiàn)這個(gè)思路我當(dāng)時(shí)還舉了個(gè)例子兩套同樣面積的房子一套在A小區(qū)一套在B小區(qū)掛牌價(jià)都是500萬如果不考慮小區(qū)差異它們的定價(jià)偏差無從判斷但如果把掛牌價(jià)除以各自小區(qū)的成交均價(jià)得到兩個(gè)比值一個(gè)是1.1一個(gè)是1.3立刻就能看出B小區(qū)那套房的掛牌價(jià)相對更“不合理”。5.4 模型選型、評估與上線監(jiān)控模型選型和評估方式這部分貝殼的案例題通常不會限制你用什么模型但你的選擇要能和前文的數(shù)據(jù)規(guī)模和特征數(shù)量對應(yīng)起來。我在答案里寫的是以LightGBM為主模型因?yàn)榉吭磾?shù)據(jù)的特征通常是表格型數(shù)據(jù)特征之間以非線性關(guān)系為主樹模型在這個(gè)場景下表現(xiàn)比線性模型好很多同時(shí)訓(xùn)練效率高調(diào)參空間大。對于部分?jǐn)?shù)據(jù)量特別小的商圈可以用線性模型或KNN做兜底防止樹模型在小樣本上嚴(yán)重過擬合。評估方式上我在答案里提了三個(gè)指標(biāo)MAE預(yù)測誤差、MAPE百分比誤差、以及按價(jià)格區(qū)間分層計(jì)算的穩(wěn)定性。因?yàn)椴煌瑑r(jià)位的房子誤差容忍度不同一個(gè)500萬的房子差5萬影響不大但一個(gè)100萬的房子差5萬就是5%的偏差了所以用MAPE更合理且要按價(jià)格帶分層看。上線監(jiān)控方案這塊很多人會忽略但大廠出題人其實(shí)非??粗?。我寫的是上線后每天監(jiān)控預(yù)測價(jià)格的中位數(shù)和成交價(jià)格的中位數(shù)是否有偏移如果偏差超過閾值就告警同時(shí)做價(jià)格區(qū)間的分位數(shù)監(jiān)控防止模型在某個(gè)細(xì)分市場失效。同時(shí)要建立周級別的重訓(xùn)練機(jī)制保證模型能及時(shí)吸收最新的成交數(shù)據(jù)、市場變化。6. 應(yīng)對貝殼筆試的備戰(zhàn)清單與實(shí)戰(zhàn)經(jīng)驗(yàn)6.1 知識點(diǎn)優(yōu)先級的排序建議根據(jù)這次貝殼筆試的體驗(yàn)我給后面準(zhǔn)備秋招的同學(xué)一個(gè)復(fù)習(xí)優(yōu)先級建議。第一梯隊(duì)是機(jī)器學(xué)習(xí)基礎(chǔ)包括模型原理、損失函數(shù)、正則化、過擬合以及評估指標(biāo)第二梯隊(duì)是SQL和數(shù)據(jù)挖掘窗口函數(shù)、多表關(guān)聯(lián)、特征工程、樣本不均衡處理第三梯隊(duì)是算法編程重點(diǎn)練習(xí)二分法、滑動窗口、哈希表、前綴和這些高頻思維第四梯隊(duì)才是業(yè)務(wù)案例分析這部分靠平時(shí)積累。這個(gè)順序和投入時(shí)間比例應(yīng)該是4:3:2:1因?yàn)榍皟蓧K的投入產(chǎn)出比最高知識點(diǎn)固定、出題規(guī)律明顯短期突擊有效。編程題雖然分值高但短期內(nèi)提升空間有限能穩(wěn)住LeetCode中等題的水平就夠用了。案例分析題短時(shí)間很難速成靠的是平時(shí)對業(yè)務(wù)的理解和建模經(jīng)驗(yàn)的積累。6.2 實(shí)戰(zhàn)中踩過的坑和應(yīng)對策略我這里說幾個(gè)自己實(shí)際踩過的坑希望后來的同學(xué)能避開第一選擇題不要過度糾結(jié)。貝殼的選擇題有部分是多選題少選、錯(cuò)選都不得分所以不確定的時(shí)候?qū)幧傥鸲?。我這次就有兩道多選題為了求全多選了一個(gè)模棱兩可的選項(xiàng)最后很可能丟分了。如果你不確定就選最確定的那個(gè)選項(xiàng)保住基本分。第二SQL題一定要先理清表結(jié)構(gòu)再動手寫。貝殼的SQL題表關(guān)聯(lián)關(guān)系通常比較復(fù)雜我見過有同學(xué)上來就寫結(jié)果某個(gè)字段在另一張表里加了前綴直接報(bào)了字段不存在。建議先花1分鐘把每張表的字段和主外鍵關(guān)系列出來再寫SELECT。第三編程題不要在一個(gè)題上耗太久。如果第一道編程題15分鐘內(nèi)沒有思路果斷跳過做第二道。兩道題各得一部分分?jǐn)?shù)比一道拿滿分一道空著要穩(wěn)得多。我這次第一道編程題比較順利但第二道模擬題因?yàn)闆]仔細(xì)讀題多花了10分鐘導(dǎo)致后面的案例分析時(shí)間很緊張。第四案例分析題千萬別交白卷或者只寫一兩行。哪怕你只是把建模流程的大框架列出來也比空白強(qiáng)得多。閱卷人更看重你的思考路徑和框架感而不是具體數(shù)值。6.3 筆試之后如何復(fù)盤和優(yōu)化筆試結(jié)束不等于萬事大吉復(fù)盤才是提升能力的關(guān)鍵一步。我做筆試的復(fù)盤習(xí)慣是考完當(dāng)天記錄下所有還記得的題目和卡殼的地方過兩天再回頭看這些題目嘗試用不同的解法再做一遍。對于選擇題里不確定的知識點(diǎn)我會單獨(dú)整理成一份“錯(cuò)題集”按知識點(diǎn)分類比如“L1 vs L2正則化”“AUC vs F1”“GBDT vs Random Forest”。這份錯(cuò)題集在后續(xù)面試?yán)镆埠苡杏靡驗(yàn)楹芏嗝嬖嚬俚膯栴}其實(shí)和筆試選擇題知識點(diǎn)重疊。對于編程題我的建議是寫完AC之后再想一下有沒有更優(yōu)的時(shí)間和空間復(fù)雜度解法。貝殼的筆試雖然不要求你在代碼里寫注釋但在面試中面試官很可能會深挖你在筆試?yán)锏拇a如果筆試時(shí)你已經(jīng)想清楚了多種解法面試時(shí)就能從容回應(yīng)。7. 從貝殼筆試看房產(chǎn)互聯(lián)網(wǎng)算法崗的技術(shù)要求7.1 房產(chǎn)數(shù)據(jù)與算法工程師的工作場景參加完貝殼這批筆試我對房產(chǎn)互聯(lián)網(wǎng)行業(yè)里算法工程師的工作內(nèi)容有了更具體的感知。房產(chǎn)交易和電商、內(nèi)容推薦有本質(zhì)區(qū)別房子是超低頻、超高價(jià)、強(qiáng)地域性的商品用戶的決策周期非常長一套房子從掛牌到成交可能要幾個(gè)月。這個(gè)特性決定了算法模型不能簡單地照搬電商推薦那套邏輯。貝殼的算法工程師日常工作大概率覆蓋這幾個(gè)方向房源估價(jià)自動估價(jià)模型、房源推薦與排序用戶找房時(shí)的搜索和推薦、供需預(yù)測小區(qū)熱度預(yù)測、經(jīng)紀(jì)人任務(wù)分配房源與經(jīng)紀(jì)人的匹配。這些方向我在筆試案例題里都能看到影子。所以如果你想投貝殼建議提前研究一下貝殼找房App上“估價(jià)”“必看好房”“小區(qū)熱度”等模塊的功能邏輯筆試時(shí)答題會更有的放矢。7.2 候選人需要具備的差異化競爭力什么樣的候選人最受貝殼這類公司青睞我認(rèn)為是“機(jī)器學(xué)習(xí)基礎(chǔ)扎實(shí) 數(shù)據(jù)敏感度高 業(yè)務(wù)理解快”的復(fù)合型人才。純粹的刷題選手和純粹的理論派都很難通過筆試篩選。數(shù)據(jù)敏感度體現(xiàn)在哪里體現(xiàn)在你看到“掛牌價(jià)格”和“成交價(jià)格”時(shí)會不會下意識地去想“兩者之間的價(jià)差是一個(gè)關(guān)鍵特征”體現(xiàn)在你看到一個(gè)“近30天帶看量”字段時(shí)能不能想到這個(gè)字段本身受掛牌天數(shù)影響應(yīng)該構(gòu)造“日均帶看量”而不是直接用總量。這些思維無法靠臨時(shí)抱佛腳獲得需要平時(shí)多積累數(shù)據(jù)分析經(jīng)驗(yàn)、多看業(yè)務(wù)報(bào)表、多思考數(shù)據(jù)背后的業(yè)務(wù)含義。業(yè)務(wù)理解能力則體現(xiàn)在你能否把一個(gè)模糊的業(yè)務(wù)需求“幫業(yè)主定價(jià)”轉(zhuǎn)化成一個(gè)清晰的機(jī)器學(xué)習(xí)問題“回歸預(yù)測合理價(jià)格區(qū)間”并且能主動考慮分城市建模、特征時(shí)效性、冷啟動問題等真實(shí)世界的復(fù)雜度。7.3 筆試與真實(shí)工作的距離說句實(shí)在話筆試?yán)锏念}目和真實(shí)工作的差距還是明顯的。真實(shí)工作里你不會拿到一張已經(jīng)清洗好的表數(shù)據(jù)質(zhì)量、口徑不一致、特征缺失這些問題會占用你30%-50%的精力。筆試?yán)锏陌咐}只能模擬真實(shí)工作很小的一部分。但從考察邏輯上看貝殼這批筆試的確篩選出了一類人能快速理解業(yè)務(wù)、把復(fù)雜問題拆解為可執(zhí)行的建模步驟、并且有扎實(shí)工程能力的人。如果你未來想進(jìn)入產(chǎn)業(yè)互聯(lián)網(wǎng)做數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)你會發(fā)現(xiàn)這些能力恰恰是日常工作中最核心的素質(zhì)。我在實(shí)際做這套卷子的過程中最大的體會就是刷題只是底線對業(yè)務(wù)和數(shù)據(jù)真正有感知的人才能在這種筆試中游刃有余。希望這篇復(fù)盤對你的秋招備戰(zhàn)有實(shí)質(zhì)幫助也祝各位能順利通過貝殼的筆試拿到心儀的面試機(jī)會。