返回目錄
A
數據洞察實戰:從數據採集到模型部署的完整路徑 - 第 4 章
第4章:機器學習模型選型、評估與部署
發布於 2026-02-27 21:59
# 第4章:機器學習模型選型、評估與部署
## 4.1 模型選型的哲學
在資料科學的實務中,模型並非一成不變的「萬能解藥」。
選擇合適的演算法往往需要考量三大層面:
1. **業務問題本質**:分類、回歸、序列預測還是聚類?
2. **資料特性**:特徵數量、稀疏度、非線性程度、時間序列性。
3. **可解釋性與運算成本**:模型越簡單,解釋性越好;而複雜模型往往需要更多算力與資料量。
在本章中,我們以「購物車結帳率預測」為例,從基礎線性模型到高階集成方法,逐步拆解決策邏輯。
## 4.2 從基礎到進階的模型金字塔
| 層級 | 典型演算法 | 主要特性 | 適用場景 |
|------|------------|----------|----------|
| 1 | **Logistic 回歸** | 可解釋性高,訓練速度快 | 二分類、基準模型 |
| 2 | **決策樹** | 可視化、非線性 | 特徵間非線性關係較強 |
| 3 | **隨機森林 / Gradient Boosting** | 高精度、抗過擬合 | 大多數分類/回歸任務 |
| 4 | **深度學習(MLP / LSTM)** | 可捕捉複雜非線性 | 大量數據、時間序列 |
| 5 | **多模型集成** | 結合多個基礎模型 | 性能極致追求 |
> **思考提示**:在選擇時,先以最簡模型作基準,若精度無法滿足,再逐步升級。這樣既能避免過度優化,也能保證可解釋性。
## 4.3 交叉驗證與參數調整
### 4.3.1 k-折交叉驗證
k-折交叉驗證(k‑fold CV)是評估模型泛化能力的主流方法。典型流程:
1. 將資料分成 k 個等份。
2. 每次保留一份作為驗證集,其餘 k-1 作為訓練集。
3. 計算 k 次驗證指標的平均值。
python
from sklearn.model_selection import KFold, cross_val_score
from sklearn.linear_model import LogisticRegression
kf = KFold(n_splits=5, shuffle=True, random_state=42)
model = LogisticRegression(max_iter=1000)
scores = cross_val_score(model, X, y, cv=kf, scoring='roc_auc')
print(f"AUC 平均值: {scores.mean():.4f} ± {scores.std():.4f}")
### 4.3.2 時間序列交叉驗證
對於時間序列資料,傳統的 k‑折可能會造成訓練資料包含未來資訊。此時採用 **TimeSeriesSplit** 或 **rolling window** 方案。
python
from sklearn.model_selection import TimeSeriesSplit
tscv = TimeSeriesSplit(n_splits=5)
for train_index, test_index in tscv.split(X):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
model.fit(X_train, y_train)
# evaluate on X_test
### 4.3.3 超參數優化
- **網格搜尋**(Grid Search): 選定參數空間後遍歷所有組合。
- **隨機搜尋**(Random Search): 先隨機採樣一部分組合,速度較快。
- **Bayesian 優化**(如 Hyperopt、Optuna): 針對目標函數構建代理模型,逐步探索。
> **實務提醒**:對於 XGBoost 等高維模型,最初可以先設定 `max_depth=5, n_estimators=200`,再進行精細調整。
## 4.4 評估指標全覽
| 指標 | 適用場景 | 計算公式 |
|------|----------|----------|
| **ROC‑AUC** | 二分類、平衡不高 | 兩分類器的曲線下積分 |
| **Precision / Recall / F1** | 絕對類別不平衡 |
| **Mean Absolute Error (MAE)** | 回歸 | `MAE = mean(|y_true - y_pred|)` |
| **R²** | 回歸 | `1 - SSE/SST` |
| **Confusion Matrix** | 視覺化 | 2×2 表格 |
> **注意**:在電商結帳率預測中,**Precision**(即預測為「即將結帳」的正確比例)往往比 **Recall** 更重要,因為錯誤推送可導致顧客流失。
## 4.5 模型部署與監控
### 4.5.1 容器化部署
- **Docker**:將 Python 環境與依賴打包。
- **FastAPI**:輕量級 Web 框架,支援非同步處理。
Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
### 4.5.2 模型註冊與版本控制
- **MLflow**:儲存模型、參數、實驗記錄。
- **DVC**:資料版本管理,確保資料與模型同步。
bash
mlflow run . -P alpha=0.1
### 4.5.3 實時監控與警報
- **Prometheus + Grafana**:收集 API 延遲、CPU 使用率。
- **SageMaker Model Monitor / DataDog**:監測輸入特徵分佈、模型漂移。
> **案例**:在「購物車結帳率」服務中,若預測分佈突然偏向 0,立即觸發 DataDog 警報,並自動回滾至上一版本模型。
## 4.6 以案例說明:從模型到商業價值
| 步驟 | 描述 |
|------|------|
| 1. 資料準備 | 從 `cart_features` 對應到 `cart_clean`,使用 Snowflake Feature Store 讀取最新特徵。 |
| 2. 模型選型 | 初始使用 Logistic Regression,AUC 0.71。升級至 XGBoost,AUC 0.84。 |
| 3. 交叉驗證 | TimeSeriesSplit 進行 5 次驗證,平均 AUC 0.83。 |
| 4. 部署 | Docker + FastAPI,配合 Docker Compose 與 Nginx。 |
| 5. 監控 | Prometheus 收集 API 延遲,SageMaker Monitor 追蹤特徵漂移。 |
| 6. 商業回報 | 推薦精準率提升 12%,平均結帳時間縮短 18%。 |
> **結語**:從模型開發到部署的完整流程,需要多個工具鏈協同。透過明確的評估指標、嚴謹的交叉驗證以及成熟的監控機制,才能確保模型在實際運營中的穩定與持續改進。
---
## 4.7 小結
| 章節重點 | 重要性 |
|----------|--------|
| 模型選型 | 針對業務需求找到最佳解法 |
| 交叉驗證 | 減少過擬合,提升泛化能力 |
| 評估指標 | 針對不同問題選擇合適指標 |
| 部署機制 | 保證模型可用性與可監控性 |
> **未來展望**:下一章將深入探討 **模型監控與自動化再訓練**,讓模型能夠隨著數據變化自動適應,真正做到「即時洞察」。