題幹與適用場景
資訊流每次展示 10 個推薦結果。候選排序模型在歷史隱式回饋日誌上的 NDCG@10 有所提升。請設計離線評估和線上實驗,判斷它是否應該上線。回答需要涵蓋資料切分、候選集、排序與非準確率指標、曝光偏差、實驗設計、護欄指標,以及離線勝出者在線上失敗時的排查方法。
這是一道適用於機器學習工程師和資料科學職位的代表性面試題。它考察的是模型決策,不要求設計整套推薦平台。題目假設回饋來自點擊、收藏或觀看時長等隱式行為。日誌只記錄舊系統曾經曝光的內容及其結果;使用者沒有看到的內容沒有回饋,只能視為未知,不能直接認定為負樣本。
面試官考察點
普通回答會列出 Precision、Recall 和 NDCG。高品質回答會先定義使用者行為目標和推薦場景,因為搜尋結果、首頁資訊流和「相似商品」即使使用同名指標,業務含義也不同。隨後要保證基線與候選模型可比:使用相同的時間截點、使用者、資格規則、候選集、標籤定義和 K 值。
第二個重點是能否識別歷史日誌的局限。隨機切分互動記錄可能把後續行為洩漏到訓練集;負採樣方法可能改變模型的優劣順序;歷史日誌偏向舊策略已經選中並曝光的內容,還會把真實偏好、曝光和位置影響混在一起。離線評估可以淘汰薄弱或不安全的模型,卻無法單獨證明更換策略會為產品帶來因果改善。
最後要給出一條可執行的上線路徑:穩定的隨機分組、曝光日誌、一個主指標、系統和使用者傷害護欄、統計功效與實驗週期、回滾條件、分群檢查,以及離線與線上結論衝突時有順序的診斷方案。
回答前需要澄清的問題
- 希望改善哪一種使用者決策? 如果目標是儘快找到至少一個有用結果,MRR 更有意義;如果十個位置都可能貢獻價值,NDCG 和累計互動更合適。
- 標籤如何定義,多久才成熟? 點擊、有效觀看、收藏、購買和明確「不喜歡」代表不同效用。延遲購買需要足夠長的標籤觀察視窗。
- 排序模型面對全量內容,還是上游召回給出的候選? 評估必須保留生產中的候選邊界。召回沒有提供的相關內容,排序模型無法補救。
- 歷史上每個時間點有哪些內容具備展示資格? 已刪除、不可用或尚未建立的內容不能出現在更早時間的候選集中。
- 產品能否執行隨機實驗? 如果不能,結論必須更謹慎。已記錄的曝光機率可用於反事實估計,但舊策略幾乎從未選擇的區域沒有足夠支持,不能據此外推。
- 哪些結果絕對不能退化? 延遲、錯誤、隱藏或檢舉、內容集中度、供給方曝光和下游品質都可能約束一個互動上升的模型。
30 秒回答框架
「我不會只憑 NDCG@10 上升就上線。首先固定產品目標、標籤、K、按時間切分方式、當時可用的內容、召回邊界和對照基線。然後在同一批樣本上看 Recall@10 與 NDCG@10,並按業務風險補充覆蓋率或多樣性,再檢查新使用者、稀疏使用者、新內容和重點市場。未曝光內容要視為未知,負採樣方法也要完整記錄。候選模型通過離線門檻後,我會按使用者穩定隨機分組,記錄分組與曝光,預先確定一個使用者或業務主指標、延遲和傷害護欄、最小可偵測效應、週期與回滾閾值。離線勝出只代表有資格進入實驗;隨機線上結果才決定它是否真正改善產品。」
分步驟深入解答
第一步:先定義決策,再選擇指標
先寫出一句明確的估計目標:「對於目標人群中符合條件的資訊流請求,在整個實驗觀察期內,把目前排序模型換成候選模型,會讓主使用者結果變化多少?」這句話固定了人群、干預、結果和時間範圍,也能防止事後挑選最有利的指標。
對照至少包含生產排序模型和一個簡單的熱門或時效基線。簡單基線可以發現一條看似複雜、實際連廉價策略都無法超過的流程。如果目前問題只評估排序模型,就固定資格篩選和召回結果;如果召回也改變了,要拆成獨立實驗,或明確說明比較的是端到端系統。
第二步:按歷史時間點重建離線樣本
對時間 t 的每次評估請求,只能使用 t 之前可取得的特徵、t 時刻的內容庫與資格狀態,並把後續行為放進標籤視窗。訓練、驗證和測試按時間先後切分;同一使用者或工作階段的相關事件如果跨集合會透露答案,還要按使用者或工作階段分組。查看候選結果前,先凍結特徵定義、過濾與去重規則、標籤成熟度。
讓基線和候選模型使用完全相同的使用者、請求、候選池、標籤、截點和 K。同時報告因為特徵缺失或標籤未成熟而排除的流量,否則模型可能透過悄悄丟棄難例獲得「提升」。分群至少應按場景選擇新舊使用者、稀疏與重度使用者、新舊內容、地區、裝置和內容分類。
第三步:讓每個指標對應一個產品結論
假設留出的相關內容是 {A, C},前五名排序為 [A, B, D, C, E]。Precision@5 為 2 / 5,Recall@5 為 2 / 2 = 1。NDCG 會給第 1 位的 A 比第 4 位的 C 更高的權重,因此既考察是否命中,也考察順序。只有第一個相關結果最重要時,MRR 更合適。
這些指標回答的問題不同:
- Recall@K: 已標記相關的內容有多少進入前
K。 - Precision@K: 展示的
K個內容中有多少被標記為相關;隱式回饋中可能存在假陰性。 - NDCG@K: 高收益內容是否更靠前,並對排名位置進行折損。
- MRR@K: 第一個被標記為相關的內容出現得多早。
- 覆蓋率、多樣性、新穎性或校準度: 策略是否覆蓋足夠的內容庫、避免列表重複、提供發現價值,或讓推薦組合貼近使用者興趣。只選擇與產品風險直接相關的指標。
還要加入服務指標,包括延遲、錯誤率、降級率、特徵可用率和分數分布。無法滿足線上預算的離線模型沒有上線條件。不存在適用於所有推薦場景的單一離線指標。
第四步:把歷史日誌偏差顯式化
舊系統決定使用者有機會看到什麼。一次點擊同時包含「被曝光」和「採取正向行為」;沒有點擊可能是無興趣、位置太差,也可能根本沒有曝光。不能把所有未觀察到的內容當成確定負樣本。資源允許時,全量內容排序最便於比較。如果必須負採樣,所有模型要共用相同的候選池、採樣器、樣本數和隨機種子,完整披露這些設定,也不能把採樣指標和全量內容指標直接比較。不同負採樣器甚至可能顛倒模型排序。
離線結論仍然受歷史策略約束。如果日誌記錄了隨機曝光機率,逆傾向加權、自歸一化估計或雙重穩健估計可以減輕策略偏差,但舊策略幾乎沒有曝光的區域不會因此產生證據。需要報告策略重疊範圍和權重方差;如果少數極端權重主導結論,就應截斷權重或放棄該估計。
第五步:把離線候選轉成線上實驗
在推薦曝光前按穩定單元隨機分組,通常使用使用者或帳戶。當一個人的處理會影響另一個人的結果,例如家庭共用、社交推薦或共享庫存時,應按家庭或社交群組等叢集隨機。記錄分組、准入、推薦列表、位置、曝光、行為、模型版本和降級狀態。分析按最初分組進行,也就是意向治療分析,不能把候選組中的錯誤和降級樣本刪掉。
選擇一個與既定目標一致的使用者或業務主指標。預先確定最小可偵測效應、顯著性水準、統計功效、流量比例、週期和結果觀察視窗。護欄可以包含 p95 延遲、錯誤、隱藏、檢舉、放棄率、內容集中度和下游品質。解釋實驗影響前,先檢查樣本比例異常、分組穩定性、實際曝光率、追蹤資料完整度和兩組標籤成熟度。
從小流量、可快速回滾的階段開始,只有護欄正常才擴大。停止和回滾條件需要預先定義。季節性和延遲結果可能要求覆蓋完整業務週期或更長視窗;在普通固定週期實驗中反覆查看並在某天結果有利時停止,會提高假陽性率。
第六步:排查離線勝出、線上失敗
按邊界順序檢查,不要立即把模型判定為失敗:
- 實驗完整性: 樣本比例異常、分組不穩定、曝光缺失或兩組降級率不同。
- 服務一致性: 線上特徵、過濾、召回、時效、延遲和模型版本是否與離線回放一致。
- 評估建構: 是否有未來資訊洩漏、不真實的隨機切分、不同候選池或偏向某模型的負採樣。
- 目標錯配: NDCG 最佳化了歷史點擊,而產品真正重視滿意度、留存、購買或多樣化發現。
- 策略偏差: 候選模型探索了舊日誌沒有覆蓋的內容與位置,離線標籤因此低估或誤判其價值。
- 異質性影響: 整體提升掩蓋了新使用者、某市場、某類內容或高價值人群的損失。
- 動態變化: 新鮮感消退、創作者或供給方調整行為,或新曝光分布改變後續訓練資料。
可複用的決策規則分三層:離線證據說明候選模型在已知歷史條件下有合理性且風險可控;隨機線上實驗估計它對真實產品的因果影響;生產監控驗證這種影響能否在使用者、內容庫和回饋循環變化後持續存在。
高品質示範回答
「我會先保證兩個排序模型可比。評估截點、可展示內容、召回輸出、標籤、使用者和 K=10 必須完全相同,所有特徵都只能來自請求發生時已經存在的資訊。我會用時間外測試集,並報告被排除的資料量和標籤成熟度。除了生產模型,還會保留熱門基線,因為連簡單基線都贏不了的複雜模型不具備上線條件。
NDCG@10 能衡量順序,但不能獨自決定上線。我會加入 Recall@10,再按產品風險看內容覆蓋率、列表內多樣性,以及延遲和降級率。新使用者、稀疏使用者、新內容和重點市場要單獨分群。我還會說明負樣本如何產生。歷史策略決定了曝光,未曝光內容只能視為未知;如果必須負採樣,所有模型要使用同一個採樣器,結果也不能和全量內容指標混比。
候選模型通過這些檢查後,我會按使用者持續穩定地隨機分組,在行為發生前記錄分組和曝光,並把降級情況保留在原分組中分析。我會預先確定一個主指標、最小可偵測效應、統計功效、實驗週期、護欄和回滾標準,解釋提升前先檢查樣本比例和埋點是否正常。
如果離線 NDCG 上升但線上主指標下降,我先檢查實驗完整性和服務一致性,再檢查時間洩漏、候選與採樣不一致、代理指標失真、曝光偏差和分群差異。離線結果只讓候選模型獲得實驗資格;線上因果結果和護欄都通過,才獲得上線資格。」
常見錯誤
- 只因 NDCG 上升就上線 → 離線排序品質受歷史標籤約束,無法估計產品因果影響 → 把它作為篩選訊號,再要求隨機線上結果和護欄通過。
- 隨機切分互動記錄 → 使用者後續行為或內容狀態可能洩漏到訓練集 → 按時間點切分,並按當時狀態建構特徵、內容資格和標籤。
- 同時修改召回和排序卻不說明 → 無法判斷提升來自哪裡 → 比較排序模型時固定候選生成,或明確標註為端到端處理。
- 把所有未觀察內容當負樣本 → 很多內容從未曝光 → 區分已曝光未互動與未知內容,並披露評估候選集。
- 每個模型使用不同負樣本 → 比較同時改變了模型和測試難度 → 共用候選池、採樣器、樣本數和種子,或直接做全量排序。
- 只報告一個整體指標 → 整體平均值可能掩蓋冷啟動或市場損失 → 同時報告預先確定的分群結果、不確定性和整體結果。
- 沒有產品目標就最佳化點擊 → 位置偏差或誘導點擊可能改善代理指標、損害滿意度 → 選擇模型前定義主結果和傷害護欄。
- 從候選組中刪除降級樣本 → 這會隱藏真實服務失敗並破壞隨機分組 → 採用意向治療分析,並把降級率作為護欄。
- 反覆查看直到實驗顯著 → 未計劃的重複停止會提高假陽性率 → 固定週期和分析計劃,或使用有效的序貫實驗設計。
- 立即把離線線上差距歸因於模型漂移 → 日誌、服務一致性或分組故障會產生同樣表現 → 先檢查實驗完整性和服務一致性,再分析模型行為。
追問及應對
追問一:如果無法執行線上實驗怎麼辦?
使用時間外回放、多個歷史視窗、強基線、分群測試,以及影子流量或小範圍試行降低營運風險,但要明確因果產品影響仍未得到證明。如果日誌記錄了隨機曝光機率,而且新策略的選擇有足夠歷史支持,可以加入 IPS、自歸一化 IPS 或雙重穩健估計,並檢查重疊和變異數。不能把這些方法當成向歷史支持範圍之外外推的許可。
追問二:如何評估新使用者和新內容?
在評估截點建立明確的冷啟動人群,禁止後續使用者歷史或內容互動進入特徵。比較降級策略覆蓋率、第一個工作階段結果、新內容曝光和首次有效行為耗時。由成熟使用者和熱門內容主導的整體指標無法回答冷啟動問題。
追問三:觀看時長上升但多樣性下降怎麼辦?
回到預先確定的目標和約束。如果多樣性保護長期滿意度、內容生態或使用者選擇,就應把它作為護欄或受約束的最佳化目標,不能看到結果後再把無關指標隨意平均。按人群查看內容集中度和重複曝光分布,再把重排或多樣性約束作為新的實驗處理。
追問四:什麼時候應該按叢集而不是使用者隨機?
處理效果會跨單元傳播時使用叢集:家庭帳戶共享螢幕、社交推薦影響朋友,或平台曝光改變共享庫存。逐個使用者隨機會破壞獨立性並污染兩組。叢集分組會降低有效樣本量,所以統計功效計算必須考慮叢集內相關性。
追問五:反事實評估能否取代 A/B 測試?
當行為傾向機率已知且策略重疊足夠時,它可以篩選策略。IPS 用加權修正曝光,自歸一化 IPS 用少量偏差換取變異數控制,雙重穩健方法結合結果模型和傾向加權。傾向機率缺失、重疊差、權重極端或結果模型錯誤都可能使它們失效,因此上線結論仍應儘量透過隨機線上實驗驗證。
追問六:上線後如何發現有害的回饋循環?
按連續人群監控曝光集中度、創作者或供給方觸達、內容庫覆蓋率、重複曝光和結果品質,不能只看即時互動。日誌保留模型與策略版本,持續比較訓練資料構成,並在條件允許時保留小流量參考或探索策略。集中度或傷害護欄超過預設閾值時,回滾或約束策略。