聊天視窗

數據驅動決策:從分析到行動 - 第 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 小結 本章從回歸與分類模型的基礎概念出發,系統化說明了模型建構的全流程——資料分割、基線建立、超參數調整、評估指標選擇、模型解釋與實際實作。透過案例研究與實務建議,我們期望讀者能將理論落實於業務決策中,將數據科學的力量轉化為具體的商業價值。