「設計一個內容審核 / 詐騙偵測系統」是一道分類題的變形,但它跟推薦、排序系統的考點完全不同。它的核心只有一句話:
正樣本極度稀少(可能 < 1%),而且「抓錯」和「漏抓」的代價嚴重不對等。
這兩個特性,讓「不平衡資料處理」與「precision / recall 取捨」變成這題的真正考點。新手最容易栽的兩個坑:① 用 accuracy 當指標(99% 準確率可能根本沒抓到任何詐騙);② 只想著「把模型 F1 拉高」,卻沒談「抓錯一個正常用戶 vs 放走一個詐騙犯,哪個更貴」。
這篇用詐騙偵測 / 內容審核貫穿(兩者本質相同:在海量正常裡找極少數惡意),重點放在指標選擇、不平衡資料、precision/recall 閾值取捨、人機協作,每段附面試官追問。
⏱️ 設計主軸:這題不是「準不準」,而是「在 precision 和 recall 之間,依業務代價選一個對的工作點」。把這句話講透,這題就贏一半。
Step 1 — 釐清需求與「錯誤的代價」
- 業務目標:偵測什麼(盜刷?假帳號?仇恨言論?)?抓到後做什麼(直接封鎖?送人工審核?降權?)。
- 兩種錯誤的代價(最關鍵):
- False Positive(誤殺):把正常用戶/內容判成惡意 → 傷害體驗、客訴、流失。
- False Negative(漏抓):放走真正的詐騙/違規 → 金錢損失、平台風險、合規問題。
- 哪個更貴? 詐騙偵測常「漏抓很貴」(直接虧錢);內容審核常「誤殺很貴」(傷言論/體驗)——這直接決定你要偏 recall 還是 precision。
- 規模 / 延遲:交易要即時攔截(< 100ms)還是可準即時/批次?
🎤 面試官追問:「FP 和 FN 哪個代價高?為什麼?」(這是整題的定錨問題,答不出來後面全空。)「要即時攔截還是事後審查?」(決定線上/離線架構。)
Step 2 — 為什麼不能用 Accuracy(指標選擇)⭐
假設詐騙率 0.5%。一個「全部判正常」的模型 accuracy = 99.5%,但 recall = 0、毫無用處。在極度不平衡下,accuracy 是騙人的。
正確的指標:
- Precision(精確率):抓出來的裡面,有多少真的是壞的 → 衡量「誤殺」。
- Recall(召回率):所有壞的裡面,抓到了多少 → 衡量「漏抓」。
- PR 曲線 / PR-AUC:不平衡資料下,PR 曲線比 ROC-AUC 更敏感(ROC 在負樣本海量時會過度樂觀)。
- 依代價選工作點:用 Fβ(β>1 偏 recall、β<1 偏 precision),或直接畫 precision-recall 曲線,依業務代價選一個閾值。
🎤 面試官追問(必考):「為什麼不用 accuracy?」「不平衡資料下,ROC-AUC 和 PR-AUC 哪個更適合?為什麼?」(PR-AUC,因為它聚焦稀少的正類,不被海量負類稀釋。)
Step 3 — Precision / Recall 的閾值取捨 ⭐
模型輸出的是機率分數,不是非黑即白。把它變成「攔/不攔」要選一個閾值,而閾值就是 precision↔recall 的滑桿:
- 閾值調高 → precision↑、recall↓(更保守,少誤殺、多漏抓)。
- 閾值調低 → recall↑、precision↓(更激進,少漏抓、多誤殺)。
實務上不是「一刀切一個閾值」,而是分級處置:
- 高分(高信心是詐騙) → 直接自動攔截/封鎖。
- 中分(灰色地帶) → 送人工審核或要求額外驗證(如二次驗證、驗證碼)。
- 低分 → 放行。
這樣兼顧 precision(自動攔的那段要很準)與 recall(灰色地帶用人工補抓)。
🎤 面試官追問:「你會怎麼選這個閾值?」(依 FP/FN 代價畫 PR 曲線選工作點,或設定「可接受的誤殺率」反推。)「為什麼用分級而不是單一閾值?」(自動攔要高 precision,灰色地帶交給人補 recall,平衡兩者。)
Step 4 — 不平衡資料怎麼處理 ⭐
正樣本太少,模型會「偷懶」全猜負類。對策分三層:
- 資料層:
- 過採樣正類(如 SMOTE 合成)或欠採樣負類,平衡訓練分布。
- 小心:採樣只在訓練集做,驗證/測試集要保持真實分布,否則指標失真。
- 演算法層:
- 類別權重 / cost-sensitive learning:給正類更高的誤判懲罰(如
class_weight、focal loss)。 - 樹模型(XGBoost)的
scale_pos_weight也是常用手段。
- 類別權重 / cost-sensitive learning:給正類更高的誤判懲罰(如
- 問題框定層:
- 極端稀少時可框成異常偵測(anomaly detection)——學「正常長什麼樣」,偏離就標記,而非監督式分類。
🎤 面試官追問:「SMOTE 要在 train/test split 之前還之後做?」(之後、只在訓練集——之前做會把合成資訊洩漏到測試集。)「過採樣 vs 類別權重怎麼選?」(資料夠就權重簡單穩;極稀少考慮異常偵測。)
Step 5 — 特徵與架構(即時 + 離線)
- 特徵:
- 實體特徵:帳號年齡、歷史行為、信用分。
- 行為/序列特徵:短時間內交易頻率、地理跳變、裝置指紋。
- 圖特徵:詐騙常成團——用 user-device-IP 的關聯圖找可疑社群(graph-based detection)。
- 即時 vs 離線:即時攔截需要 on-the-fly 算的 velocity 特徵(如「過去 5 分鐘交易數」)。
- 架構:
- 即時路徑:低延遲模型 + 規則引擎(hard rules 先擋明顯的),< 100ms 決策。
- 離線路徑:批次重訓、回填標籤、挖掘新詐騙模式。
- 規則 + 模型混合:規則擋已知模式(可解釋、可快速上線),模型抓未知模式。
🎤 面試官追問:「為什麼還要規則引擎,不是有模型了嗎?」(規則可解釋、可即時上線應對新攻擊、不需重訓;模型補規則的盲區。)「即時 velocity 特徵怎麼算?」(streaming 聚合 / 滑動視窗計數,存低延遲 store。)
Step 6 — 人機協作、對抗性與回饋延遲
這題的「進階分」幾乎都在這三塊:
- 人機協作(human-in-the-loop):灰色地帶送人工審核;審核結果回流當高品質標籤,形成資料閉環。
- 對抗性(adversarial):詐騙者會主動進化繞過模型——所以要持續監控 drift、快速重訓、用規則即時補洞。這跟推薦系統「靜態」很不同。
- 回饋延遲(delayed labels):詐騙的「真標籤」可能幾天後才確定(如盜刷申訴、chargeback)——訓練要處理標籤延遲,評估要小心「近期資料還沒有完整標籤」。
🎤 面試官追問:「詐騙者會適應你的模型,你怎麼辦?」(持續監控 + 快速重訓 + 規則熱修 + 探索;把它當『對抗賽』而非一次性模型。)「標籤要 30 天才確定,怎麼即時評估模型?」(用早期 proxy 指標 + 延遲標籤回填校正。)
一張表收束
| 環節 | 重點 | 面試送分點 |
|---|---|---|
| 框問題 | FP vs FN 代價不對等 | 先定錨「哪個錯誤更貴」 |
| 指標 | 不能用 accuracy | PR-AUC、Precision/Recall |
| 閾值 | precision↔recall 滑桿 | 分級處置(自動攔/人工/放行) |
| 不平衡 | 採樣 / 類別權重 / 異常偵測 | SMOTE 只在訓練集 |
| 特徵架構 | 即時 + 規則 + 模型 + 圖 | velocity 特徵、規則補盲區 |
| 對抗閉環 | 人工審核、對抗、延遲標籤 | 當對抗賽、處理 delayed labels |
回答框架口訣
被問「設計詐騙偵測 / 內容審核」時照這條線走:
- 先定錨錯誤代價(FP vs FN 哪個貴,決定偏 precision 還 recall)
- 講指標(為什麼不用 accuracy → PR-AUC、precision/recall)
- 講閾值取捨(分級處置:自動攔 / 人工審核 / 放行)
- 講不平衡處理(採樣 / 類別權重 / 異常偵測,SMOTE 只在訓練集)
- 講特徵與架構(即時 velocity + 規則引擎 + 模型 + 圖特徵)
- 收在對抗閉環(人機協作、對抗性重訓、延遲標籤)
記住一句話:這類系統的難點不是『模型多準』,而是『在極度不平衡下,依錯誤代價選對 precision/recall 的工作點,並能持續對抗進化的壞人』。 把「代價驅動的取捨」講透,你就答對了這題的靈魂。