返回目錄
A
洞察數據:從數據科學家到策略決策者的轉型指南 - 第 5 章
第5章:建模基礎與評估
發布於 2026-03-01 00:31
# 第5章:建模基礎與評估
在上一章,我們完成了探索性資料分析(EDA),了解了資料的分布、關聯與缺失情況。此章將帶你進入機器學習模型的核心——**建模**。我們會從三大學習類型(監督式、非監督式、強化學習)說起,並深入探討評估指標、交叉驗證、模型選擇與調參技巧。
---
## 5.1 監督式學習
監督式學習(Supervised Learning)是最常見的機器學習類型,目標是從有標籤的資料中學習映射關係,並對新資料做預測。
### 5.1.1 分類 vs 回歸
| 類型 | 目標 | 典型演算法 |
|------|------|------------|
| 分類 | 預測離散標籤 | Logistic Regression, SVM, Random Forest, XGBoost |
| 回歸 | 預測連續數值 | Linear Regression, Ridge/Lasso, Gradient Boosting Regressor |
### 5.1.2 典型流程
1. **資料分割**:將資料分為訓練集、驗證集、測試集。
2. **特徵工程**:編碼類別變量、標準化、特徵選擇。
3. **模型訓練**:選擇演算法並擬合。
4. **評估**:使用適當指標衡量性能。
5. **部署**:將模型部署至線上服務或批量作業。
### 5.1.3 代碼範例(Python)
python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix
# 1. 讀取資料
X = df.drop(columns=['target'])
y = df['target']
# 2. 分割
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y)
# 3. 特徵縮放
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 4. 訓練
clf = LogisticRegression(max_iter=200)
clf.fit(X_train_scaled, y_train)
# 5. 評估
pred = clf.predict(X_test_scaled)
print('Accuracy:', accuracy_score(y_test, pred))
print('Confusion Matrix:\n', confusion_matrix(y_test, pred))
---
## 5.2 非監督式學習
非監督式學習(Unsupervised Learning)不依賴標籤,主要用於資料探索、聚類、降維等。
### 5.2.1 典型應用
- **聚類**:將相似樣本聚為一組(K-Means, DBSCAN, Hierarchical)。
- **降維**:壓縮資料維度,保留主要資訊(PCA, t-SNE, UMAP)。
- **異常偵測**:找出與大多數不同的樣本(Isolation Forest, One-Class SVM)。
### 5.2.2 評估挑戰
- 無標籤:需要使用**無監督評估指標**(如輪廓係數、Calinski-Harabasz 指標)或**主觀檢驗**。
- 聚類質量往往依賴先驗參數(如 k 值)與初始隨機性。
### 5.2.3 代碼範例(K-Means 聚類)
python
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
k = 4
kmeans = KMeans(n_clusters=k, random_state=42)
clusters = kmeans.fit_predict(X_scaled)
print('Silhouette Score:', silhouette_score(X_scaled, clusters))
---
## 5.3 強化學習
強化學習(Reinforcement Learning, RL)是讓代理(Agent)在環境中透過試錯(Trial‑and‑Error)學習策略,以最大化累積回報。
### 5.3.1 基本概念
| 元素 | 說明 |
|------|------|
| 狀態 (State) | 環境在某時刻的資訊 |
| 動作 (Action) | 代理可選擇的行動 |
| 報酬 (Reward) | 代理對動作的即時回饋 |
| 策略 (Policy) | 從狀態到動作的映射 |
| 值函數 (Value Function) | 對策略未來回報的估計 |
### 5.3.2 典型演算法
- **Q‑Learning**:離線學習價值表。
- **SARSA**:同步更新值函數。
- **Deep Q‑Network (DQN)**:使用深度神經網絡逼近 Q 值。
- **Policy Gradient**:直接優化策略(REINFORCE、Actor‑Critic)。
### 5.3.3 開發流程
1. 定義環境與狀態空間。
2. 選擇 RL 演算法與參數。
3. 進行訓練(多次迭代)。
4. 評估策略(累積回報、收斂曲線)。
5. 部署至實際系統(如自動化倉儲、金融交易)
---
## 5.4 模型評估指標
### 5.4.1 分類指標
| 指標 | 定義 | 公式 |
|------|------|------|
| Accuracy | 正確預測比例 | (TP+TN)/(TP+TN+FP+FN) |
| Precision | 真陽性占所有陽性預測 | TP/(TP+FP) |
| Recall (Sensitivity) | 真陽性占所有實際陽性 | TP/(TP+FN) |
| F1‑Score | 精度與召回的調和平均 | 2·(Precision·Recall)/(Precision+Recall) |
| ROC‑AUC | 真陽性率對假陽性率的曲線下面積 | – |
> **實務提醒**:當正負樣本極度不平衡時,Accuracy 會誤導,應以 Precision‑Recall 曲線或 F1‑Score 為主。
### 5.4.2 回歸指標
| 指標 | 定義 | 公式 |
|------|------|------|
| MSE | 平均平方誤差 | (1/n) Σ (y_pred−y_true)² |
| RMSE | MSE 的平方根 | √MSE |
| MAE | 平均絕對誤差 | (1/n) Σ |y_pred−y_true| |
| R² | 解釋變異比例 | 1−Σ(y_pred−y_true)² / Σ(y_true−ȳ)² |
> **小結**:RMSE 受極端值影響較大,MAE 更能反映一般預測誤差;R² 越接近 1 表示模型越好。
---
## 5.5 交叉驗證(Cross‑Validation)
交叉驗證能有效減少因資料分割不均造成的偏差,提升模型泛化評估。
### 5.5.1 K‑Fold CV
將資料分成 K 個子集,輪流將其中一個子集作為驗證集,其餘 K−1 個作為訓練集。最後取平均績效。
python
from sklearn.model_selection import cross_val_score
scores = cross_val_score(clf, X_scaled, y, cv=5, scoring='accuracy')
print('CV Accuracy:', scores.mean(), '+/-', scores.std())
### 5.5.2 留一法(LOOCV)
每次留下 1 個樣本作驗證,適用於小樣本集,但計算成本高。
### 5.5.3 分層 K‑Fold
對於分類問題,保持每個子集的類別比例與整體相同,以避免偏差。
---
## 5.6 模型選擇與調參
### 5.6.1 超參數搜尋
| 方法 | 優點 | 缺點 |
|------|------|------|
| 網格搜尋(Grid Search) | 系統性、易實現 | 計算量大 |
| 隨機搜尋(Random Search) | 範圍更廣、效率高 | 可能錯過最佳點 |
| Bayesian 優化 | 利用先前結果加速 | 需要專業庫 |
python
from sklearn.model_selection import GridSearchCV
param_grid = {
'n_estimators': [100, 200, 300],
'max_depth': [None, 10, 20, 30],
}
grid = GridSearchCV(RandomForestClassifier(), param_grid, cv=5, scoring='f1')
grid.fit(X_train, y_train)
print('Best params:', grid.best_params_)
### 5.6.2 早停(Early Stopping)
對於梯度提升、深度學習模型,可在驗證集上性能不再提升時停止訓練,避免過擬合。
### 5.6.3 風險評估與模型結合
- **模型集成**:Bagging、Boosting、Stacking 可提升穩定性。
- **模型堆疊**:將多個模型預測作為新特徵輸入第二層模型。
---
## 5.7 案例實戰:信用風險評估
### 5.7.1 問題描述
某銀行想預測客戶是否違約,目標是減少不良貸款。
### 5.7.2 資料
- **特徵**:年齡、職業、收入、貸款金額、信用歷史等。
- **標籤**:0(未違約),1(違約)。
### 5.7.3 實施步驟
1. **EDA**:發現收入與違約率負相關。
2. **特徵工程**:標準化數值、One‑Hot 編碼類別。
3. **模型比較**:Logistic Regression、Random Forest、XGBoost。
4. **評估**:使用 AUC‑ROC 與 F1‑Score。
5. **交叉驗證**:5‑Fold Stratified CV。
6. **調參**:XGBoost 進行 Random Search。
7. **最終模型**:XGBoost,AUC 0.88,F1 0.71。
8. **部署**:封裝為 REST API,與風控系統對接。
### 5.7.4 結果與洞察
- **關鍵特徵**:過去逾期次數、收入與負債比率。
- **商業價值**:每提升 0.01 的 AUC,平均可節省 10 萬元違約成本。
- **後續迭代**:引入交易行為資料,使用 CatBoost 進一步提升 1–2%。
---
## 5.8 小結
1. 監督式學習是最常用的預測工具,適用於有標籤資料的分類與回歸任務。
2. 非監督式學習協助我們在缺乏標籤的情境下探索資料結構與異常。
3. 強化學習則在需要動態決策與長期回報評估時發揮關鍵。
4. 選擇合適的評估指標與交叉驗證策略能確保模型泛化力。
5. 超參數調優、早停與模型集成是提升性能的關鍵技術。
6. 真實案例展示了從資料探索到模型部署的完整流程,並說明了商業價值的落地。
> **實務提醒**:在任何模型開發中,**商業目標**與**資料品質**同等重要。始終以 ROI 為導向,將技術決策與商業策略緊密結合。
---
## 5.9 進一步閱讀
- Géron, A. (2019). *Hands‑On Machine Learning with Scikit‑Learn, Keras, and TensorFlow.* O’Reilly.
- James, G., Witten, D., Hastie, T., & Tibshirani, R. (2013). *An Introduction to Statistical Learning.* Springer.
- Sutton, R. S., & Barto, A. G. (2018). *Reinforcement Learning: An Introduction.* MIT Press.
---
> **下一章(第6章)** 將深入探討模型可解釋性與決策支援工具(SHAP、LIME、決策樹可解釋性),協助你把預測結果轉化為具體的商業洞察。