返回目錄
A
數據驅動決策:從分析到行動 - 第 3 章
3. 監督式模型建構
發布於 2026-02-28 13:34
# 3. 監督式模型建構
本章將帶您走進監督式學習的核心——模型建構。從基礎的回歸與分類,到超參數調整、評估指標、模型解釋性,再到實際 Python 實作,我們將以可操作、可重現的方式說明,讓您能在實務專案中快速上手並持續優化。
---
## 3.1 回歸模型概述
| 項目 | 說明 |
|------|------|
| **定義** | 針對連續型目標變數(例如銷售額、價格、預測需求)進行預測。 |
| **典型目標** | 需求預測、價格預測、風險評估(信用分數)等。 |
| **常見模型** | *線性回歸*、*Ridge/ Lasso*、*決策樹回歸*、*隨機森林*、*梯度提升樹(XGBoost / LightGBM / CatBoost)*、*多層感知器(MLP)*。 |
| **何時選擇** | 目標為連續型,且您需要可量化的預測數值。 |
### 為何回歸模型常被視為「基礎」?
1. **數學基礎簡單**:線性回歸模型即係最小平方誤差的最優解,易於解釋。<br>2. **可擴展性**:可從線性延伸至非線性,並能與特徵工程、正則化配合。<br>3. **解釋性強**:係數可以直接反映特徵對目標的貢獻。
## 3.2 分類模型概述
| 項目 | 說明 |
|------|------|
| **定義** | 針對離散型目標變數(例如是/否、客戶流失/不流失)進行預測。 |
| **典型目標** | 客戶分類、垃圾郵件偵測、醫學診斷等。 |
| **常見模型** | *邏輯迴歸*、*決策樹*、*隨機森林*、*梯度提升樹*、*支持向量機*、*神經網路*。 |
| **何時選擇** | 目標為類別型,且您需要將預測結果轉化為決策指標。 |
### 分類模型的關鍵挑戰
1. **類別不平衡**:少數類別樣本過少,導致模型偏向多數類別。<br>2. **決策閾值**:不同業務場合需要調整閾值以優化成本/收益。<br>3. **可解釋性**:對於合規或信任度要求高的領域,模型需要能提供可解釋的輸出。
## 3.3 模型訓練流程
1. **資料分割**:
- **Train / Validation / Test**(典型比例 70/15/15 或 80/10/10)。
- 使用 **時間序列** 時,需保留時間順序,避免未來資訊洩漏。
2. **交叉驗證**:K‑fold 或時間序列交叉驗證(如 `TimeSeriesSplit`),以減少單一 split 的偶然性。
3. **特徵工程迭代**:模型建構是一次性完成的,往往需要多次迭代(特徵選擇、正則化、非線性映射)。
4. **基礎模型**:先建立簡單模型(線性/邏輯迴歸)作為基線,評估表現後再嘗試複雜模型。
## 3.4 超參數調整
| 方法 | 優點 | 缺點 |
|------|------|------|
| **Grid Search** | 穩定、易於實現 | 計算量大,搜尋空間離散 |
| **Random Search** | 範圍更廣,計算量可控 | 仍可能漏掉優秀組合 |
| **Bayesian Optimization (Optuna, Hyperopt)** | 有效利用歷史結果 | 實現較複雜,需額外依賴庫 |
> **實務小技巧**:
> - 在 `RandomizedSearchCV` 時,可先使用 `sklearn.model_selection.RandomizedSearchCV` 以 10‑20 個組合快速定位大致範圍。
> - 對於大模型(例如 XGBoost),可先調整 `max_depth`、`learning_rate`,再進一步微調 `subsample`、`colsample_bytree`。
## 3.5 模型評估指標
| 類型 | 指標 | 適用情境 |
|------|------|------|
| **回歸** | MSE | 數據噪聲大、誤差懲罰嚴格 |
| | RMSE | 需要與原始單位相同,易於直觀解釋 |
| | MAE | 對極端值不敏感,較為穩健 |
| | R² / Adjusted R² | 觀察解釋度,適用於線性回歸 |
| **分類** | Accuracy | 平衡資料時可用 |
| | Precision | 針對偵測正例時的誤警率重要 |
| | Recall / Sensitivity | 針對偵測負例時的漏警率重要 |
| | F1‑Score | Precision 與 Recall 需要平衡 |
| | ROC‑AUC | 評估模型在不同閾值下的整體辨識能力 |
| | PR‑AUC | 適用於極度不平衡資料 |
> **實務提醒**:選擇評估指標時,務必先了解業務成本,像「假陽性」與「假陰性」在不同場景下的風險差異。
## 3.6 模型解釋性
| 工具 | 主要功能 |
|------|------|
| **SHAP (SHapley Additive exPlanations)** | 以遊戲理論方法提供全局與局部解釋 |
| **LIME (Local Interpretable Model‑agnostic Explanations)** | 以局部線性模型近似原模型 |
| **Feature Importance** | 在決策樹/梯度提升模型內建功能 |
| **Partial Dependence Plot** | 可視化特徵對預測的平均影響 |
> **案例**:若您在信用風險模型中發現「年齡」與「收入」對預測分數影響顯著,可透過 SHAP 數值調整風險評估閾值,並向合規團隊說明模型邏輯。
## 3.7 實作範例(Python)
```python
import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, roc_auc_score
# 1. 讀取資料
X = pd.read_csv('data/features.csv')
y = pd.read_csv('data/target.csv')['label']
# 2. 分割資料
X_train, X_val, y_train, y_val = train_test_split(
X, y, test_size=0.2, stratify=y, random_state=42)
# 3. 標準化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_val_scaled = scaler.transform(X_val)
# 4. 基礎模型
logreg = LogisticRegression(max_iter=1000, solver='liblinear')
logreg.fit(X_train_scaled, y_train)
# 5. 評估
pred_prob = logreg.predict_proba(X_val_scaled)[:, 1]
print('ROC‑AUC:', roc_auc_score(y_val, pred_prob))
print(classification_report(y_val, logreg.predict(X_val_scaled)))
# 6. 超參數調整
param_grid = {
'C': [0.01, 0.1, 1, 10, 100],
'penalty': ['l1', 'l2']
}
grid = GridSearchCV(logreg, param_grid, cv=5, scoring='roc_auc')
grid.fit(X_train_scaled, y_train)
print('Best params:', grid.best_params_)
```
> **提示**:在真實專案中,建議將上述流程封裝為 `sklearn.pipeline.Pipeline`,並使用 `ColumnTransformer` 以同時處理數值與類別特徵。
## 3.8 案例研究:產品推薦預測
> **背景**:某電商平台希望預測用戶在下個月內是否會進行購買,以便做針對性推廣。
>
> **步驟**:
> 1. **資料蒐集**:交易紀錄、瀏覽行為、會員資料。
> 2. **特徵工程**:
> - `last_purchase_days`:距離上一次購買的天數。
> - `total_spent_last_month`:上月總消費額。
> - `is_active_member`:是否為活躍會員。
> 3. **模型選擇**:先使用 `RandomForestClassifier`,再嘗試 `XGBoost`。
> 4. **評估指標**:由於正例比例約 12%,採用 **PR‑AUC** 與 **F1‑Score**。
> 5. **模型解釋**:利用 SHAP 觀察關鍵特徵,發現 `last_purchase_days` 與 `total_spent_last_month` 為最重要。
> 6. **部署**:將模型封裝為 REST API,並設置日常評估腳本監控模型漂移。
>
> **結果**:PR‑AUC 從 0.48 提升至 0.63,預測準確度提升 18%,推廣轉換率上升 7%。
## 3.9 實務建議
1. **從基線開始**:始終以簡單模型作為基線,避免過早引入複雜模型。
2. **重視資料治理**:前章「資料血統追蹤」已建立基礎,模型訓練前務必確認資料完整性與一致性。
3. **版本控制**:使用 `DVC` 或 `MLflow` 追蹤資料、模型與實驗參數。
4. **監控與再訓練**:部署後設置漂移偵測機制,當 `validation_loss` 上升 5% 時自動觸發再訓練。
5. **可解釋性為先**:在合規要求高的領域(金融、醫療)提前完成 SHAP/LIME 介面,讓非技術決策者也能理解模型輸出。
## 3.10 小結
本章從回歸與分類模型的基礎概念出發,系統化說明了模型建構的全流程——資料分割、基線建立、超參數調整、評估指標選擇、模型解釋與實際實作。透過案例研究與實務建議,我們期望讀者能將理論落實於業務決策中,將數據科學的力量轉化為具體的商業價值。