AI 工程從零開始|Phase 2 Part 1:傳統機器學習 — 生產 AI 的骨幹

「任何問題都用深度學習解決」 「Transformer 萬能,傳統模型已經過時」 ——這是 80% 初學者的第一直覺。 正確的工程師問的是:資料量多少?延遲需求是幾 ms?可解釋性重要嗎?預算有多少? 再選模型。


這篇給在結構化資料上做風控、推薦排序或廣告系統的工程師看——例如要在 200 萬筆歷史訂單(詐騙率 0.3%)上訓練一個推論延遲 < 5ms、決策理由能交給法務稽核的詐騙偵測模型。讀完你會能依資料量、延遲預算、可解釋性與成本,在線性模型、樹模型與深度學習之間做出有依據的選擇,並避開特徵工程裡最常見的資料洩漏與時序切分錯誤。


一、核心問題:深度學習時代為什麼還要學傳統 ML

ChatGPT 問世後,LLM 成為媒體焦點。許多工程師開始質疑:傳統機器學習是否已成歷史?

答案是:不,在結構化資料的生產系統(風控、廣告、推薦排序)中,傳統 ML 仍是主力。

原因很直接:

1. 資料量的現實

大多數企業的結構化資料集在 10 萬至 500 萬筆之間。神經網路在這個規模下通常不比梯度提升樹更好,卻需要 10–100 倍的計算資源。

2. 延遲的硬需求

金融風控、廣告競價、即時推薦的推論預算通常是 1–10ms。線性模型推論 < 0.1ms,決策樹 < 1ms。小型 MLP 本身在 CPU 上也能 < 1ms,但網路一旦加深、加寬或需要 GPU 批次化,延遲與服務成本就會快速上升。

3. 可解釋性的法規壓力

歐盟 GDPR、台灣個資法、金融監理機關都要求「自動化決策必須能解釋」。邏輯回歸的係數、決策樹的規則路徑可以直接呈給法務;神經網路的注意力權重不能。

4. 維護成本的差距

一個訓練好的 XGBoost 模型可以用 pickle 序列化,部署到任何有 Python 的環境。不需要 GPU,不需要特殊推論框架,oncall 工程師看得懂特徵重要性。

5. 過擬合風險

資料少、特徵少的場景,深度模型反而容易過擬合。L1/L2 正則化的線性模型在小資料集上往往比 5 層 MLP 表現更穩定。

傳統 ML 的適用邊界(速查表)

場景                    資料量        延遲需求      推薦模型
──────────────────────────────────────────────────────────────
結構化分類(詐騙偵測)  10K–10M      < 5ms        XGBoost / LogReg
數值回歸(房價預測)    1K–1M        < 10ms       Ridge / GBM
文字分類(垃圾郵件)    1K–500K      < 50ms       LogReg + TF-IDF
異常偵測(設備監控)    1K–100K      < 100ms      IsolationForest
推薦系統(協同過濾)    100K–50M     < 20ms       MF / LightFM
影像分類               > 10K        任意          CNN(深度學習)
序列生成(對話)        > 1M token   > 100ms      Transformer

二、何時該升級:從單機 sklearn 到生產級樹模型管線的觸發條件

傳統 ML 專案幾乎都從「CSV → sklearn Pipeline → pickle → 單機 API」起步,這條路線兩週內能上線、月費 < $20,而且對多數概念驗證完全夠用。該往下一層走的,不是資料量達到某個數字,而是下面這些症狀出現。

從到觸發訊號
LogisticRegression / 單棵決策樹 + 手動特徵工程、單一 pickle 檔XGBoost / LightGBM + 實驗追蹤、模型版本化、A/B 流量分割、特徵分佈漂移告警線性假設撐不住(加了特徵交互指標才動);出問題時無法回滾到上一版;兩個模型版本無法在線上公平比較;特徵分佈已經漂移(PSI > 0.2)卻沒有人收到警報
每次請求各自重算特徵、離線批次重訓線上/離線共用的特徵層、線上學習、新模型 Shadow Mode 驗證、自動擴縮同一個特徵在訓練與推論各算一次而結果不一致(training/serving skew);QPS 上萬後批次推論與特徵重複計算吃掉大半成本;重訓頻率跟不上漂移速度

成本大致是三個數量級:單機階段 < $20/月,加上追蹤與監控後約 $400–600/月,完整管線約 $3,000–8,000/月——但即使到最後一層,推論成本仍只有同等深度學習方案的 1/10–1/50。至於什麼時候該從樹模型換到深度學習,答案在 §九 的對比表:資料不再是結構化表格,或 AUC 差距真的值回 20–40 倍的基礎設施成本。


三、線性模型:回歸與分類基礎

3.1 線性回歸的幾何直覺

線性回歸在做的事情:在 n 維空間找一個超平面,使所有訓練點到該平面的垂直距離平方和最小。

y(目標變量)
▲
│    ○ ○
│  ○   ○
│○  /  ○
│  /
│ /  ← 最小化 Σ(yᵢ - ŷᵢ)²
│/
└──────────────────▶ x(特徵)

殘差(residual)= yᵢ - ŷᵢ
目標:min Σ residual²

數學形式:ŷ = w₀ + w₁x₁ + w₂x₂ + … + wₙxₙ

正規化版本:

  • Ridge(L2):loss + λΣwᵢ² → 係數收縮,不為零,適合多重共線性
  • Lasso(L1):loss + λΣ|wᵢ| → 係數可降為零,自動特徵選擇
  • ElasticNet:兩者混合,λ₁L1 + λ₂L2

何時用 Ridge vs Lasso:

  • 特徵數 > 樣本數 → Lasso(強迫稀疏)
  • 所有特徵都可能有用 → Ridge(平滑收縮)
  • 不確定 → ElasticNet(調 l1_ratio 參數)

實際性能數字:

  • 訓練(10 萬筆,100 特徵):< 1 秒(sklearn)
  • 推論(單筆):< 0.1ms
  • 記憶體佔用:< 1MB

3.2 邏輯回歸的直覺

邏輯回歸 ≠ 回歸。它是分類器,用 Sigmoid 函數把線性輸出壓縮到 [0,1]:

P(y=1|x) = σ(wᵀx + b) = 1 / (1 + e^(-wᵀx))

Sigmoid 函數形狀:
1.0 │              ╭──────────
    │           ╭──╯
0.5 │         ──╯  ← 決策邊界(P = 0.5)
    │      ╭──╯
0.0 │────── ╯
    └──────────────────────────
         負值        正值   wᵀx

損失函數:Binary Cross-Entropy = -Σ[yᵢlog(ŷᵢ) + (1-yᵢ)log(1-ŷᵢ)]

關鍵優勢:輸出的 P 值直接是「機率」,可以調整閾值(預設 0.5)。例如詐騙偵測可以把閾值降到 0.3,提高召回率,代價是精確率下降。

多分類延伸:Softmax 回歸,輸出 K 個類別的機率分布,Σ = 1。

實際性能:

  • 訓練(100K 筆,1000 特徵):2–5 秒
  • 推論(單筆):< 0.5ms
  • 可解釋性:係數 exp(wᵢ) 直接是 odds ratio

四、決策樹與規則學習

4.1 決策樹的構建原理

決策樹透過遞迴地選擇「最能分隔資料的特徵」來建立二元樹結構。

                 ┌─────────────────┐
                 │  Age > 35?      │
                 └────────┬────────┘
                          │
            ┌─────────────┴─────────────┐
           Yes                          No
            │                           │
   ┌────────▼────────┐        ┌─────────▼────────┐
   │ Income > 50K?   │        │  有信用記錄?      │
   └────────┬────────┘        └─────────┬────────┘
            │                           │
    ┌───────┴───────┐           ┌───────┴───────┐
   Yes              No         Yes               No
    │                │          │                 │
   ✅ 核准          ❌ 拒絕    ✅ 核准           ❌ 拒絕
   (信用良好)      (風險高)   (低風險)          (無記錄)

分裂標準:

  • 分類問題:Gini Impurity 或 Information Gain(Entropy)
  • 回歸問題:均方誤差(MSE)減少量

Gini Impurity 計算:Gini = 1 - Σpᵢ²

  • 純節點(全同類):Gini = 0
  • 最混亂(均勻分布):Gini = 1 - 1/K

過擬合控制參數:

  • max_depth:建議從 3–7 開始調整
  • min_samples_split:節點繼續分裂的最小樣本數
  • min_samples_leaf:葉節點最小樣本數
  • max_features:每次分裂考慮的特徵數(隨機森林的關鍵)

4.2 集成方法:從單棵樹到森林

單棵決策樹的問題:高方差(variance),對訓練資料敏感,容易過擬合。

解決方案:

Bagging(Random Forest):

  • 對訓練集 Bootstrap 抽樣 B 次,各訓練一棵深樹
  • 預測時取平均(回歸)或多數投票(分類)
  • 降低方差,偏差基本不變
  • 100–500 棵樹,各用 √n 個特徵子集

Boosting(XGBoost / LightGBM):

  • 序列訓練,每棵新樹專門修正前一棵的殘差
  • 降低偏差,也有正則化控制方差
  • 通常比 Random Forest 準確率高 2–5%
  • 但訓練速度較慢,超參數更多

性能對比示意(100K 筆,50 特徵,二元分類;示意估算,非實測數據):

模型              訓練時間   推論(單筆)  AUC    記憶體
────────────────────────────────────────────────────
LogisticRegression  2s       < 0.1ms    0.82   < 1MB
DecisionTree        1s       < 0.5ms    0.79   2MB
RandomForest(100)   30s      2–5ms      0.88   50MB
XGBoost             45s      1–3ms      0.91   30MB
LightGBM            15s      < 1ms      0.91   20MB
MLP(3層)            5min     < 1ms      0.89   100MB

結論:LightGBM 在表格資料上性價比最高,推論接近 XGBoost 但訓練快 3 倍。


五、支援向量機 SVM 的直覺

5.1 最大間隔分類器

SVM 的核心思想:找到一個決策邊界,使其與最近的訓練點(支援向量)之間的距離(間隔)最大化。

         類別 A (○)    類別 B (×)
              ○           ×
         ○        margin    ×
              ○  ←──────→  ×
         ○   │  決策邊界  │  ×
              ○  │        │  ×
              支援向量    支援向量
              (這些點決定邊界)

間隔 = 2 / ||w||
最大化間隔 ≡ 最小化 ||w||²

硬間隔 vs 軟間隔:

  • 硬間隔:不允許任何誤分類,只適合線性可分資料
  • 軟間隔(C-SVM):允許部分誤分類,C 值控制懲罰強度
    • C 大 → 小間隔,低訓練誤差,易過擬合
    • C 小 → 大間隔,高訓練誤差,較好泛化

5.2 核函數技巧

線性不可分的資料,透過核函數把資料映射到高維空間,在高維空間線性可分。

低維(非線性可分)       高維(線性可分)
                          ───────────────
  ×  ×  ×                 ×  ×  ×
 × ○○○○○ ×    K(x,z)    ○ ○ ○ ○ ○
○○  ×  ×  ○○  ────────▶  × × × × ×
 × ○○○○○ ×              ───────────────
  ×  ×  ×
(圓形邊界)             (超平面邊界)

常用核函數:

  • 線性核:K(x,z) = xᵀz(SVM 退化為線性分類器)
  • RBF(高斯核):K(x,z) = exp(-γ||x-z||²)← 最常用
  • 多項式核:K(x,z) = (xᵀz + c)ᵈ
  • Sigmoid 核:K(x,z) = tanh(αxᵀz + c)

RBF 核的超參數 γ:

  • γ 大 → 每個點影響範圍小,邊界複雜,易過擬合
  • γ 小 → 每個點影響範圍大,邊界平滑,易欠擬合

SVM 的實際限制:

  • 訓練複雜度 O(n²)–O(n³),10 萬筆以上很慢
  • 超過 50 萬筆資料,換用 SGD 分類器或 LightGBM
  • 不直接輸出機率(需要 Platt Scaling 後處理)

SVM 現在的主要用途:小樣本高維資料(生物醫學特徵 > 10K 維但樣本 < 1K)、文字分類的競爭基線。


六、特徵工程:從原始資料到模型輸入

特徵工程是傳統 ML 中最重要的技能。好的特徵可以讓簡單模型超過特徵差的複雜模型。

6.1 特徵工程完整流程

原始資料
    │
    ▼
┌───────────────────────────────────────────┐
│  1. 資料清理                               │
│  • 缺失值處理(均值/中位數/前向填充)        │
│  • 異常值偵測(IQR / Z-score)              │
│  • 重複資料移除                             │
└──────────────────────┬────────────────────┘
                       │
                       ▼
┌───────────────────────────────────────────┐
│  2. 數值特徵處理                            │
│  • 標準化(StandardScaler)z = (x-μ)/σ     │
│  • 正規化(MinMaxScaler)x' = (x-min)/range│
│  • 對數變換(右偏分布)log(x+1)             │
│  • 冪次變換(Box-Cox / Yeo-Johnson)        │
└──────────────────────┬────────────────────┘
                       │
                       ▼
┌───────────────────────────────────────────┐
│  3. 類別特徵處理                            │
│  • One-Hot Encoding(低基數,< 50 類)      │
│  • Label Encoding(有序類別)               │
│  • Target Encoding(高基數,> 100 類)      │
│  • Frequency Encoding(計算出現頻率)        │
└──────────────────────┬────────────────────┘
                       │
                       ▼
┌───────────────────────────────────────────┐
│  4. 特徵建構(Feature Construction)        │
│  • 交互特徵:age × income                  │
│  • 比率特徵:clicks / impressions(CTR)    │
│  • 時間特徵:hour_of_day, day_of_week      │
│  • 聚合特徵:user_avg_order_7day           │
└──────────────────────┬────────────────────┘
                       │
                       ▼
┌───────────────────────────────────────────┐
│  5. 特徵選擇(Feature Selection)           │
│  • 過濾法:相關係數、Chi-Square、ANOVA      │
│  • 包裝法:RFE(遞迴特徵消除)              │
│  • 嵌入法:Lasso 係數、樹模型特徵重要性     │
│  • 降維:PCA、t-SNE(探索)                │
└──────────────────────┬────────────────────┘
                       │
                       ▼
                  模型輸入特徵矩陣 X

6.2 關鍵特徵工程技術細節

Target Encoding 的洩漏問題:

直接用訓練集的目標均值編碼類別,會造成資料洩漏。正確做法是 K-Fold Target Encoding:

1# 錯誤做法(洩漏)
2df['city_encoded'] = df.groupby('city')['target'].transform('mean')
3
4# 正確做法(K-Fold)
5from category_encoders import TargetEncoder
6encoder = TargetEncoder(smoothing=10)  # smoothing 防止小樣本過擬合

時間特徵提取(以電商訂單為例):

原始:timestamp = "2026-06-21 14:32:00"

提取特徵:
• hour = 14(下午購物高峰)
• day_of_week = 6(週日)
• is_weekend = 1
• month = 6
• days_since_last_purchase = 3
• hour_sin = sin(2π × 14/24)  ← 週期性編碼,避免 23→0 斷裂
• hour_cos = cos(2π × 14/24)

特徵重要性解讀:

樹模型的特徵重要性有三種計算方式:

  • weight:特徵被選為分裂點的次數
  • gain:特徵帶來的平均資訊增益(推薦)
  • cover:特徵分裂影響的樣本數

注意:weight 偏向高基數特徵,gain 更能反映真實貢獻。


七、模型選擇與評估框架

7.1 Bias-Variance Tradeoff

誤差
 ▲
 │\
 │ \  總誤差 = 偏差² + 方差 + 不可避免噪聲
 │  \
 │   \───────────────      ← 方差(隨複雜度增加)
 │    ╲       ╭─────
 │     ╲   ╭──╯
 │      ──╯              ← 偏差(隨複雜度降低)
 │         ▲
 │         最佳複雜度
 └────────────────────────▶ 模型複雜度

欠擬合(高偏差)的症狀:訓練誤差高,驗證誤差與訓練誤差接近。

  • 解方:增加特徵、增加模型複雜度、減少正則化

過擬合(高方差)的症狀:訓練誤差低,驗證誤差顯著高於訓練誤差。

  • 解方:增加訓練資料、增加正則化、降低模型複雜度、Dropout(神經網路)

7.2 交叉驗證策略

K-Fold CV(標準場景):

  • K = 5 或 10,平衡偏差與方差
  • 對小資料集(< 1000 筆)用 LOOCV

Stratified K-Fold(類別不平衡):

  • 確保每個 fold 中各類別比例一致
  • 詐騙偵測(正例 0.3%)必用

Time Series Split(時序資料):

Fold 1: Train [t₁...t₆₀]  Val [t₆₁...t₇₂]
Fold 2: Train [t₁...t₇₂]  Val [t₇₃...t₈₄]
Fold 3: Train [t₁...t₈₄]  Val [t₈₅...t₉₆]

不能用隨機分割!未來資料不能出現在訓練集。

7.3 評估指標選擇

分類指標速查:

場景                  主要指標        原因
──────────────────────────────────────────────────────
詐騙偵測              Recall(召回率)  漏報代價 > 誤報
醫療診斷              Recall + F1      漏診代價最高
廣告點擊率預測        AUC-ROC         排序質量重要
垃圾郵件過濾          Precision        誤報(正常→垃圾)代價高
類別不平衡(< 1%)   PR-AUC          AUC-ROC 對不平衡過度樂觀
多分類                Macro-F1         各類別等同重要

混淆矩陣的業務解讀:

                    預測為詐騙    預測為正常
實際為詐騙   TP(正確攔截)  FN(漏報,損失最大)
實際為正常   FP(誤報,影響UX)  TN(正確放行)

Precision = TP / (TP + FP) = 攔截的有多準
Recall    = TP / (TP + FN) = 詐騙的有多少被抓到
F1        = 2 × P × R / (P + R)

閾值調整的業務影響:

  • 閾值 0.5 → P = 0.85, R = 0.60(預設)
  • 閾值 0.3 → P = 0.72, R = 0.85(詐騙偵測推薦)
  • 閾值 0.7 → P = 0.94, R = 0.42(高精確需求場景)

八、為什麼選 X 不選 Y

4 個核心決策比較

(XGBoost vs LightGBM 的取捨見 Phase 2 Part 2 §八 ,此處不重複。)

決策一:邏輯回歸 vs 小型神經網路

選擇              選 X 的理由                        不選 Y 的理由
───────────────────────────────────────────────────────────────────────
邏輯回歸          推論 < 0.5ms,係數直接可解釋          神經網路:黑箱,
vs 神經網路       L1 正則化自動特徵選擇                 深網路推論成本高
                 10 萬筆以內訓練 < 5 秒               需要 GPU 或多 CPU
                 符合法規可解釋性要求                   超參調整複雜度高
                 對線性可分問題效果一樣好               小資料容易過擬合

翻轉條件:> 100 萬筆 + 特徵有複雜非線性交互 + 沒有可解釋性需求 → 選神經網路

決策二:Random Forest vs XGBoost

選擇              選 X 的理由                        不選 Y 的理由
───────────────────────────────────────────────────────────────────────
Random Forest     可完全並行訓練(Bagging)            XGBoost:
vs XGBoost        超參數較少,更容易調                  AUC 通常高 2–5%
                 對雜訊和離群值更穩健                   更難解釋為何這棵
                 訓練早停更容易實現                     樹修正前一棵的誤差
                 適合快速基線建立

翻轉條件:需要最高精準度 + 有時間調參 + 資料相對乾淨 → 選 XGBoost/LightGBM

決策三:PCA 降維 vs 特徵選擇

選擇              選 X 的理由                        不選 Y 的理由
───────────────────────────────────────────────────────────────────────
特徵選擇          保留原始特徵語義,可解釋              PCA:
vs PCA            選出的特徵直接對業務有意義             主成分無業務含義
                 與模型協同訓練(RFE)                  資訊損失(variance
                 部署時只需子集特徵,成本低              explained 不是全部)
                                                       不適用類別特徵

翻轉條件:影像/音訊的高維稠密特徵 + 不需要可解釋性 → PCA / 自編碼器

決策四:One-Hot Encoding vs Target Encoding

選擇              選 X 的理由                        不選 Y 的理由
───────────────────────────────────────────────────────────────────────
Target Encoding   高基數類別(城市 > 500 種)          One-Hot:
vs One-Hot        不會造成維度爆炸                      高基數會產生稀疏矩陣
                 捕捉類別與目標的統計關係                維度 = 類別數
                 樹模型和線性模型都能用                  記憶體和計算開銷大

翻轉條件:類別 < 20 且需要避免任何資訊洩漏風險 → One-Hot;
          類別有自然順序(低/中/高)→ Ordinal Encoding

九、系統效應:傳統 ML vs 深度學習對比

完整性能對比表(同等任務場景)

場景:電商詐騙偵測,200 萬筆訓練資料,結構化特徵 80 個(示意估算,非實測數據)

指標                    LightGBM          小型 MLP(3層)     大型 Transformer
─────────────────────────────────────────────────────────────────────────────
推論延遲(單筆,CPU)   < 1ms             ~1ms              200–500ms
推論延遲(批次 1K)     5ms               80ms              800ms
GPU 是否必需           否                 建議              必須
訓練時間(100K 筆)    15 秒              5 分鐘            1 小時+
訓練時間(2M 筆)      3 分鐘            40 分鐘           8 小時+
推論服務成本(1K QPS) $50/月(2 CPU)   $200/月(GPU)    $2000/月(A100)
AUC 準確率             0.935             0.941             0.948
可解釋性               高(SHAP值直觀)  低                極低
特徵工程需求           高(影響 3–5%)   中(自動)         低(端到端)
冷啟動時間(重訓)     5 分鐘            1 小時            1 天+
監控複雜度             低                中                高
所需工程師技能         ML 工程師         DL 工程師          ML 研究員
─────────────────────────────────────────────────────────────────────────────
總結:                最適合生產        研究基線            特殊場景

示意估算,非實測數據

遷移學習加持後的比較

深度學習在以下場景有壓倒性優勢(傳統 ML 無法競爭;下表數字為示意估算):

場景              深度學習 AUC   最佳傳統 ML   差距
──────────────────────────────────────────────────
影像分類           0.995         0.920         7.5%
自然語言理解       0.970         0.880         9.0%
語音辨識           (非分類任務,以 WER 衡量,不適用 AUC;深度學習遙遙領先)
時序預測(複雜)   0.910         0.880         3.0%  ← 差距縮小
結構化資料詐騙     0.948         0.935         1.3%  ← 幾乎持平

示意估算,非實測數據

關鍵洞察:結構化資料的深度學習優勢僅 1–2%,但成本是傳統 ML 的 20–40 倍。工程師需要問:「這 1% 的 AUC 提升,對業務的價值是否超過每月多出的 $2,000 基礎設施成本?」


十、系列導航

本系列「AI Engineering from Scratch」根據 rohitg00/ai-engineering-from-scratch 整理,以工程師視角解析每個 Phase 的核心概念與生產實踐。


← Phase 1 Part 2:機率與統計 — 不確定性的數學語言 | Phase 2 Part 2:集成學習與最佳化 — 超越單一模型的上限 →


本文為「AI 工程從零開始」系列 Phase 2 第 1 篇,聚焦傳統機器學習在生產系統中的角色與最佳實踐。

Yen

Yen

Yen